layers : gh682 move gipa dispatch table init
Move the GIPA setup of the dispatch tables for layers into
the layer_init_device_dispatch_table call since we're already
doing a majority of it there. This removes the need to separately
setup the WSI extension entry-points.
Additionally, memset the table to 0, just to make sure anything
that gets added in the future is obvoiusly not set.
Change-Id: I63c7c107cd9f7957e2766fdbeb8a06bc1ae0eda6
diff --git a/vk-generate.py b/vk-generate.py
index 6fafc19..4f182e4 100755
--- a/vk-generate.py
+++ b/vk-generate.py
@@ -95,6 +95,12 @@
pass
class DispatchTableOpsSubcommand(Subcommand):
+ def __init__(self, argv):
+ self.argv = argv
+ self.headers = vulkan.headers_all
+ self.protos = vulkan.protos_all
+ self.outfile = None
+
def run(self):
if len(self.argv) < 1:
print("DispatchTableOpsSubcommand: <prefix> unspecified")
@@ -121,13 +127,56 @@
func = []
if type == "device":
# GPA has to be first one and uses wrapped object
- stmts.append("memset(table, 0, sizeof(*table));")
- stmts.append("table->GetDeviceProcAddr =(PFN_vkGetDeviceProcAddr) gpa(device,\"vkGetDeviceProcAddr\");")
+ stmts.append(" memset(table, 0, sizeof(*table));")
+ stmts.append(" // Core device function pointers")
+ stmts.append(" table->GetDeviceProcAddr = (PFN_vkGetDeviceProcAddr) gpa(device, \"vkGetDeviceProcAddr\");")
+
+ KHR_printed = False
+ EXT_printed = False
+ XLIB_printed = False
+ XCB_printed = False
+ MIR_printed = False
+ WAY_printed = False
for proto in self.protos:
- if proto.name == "CreateInstance" or proto.name == "EnumerateInstanceExtensionProperties" or proto.name == "EnumerateInstanceLayerProperties" or proto.params[0].ty == "VkInstance" or proto.params[0].ty == "VkPhysicalDevice":
+ if proto.name == "CreateInstance" or proto.name == "EnumerateInstanceExtensionProperties" or \
+ proto.name == "EnumerateInstanceLayerProperties" or proto.params[0].ty == "VkInstance" or \
+ proto.params[0].ty == "VkPhysicalDevice" or proto.name == "GetDeviceProcAddr":
continue
- if proto.name != "GetDeviceProcAddr" and 'KHR' not in proto.name:
- stmts.append("table->%s = (PFN_vk%s) gpa(device, \"vk%s\");" %
+ if 'KHR' in proto.name and not KHR_printed:
+ stmts.append(" // KHR device extension function pointers")
+ KHR_printed = True
+ if 'EXT' in proto.name and not EXT_printed:
+ stmts.append(" // EXT device extension function pointers")
+ EXT_printed = True
+ if XLIB_printed and 'Xlib' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_XLIB_KHR")
+ XLIB_printed = False
+ if XCB_printed and 'Xcb' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_XCB_KHR")
+ XCB_printed = False
+ if MIR_printed and 'Mir' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_MIR_KHR")
+ MIR_printed = False
+ if WAY_printed and 'Wayland' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_WAYLAND_KHR")
+ WAY_printed = False
+ if 'KHR' in proto.name and 'Xlib' in proto.name:
+ if not XLIB_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_XLIB_KHR")
+ XLIB_printed = True
+ if 'KHR' in proto.name and 'Xcb' in proto.name:
+ if not XCB_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_XCB_KHR")
+ XCB_printed = True
+ if 'KHR' in proto.name and 'Mir' in proto.name:
+ if not MIR_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_MIR_KHR")
+ MIR_printed = True
+ if 'KHR' in proto.name and 'Wayland' in proto.name:
+ if not WAY_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_WAYLAND_KHR")
+ WAY_printed = True
+ stmts.append(" table->%s = (PFN_vk%s) gpa(device, \"vk%s\");" %
(proto.name, proto.name, proto.name))
func.append("static inline void %s_init_device_dispatch_table(VkDevice device,"
% self.prefix)
@@ -136,21 +185,62 @@
func.append("%s PFN_vkGetDeviceProcAddr gpa)"
% (" " * len(self.prefix)))
else:
- stmts.append("table->GetInstanceProcAddr =(PFN_vkGetInstanceProcAddr) gpa(instance,\"vkGetInstanceProcAddr\");")
+ stmts.append(" memset(table, 0, sizeof(*table));")
+ stmts.append(" // Core instance function pointers")
+ stmts.append(" table->GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr) gpa(instance, \"vkGetInstanceProcAddr\");")
+
+ KHR_printed = False
+ EXT_printed = False
+ XLIB_printed = False
+ XCB_printed = False
+ MIR_printed = False
+ WAY_printed = False
for proto in self.protos:
- if proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice":
+ if proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice" or \
+ proto.name == "CreateDevice" or proto.name == "GetInstanceProcAddr":
continue
- if proto.name == "CreateDevice":
- continue
- if proto.name != "GetInstanceProcAddr" and 'KHR' not in proto.name:
- stmts.append("table->%s = (PFN_vk%s) gpa(instance, \"vk%s\");" %
- (proto.name, proto.name, proto.name))
+ if 'KHR' in proto.name and not KHR_printed:
+ stmts.append(" // KHR instance extension function pointers")
+ KHR_printed = True
+ if 'EXT' in proto.name and not EXT_printed:
+ stmts.append(" // EXT instance extension function pointers")
+ EXT_printed = True
+ if XLIB_printed and 'Xlib' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_XLIB_KHR")
+ XLIB_printed = False
+ if XCB_printed and 'Xcb' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_XCB_KHR")
+ XCB_printed = False
+ if MIR_printed and 'Mir' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_MIR_KHR")
+ MIR_printed = False
+ if WAY_printed and 'Wayland' not in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_WAYLAND_KHR")
+ WAY_printed = False
+ if 'KHR' in proto.name and 'Xlib' in proto.name:
+ if not XLIB_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_XLIB_KHR")
+ XLIB_printed = True
+ if 'KHR' in proto.name and 'Xcb' in proto.name:
+ if not XCB_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_XCB_KHR")
+ XCB_printed = True
+ if 'KHR' in proto.name and 'Mir' in proto.name:
+ if not MIR_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_MIR_KHR")
+ MIR_printed = True
+ if 'KHR' in proto.name and 'Wayland' in proto.name:
+ if not WAY_printed:
+ stmts.append("#ifdef VK_USE_PLATFORM_WAYLAND_KHR")
+ WAY_printed = True
+ 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(" % self.prefix)
func.append("%s VkInstance instance," % (" " * len(self.prefix)))
func.append("%s VkLayerInstanceDispatchTable *table," % (" " * len(self.prefix)))
func.append("%s PFN_vkGetInstanceProcAddr gpa)" % (" " * len(self.prefix)))
func.append("{")
- func.append(" %s" % "\n ".join(stmts))
+ func.append("%s" % "\n".join(stmts))
func.append("}")
return "\n".join(func)