From 7b126cb383c53118ff1f37b8f64874dc172a3623 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sun, 7 Jan 2024 01:17:57 +0000 Subject: [PATCH] rendervulkan: Add GAMESCOPE_FORCE_GENERAL_QUEUE --- src/rendervulkan.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/rendervulkan.cpp b/src/rendervulkan.cpp index 3dbbfe069..96e0ea53f 100644 --- a/src/rendervulkan.cpp +++ b/src/rendervulkan.cpp @@ -269,6 +269,8 @@ bool CVulkanDevice::BInit(VkInstance instance, VkSurfaceKHR surface) return true; } +extern bool env_to_bool(const char *env); + bool CVulkanDevice::selectPhysDev(VkSurfaceKHR surface) { uint32_t deviceCount = 0; @@ -339,6 +341,9 @@ bool CVulkanDevice::selectPhysDev(VkSurfaceKHR surface) m_queueFamily = computeOnlyIndex == ~0u ? generalIndex : computeOnlyIndex; m_generalQueueFamily = generalIndex; m_physDev = cphysDev; + + if ( env_to_bool( "GAMESCOPE_FORCE_GENERAL_QUEUE" ) ) + m_queueFamily = generalIndex; } } } @@ -552,7 +557,7 @@ bool CVulkanDevice::createDevice() VkDeviceCreateInfo deviceCreateInfo = { .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, .pNext = &features2, - .queueCreateInfoCount = std::size(queueCreateInfos), + .queueCreateInfoCount = m_queueFamily == m_generalQueueFamily ? 1u : 2u, .pQueueCreateInfos = queueCreateInfos, .enabledExtensionCount = (uint32_t)enabledExtensions.size(), .ppEnabledExtensionNames = enabledExtensions.data(), @@ -606,7 +611,10 @@ bool CVulkanDevice::createDevice() #undef VK_FUNC vk.GetDeviceQueue(device(), m_queueFamily, 0, &m_queue); - vk.GetDeviceQueue(device(), m_generalQueueFamily, 0, &m_generalQueue); + if ( m_queueFamily == m_generalQueueFamily ) + m_queue = m_generalQueue; + else + vk.GetDeviceQueue(device(), m_generalQueueFamily, 0, &m_generalQueue); return true; }