aboutsummaryrefslogtreecommitdiff
path: root/loader
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-05-06 10:15:07 -0600
committerJon Ashburn <jon@lunarg.com>2015-05-07 16:24:43 -0600
commitc5104f208dd40c53c47a77d84b4c5cd68065af26 (patch)
tree2bcce4f0d3cf736a33e2c0127fedd79a1267f4e9 /loader
parent8abcd57aee10259ad7066200383c0769bdb7e3f4 (diff)
downloadusermoji-c5104f208dd40c53c47a77d84b4c5cd68065af26.tar.xz
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()
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"))