Mesa (master): radv: Refactor cs_domain to be a winsys function.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Apr 14 15:27:15 UTC 2021


Module: Mesa
Branch: master
Commit: 057ec395a419d6d661664a3a8735bd5044026d98
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=057ec395a419d6d661664a3a8735bd5044026d98

Author: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Date:   Tue Apr 13 03:10:49 2021 +0200

radv: Refactor cs_domain to be a winsys function.

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10198>

---

 src/amd/vulkan/radv_cmd_buffer.c                  | 19 ++++---------------
 src/amd/vulkan/radv_radeon_winsys.h               |  4 ++--
 src/amd/vulkan/si_cmd_buffer.c                    | 11 +++++------
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c     | 22 ++++++++++++++++++----
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c |  2 +-
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h |  2 +-
 src/amd/vulkan/winsys/null/radv_null_cs.c         |  7 +++++++
 7 files changed, 38 insertions(+), 29 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index a463e5cc18a..5e98bd2bc36 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -461,15 +461,6 @@ radv_reset_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
    return cmd_buffer->record_result;
 }
 
-enum radeon_bo_domain
-radv_cmdbuffer_domain(const struct radeon_info *info, uint32_t perftest)
-{
-   bool use_sam =
-      (info->all_vram_visible && info->has_dedicated_vram && !(perftest & RADV_PERFTEST_NO_SAM)) ||
-      (perftest & RADV_PERFTEST_SAM);
-   return use_sam ? RADEON_DOMAIN_VRAM : RADEON_DOMAIN_GTT;
-}
-
 static bool
 radv_cmd_buffer_resize_upload_buf(struct radv_cmd_buffer *cmd_buffer, uint64_t min_needed)
 {
@@ -481,12 +472,10 @@ radv_cmd_buffer_resize_upload_buf(struct radv_cmd_buffer *cmd_buffer, uint64_t m
    new_size = MAX2(min_needed, 16 * 1024);
    new_size = MAX2(new_size, 2 * cmd_buffer->upload.size);
 
-   bo = device->ws->buffer_create(
-      device->ws, new_size, 4096,
-      radv_cmdbuffer_domain(&device->physical_device->rad_info, device->instance->perftest_flags),
-      RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING | RADEON_FLAG_32BIT |
-         RADEON_FLAG_GTT_WC,
-      RADV_BO_PRIORITY_UPLOAD_BUFFER);
+   bo = device->ws->buffer_create(device->ws, new_size, 4096, device->ws->cs_domain(device->ws),
+                                  RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING |
+                                     RADEON_FLAG_32BIT | RADEON_FLAG_GTT_WC,
+                                  RADV_BO_PRIORITY_UPLOAD_BUFFER);
 
    if (!bo) {
       cmd_buffer->record_result = VK_ERROR_OUT_OF_DEVICE_MEMORY;
diff --git a/src/amd/vulkan/radv_radeon_winsys.h b/src/amd/vulkan/radv_radeon_winsys.h
index 5a05c3ee440..54b736cf9b0 100644
--- a/src/amd/vulkan/radv_radeon_winsys.h
+++ b/src/amd/vulkan/radv_radeon_winsys.h
@@ -260,6 +260,8 @@ struct radeon_winsys {
 
    bool (*ctx_wait_idle)(struct radeon_winsys_ctx *ctx, enum ring_type ring_type, int ring_index);
 
+   enum radeon_bo_domain (*cs_domain)(const struct radeon_winsys *ws);
+
    struct radeon_cmdbuf *(*cs_create)(struct radeon_winsys *ws, enum ring_type ring_type);
 
    void (*cs_destroy)(struct radeon_cmdbuf *cs);
@@ -338,6 +340,4 @@ radv_cs_add_buffer(struct radeon_winsys *ws, struct radeon_cmdbuf *cs, struct ra
    ws->cs_add_buffer(cs, bo);
 }
 
-enum radeon_bo_domain radv_cmdbuffer_domain(const struct radeon_info *info, uint32_t perftest);
-
 #endif /* RADV_RADEON_WINSYS_H */
diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c
index eeccc33b790..19dbc313adc 100644
--- a/src/amd/vulkan/si_cmd_buffer.c
+++ b/src/amd/vulkan/si_cmd_buffer.c
@@ -620,12 +620,11 @@ cik_create_gfx_config(struct radv_device *device)
          radeon_emit(cs, PKT3_NOP_PAD);
    }
 
-   device->gfx_init = device->ws->buffer_create(
-      device->ws, cs->cdw * 4, 4096,
-      radv_cmdbuffer_domain(&device->physical_device->rad_info, device->instance->perftest_flags),
-      RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING | RADEON_FLAG_READ_ONLY |
-         RADEON_FLAG_GTT_WC,
-      RADV_BO_PRIORITY_CS);
+   device->gfx_init =
+      device->ws->buffer_create(device->ws, cs->cdw * 4, 4096, device->ws->cs_domain(device->ws),
+                                RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING |
+                                   RADEON_FLAG_READ_ONLY | RADEON_FLAG_GTT_WC,
+                                RADV_BO_PRIORITY_CS);
    if (!device->gfx_init)
       goto fail;
 
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index 7347f04c8b2..2ce4fd4f8ea 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -33,6 +33,8 @@
 #include "ac_debug.h"
 #include "radv_amdgpu_bo.h"
 #include "radv_amdgpu_cs.h"
+#include "radv_amdgpu_winsys.h"
+#include "radv_debug.h"
 #include "radv_radeon_winsys.h"
 #include "sid.h"
 
@@ -175,6 +177,17 @@ radv_amdgpu_init_cs(struct radv_amdgpu_cs *cs, enum ring_type ring_type)
    cs->hw_ip = ring_to_hw_ip(ring_type);
 }
 
+static enum radeon_bo_domain
+radv_amdgpu_cs_domain(const struct radeon_winsys *_ws)
+{
+   const struct radv_amdgpu_winsys *ws = (const struct radv_amdgpu_winsys *)_ws;
+
+   bool use_sam = (ws->info.all_vram_visible && ws->info.has_dedicated_vram &&
+                   !(ws->perftest & RADV_PERFTEST_NO_SAM)) ||
+                  (ws->perftest & RADV_PERFTEST_SAM);
+   return use_sam ? RADEON_DOMAIN_VRAM : RADEON_DOMAIN_GTT;
+}
+
 static struct radeon_cmdbuf *
 radv_amdgpu_cs_create(struct radeon_winsys *ws, enum ring_type ring_type)
 {
@@ -189,7 +202,7 @@ radv_amdgpu_cs_create(struct radeon_winsys *ws, enum ring_type ring_type)
 
    if (cs->ws->use_ib_bos) {
       cs->ib_buffer =
-         ws->buffer_create(ws, ib_size, 0, cs->ws->cs_bo_domain,
+         ws->buffer_create(ws, ib_size, 0, radv_amdgpu_cs_domain(ws),
                            RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING |
                               RADEON_FLAG_READ_ONLY | RADEON_FLAG_GTT_WC,
                            RADV_BO_PRIORITY_CS);
@@ -309,7 +322,7 @@ radv_amdgpu_cs_grow(struct radeon_cmdbuf *_cs, size_t min_size)
    cs->old_ib_buffers[cs->num_old_ib_buffers++] = cs->ib_buffer;
 
    cs->ib_buffer =
-      cs->ws->base.buffer_create(&cs->ws->base, ib_size, 0, cs->ws->cs_bo_domain,
+      cs->ws->base.buffer_create(&cs->ws->base, ib_size, 0, radv_amdgpu_cs_domain(&cs->ws->base),
                                  RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING |
                                     RADEON_FLAG_READ_ONLY | RADEON_FLAG_GTT_WC,
                                  RADV_BO_PRIORITY_CS);
@@ -934,7 +947,7 @@ radv_amdgpu_winsys_cs_submit_sysmem(struct radeon_winsys_ctx *_ctx, int queue_id
             }
 
             bos[j] = ws->buffer_create(
-               ws, 4 * size, 4096, aws->cs_bo_domain,
+               ws, 4 * size, 4096, radv_amdgpu_cs_domain(ws),
                RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING | RADEON_FLAG_READ_ONLY,
                RADV_BO_PRIORITY_CS);
             ptr = ws->buffer_map(bos[j]);
@@ -976,7 +989,7 @@ radv_amdgpu_winsys_cs_submit_sysmem(struct radeon_winsys_ctx *_ctx, int queue_id
          assert(cnt);
 
          bos[0] = ws->buffer_create(
-            ws, 4 * size, 4096, aws->cs_bo_domain,
+            ws, 4 * size, 4096, radv_amdgpu_cs_domain(ws),
             RADEON_FLAG_CPU_ACCESS | RADEON_FLAG_NO_INTERPROCESS_SHARING | RADEON_FLAG_READ_ONLY,
             RADV_BO_PRIORITY_CS);
          ptr = ws->buffer_map(bos[0]);
@@ -1650,6 +1663,7 @@ radv_amdgpu_cs_init_functions(struct radv_amdgpu_winsys *ws)
    ws->base.ctx_create = radv_amdgpu_ctx_create;
    ws->base.ctx_destroy = radv_amdgpu_ctx_destroy;
    ws->base.ctx_wait_idle = radv_amdgpu_ctx_wait_idle;
+   ws->base.cs_domain = radv_amdgpu_cs_domain;
    ws->base.cs_create = radv_amdgpu_cs_create;
    ws->base.cs_destroy = radv_amdgpu_cs_destroy;
    ws->base.cs_grow = radv_amdgpu_cs_grow;
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
index ad5953aeb11..422b5d05dc4 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
@@ -235,10 +235,10 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
    if (debug_flags & RADV_DEBUG_NO_IBS)
       ws->use_ib_bos = false;
 
+   ws->perftest = perftest_flags;
    ws->use_local_bos = perftest_flags & RADV_PERFTEST_LOCAL_BOS;
    ws->zero_all_vram_allocs = debug_flags & RADV_DEBUG_ZERO_VRAM;
    ws->use_llvm = debug_flags & RADV_DEBUG_LLVM;
-   ws->cs_bo_domain = radv_cmdbuffer_domain(&ws->info, perftest_flags);
    u_rwlock_init(&ws->global_bo_list.lock);
    list_inithead(&ws->log_bo_list);
    u_rwlock_init(&ws->log_bo_list_lock);
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
index ba9cf500cd5..d124e04a0f6 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
@@ -46,10 +46,10 @@ struct radv_amdgpu_winsys {
    bool debug_all_bos;
    bool debug_log_bos;
    bool use_ib_bos;
-   enum radeon_bo_domain cs_bo_domain;
    bool zero_all_vram_allocs;
    bool use_local_bos;
    bool use_llvm;
+   uint64_t perftest;
 
    uint64_t allocated_vram;
    uint64_t allocated_vram_vis;
diff --git a/src/amd/vulkan/winsys/null/radv_null_cs.c b/src/amd/vulkan/winsys/null/radv_null_cs.c
index f5a186fe04a..4f66a980faf 100644
--- a/src/amd/vulkan/winsys/null/radv_null_cs.c
+++ b/src/amd/vulkan/winsys/null/radv_null_cs.c
@@ -59,6 +59,12 @@ radv_null_ctx_destroy(struct radeon_winsys_ctx *rwctx)
    FREE(ctx);
 }
 
+static enum radeon_bo_domain
+radv_null_cs_domain(const struct radeon_winsys *_ws)
+{
+   return RADEON_DOMAIN_GTT;
+}
+
 static struct radeon_cmdbuf *
 radv_null_cs_create(struct radeon_winsys *ws, enum ring_type ring_type)
 {
@@ -97,6 +103,7 @@ radv_null_cs_init_functions(struct radv_null_winsys *ws)
 {
    ws->base.ctx_create = radv_null_ctx_create;
    ws->base.ctx_destroy = radv_null_ctx_destroy;
+   ws->base.cs_domain = radv_null_cs_domain;
    ws->base.cs_create = radv_null_cs_create;
    ws->base.cs_finalize = radv_null_cs_finalize;
    ws->base.cs_destroy = radv_null_cs_destroy;



More information about the mesa-commit mailing list