freedreno/drm: Reference count submits
To merge submits, we'll need drm to internally hold an extra reference to the submit. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10444>
This commit is contained in:
@@ -194,6 +194,7 @@ struct fd_submit_funcs {
|
||||
};
|
||||
|
||||
struct fd_submit {
|
||||
int32_t refcnt;
|
||||
struct fd_pipe *pipe;
|
||||
const struct fd_submit_funcs *funcs;
|
||||
|
||||
|
||||
@@ -33,15 +33,28 @@
|
||||
struct fd_submit *
|
||||
fd_submit_new(struct fd_pipe *pipe)
|
||||
{
|
||||
return pipe->funcs->submit_new(pipe);
|
||||
struct fd_submit *submit = pipe->funcs->submit_new(pipe);
|
||||
submit->refcnt = 1;
|
||||
return submit;
|
||||
}
|
||||
|
||||
void
|
||||
fd_submit_del(struct fd_submit *submit)
|
||||
{
|
||||
if (!p_atomic_dec_zero(&submit->refcnt))
|
||||
return;
|
||||
|
||||
if (submit->primary)
|
||||
fd_ringbuffer_del(submit->primary);
|
||||
return submit->funcs->destroy(submit);
|
||||
|
||||
submit->funcs->destroy(submit);
|
||||
}
|
||||
|
||||
struct fd_submit *
|
||||
fd_submit_ref(struct fd_submit *submit)
|
||||
{
|
||||
p_atomic_inc(&submit->refcnt);
|
||||
return submit;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -85,6 +85,8 @@ struct fd_submit *fd_submit_new(struct fd_pipe *pipe);
|
||||
*/
|
||||
void fd_submit_del(struct fd_submit *submit);
|
||||
|
||||
struct fd_submit * fd_submit_ref(struct fd_submit *submit);
|
||||
|
||||
/* Allocate a new rb from the submit. */
|
||||
struct fd_ringbuffer *fd_submit_new_ringbuffer(struct fd_submit *submit,
|
||||
uint32_t size,
|
||||
|
||||
Reference in New Issue
Block a user