loader: Fix PnP 32-bit registry handling
authorLenny Komow <lenny@lunarg.com>
Thu, 31 Aug 2017 16:44:17 +0000 (10:44 -0600)
committerLenny Komow <lenny@lunarg.com>
Wed, 6 Sep 2017 17:54:17 +0000 (11:54 -0600)
Change-Id: I25eae83b4783e702ca5fbe74a99d7bdeae6218f0

CMakeLists.txt
loader/CMakeLists.txt
loader/loader.c
loader/vk_loader_platform.h

index af7a261..d1f5e75 100644 (file)
@@ -347,6 +347,8 @@ add_custom_target(uninstall
     COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
 endif()
 
+add_definitions(-DAPI_NAME="${API_NAME}")
+
 # loader: Generic VULKAN ICD loader
 # tests: VULKAN tests
 if(BUILD_LOADER)
index 18ce425..0978d69 100644 (file)
@@ -80,8 +80,6 @@ set(OPT_LOADER_SRCS
     phys_dev_ext.c
 )
 
-add_definitions(-DAPI_NAME="${API_NAME}")
-
 # Check for assembler support
 set(ASM_FAILURE_MSG "The build will fall back on building with C code\n")
 set(ASM_FAILURE_MSG "${ASM_FAILURE_MSG}Note that this may be unsafe, as the C code requires tail-call optimizations to remove")
index 9874331..6a41a9d 100644 (file)
@@ -435,7 +435,7 @@ bool loaderGetDeviceRegistryEntry(const struct loader_instance *inst, char **reg
     // query value
     LSTATUS ret = RegQueryValueEx(
         hkrKey,
-        HKR_VK_DRIVER_NAME,
+        LoaderPnpDriverRegistry(),
         NULL,
         NULL,
         NULL,
@@ -457,7 +457,7 @@ bool loaderGetDeviceRegistryEntry(const struct loader_instance *inst, char **reg
 
     ret = RegQueryValueEx(
         hkrKey,
-        HKR_VK_DRIVER_NAME,
+        LoaderPnpDriverRegistry(),
         NULL,
         &dataType,
         pVkDriverPath,
index 324de88..1fa4952 100644 (file)
@@ -172,11 +172,6 @@ static inline void loader_platform_thread_cond_broadcast(loader_platform_thread_
 #define SECONDARY_VK_REGISTRY_HIVE HKEY_CURRENT_USER
 #define SECONDARY_VK_REGISTRY_HIVE_STR "HKEY_CURRENT_USER"
 #define DEFAULT_VK_DRIVERS_INFO "SOFTWARE\\Khronos\\" API_NAME "\\Drivers"
-#ifdef _WIN64
-#define HKR_VK_DRIVER_NAME API_NAME "DriverName"
-#else
-#define HKR_VK_DRIVER_NAME API_NAME "DriverNameWow"
-#endif
 #define DEFAULT_VK_DRIVERS_PATH ""
 #define DEFAULT_VK_ELAYERS_INFO "SOFTWARE\\Khronos\\" API_NAME "\\ExplicitLayers"
 #define DEFAULT_VK_ILAYERS_INFO "SOFTWARE\\Khronos\\" API_NAME "\\ImplicitLayers"
@@ -192,6 +187,16 @@ static inline void loader_platform_thread_cond_broadcast(loader_platform_thread_
 #define RELATIVE_VK_ILAYERS_INFO ""
 #define PRINTF_SIZE_T_SPECIFIER "%Iu"
 
+#if defined(_WIN32)
+// Get the key for the plug n play driver registry
+// The string returned by this function should NOT be freed
+static inline const char *LoaderPnpDriverRegistry() {
+    BOOL is_wow;
+    IsWow64Process(GetCurrentProcess(), &is_wow);
+    return is_wow ? (API_NAME "DriverNameWow") : (API_NAME "DriverName");
+}
+#endif
+
 // File IO
 static bool loader_platform_file_exists(const char *path) {
     if ((_access(path, 0)) == -1)