diff options
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/gpa_helper.h | 4 | ||||
| -rw-r--r-- | loader/loader.c | 11 | ||||
| -rw-r--r-- | loader/table_ops.h | 3 |
3 files changed, 18 insertions, 0 deletions
diff --git a/loader/gpa_helper.h b/loader/gpa_helper.h index b2a6f311..b9bd688b 100644 --- a/loader/gpa_helper.h +++ b/loader/gpa_helper.h @@ -38,6 +38,8 @@ static inline void* globalGetProcAddr(const char *name) return (void*) vkEnumeratePhysicalDevices; if (!strcmp(name, "GetPhysicalDeviceInfo")) return (void*) vkGetPhysicalDeviceInfo; + if (!strcmp(name, "GetInstanceProcAddr")) + return (void*) vkGetInstanceProcAddr; if (!strcmp(name, "GetProcAddr")) return (void*) vkGetProcAddr; if (!strcmp(name, "CreateDevice")) @@ -312,6 +314,8 @@ static inline void *loader_non_passthrough_gpa(const char *name) return (void*) vkEnumeratePhysicalDevices; if (!strcmp(name, "GetPhysicalDeviceInfo")) return (void*) vkGetPhysicalDeviceInfo; + if (!strcmp(name, "GetInstanceProcAddr")) + return (void*) vkGetInstanceProcAddr; if (!strcmp(name, "GetProcAddr")) return (void*) vkGetProcAddr; if (!strcmp(name, "CreateDevice")) diff --git a/loader/loader.c b/loader/loader.c index 17778d5b..c452ce52 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -1288,6 +1288,17 @@ LOADER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices( return (count > 0) ? VK_SUCCESS : res; } +LOADER_EXPORT void * VKAPI vkGetInstanceProcAddr(VkInstance instance, const char * pName) +{ + if (instance != VK_NULL_HANDLE) { + + /* return entrypoint addresses that are global (in the loader)*/ + return globalGetProcAddr(pName); + } + + return NULL; +} + LOADER_EXPORT void * VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char * pName) { if (gpu == VK_NULL_HANDLE) { diff --git a/loader/table_ops.h b/loader/table_ops.h index 3a3535d2..1b59a453 100644 --- a/loader/table_ops.h +++ b/loader/table_ops.h @@ -35,6 +35,7 @@ static inline void loader_initialize_dispatch_table(VkLayerDispatchTable *table, table->DestroyInstance = (PFN_vkDestroyInstance) gpa(gpu, "vkDestroyInstance"); table->EnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices) gpa(gpu, "vkEnumeratePhysicalDevices"); table->GetPhysicalDeviceInfo = (PFN_vkGetPhysicalDeviceInfo) gpa(gpu, "vkGetPhysicalDeviceInfo"); + table->GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr) gpa(gpu, "vkGetInstanceProcAddr"); table->GetProcAddr = (PFN_vkGetProcAddr) gpa(gpu, "vkGetProcAddr"); table->CreateDevice = (PFN_vkCreateDevice) gpa(gpu, "vkCreateDevice"); table->DestroyDevice = (PFN_vkDestroyDevice) gpa(gpu, "vkDestroyDevice"); @@ -176,6 +177,8 @@ static inline void *loader_lookup_dispatch_table(const VkLayerDispatchTable *tab return (void *) table->EnumeratePhysicalDevices; if (!strcmp(name, "GetPhysicalDeviceInfo")) return (void *) table->GetPhysicalDeviceInfo; + if (!strcmp(name, "GetInstanceProcAddr")) + return (void *) table->GetInstanceProcAddr; if (!strcmp(name, "GetProcAddr")) return (void *) table->GetProcAddr; if (!strcmp(name, "CreateDevice")) |
