aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2016-10-26 08:19:24 -0600
committerMark Lobodzinski <mark@lunarg.com>2016-10-26 10:06:03 -0600
commit3ee8d523a1c03ff3309b782a58705a6a50f4a869 (patch)
tree056e2eee9240385bcc173e03be6a50b23647533a
parentd75d53101f559c4a97edf55649cb682d5ca4bd3b (diff)
downloadusermoji-3ee8d523a1c03ff3309b782a58705a6a50f4a869.tar.xz
scripts: Fix codegen issue in dispatch-table-helper
If a dispatch table entry needed to be protected by a #ifdef and was the last prototype in the list, the corresponding #endif was not generated causing compilation failures. Change-Id: I8760bf546bc38d6fc7d80cd3a095e52977dc554e
-rwxr-xr-xvk-generate.py71
1 files changed, 21 insertions, 50 deletions
diff --git a/vk-generate.py b/vk-generate.py
index e8fcead0..2b173ffb 100755
--- a/vk-generate.py
+++ b/vk-generate.py
@@ -155,68 +155,39 @@ class DispatchTableOpsSubcommand(Subcommand):
stmts.append(" // Core instance function pointers")
stmts.append(" table->GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr) gpa(instance, \"vkGetInstanceProcAddr\");")
- KHR_printed = False
- EXT_printed = False
- Win32_printed = False
- XLIB_printed = False
- XCB_printed = False
- MIR_printed = False
- WAY_printed = False
- Android_printed = False
for proto in self.protos:
if proto.params[0].ty != "VkInstance" and proto.params[0].ty != "VkPhysicalDevice" or \
proto.name == "CreateDevice" or proto.name == "GetInstanceProcAddr":
continue
- if Win32_printed and 'Win32' not in proto.name:
- stmts.append("#endif // VK_USE_PLATFORM_WIN32_KHR")
- Win32_printed = False
- 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 Android_printed and 'Android' not in proto.name:
- stmts.append("#endif // VK_USE_PLATFORM_ANDROID_KHR")
- Android_printed = False
+ # Protect platform-dependent APIs with #ifdef
if 'KHR' in proto.name and 'Win32' in proto.name:
- if not Win32_printed:
- stmts.append("#ifdef VK_USE_PLATFORM_WIN32_KHR")
- Win32_printed = True
+ stmts.append("#ifdef VK_USE_PLATFORM_WIN32_KHR")
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
+ stmts.append("#ifdef VK_USE_PLATFORM_XLIB_KHR")
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
+ stmts.append("#ifdef VK_USE_PLATFORM_XCB_KHR")
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
+ stmts.append("#ifdef VK_USE_PLATFORM_MIR_KHR")
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("#ifdef VK_USE_PLATFORM_WAYLAND_KHR")
if 'KHR' in proto.name and 'Android' in proto.name:
- if not Android_printed:
- stmts.append("#ifdef VK_USE_PLATFORM_ANDROID_KHR")
- Android_printed = True
- 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
+ stmts.append("#ifdef VK_USE_PLATFORM_ANDROID_KHR")
+ # Output dispatch table entry
stmts.append(" table->%s = (PFN_vk%s) gpa(instance, \"vk%s\");" %
(proto.name, proto.name, proto.name))
+ # If entry was protected by an #ifdef, close with a #endif
+ if 'KHR' in proto.name and 'Win32' in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_WIN32_KHR")
+ if 'KHR' in proto.name and 'Xlib' in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_XLIB_KHR")
+ if 'KHR' in proto.name and 'Xcb' in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_XCB_KHR")
+ if 'KHR' in proto.name and 'Mir' in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_MIR_KHR")
+ if 'KHR' in proto.name and 'Wayland' in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_WAYLAND_KHR")
+ if 'KHR' in proto.name and 'Android' in proto.name:
+ stmts.append("#endif // VK_USE_PLATFORM_ANDROID_KHR")
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)))