summaryrefslogtreecommitdiffstats
path: root/src/amd/vulkan
diff options
context:
space:
mode:
authorDave Airlie <[email protected]>2016-11-30 04:08:10 +0000
committerBas Nieuwenhuizen <[email protected]>2016-12-18 20:52:55 +0100
commit6229994ab75cab2565c3df7b47b8fb32e4b31d45 (patch)
tree1ec1203770006d14aedaa4110dacc8dc0895dae9 /src/amd/vulkan
parent442735d35d6f2bbb7ef1e4c003025ddf02528e36 (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 <[email protected]>
Diffstat (limited to 'src/amd/vulkan')
-rw-r--r--src/amd/vulkan/radv_device.c52
1 files changed, 41 insertions, 11 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index cfedff434b0..6362e9ead12 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(