mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
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:
parent
c64bc095e7
commit
ef0c5007f2
4 changed files with 19 additions and 27 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 *
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue