vkd3d: Create multiple queues per queue family if possible.

Signed-off-by: Philip Rebohle <philip.rebohle@tu-dortmund.de>
This commit is contained in:
Philip Rebohle 2021-03-13 03:56:18 +01:00 committed by Hans-Kristian Arntzen
parent 6967b1e92b
commit 3cd93781ff
1 changed files with 6 additions and 3 deletions

View File

@ -1862,7 +1862,8 @@ out_destroy_queues:
return hr; return hr;
} }
static float queue_priorities[] = {1.0f}; #define VKD3D_MAX_QUEUE_COUNT_PER_FAMILY (4u)
static float queue_priorities[] = {1.0f, 1.0f, 1.0f, 1.0f};
static uint32_t vkd3d_find_queue(unsigned int count, const VkQueueFamilyProperties *properties, static uint32_t vkd3d_find_queue(unsigned int count, const VkQueueFamilyProperties *properties,
VkQueueFlags mask, VkQueueFlags flags) VkQueueFlags mask, VkQueueFlags flags)
@ -1921,7 +1922,6 @@ static HRESULT vkd3d_select_queues(const struct vkd3d_instance *vkd3d_instance,
if (info->family_index[VKD3D_QUEUE_FAMILY_TRANSFER] == VK_QUEUE_FAMILY_IGNORED) if (info->family_index[VKD3D_QUEUE_FAMILY_TRANSFER] == VK_QUEUE_FAMILY_IGNORED)
info->family_index[VKD3D_QUEUE_FAMILY_TRANSFER] = info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE]; info->family_index[VKD3D_QUEUE_FAMILY_TRANSFER] = info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE];
/* TODO make this a low-priority compute queue that does not conflict with the actual compute queue */
info->family_index[VKD3D_QUEUE_FAMILY_INTERNAL_COMPUTE] = info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE]; info->family_index[VKD3D_QUEUE_FAMILY_INTERNAL_COMPUTE] = info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE];
if (VKD3D_FORCE_SINGLE_QUEUE) if (VKD3D_FORCE_SINGLE_QUEUE)
@ -1951,8 +1951,11 @@ static HRESULT vkd3d_select_queues(const struct vkd3d_instance *vkd3d_instance,
queue_info->pNext = NULL; queue_info->pNext = NULL;
queue_info->flags = 0; queue_info->flags = 0;
queue_info->queueFamilyIndex = info->family_index[i]; queue_info->queueFamilyIndex = info->family_index[i];
queue_info->queueCount = 1; queue_info->queueCount = min(info->vk_properties[i].queueCount, VKD3D_MAX_QUEUE_COUNT_PER_FAMILY);
queue_info->pQueuePriorities = queue_priorities; queue_info->pQueuePriorities = queue_priorities;
if (VKD3D_FORCE_SINGLE_QUEUE)
queue_info->queueCount = 1;
} }
vkd3d_free(queue_properties); vkd3d_free(queue_properties);