radv/amdgpu: Add bool is_secondary argument to cs_create function.
authorTimur Kristóf <timur.kristof@gmail.com>
Sun, 9 Apr 2023 15:02:25 +0000 (17:02 +0200)
committerMarge Bot <emma+marge@anholt.net>
Tue, 11 Apr 2023 17:05:03 +0000 (17:05 +0000)
Also save is_secondary to the CS object.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22354>

src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_cp_reg_shadowing.c
src/amd/vulkan/radv_queue.c
src/amd/vulkan/radv_radeon_winsys.h
src/amd/vulkan/radv_shader.c
src/amd/vulkan/radv_sqtt.c
src/amd/vulkan/si_cmd_buffer.c
src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
src/amd/vulkan/winsys/null/radv_null_cs.c

index b71757a..f45b4db 100644 (file)
@@ -363,7 +363,8 @@ radv_create_cmd_buffer(struct vk_command_pool *pool,
 
    ring = radv_queue_family_to_ring(device->physical_device, cmd_buffer->qf);
 
-   cmd_buffer->cs = device->ws->cs_create(device->ws, ring);
+   cmd_buffer->cs = device->ws->cs_create(
+      device->ws, ring, cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY);
    if (!cmd_buffer->cs) {
       radv_destroy_cmd_buffer(&cmd_buffer->vk);
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
@@ -679,7 +680,8 @@ radv_ace_internal_create(struct radv_cmd_buffer *cmd_buffer)
 {
    assert(!cmd_buffer->ace_internal.cs);
    struct radv_device *device = cmd_buffer->device;
-   struct radeon_cmdbuf *ace_cs = device->ws->cs_create(device->ws, AMD_IP_COMPUTE);
+   struct radeon_cmdbuf *ace_cs = device->ws->cs_create(
+      device->ws, AMD_IP_COMPUTE, cmd_buffer->vk.level == VK_COMMAND_BUFFER_LEVEL_SECONDARY);
 
    if (!ace_cs)
       vk_command_buffer_set_error(&cmd_buffer->vk, VK_ERROR_OUT_OF_HOST_MEMORY);
index 302b145..3f46b7c 100644 (file)
@@ -44,7 +44,7 @@ radv_create_shadow_regs_preamble(const struct radv_device *device,
    struct radeon_info *info = &device->physical_device->rad_info;
    VkResult result;
 
-   struct radeon_cmdbuf *cs = ws->cs_create(ws, AMD_IP_GFX);
+   struct radeon_cmdbuf *cs = ws->cs_create(ws, AMD_IP_GFX, false);
    if (!cs)
       return VK_ERROR_OUT_OF_HOST_MEMORY;
 
@@ -131,7 +131,7 @@ radv_init_shadowed_regs_buffer_state(const struct radv_device *device, struct ra
    struct radeon_cmdbuf *cs;
    VkResult result;
 
-   cs = ws->cs_create(ws, AMD_IP_GFX);
+   cs = ws->cs_create(ws, AMD_IP_GFX, false);
    if (!cs)
       return VK_ERROR_OUT_OF_HOST_MEMORY;
    radv_emit_shadow_regs_preamble(cs, device, &queue->state);
index 7b62e4d..147e5a2 100644 (file)
@@ -1058,7 +1058,7 @@ radv_update_preamble_cs(struct radv_queue_state *queue, struct radv_device *devi
    for (int i = 0; i < 3; ++i) {
       enum rgp_flush_bits sqtt_flush_bits = 0;
       struct radeon_cmdbuf *cs = NULL;
-      cs = ws->cs_create(ws, radv_queue_family_to_ring(device->physical_device, queue->qf));
+      cs = ws->cs_create(ws, radv_queue_family_to_ring(device->physical_device, queue->qf), false);
       if (!cs) {
          result = VK_ERROR_OUT_OF_HOST_MEMORY;
          goto fail;
@@ -1325,10 +1325,10 @@ radv_create_gang_wait_preambles_postambles(struct radv_queue *queue)
    if (r != VK_SUCCESS)
       return r;
 
-   struct radeon_cmdbuf *leader_pre_cs = ws->cs_create(ws, leader_ip);
-   struct radeon_cmdbuf *leader_post_cs = ws->cs_create(ws, leader_ip);
-   struct radeon_cmdbuf *ace_pre_cs = ws->cs_create(ws, AMD_IP_COMPUTE);
-   struct radeon_cmdbuf *ace_post_cs = ws->cs_create(ws, AMD_IP_COMPUTE);
+   struct radeon_cmdbuf *leader_pre_cs = ws->cs_create(ws, leader_ip, false);
+   struct radeon_cmdbuf *leader_post_cs = ws->cs_create(ws, leader_ip, false);
+   struct radeon_cmdbuf *ace_pre_cs = ws->cs_create(ws, AMD_IP_COMPUTE, false);
+   struct radeon_cmdbuf *ace_post_cs = ws->cs_create(ws, AMD_IP_COMPUTE, false);
 
    if (!leader_pre_cs || !leader_post_cs || !ace_pre_cs || !ace_post_cs)
       goto fail;
@@ -1475,7 +1475,7 @@ radv_create_perf_counter_lock_cs(struct radv_device *device, unsigned pass, bool
    if (*cs_ref)
       return *cs_ref;
 
-   cs = device->ws->cs_create(device->ws, AMD_IP_GFX);
+   cs = device->ws->cs_create(device->ws, AMD_IP_GFX, false);
    if (!cs)
       return NULL;
 
index 414bae3..d5fdc1c 100644 (file)
@@ -289,7 +289,8 @@ struct radeon_winsys {
 
    enum radeon_bo_domain (*cs_domain)(const struct radeon_winsys *ws);
 
-   struct radeon_cmdbuf *(*cs_create)(struct radeon_winsys *ws, enum amd_ip_type amd_ip_type);
+   struct radeon_cmdbuf *(*cs_create)(struct radeon_winsys *ws, enum amd_ip_type amd_ip_type,
+                                      bool is_secondary);
 
    void (*cs_destroy)(struct radeon_cmdbuf *cs);
 
index 2e2c677..dbbb797 100644 (file)
@@ -1262,7 +1262,7 @@ radv_init_shader_upload_queue(struct radv_device *device)
 
    for (unsigned i = 0; i < RADV_SHADER_UPLOAD_CS_COUNT; i++) {
       struct radv_shader_dma_submission *submission = calloc(1, sizeof(struct radv_shader_dma_submission));
-      submission->cs = ws->cs_create(ws, AMD_IP_SDMA);
+      submission->cs = ws->cs_create(ws, AMD_IP_SDMA, false);
       if (!submission->cs)
          return VK_ERROR_OUT_OF_HOST_MEMORY;
       list_addtail(&submission->list, &device->shader_dma_submissions);
index 961131a..8c9b67a 100644 (file)
@@ -643,7 +643,7 @@ radv_begin_thread_trace(struct radv_queue *queue)
       device->thread_trace.start_cs[family] = NULL;
    }
 
-   cs = ws->cs_create(ws, radv_queue_ring(queue));
+   cs = ws->cs_create(ws, radv_queue_ring(queue), false);
    if (!cs)
       return false;
 
@@ -712,7 +712,7 @@ radv_end_thread_trace(struct radv_queue *queue)
       device->thread_trace.stop_cs[family] = NULL;
    }
 
-   cs = ws->cs_create(ws, radv_queue_ring(queue));
+   cs = ws->cs_create(ws, radv_queue_ring(queue), false);
    if (!cs)
       return false;
 
index d7dc252..b243a54 100644 (file)
@@ -644,7 +644,7 @@ si_emit_graphics(struct radv_device *device, struct radeon_cmdbuf *cs)
 void
 cik_create_gfx_config(struct radv_device *device)
 {
-   struct radeon_cmdbuf *cs = device->ws->cs_create(device->ws, AMD_IP_GFX);
+   struct radeon_cmdbuf *cs = device->ws->cs_create(device->ws, AMD_IP_GFX, false);
    if (!cs)
       return;
 
index 2eeb4b2..1d250d6 100644 (file)
@@ -79,6 +79,7 @@ struct radv_amdgpu_cs {
    VkResult status;
    struct radv_amdgpu_cs *chained_to;
    bool use_ib;
+   bool is_secondary;
 
    int buffer_hash_table[1024];
    unsigned hw_ip;
@@ -226,7 +227,7 @@ radv_amdgpu_cs_domain(const struct radeon_winsys *_ws)
 }
 
 static struct radeon_cmdbuf *
-radv_amdgpu_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type)
+radv_amdgpu_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type, bool is_secondary)
 {
    struct radv_amdgpu_cs *cs;
    uint32_t ib_pad_dw_mask = MAX2(3, radv_amdgpu_winsys(ws)->info.ib_pad_dw_mask[ip_type]);
@@ -235,6 +236,7 @@ radv_amdgpu_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type)
    if (!cs)
       return NULL;
 
+   cs->is_secondary = is_secondary;
    cs->ws = radv_amdgpu_winsys(ws);
    radv_amdgpu_init_cs(cs, ip_type);
 
index fb17137..57ba2c0 100644 (file)
@@ -66,7 +66,7 @@ radv_null_cs_domain(const struct radeon_winsys *_ws)
 }
 
 static struct radeon_cmdbuf *
-radv_null_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type)
+radv_null_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type, UNUSED bool is_secondary)
 {
    struct radv_null_cs *cs = calloc(1, sizeof(struct radv_null_cs));
    if (!cs)