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>
};
struct fd_submit {
+ int32_t refcnt;
struct fd_pipe *pipe;
const struct fd_submit_funcs *funcs;
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
*/
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,