aboutsummaryrefslogtreecommitdiff
path: root/loader
diff options
context:
space:
mode:
Diffstat (limited to 'loader')
-rw-r--r--loader/gpa_helper.h4
-rw-r--r--loader/loader.c11
-rw-r--r--loader/table_ops.h3
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"))