diff options
author | Dave Airlie <airlied@redhat.com> | 2016-11-30 04:08:10 +0000 |
---|---|---|
committer | Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> | 2016-12-18 20:52:55 +0100 |
commit | 6229994ab75cab2565c3df7b47b8fb32e4b31d45 (patch) | |
tree | 1ec1203770006d14aedaa4110dacc8dc0895dae9 | |
parent | 442735d35d6f2bbb7ef1e4c003025ddf02528e36 (diff) |
radv: expose the compute queue
v2: Don't expose the SDMA queue and use the CIK check also in the
second if. (Bas)
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
-rw-r--r-- | src/amd/vulkan/radv_device.c | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index cfedff434b..6362e9ead1 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -553,20 +553,50 @@ void radv_GetPhysicalDeviceQueueFamilyProperties( uint32_t* pCount, VkQueueFamilyProperties* pQueueFamilyProperties) { + RADV_FROM_HANDLE(radv_physical_device, pdevice, physicalDevice); + int num_queue_families = 1; + bool all_queues = env_var_as_boolean("RADV_SHOW_QUEUES", true); + int idx; + if (all_queues && pdevice->rad_info.chip_class >= CIK) { + if (pdevice->rad_info.compute_rings > 0) + num_queue_families++; + } + if (pQueueFamilyProperties == NULL) { - *pCount = 1; + *pCount = num_queue_families; return; } - assert(*pCount >= 1); - - *pQueueFamilyProperties = (VkQueueFamilyProperties) { - .queueFlags = VK_QUEUE_GRAPHICS_BIT | - VK_QUEUE_COMPUTE_BIT | - VK_QUEUE_TRANSFER_BIT, - .queueCount = 1, - .timestampValidBits = 64, - .minImageTransferGranularity = (VkExtent3D) { 1, 1, 1 }, - }; + + if (!*pCount) + return; + + idx = 0; + if (*pCount >= 1) { + pQueueFamilyProperties[idx] = (VkQueueFamilyProperties) { + .queueFlags = VK_QUEUE_GRAPHICS_BIT | + VK_QUEUE_COMPUTE_BIT | + VK_QUEUE_TRANSFER_BIT, + .queueCount = 1, + .timestampValidBits = 64, + .minImageTransferGranularity = (VkExtent3D) { 1, 1, 1 }, + }; + idx++; + } + + if (!all_queues) + return; + + if (pdevice->rad_info.compute_rings > 0 && pdevice->rad_info.chip_class >= CIK) { + if (*pCount > idx) { + pQueueFamilyProperties[idx] = (VkQueueFamilyProperties) { + .queueFlags = VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT, + .queueCount = pdevice->rad_info.compute_rings, + .timestampValidBits = 64, + .minImageTransferGranularity = (VkExtent3D) { 1, 1, 1 }, + }; + idx++; + } + } } void radv_GetPhysicalDeviceMemoryProperties( |