Mesa (main): radv: Use a ws variable during preamble creation.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue May 24 16:12:31 UTC 2022


Module: Mesa
Branch: main
Commit: 1f2bbfdfca61c5f12680078773c5d7c5aeb82957
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1f2bbfdfca61c5f12680078773c5d7c5aeb82957

Author: Timur Kristóf <timur.kristof at gmail.com>
Date:   Sun May  8 19:49:35 2022 +0200

radv: Use a ws variable during preamble creation.

This is to prevent excessive code repetition, and hopefully make the
code a bit easier to read.

Signed-off-by: Timur Kristóf <timur.kristof at gmail.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16395>

---

 src/amd/vulkan/radv_device.c | 114 +++++++++++++++++++++----------------------
 1 file changed, 55 insertions(+), 59 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index dcffc099faf..41c244ebe3a 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -2712,28 +2712,30 @@ radv_queue_init(struct radv_device *device, struct radv_queue *queue, int idx,
 static void
 radv_queue_finish(struct radv_queue *queue)
 {
+   struct radeon_winsys *ws = queue->device->ws;
+
    if (queue->initial_full_flush_preamble_cs)
-      queue->device->ws->cs_destroy(queue->initial_full_flush_preamble_cs);
+      ws->cs_destroy(queue->initial_full_flush_preamble_cs);
    if (queue->initial_preamble_cs)
-      queue->device->ws->cs_destroy(queue->initial_preamble_cs);
+      ws->cs_destroy(queue->initial_preamble_cs);
    if (queue->continue_preamble_cs)
-      queue->device->ws->cs_destroy(queue->continue_preamble_cs);
+      ws->cs_destroy(queue->continue_preamble_cs);
    if (queue->descriptor_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->descriptor_bo);
+      ws->buffer_destroy(ws, queue->descriptor_bo);
    if (queue->scratch_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->scratch_bo);
+      ws->buffer_destroy(ws, queue->scratch_bo);
    if (queue->esgs_ring_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->esgs_ring_bo);
+      ws->buffer_destroy(ws, queue->esgs_ring_bo);
    if (queue->gsvs_ring_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->gsvs_ring_bo);
+      ws->buffer_destroy(ws, queue->gsvs_ring_bo);
    if (queue->tess_rings_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->tess_rings_bo);
+      ws->buffer_destroy(ws, queue->tess_rings_bo);
    if (queue->gds_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->gds_bo);
+      ws->buffer_destroy(ws, queue->gds_bo);
    if (queue->gds_oa_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->gds_oa_bo);
+      ws->buffer_destroy(ws, queue->gds_oa_bo);
    if (queue->compute_scratch_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, queue->compute_scratch_bo);
+      ws->buffer_destroy(ws, queue->compute_scratch_bo);
 
    vk_queue_finish(&queue->vk);
 }
@@ -3987,6 +3989,7 @@ radv_init_compute_state(struct radeon_cmdbuf *cs, struct radv_queue *queue)
 static VkResult
 radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_info *needs)
 {
+   struct radeon_winsys *ws = queue->device->ws;
    struct radeon_winsys_bo *scratch_bo = queue->scratch_bo;
    struct radeon_winsys_bo *descriptor_bo = queue->descriptor_bo;
    struct radeon_winsys_bo *compute_scratch_bo = queue->compute_scratch_bo;
@@ -4005,9 +4008,8 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
       queue->ring_info.scratch_size_per_wave * queue->ring_info.scratch_waves;
 
    if (scratch_size > queue_scratch_size) {
-      result =
-         queue->device->ws->buffer_create(queue->device->ws, scratch_size, 4096, RADEON_DOMAIN_VRAM,
-                                          ring_bo_flags, RADV_BO_PRIORITY_SCRATCH, 0, &scratch_bo);
+      result = ws->buffer_create(ws, scratch_size, 4096, RADEON_DOMAIN_VRAM, ring_bo_flags,
+                                 RADV_BO_PRIORITY_SCRATCH, 0, &scratch_bo);
       if (result != VK_SUCCESS)
          goto fail;
    }
@@ -4017,33 +4019,30 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
    const uint32_t compute_queue_scratch_size =
       queue->ring_info.compute_scratch_size_per_wave * queue->ring_info.compute_scratch_waves;
    if (compute_scratch_size > compute_queue_scratch_size) {
-      result = queue->device->ws->buffer_create(queue->device->ws, compute_scratch_size, 4096,
-                                                RADEON_DOMAIN_VRAM, ring_bo_flags,
-                                                RADV_BO_PRIORITY_SCRATCH, 0, &compute_scratch_bo);
+      result = ws->buffer_create(ws, compute_scratch_size, 4096, RADEON_DOMAIN_VRAM, ring_bo_flags,
+                                 RADV_BO_PRIORITY_SCRATCH, 0, &compute_scratch_bo);
       if (result != VK_SUCCESS)
          goto fail;
    }
 
    if (needs->esgs_ring_size > queue->ring_info.esgs_ring_size) {
-      result = queue->device->ws->buffer_create(queue->device->ws, needs->esgs_ring_size, 4096,
-                                                RADEON_DOMAIN_VRAM, ring_bo_flags,
-                                                RADV_BO_PRIORITY_SCRATCH, 0, &esgs_ring_bo);
+      result = ws->buffer_create(ws, needs->esgs_ring_size, 4096, RADEON_DOMAIN_VRAM, ring_bo_flags,
+                                 RADV_BO_PRIORITY_SCRATCH, 0, &esgs_ring_bo);
       if (result != VK_SUCCESS)
          goto fail;
    }
 
    if (needs->gsvs_ring_size > queue->ring_info.gsvs_ring_size) {
-      result = queue->device->ws->buffer_create(queue->device->ws, needs->gsvs_ring_size, 4096,
-                                                RADEON_DOMAIN_VRAM, ring_bo_flags,
-                                                RADV_BO_PRIORITY_SCRATCH, 0, &gsvs_ring_bo);
+      result = ws->buffer_create(ws, needs->gsvs_ring_size, 4096, RADEON_DOMAIN_VRAM, ring_bo_flags,
+                                 RADV_BO_PRIORITY_SCRATCH, 0, &gsvs_ring_bo);
       if (result != VK_SUCCESS)
          goto fail;
    }
 
    if (!queue->ring_info.tess_rings && needs->tess_rings) {
-      result = queue->device->ws->buffer_create(
-         queue->device->ws, queue->device->hs.tess_offchip_ring_offset + queue->device->hs.tess_offchip_ring_size, 256,
-         RADEON_DOMAIN_VRAM, ring_bo_flags, RADV_BO_PRIORITY_SCRATCH, 0, &tess_rings_bo);
+      result = ws->buffer_create(
+         ws, queue->device->hs.tess_offchip_ring_offset + queue->device->hs.tess_offchip_ring_size,
+         256, RADEON_DOMAIN_VRAM, ring_bo_flags, RADV_BO_PRIORITY_SCRATCH, 0, &tess_rings_bo);
       if (result != VK_SUCCESS)
          goto fail;
    }
@@ -4054,9 +4053,8 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
       /* 4 streamout GDS counters.
        * We need 256B (64 dw) of GDS, otherwise streamout hangs.
        */
-      result =
-         queue->device->ws->buffer_create(queue->device->ws, 256, 4, RADEON_DOMAIN_GDS,
-                                          ring_bo_flags, RADV_BO_PRIORITY_SCRATCH, 0, &gds_bo);
+      result = ws->buffer_create(ws, 256, 4, RADEON_DOMAIN_GDS, ring_bo_flags,
+                                 RADV_BO_PRIORITY_SCRATCH, 0, &gds_bo);
       if (result != VK_SUCCESS)
          goto fail;
    }
