From c5104f208dd40c53c47a77d84b4c5cd68065af26 Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Wed, 6 May 2015 10:15:07 -0600 Subject: misc: Add vkGetInstanceProcAddr() entrypoint Adding this entrypoint as this has been discussed in khronos and is needed for the loader/layer/extension proposal. Caveats: 1) Have not updated layers or any tests/demos yet that will come later; 2) No one including loader is using this call yet; 3) Leaving exisitng vkGetProcAddr() as is for now; later once loader is using vkGetInstanceProcAddr call can switch vkGetProcAddr() to vkGetDeviceProcAddr() --- loader/gpa_helper.h | 4 ++++ loader/loader.c | 11 +++++++++++ loader/table_ops.h | 3 +++ 3 files changed, 18 insertions(+) (limited to 'loader') 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")) -- cgit v1.2.3