layers: Add initialization of instance dispatch table
Make the layer init separate from either device or instance dispatch
table init, since these are done at different times.
diff --git a/vk-generate.py b/vk-generate.py
index aff0d59..c6f70f6 100755
--- a/vk-generate.py
+++ b/vk-generate.py
@@ -110,22 +110,30 @@
"#include <vkLayer.h>",
"#include <string.h>"])
- def _generate_init(self):
+ def _generate_init(self, type):
stmts = []
- for proto in self.protos:
- if proto.name != "GetGlobalExtensionInfo":
+ func = []
+ if type == "device":
+ for proto in self.protos:
stmts.append("table->%s = (PFN_vk%s) gpa(gpu, \"vk%s\");" %
(proto.name, proto.name, proto.name))
- else:
- stmts.append("table->%s = vk%s; /* non-dispatchable */" %
- (proto.name, proto.name))
-
- func = []
- func.append("static inline void %s_initialize_dispatch_table(VkLayerDispatchTable *table,"
+ func.append("static inline void %s_initialize_dispatch_table(VkLayerDispatchTable *table,"
% self.prefix)
- func.append("%s PFN_vkGetProcAddr gpa,"
+ func.append("%s PFN_vkGetProcAddr gpa,"
% (" " * len(self.prefix)))
- func.append("%s VkPhysicalDevice gpu)"
+ func.append("%s VkPhysicalDevice gpu)"
+ % (" " * len(self.prefix)))
+ else:
+ for proto in self.protos:
+ if proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice":
+ continue
+ 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)
+ func.append("%s PFN_vkGetInstanceProcAddr gpa,"
+ % (" " * len(self.prefix)))
+ func.append("%s VkInstance instance)"
% (" " * len(self.prefix)))
func.append("{")
func.append(" %s" % "\n ".join(stmts))
@@ -134,7 +142,8 @@
return "\n".join(func)
def generate_body(self):
- body = [self._generate_init()]
+ body = [self._generate_init("device"),
+ self._generate_init("instance")]
return "\n\n".join(body)