From dd84a575c0841e2de27ae3ebd471034df0ae094b Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 27 Feb 2024 13:34:25 -0800 Subject: [PATCH] radv: hide the sparse queue when radv_legacy_sparse_binding This change is unnecessary but should be harmless. We will have other reasons to hide the sparse queue so do it here for radv_legacy_sparse_binding as well. Part-of: --- src/amd/vulkan/layers/radv_sqtt_layer.c | 2 +- src/amd/vulkan/radv_physical_device.c | 33 ++++++++++++++++--------- src/amd/vulkan/radv_private.h | 6 +++++ src/amd/vulkan/radv_queue.c | 2 +- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c index 2e29e263ce7..620182556ce 100644 --- a/src/amd/vulkan/layers/radv_sqtt_layer.c +++ b/src/amd/vulkan/layers/radv_sqtt_layer.c @@ -341,7 +341,7 @@ radv_describe_begin_cmd_buffer(struct radv_cmd_buffer *cmd_buffer) if (cmd_buffer->qf == RADV_QUEUE_GENERAL) marker.queue_flags |= VK_QUEUE_GRAPHICS_BIT; - if (cmd_buffer->device->instance->drirc.legacy_sparse_binding) + if (!radv_sparse_queue_enabled(cmd_buffer->device->physical_device)) marker.queue_flags |= VK_QUEUE_SPARSE_BINDING_BIT; radv_emit_sqtt_userdata(cmd_buffer, &marker, sizeof(marker) / 4); diff --git a/src/amd/vulkan/radv_physical_device.c b/src/amd/vulkan/radv_physical_device.c index c26af5314de..76a79157b2b 100644 --- a/src/amd/vulkan/radv_physical_device.c +++ b/src/amd/vulkan/radv_physical_device.c @@ -246,7 +246,10 @@ radv_physical_device_init_queue_table(struct radv_physical_device *pdevice) idx++; } - pdevice->vk_queue_to_radv[idx++] = RADV_QUEUE_SPARSE; + if (radv_sparse_queue_enabled(pdevice)) { + pdevice->vk_queue_to_radv[idx] = RADV_QUEUE_SPARSE; + idx++; + } pdevice->num_queues = idx; } @@ -2193,7 +2196,7 @@ static void radv_get_physical_device_queue_family_properties(struct radv_physical_device *pdevice, uint32_t *pCount, VkQueueFamilyProperties **pQueueFamilyProperties) { - int num_queue_families = 2; + int num_queue_families = 1; int idx; if (pdevice->rad_info.ip[AMD_IP_COMPUTE].num_queues > 0 && !(pdevice->instance->debug_flags & RADV_DEBUG_NO_COMPUTE_QUEUE)) @@ -2208,6 +2211,10 @@ radv_get_physical_device_queue_family_properties(struct radv_physical_device *pd num_queue_families++; } + if (radv_sparse_queue_enabled(pdevice)) { + num_queue_families++; + } + if (pQueueFamilyProperties == NULL) { *pCount = num_queue_families; return; @@ -2219,7 +2226,7 @@ radv_get_physical_device_queue_family_properties(struct radv_physical_device *pd idx = 0; if (*pCount >= 1) { VkQueueFlags gfx_flags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT; - if (pdevice->instance->drirc.legacy_sparse_binding) + if (!radv_sparse_queue_enabled(pdevice)) gfx_flags |= VK_QUEUE_SPARSE_BINDING_BIT; *pQueueFamilyProperties[idx] = (VkQueueFamilyProperties){ .queueFlags = gfx_flags, @@ -2233,7 +2240,7 @@ radv_get_physical_device_queue_family_properties(struct radv_physical_device *pd if (pdevice->rad_info.ip[AMD_IP_COMPUTE].num_queues > 0 && !(pdevice->instance->debug_flags & RADV_DEBUG_NO_COMPUTE_QUEUE)) { VkQueueFlags compute_flags = VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT; - if (pdevice->instance->drirc.legacy_sparse_binding) + if (!radv_sparse_queue_enabled(pdevice)) compute_flags |= VK_QUEUE_SPARSE_BINDING_BIT; if (*pCount > idx) { *pQueueFamilyProperties[idx] = (VkQueueFamilyProperties){ @@ -2272,14 +2279,16 @@ radv_get_physical_device_queue_family_properties(struct radv_physical_device *pd } } - if (*pCount > idx) { - *pQueueFamilyProperties[idx] = (VkQueueFamilyProperties){ - .queueFlags = VK_QUEUE_SPARSE_BINDING_BIT, - .queueCount = 1, - .timestampValidBits = 64, - .minImageTransferGranularity = (VkExtent3D){1, 1, 1}, - }; - idx++; + if (radv_sparse_queue_enabled(pdevice)) { + if (*pCount > idx) { + *pQueueFamilyProperties[idx] = (VkQueueFamilyProperties){ + .queueFlags = VK_QUEUE_SPARSE_BINDING_BIT, + .queueCount = 1, + .timestampValidBits = 64, + .minImageTransferGranularity = (VkExtent3D){1, 1, 1}, + }; + idx++; + } } *pCount = idx; diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 23d78b57e9b..dba86184e13 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -742,6 +742,12 @@ struct radv_meta_state { #define RADV_NUM_HW_CTX (RADEON_CTX_PRIORITY_REALTIME + 1) +static inline bool +radv_sparse_queue_enabled(const struct radv_physical_device *pdevice) +{ + return !pdevice->instance->drirc.legacy_sparse_binding; +} + static inline enum radv_queue_family vk_queue_to_radv(const struct radv_physical_device *phys_dev, int queue_family_index) { diff --git a/src/amd/vulkan/radv_queue.c b/src/amd/vulkan/radv_queue.c index 0120c7aa1d8..2009e6a9adb 100644 --- a/src/amd/vulkan/radv_queue.c +++ b/src/amd/vulkan/radv_queue.c @@ -1751,7 +1751,7 @@ radv_queue_submit(struct vk_queue *vqueue, struct vk_queue_submit *submission) struct radv_queue *queue = (struct radv_queue *)vqueue; VkResult result; - if (queue->device->instance->drirc.legacy_sparse_binding) { + if (!radv_sparse_queue_enabled(queue->device->physical_device)) { result = radv_queue_submit_bind_sparse_memory(queue->device, submission); if (result != VK_SUCCESS) goto fail;