[PATCH 4/5] winevulkan: Add VkApplicationInfo specific Quirk regkey handling
Liam Middlebrook
lmiddlebrook at nvidia.com
Mon Sep 14 07:31:45 CDT 2020
Add support for regkeys to set Quirks bits depending on VkInstance's
pApplicationInfo->pApplicationName and pApplicationInfo->pEngineName properties.
Signed-off-by: Liam Middlebrook <lmiddlebrook at nvidia.com>
Signed-off-by: Daniel Koch <dkoch at nvidia.com>
---
dlls/winevulkan/vulkan.c | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
index a9a341209f8..e78ca1eda62 100644
--- a/dlls/winevulkan/vulkan.c
+++ b/dlls/winevulkan/vulkan.c
@@ -655,22 +655,44 @@ fail:
return res;
}
+static LSTATUS wine_vk_open_regkey_with_suffix(HKEY *key, const char *path_prefix, const char *path_suffix, BOOL allow_null_suffix)
+{
+ char buf[MAX_PATH];
+
+ if (!allow_null_suffix && !path_suffix)
+ return ERROR_INVALID_PARAMETER;
+
+ lstrcpynA(buf, path_prefix, MAX_PATH);
+ if (path_suffix)
+ {
+ strncat(buf, path_suffix, MAX_PATH - strlen(buf));
+ }
+ return RegOpenKeyA(HKEY_CURRENT_USER, buf, key);
+}
static void wine_vk_process_quirks(const VkApplicationInfo *pApplicationInfo, struct VkInstance_T *object)
{
uint8_t validKeysMask = 0;
int keyIndex = 0;
- HKEY keys[1];
+ HKEY keys[3];
int i;
memset(&keys, 0, sizeof(keys));
/* Match regkey settings in the following order, breaking early if settings
* are found:
+ * pApplicationInfo->pApplicationName
+ * @@ Wine registry key: HKCU\Software\Wine\Vulkan\pApplicationName\<pApplicationName>
+ * pApplicationInfo->pEngineName
+ * @@ Wine registry key: HKCU\Software\Wine\Vulkan\pEngineName\<pEngineName>
* global defaults
* @@ Wine registry key: HKCU\Software\Wine\Vulkan
*/
- if (RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Vulkan", keys + keyIndex++) == 0)
+ if (wine_vk_open_regkey_with_suffix(keys + keyIndex++, "Software\\Wine\\Vulkan\\pApplicationName\\", pApplicationInfo->pApplicationName, FALSE) == 0)
+ validKeysMask |= (1 << (keyIndex - 1));
+ if (wine_vk_open_regkey_with_suffix(keys + keyIndex++, "Software\\Wine\\Vulkan\\pEngineName\\", pApplicationInfo->pEngineName, FALSE) == 0)
+ validKeysMask |= (1 << (keyIndex - 1));
+ if (wine_vk_open_regkey_with_suffix(keys + keyIndex++, "Software\\Wine\\Vulkan", NULL, TRUE) == 0)
validKeysMask |= (1 << (keyIndex - 1));
/* Load Global Quirks */
--
2.17.1
More information about the wine-devel
mailing list