From 812c82f8ac398871138adfa29bca63d0af09fc9f Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 15 Feb 2021 21:12:03 +0100 Subject: [PATCH] vkd3d: Introduce VKD3D_QUEUE_FAMILY_INTERNAL_COMPUTE. This needs a rework when we re-enable multi-queue support. Signed-off-by: Philip Rebohle --- libs/vkd3d/device.c | 13 +++++++++++-- libs/vkd3d/vkd3d_private.h | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c index bc82c2a4..56f3bff6 100644 --- a/libs/vkd3d/device.c +++ b/libs/vkd3d/device.c @@ -1851,12 +1851,21 @@ static HRESULT vkd3d_select_queues(const struct vkd3d_instance *vkd3d_instance, * Just disabling async compute works around the issue as well. */ #define VKD3D_FORCE_SINGLE_QUEUE 1 - if (info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE] == VK_QUEUE_FAMILY_IGNORED || VKD3D_FORCE_SINGLE_QUEUE) + if (info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE] == VK_QUEUE_FAMILY_IGNORED) info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE] = info->family_index[VKD3D_QUEUE_FAMILY_GRAPHICS]; - if (info->family_index[VKD3D_QUEUE_FAMILY_TRANSFER] == VK_QUEUE_FAMILY_IGNORED || VKD3D_FORCE_SINGLE_QUEUE) + 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]; + /* 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]; + + if (VKD3D_FORCE_SINGLE_QUEUE) + { + info->family_index[VKD3D_QUEUE_FAMILY_COMPUTE] = info->family_index[VKD3D_QUEUE_FAMILY_GRAPHICS]; + info->family_index[VKD3D_QUEUE_FAMILY_TRANSFER] = info->family_index[VKD3D_QUEUE_FAMILY_GRAPHICS]; + } + for (i = 0; i < VKD3D_QUEUE_FAMILY_COUNT; ++i) { if (info->family_index[i] == VK_QUEUE_FAMILY_IGNORED) diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h index e9aef95f..22b581d1 100644 --- a/libs/vkd3d/vkd3d_private.h +++ b/libs/vkd3d/vkd3d_private.h @@ -2311,6 +2311,8 @@ enum vkd3d_queue_family VKD3D_QUEUE_FAMILY_COMPUTE, VKD3D_QUEUE_FAMILY_TRANSFER, VKD3D_QUEUE_FAMILY_SPARSE_BINDING, + /* Keep internal queues at the end */ + VKD3D_QUEUE_FAMILY_INTERNAL_COMPUTE, VKD3D_QUEUE_FAMILY_COUNT };