diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-05-19 10:05:54 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-06-17 19:47:02 -0600 |
| commit | 12b3a9babed46b4d1e7a8f07456141da94066c5b (patch) | |
| tree | e7817743f31efdd4f0564be331241b59a67a8c28 | |
| parent | 50cfda92e7f3368f0d5665893a3888385ef60442 (diff) | |
| download | usermoji-12b3a9babed46b4d1e7a8f07456141da94066c5b.tar.xz | |
layers: GPA table initialization shouldn't recurse
| -rw-r--r-- | layers/multi.cpp | 8 | ||||
| -rwxr-xr-x | vk-generate.py | 10 |
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) |
