From c54c2901ff38b86197a7ee093c545001db6c8760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Thu, 5 May 2022 15:11:23 +0200 Subject: [PATCH] radv: Move queue submit sparse bindings to a separate function. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Timur Kristóf Reviewed-by: Dave Airlie Reviewed-By: Tatsuyuki Ishi Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_device.c | 46 ++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index b6343d1e504..7326de82f10 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -4514,6 +4514,31 @@ struct radv_deferred_queue_submission { struct list_head processing_list; }; +static VkResult +radv_queue_submit_bind_sparse_memory(struct radv_device *device, struct vk_queue_submit *submission) +{ + for (uint32_t i = 0; i < submission->buffer_bind_count; ++i) { + VkResult result = radv_sparse_buffer_bind_memory(device, submission->buffer_binds + i); + if (result != VK_SUCCESS) + return result; + } + + for (uint32_t i = 0; i < submission->image_opaque_bind_count; ++i) { + VkResult result = + radv_sparse_image_opaque_bind_memory(device, submission->image_opaque_binds + i); + if (result != VK_SUCCESS) + return result; + } + + for (uint32_t i = 0; i < submission->image_bind_count; ++i) { + VkResult result = radv_sparse_image_bind_memory(device, submission->image_binds + i); + if (result != VK_SUCCESS) + return result; + } + + return VK_SUCCESS; +} + static VkResult radv_queue_submit(struct vk_queue *vqueue, struct vk_queue_submit *submission) { @@ -4534,24 +4559,9 @@ radv_queue_submit(struct vk_queue *vqueue, struct vk_queue_submit *submission) if (result != VK_SUCCESS) goto fail; - for (uint32_t i = 0; i < submission->buffer_bind_count; ++i) { - result = radv_sparse_buffer_bind_memory(queue->device, submission->buffer_binds + i); - if (result != VK_SUCCESS) - goto fail; - } - - for (uint32_t i = 0; i < submission->image_opaque_bind_count; ++i) { - result = - radv_sparse_image_opaque_bind_memory(queue->device, submission->image_opaque_binds + i); - if (result != VK_SUCCESS) - goto fail; - } - - for (uint32_t i = 0; i < submission->image_bind_count; ++i) { - result = radv_sparse_image_bind_memory(queue->device, submission->image_binds + i); - if (result != VK_SUCCESS) - goto fail; - } + result = radv_queue_submit_bind_sparse_memory(queue->device, submission); + if (result != VK_SUCCESS) + goto fail; if (!submission->command_buffer_count && !submission->wait_count && !submission->signal_count) return VK_SUCCESS;