@@ -4064,9 +4062,8 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
    if (!queue->ring_info.gds_oa && needs->gds_oa) {
       assert(queue->device->physical_device->rad_info.gfx_level >= GFX10);
 
-      result =
-         queue->device->ws->buffer_create(queue->device->ws, 4, 1, RADEON_DOMAIN_OA, ring_bo_flags,
-                                          RADV_BO_PRIORITY_SCRATCH, 0, &gds_oa_bo);
+      result = ws->buffer_create(ws, 4, 1, RADEON_DOMAIN_OA, ring_bo_flags,
+                                 RADV_BO_PRIORITY_SCRATCH, 0, &gds_oa_bo);
       if (result != VK_SUCCESS)
          goto fail;
    }
@@ -4083,8 +4080,8 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
          size = 8; /* 2 dword */
       }
 
-      result = queue->device->ws->buffer_create(
-         queue->device->ws, size, 4096, RADEON_DOMAIN_VRAM,
+      result = ws->buffer_create(
+         ws, size, 4096, RADEON_DOMAIN_VRAM,
          RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING | RADEON_FLAG_READ_ONLY,
          RADV_BO_PRIORITY_DESCRIPTOR, 0, &descriptor_bo);
       if (result != VK_SUCCESS)
@@ -4092,7 +4089,7 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
    }
 
    if (descriptor_bo != queue->descriptor_bo) {
-      uint32_t *map = (uint32_t *)queue->device->ws->buffer_map(descriptor_bo);
+      uint32_t *map = (uint32_t *)ws->buffer_map(descriptor_bo);
       if (!map)
          goto fail;
 
@@ -4113,7 +4110,7 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
          radv_fill_shader_rings(queue, map, add_sample_positions, needs->esgs_ring_size,
                                 esgs_ring_bo, needs->gsvs_ring_size, gsvs_ring_bo, tess_rings_bo);
 
-      queue->device->ws->buffer_unmap(descriptor_bo);
+      ws->buffer_unmap(descriptor_bo);
    }
 
    for (int i = 0; i < 3; ++i) {
@@ -4132,8 +4129,7 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
 
       enum rgp_flush_bits sqtt_flush_bits = 0;
       struct radeon_cmdbuf *cs = NULL;
-      cs = queue->device->ws->cs_create(queue->device->ws,
-                                        radv_queue_ring(queue));
+      cs = ws->cs_create(ws, radv_queue_ring(queue));
       if (!cs) {
          result = VK_ERROR_OUT_OF_HOST_MEMORY;
          goto fail;
@@ -4142,7 +4138,7 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
       dest_cs[i] = cs;
 
       if (scratch_bo)
-         radv_cs_add_buffer(queue->device->ws, cs, scratch_bo);
+         radv_cs_add_buffer(ws, cs, scratch_bo);
 
       /* Emit initial configuration. */
       switch (queue->qf) {
@@ -4177,9 +4173,9 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
       }
 
       if (gds_bo)
-         radv_cs_add_buffer(queue->device->ws, cs, gds_bo);
+         radv_cs_add_buffer(ws, cs, gds_bo);
       if (gds_oa_bo)
-         radv_cs_add_buffer(queue->device->ws, cs, gds_oa_bo);
+         radv_cs_add_buffer(ws, cs, gds_oa_bo);
 
       if (i < 2) {
          /* The two initial preambles have a cache flush at the beginning. */
@@ -4199,19 +4195,19 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
          si_cs_emit_cache_flush(cs, gfx_level, NULL, 0, is_mec, flush_bits, &sqtt_flush_bits, 0);
       }
 
-      result = queue->device->ws->cs_finalize(cs);
+      result = ws->cs_finalize(cs);
       if (result != VK_SUCCESS)
          goto fail;
    }
 
    if (queue->initial_full_flush_preamble_cs)
-      queue->device->ws->cs_destroy(queue->initial_full_flush_preamble_cs);
+      ws->cs_destroy(queue->initial_full_flush_preamble_cs);
 
    if (queue->initial_preamble_cs)
-      queue->device->ws->cs_destroy(queue->initial_preamble_cs);
+      ws->cs_destroy(queue->initial_preamble_cs);
 
    if (queue->continue_preamble_cs)
-      queue->device->ws->cs_destroy(queue->continue_preamble_cs);
+      ws->cs_destroy(queue->continue_preamble_cs);
 
    queue->initial_full_flush_preamble_cs = dest_cs[0];
    queue->initial_preamble_cs = dest_cs[1];
@@ -4219,31 +4215,31 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
 
    if (scratch_bo != queue->scratch_bo) {
       if (queue->scratch_bo)
-         queue->device->ws->buffer_destroy(queue->device->ws, queue->scratch_bo);
+         ws->buffer_destroy(ws, queue->scratch_bo);
       queue->scratch_bo = scratch_bo;
    }
 
    if (compute_scratch_bo != queue->compute_scratch_bo) {
       if (queue->compute_scratch_bo)
-         queue->device->ws->buffer_destroy(queue->device->ws, queue->compute_scratch_bo);
+         ws->buffer_destroy(ws, queue->compute_scratch_bo);
       queue->compute_scratch_bo = compute_scratch_bo;
    }
 
    if (esgs_ring_bo != queue->esgs_ring_bo) {
       if (queue->esgs_ring_bo)
-         queue->device->ws->buffer_destroy(queue->device->ws, queue->esgs_ring_bo);
+         ws->buffer_destroy(ws, queue->esgs_ring_bo);
       queue->esgs_ring_bo = esgs_ring_bo;
    }
 
    if (gsvs_ring_bo != queue->gsvs_ring_bo) {
       if (queue->gsvs_ring_bo)
-         queue->device->ws->buffer_destroy(queue->device->ws, queue->gsvs_ring_bo);
+         ws->buffer_destroy(ws, queue->gsvs_ring_bo);
       queue->gsvs_ring_bo = gsvs_ring_bo;
    }
 
    if (descriptor_bo != queue->descriptor_bo) {
       if (queue->descriptor_bo)
-         queue->device->ws->buffer_destroy(queue->device->ws, queue->descriptor_bo);
+         ws->buffer_destroy(ws, queue->descriptor_bo);
       queue->descriptor_bo = descriptor_bo;
    }
 
@@ -4255,23 +4251,23 @@ radv_update_preamble_cs(struct radv_queue *queue, const struct radv_queue_ring_i
 fail:
    for (int i = 0; i < ARRAY_SIZE(dest_cs); ++i)
       if (dest_cs[i])
-         queue->device->ws->cs_destroy(dest_cs[i]);
+         ws->cs_destroy(dest_cs[i]);
    if (descriptor_bo && descriptor_bo != queue->descriptor_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, descriptor_bo);
+      ws->buffer_destroy(ws, descriptor_bo);
    if (scratch_bo && scratch_bo != queue->scratch_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, scratch_bo);
+      ws->buffer_destroy(ws, scratch_bo);
    if (compute_scratch_bo && compute_scratch_bo != queue->compute_scratch_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, compute_scratch_bo);
+      ws->buffer_destroy(ws, compute_scratch_bo);
    if (esgs_ring_bo && esgs_ring_bo != queue->esgs_ring_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, esgs_ring_bo);
+      ws->buffer_destroy(ws, esgs_ring_bo);
    if (gsvs_ring_bo && gsvs_ring_bo != queue->gsvs_ring_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, gsvs_ring_bo);
+      ws->buffer_destroy(ws, gsvs_ring_bo);
    if (tess_rings_bo && tess_rings_bo != queue->tess_rings_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, tess_rings_bo);
+      ws->buffer_destroy(ws, tess_rings_bo);
    if (gds_bo && gds_bo != queue->gds_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, gds_bo);
+      ws->buffer_destroy(ws, gds_bo);
    if (gds_oa_bo && gds_oa_bo != queue->gds_oa_bo)
-      queue->device->ws->buffer_destroy(queue->device->ws, gds_oa_bo);
+      ws->buffer_destroy(ws, gds_oa_bo);
 
    return vk_error(queue, result);
 }



More information about the mesa-commit mailing list