freedreno/drm: Move emit_reloc_tail to head
authorRob Clark <robdclark@chromium.org>
Sat, 13 Mar 2021 19:06:16 +0000 (11:06 -0800)
committerRob Clark <robdclark@chromium.org>
Sat, 20 Mar 2021 19:13:09 +0000 (12:13 -0700)
Get this out of the way first to avoid some register push/pop.  Only
reloc->bo is needed after writing the address into cmdstream, so this
turns msm_submit_append_bo() into a tail call.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9581>

src/freedreno/drm/msm_ringbuffer_sp.h

index 300c4cb..151fe36 100644 (file)
@@ -33,7 +33,7 @@
 
 
 static void
-X(emit_reloc_tail)(struct fd_ringbuffer *ring, const struct fd_reloc *reloc)
+X(emit_reloc_common)(struct fd_ringbuffer *ring, const struct fd_reloc *reloc)
 {
        uint64_t iova = reloc->bo->iova + reloc->offset;
        int shift = reloc->shift;
@@ -57,26 +57,28 @@ static void
 X(msm_ringbuffer_sp_emit_reloc_nonobj)(struct fd_ringbuffer *ring,
                const struct fd_reloc *reloc)
 {
-       struct msm_ringbuffer_sp *msm_ring = to_msm_ringbuffer_sp(ring);
+       X(emit_reloc_common)(ring, reloc);
 
        assert(!(ring->flags & _FD_RINGBUFFER_OBJECT));
 
+       struct msm_ringbuffer_sp *msm_ring = to_msm_ringbuffer_sp(ring);
+
        struct msm_submit_sp *msm_submit =
                        to_msm_submit_sp(msm_ring->u.submit);
 
        msm_submit_append_bo(msm_submit, reloc->bo);
-
-       X(emit_reloc_tail)(ring, reloc);
 }
 
 static void
 X(msm_ringbuffer_sp_emit_reloc_obj)(struct fd_ringbuffer *ring,
                const struct fd_reloc *reloc)
 {
-       struct msm_ringbuffer_sp *msm_ring = to_msm_ringbuffer_sp(ring);
+       X(emit_reloc_common)(ring, reloc);
 
        assert(ring->flags & _FD_RINGBUFFER_OBJECT);
 
+       struct msm_ringbuffer_sp *msm_ring = to_msm_ringbuffer_sp(ring);
+
        /* Avoid emitting duplicate BO references into the list.  Ringbuffer
         * objects are long-lived, so this saves ongoing work at draw time in
         * exchange for a bit at context setup/first draw.  And the number of
@@ -93,8 +95,6 @@ X(msm_ringbuffer_sp_emit_reloc_obj)(struct fd_ringbuffer *ring,
        if (!found) {
                APPEND(&msm_ring->u, reloc_bos, fd_bo_ref(reloc->bo));
        }
-
-       X(emit_reloc_tail)(ring, reloc);
 }
 
 static uint32_t