aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-05-19 10:05:54 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-06-17 19:47:02 -0600
commit12b3a9babed46b4d1e7a8f07456141da94066c5b (patch)
treee7817743f31efdd4f0564be331241b59a67a8c28
parent50cfda92e7f3368f0d5665893a3888385ef60442 (diff)
downloadusermoji-12b3a9babed46b4d1e7a8f07456141da94066c5b.tar.xz
layers: GPA table initialization shouldn't recurse
-rw-r--r--layers/multi.cpp8
-rwxr-xr-xvk-generate.py10
2 files changed, 16 insertions, 2 deletions
diff --git a/layers/multi.cpp b/layers/multi.cpp
index 1d6764b8..33af2720 100644
--- a/layers/multi.cpp
+++ b/layers/multi.cpp
@@ -145,6 +145,8 @@ VK_LAYER_EXPORT void * VKAPI multi1GetDeviceProcAddr(VkDevice device, const char
getLayer1Table(devw);
+ if (!strcmp("vkGetDeviceProcAddr", pName))
+ return (void *) multi1GetDeviceProcAddr;
if (!strcmp("vkCreateSampler", pName))
return (void *) multi1CreateSampler;
else if (!strcmp("vkCreateGraphicsPipeline", pName))
@@ -167,6 +169,8 @@ VK_LAYER_EXPORT void * VKAPI multi1GetInstanceProcAddr(VkInstance inst, const ch
getLayer1InstanceTable(instw);
+ if (!strcmp("vkGetInstanceProcAddr", pName))
+ return (void *) multi1GetInstanceProcAddr;
if (!strcmp("vkEnumerateLayers", pName))
return (void *) multi1EnumerateLayers;
else if (!strcmp("GetGlobalExtensionInfo", pName))
@@ -295,6 +299,8 @@ VK_LAYER_EXPORT void * VKAPI multi2GetDeviceProcAddr(VkDevice device, const char
getLayer2Table(devw);
+ if (!strcmp("vkGetDeviceProcAddr", pName))
+ return (void *) multi2GetDeviceProcAddr;
if (!strcmp("vkCreateCommandBuffer", pName))
return (void *) multi2CreateCommandBuffer;
else if (!strcmp("vkBeginCommandBuffer", pName))
@@ -315,6 +321,8 @@ VK_LAYER_EXPORT void * VKAPI multi2GetInstanceProcAddr(VkInstance inst, const ch
getLayer2InstanceTable(instw);
+ if (!strcmp("vkGetInstanceProcAddr", pName))
+ return (void *) multi2GetInstanceProcAddr;
if (!strcmp("vkEnumeratePhysicalDevices", pName))
return (void *) multi2EnumeratePhysicalDevices;
if (!strcmp("vkCreateDevice", pName))
diff --git a/vk-generate.py b/vk-generate.py
index 3375b1bc..a2ec6bf0 100755
--- a/vk-generate.py
+++ b/vk-generate.py
@@ -117,7 +117,10 @@ class DispatchTableOpsSubcommand(Subcommand):
for proto in self.protos:
if proto.name == "CreateInstance" or proto.name == "GetGlobalExtensionInfo" or proto.name == "GetDisplayInfoWSI" or proto.params[0].ty == "VkInstance" or proto.params[0].ty == "VkPhysicalDevice":
continue
- stmts.append("table->%s = (PFN_vk%s) gpa(device, \"vk%s\");" %
+ if proto.name == "GetDeviceProcAddr":
+ stmts.append("table->%s = gpa; // direct assignment" % proto.name)
+ else:
+ stmts.append("table->%s = (PFN_vk%s) gpa(device, \"vk%s\");" %
(proto.name, proto.name, proto.name))
func.append("static inline void %s_initialize_dispatch_table(VkLayerDispatchTable *table,"
% self.prefix)
@@ -129,7 +132,10 @@ class DispatchTableOpsSubcommand(Subcommand):
for proto in self.protos:
if proto.name != "CreateInstance" and proto.name != "GetGlobalExtensionInfo" and proto.name != "GetDisplayInfoWSI" and proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice":
continue
- stmts.append("table->%s = (PFN_vk%s) gpa(instance, \"vk%s\");" %
+ if proto.name == "GetInstanceProcAddr":
+ stmts.append("table->%s = gpa; // direct assignment" % proto.name)
+ else:
+ stmts.append("table->%s = (PFN_vk%s) gpa(instance, \"vk%s\");" %
(proto.name, proto.name, proto.name))
func.append("static inline void %s_init_instance_dispatch_table(VkLayerInstanceDispatchTable *table,"
% self.prefix)