Signed-off-by: Bas Nieuwenhuizen <ba...@google.com>
---
 src/amd/vulkan/radv_device.c                  |  7 +++++--
 src/amd/vulkan/radv_radeon_winsys.h           |  1 +
 src/amd/vulkan/radv_wsi.c                     |  3 ++-
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 12 ++++++++----
 4 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 16c9c0ed684..64083e4ce0c 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -1450,7 +1450,8 @@ VkResult radv_QueueSubmit(
                        if (queue->device->trace_bo)
                                *queue->device->trace_id_ptr = 0;
 
-                       ret = queue->device->ws->cs_submit(ctx, 
queue->queue_idx, cs_array + j,
+                       ret = queue->device->ws->cs_submit(ctx, 
radv_queue_family_to_ring(queue->queue_family_index),
+                                                       queue->queue_idx, 
cs_array + j,
                                                        advance, preamble_cs,
                                                        (struct 
radeon_winsys_sem **)pSubmits[i].pWaitSemaphores,
                                                        b ? 
pSubmits[i].waitSemaphoreCount : 0,
@@ -1480,7 +1481,9 @@ VkResult radv_QueueSubmit(
 
        if (fence) {
                if (!submitCount)
-                       ret = queue->device->ws->cs_submit(ctx, 
queue->queue_idx,
+                       ret = queue->device->ws->cs_submit(ctx,
+                                                          
radv_queue_family_to_ring(queue->queue_family_index),
+                                                          queue->queue_idx,
                                                           
&queue->device->empty_cs[queue->queue_family_index],
                                                           1, NULL, NULL, 0, 
NULL, 0,
                                                           false, base_fence);
diff --git a/src/amd/vulkan/radv_radeon_winsys.h 
b/src/amd/vulkan/radv_radeon_winsys.h
index bdb14395d0a..79c182007a6 100644
--- a/src/amd/vulkan/radv_radeon_winsys.h
+++ b/src/amd/vulkan/radv_radeon_winsys.h
@@ -302,6 +302,7 @@ struct radeon_winsys {
        void (*cs_grow)(struct radeon_winsys_cs * cs, size_t min_size);
 
        int (*cs_submit)(struct radeon_winsys_ctx *ctx,
+                        enum ring_type queue_type,
                         int queue_index,
                         struct radeon_winsys_cs **cs_array,
                         unsigned cs_count,
diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c
index 9c9e1bb0a8d..a5a98a60be2 100644
--- a/src/amd/vulkan/radv_wsi.c
+++ b/src/amd/vulkan/radv_wsi.c
@@ -365,7 +365,8 @@ VkResult radv_QueuePresentKHR(
                RADV_FROM_HANDLE(radv_fence, fence, swapchain->fences[0]);
                struct radeon_winsys_fence *base_fence = fence->fence;
                struct radeon_winsys_ctx *ctx = queue->hw_ctx;
-               queue->device->ws->cs_submit(ctx, queue->queue_idx,
+               queue->device->ws->cs_submit(ctx, 
radv_queue_family_to_ring(queue->queue_family_index),
+                                            queue->queue_idx,
                                             
&queue->device->empty_cs[queue->queue_family_index],
                                             1, NULL,
                                             (struct radeon_winsys_sem 
**)pPresentInfo->pWaitSemaphores,
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c 
b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index b58f5db0622..2f2c3e1338f 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -774,6 +774,7 @@ static int radv_amdgpu_winsys_cs_submit_sysmem(struct 
radeon_winsys_ctx *_ctx,
 }
 
 static int radv_amdgpu_winsys_cs_submit(struct radeon_winsys_ctx *_ctx,
+                                       enum ring_type queue_type,
                                        int queue_idx,
                                        struct radeon_winsys_cs **cs_array,
                                        unsigned cs_count,
@@ -785,17 +786,20 @@ static int radv_amdgpu_winsys_cs_submit(struct 
radeon_winsys_ctx *_ctx,
                                        bool can_patch,
                                        struct radeon_winsys_fence *_fence)
 {
-       struct radv_amdgpu_cs *cs = radv_amdgpu_cs(cs_array[0]);
        struct radv_amdgpu_ctx *ctx = radv_amdgpu_ctx(_ctx);
+       unsigned hw_ip = ring_to_hw_ip(queue_type);
        int ret;
        int i;
        
        for (i = 0; i < wait_sem_count; i++) {
                amdgpu_semaphore_handle sem = 
(amdgpu_semaphore_handle)wait_sem[i];
-               amdgpu_cs_wait_semaphore(ctx->ctx, cs->hw_ip, 0, queue_idx,
+               amdgpu_cs_wait_semaphore(ctx->ctx, hw_ip, 0, queue_idx,
                                         sem);
        }
-       if (!cs->ws->use_ib_bos) {
+       if (!cs_count) {
+               assert(!_fence);
+               ret = 0;
+       } else if (!radv_amdgpu_cs(cs_array[0])->ws->use_ib_bos) {
                ret = radv_amdgpu_winsys_cs_submit_sysmem(_ctx, queue_idx, 
cs_array,
                                                           cs_count, 
preamble_cs, _fence);
        } else if (can_patch && cs_count > AMDGPU_CS_MAX_IBS_PER_SUBMIT && 
false) {
@@ -808,7 +812,7 @@ static int radv_amdgpu_winsys_cs_submit(struct 
radeon_winsys_ctx *_ctx,
 
        for (i = 0; i < signal_sem_count; i++) {
                amdgpu_semaphore_handle sem = 
(amdgpu_semaphore_handle)signal_sem[i];
-               amdgpu_cs_signal_semaphore(ctx->ctx, cs->hw_ip, 0, queue_idx,
+               amdgpu_cs_signal_semaphore(ctx->ctx, hw_ip, 0, queue_idx,
                                           sem);
        }
        return ret;
-- 
2.11.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to