[PATCH 2/5] winevulkan: Add registry key for manipulating quirks

Liam Middlebrook lmiddlebrook at nvidia.com
Mon Sep 14 07:31:43 CDT 2020


Tested with Vulkan CTS and WINEVULKAN_QUIRK_IGNORE_EXPLICIT_LAYERS.

Signed-off-by: Liam Middlebrook <lmiddlebrook at nvidia.com>
Signed-off-by: Daniel Koch <dkoch at nvidia.com>
---
 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




More information about the wine-devel mailing list