[PATCH 5/5] winevulkan: Add executable name Quirk regkey handling
Liam Middlebrook
lmiddlebrook at nvidia.com
Mon Sep 14 07:31:46 CDT 2020
Add support for regkeys to set Quirks bits depending the executable name of the
currently running program.
Signed-off-by: Liam Middlebrook <lmiddlebrook at nvidia.com>
Signed-off-by: Daniel Koch <dkoch at nvidia.com>
---
dlls/winevulkan/vulkan.c | 34 +++++++++++++++++++++++++++++++++-
1 file changed, 33 insertions(+), 1 deletion(-)
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
index e78ca1eda62..a77664a7e5f 100644
--- a/dlls/winevulkan/vulkan.c
+++ b/dlls/winevulkan/vulkan.c
@@ -670,21 +670,51 @@ static LSTATUS wine_vk_open_regkey_with_suffix(HKEY *key, const char *path_prefi
return RegOpenKeyA(HKEY_CURRENT_USER, buf, key);
}
+static uint32_t wine_vk_get_exe_name(char *name, uint32_t length)
+{
+ char buf[MAX_PATH];
+ uint32_t buf_len;
+ char *p, *exe_path;
+
+ buf_len = GetModuleFileNameA(0, buf, MAX_PATH);
+ if (!buf_len || buf_len == MAX_PATH)
+ return 0;
+
+ exe_path = buf;
+ if ((p = strrchr(exe_path, '/')))
+ exe_path = p + 1;
+ if ((p = strrchr(exe_path, '\\')))
+ exe_path = p + 1;
+
+ buf_len = strlen(exe_path) + 1;
+ if (buf_len > length)
+ return 0;
+
+ lstrcpynA(name, exe_path, length);
+ return length;
+}
+
static void wine_vk_process_quirks(const VkApplicationInfo *pApplicationInfo, struct VkInstance_T *object)
{
+ char exe_name[MAX_PATH];
uint8_t validKeysMask = 0;
int keyIndex = 0;
- HKEY keys[3];
+ HKEY keys[4];
int i;
memset(&keys, 0, sizeof(keys));
+ if (!wine_vk_get_exe_name(exe_name, MAX_PATH))
+ exe_name[0] = '\0';
+
/* 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>
+ * executable name
+ * @@ Wine registry key: HKCU\Software\Wine\Vulkan\exeName\app.exe
* global defaults
* @@ Wine registry key: HKCU\Software\Wine\Vulkan
*/
@@ -692,6 +722,8 @@ static void wine_vk_process_quirks(const VkApplicationInfo *pApplicationInfo, st
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\\exeName\\", exe_name, 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));
--
2.17.1
More information about the wine-devel
mailing list