freedreno/drm: Move submit->primary to base class

Gets rid of a bit of duplication between the two current
implementations, and will be needed in next patch.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10444>
This commit is contained in:
Rob Clark 2021-04-21 09:22:14 -07:00 committed by Marge Bot
parent c64bc095e7
commit ef0c5007f2
4 changed files with 19 additions and 27 deletions

View file

@ -138,6 +138,8 @@ struct fd_submit_funcs {
struct fd_submit {
struct fd_pipe *pipe;
const struct fd_submit_funcs *funcs;
struct fd_ringbuffer *primary;
};
struct fd_bo_funcs {

View file

@ -39,6 +39,8 @@ fd_submit_new(struct fd_pipe *pipe)
void
fd_submit_del(struct fd_submit *submit)
{
if (submit->primary)
fd_ringbuffer_del(submit->primary);
return submit->funcs->destroy(submit);
}
@ -46,6 +48,7 @@ int
fd_submit_flush(struct fd_submit *submit, int in_fence_fd, int *out_fence_fd,
uint32_t *out_fence)
{
debug_assert(submit->primary);
return submit->funcs->flush(submit, in_fence_fd, out_fence_fd, out_fence);
}
@ -58,7 +61,15 @@ fd_submit_new_ringbuffer(struct fd_submit *submit, uint32_t size,
debug_assert(!(flags & FD_RINGBUFFER_GROWABLE));
debug_assert(!(flags & FD_RINGBUFFER_PRIMARY));
}
return submit->funcs->new_ringbuffer(submit, size, flags);
struct fd_ringbuffer *ring =
submit->funcs->new_ringbuffer(submit, size, flags);
if (flags & FD_RINGBUFFER_PRIMARY) {
debug_assert(!submit->primary);
submit->primary = fd_ringbuffer_ref(ring);
}
return ring;
}
struct fd_ringbuffer *

View file

@ -54,8 +54,6 @@ struct msm_submit {
/* hash-set of associated rings: */
struct set *ring_set;
struct fd_ringbuffer *primary;
/* Allow for sub-allocation of stateobj ring buffers (ie. sharing
* the same underlying bo)..
*
@ -246,11 +244,6 @@ msm_submit_new_ringbuffer(struct fd_submit *submit, uint32_t size,
if (!msm_ringbuffer_init(msm_ring, size, flags))
return NULL;
if (flags & FD_RINGBUFFER_PRIMARY) {
debug_assert(!msm_submit->primary);
msm_submit->primary = fd_ringbuffer_ref(&msm_ring->base);
}
return &msm_ring->base;
}
@ -285,10 +278,8 @@ msm_submit_flush(struct fd_submit *submit, int in_fence_fd, int *out_fence_fd,
};
int ret;
debug_assert(msm_submit->primary);
finalize_current_cmd(msm_submit->primary);
append_ring(msm_submit->ring_set, msm_submit->primary);
finalize_current_cmd(submit->primary);
append_ring(msm_submit->ring_set, submit->primary);
unsigned nr_cmds = 0;
unsigned nr_objs = 0;
@ -299,7 +290,7 @@ msm_submit_flush(struct fd_submit *submit, int in_fence_fd, int *out_fence_fd,
nr_cmds += 1;
nr_objs += 1;
} else {
if (ring != msm_submit->primary)
if (ring != submit->primary)
finalize_current_cmd(ring);
nr_cmds += to_msm_ringbuffer(ring)->u.nr_cmds;
}
@ -399,8 +390,6 @@ msm_submit_destroy(struct fd_submit *submit)
{
struct msm_submit *msm_submit = to_msm_submit(submit);
if (msm_submit->primary)
fd_ringbuffer_del(msm_submit->primary);
if (msm_submit->suballoc_ring)
fd_ringbuffer_del(msm_submit->suballoc_ring);

View file

@ -50,8 +50,6 @@ struct msm_submit_sp {
struct slab_child_pool ring_pool;
struct fd_ringbuffer *primary;
/* Allow for sub-allocation of stateobj ring buffers (ie. sharing
* the same underlying bo)..
*
@ -203,11 +201,6 @@ msm_submit_sp_new_ringbuffer(struct fd_submit *submit, uint32_t size,
if (!msm_ringbuffer_sp_init(msm_ring, size, flags))
return NULL;
if (flags & FD_RINGBUFFER_PRIMARY) {
debug_assert(!msm_submit->primary);
msm_submit->primary = fd_ringbuffer_ref(&msm_ring->base);
}
return &msm_ring->base;
}
@ -223,11 +216,10 @@ msm_submit_sp_flush(struct fd_submit *submit, int in_fence_fd,
};
int ret;
debug_assert(msm_submit->primary);
finalize_current_cmd(msm_submit->primary);
finalize_current_cmd(submit->primary);
struct msm_ringbuffer_sp *primary =
to_msm_ringbuffer_sp(msm_submit->primary);
to_msm_ringbuffer_sp(submit->primary);
struct drm_msm_gem_submit_cmd cmds[primary->u.nr_cmds];
for (unsigned i = 0; i < primary->u.nr_cmds; i++) {
@ -298,8 +290,6 @@ msm_submit_sp_destroy(struct fd_submit *submit)
{
struct msm_submit_sp *msm_submit = to_msm_submit_sp(submit);
if (msm_submit->primary)
fd_ringbuffer_del(msm_submit->primary);
if (msm_submit->suballoc_ring)
fd_ringbuffer_del(msm_submit->suballoc_ring);