From: Liam Middlebrook Subject: [PATCH 2/5] winevulkan: Add registry key for manipulating quirks Message-Id: <20200914123146.12912-2-lmiddlebrook@nvidia.com> Date: Mon, 14 Sep 2020 05:31:43 -0700 In-Reply-To: <20200914123146.12912-1-lmiddlebrook@nvidia.com> References: <20200914123146.12912-1-lmiddlebrook@nvidia.com> Tested with Vulkan CTS and WINEVULKAN_QUIRK_IGNORE_EXPLICIT_LAYERS. Signed-off-by: Liam Middlebrook Signed-off-by: Daniel Koch --- dlls/winevulkan/vulkan.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index a0dafbca46b..57b0e65152a 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -655,6 +655,28 @@ fail: return res; } + +static void wine_vk_process_quirks(const VkApplicationInfo *pApplicationInfo, struct VkInstance_T *object) +{ + HKEY globalKey; + + /* Load Global Quirks + * @@ Wine registry key: HKCU\Software\Wine\Vulkan + */ + if (RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Vulkan", &globalKey) == 0) + { + DWORD type, value, size; + size = sizeof(value); + if (RegQueryValueExA(globalKey, "Quirks", NULL, &type, (LPBYTE)&value, &size) == 0 + && type == REG_DWORD) + { + object->quirks = value; + TRACE("Loaded Quirks value %x\n", value); + } + RegCloseKey(globalKey); + } +} + VkResult WINAPI wine_vkCreateInstance(const VkInstanceCreateInfo *create_info, const VkAllocationCallbacks *allocator, VkInstance *instance) { @@ -679,6 +701,11 @@ VkResult WINAPI wine_vkCreateInstance(const VkInstanceCreateInfo *create_info, } object->base.loader_magic = VULKAN_ICD_MAGIC_VALUE; + /* Load optional WineVulkan quirks bits from registry, see vulkan_private.h + * for a list of quirks. + */ + wine_vk_process_quirks(create_info->pApplicationInfo, object); + res = wine_vk_instance_convert_create_info(create_info, &create_info_host, object); if (res != VK_SUCCESS) { -- 2.17.1