12f18b292ff155af7df35930474857b507dbf18feTony Barbour#!/usr/bin/env python3 22f18b292ff155af7df35930474857b507dbf18feTony Barbour# 32f18b292ff155af7df35930474857b507dbf18feTony Barbour# Copyright (C) 2016 Google, Inc. 42f18b292ff155af7df35930474857b507dbf18feTony Barbour# 52f18b292ff155af7df35930474857b507dbf18feTony Barbour# Permission is hereby granted, free of charge, to any person obtaining a 62f18b292ff155af7df35930474857b507dbf18feTony Barbour# copy of this software and associated documentation files (the "Software"), 72f18b292ff155af7df35930474857b507dbf18feTony Barbour# to deal in the Software without restriction, including without limitation 82f18b292ff155af7df35930474857b507dbf18feTony Barbour# the rights to use, copy, modify, merge, publish, distribute, sublicense, 92f18b292ff155af7df35930474857b507dbf18feTony Barbour# and/or sell copies of the Software, and to permit persons to whom the 102f18b292ff155af7df35930474857b507dbf18feTony Barbour# Software is furnished to do so, subject to the following conditions: 112f18b292ff155af7df35930474857b507dbf18feTony Barbour# 122f18b292ff155af7df35930474857b507dbf18feTony Barbour# The above copyright notice and this permission notice shall be included 132f18b292ff155af7df35930474857b507dbf18feTony Barbour# in all copies or substantial portions of the Software. 142f18b292ff155af7df35930474857b507dbf18feTony Barbour# 152f18b292ff155af7df35930474857b507dbf18feTony Barbour# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 162f18b292ff155af7df35930474857b507dbf18feTony Barbour# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 172f18b292ff155af7df35930474857b507dbf18feTony Barbour# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 182f18b292ff155af7df35930474857b507dbf18feTony Barbour# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 192f18b292ff155af7df35930474857b507dbf18feTony Barbour# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 202f18b292ff155af7df35930474857b507dbf18feTony Barbour# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 212f18b292ff155af7df35930474857b507dbf18feTony Barbour# DEALINGS IN THE SOFTWARE. 222f18b292ff155af7df35930474857b507dbf18feTony Barbour 232f18b292ff155af7df35930474857b507dbf18feTony Barbour"""Generate Vulkan dispatch table. 242f18b292ff155af7df35930474857b507dbf18feTony Barbour""" 252f18b292ff155af7df35930474857b507dbf18feTony Barbour 262f18b292ff155af7df35930474857b507dbf18feTony Barbourimport os 272f18b292ff155af7df35930474857b507dbf18feTony Barbourimport sys 282f18b292ff155af7df35930474857b507dbf18feTony Barbour 292f18b292ff155af7df35930474857b507dbf18feTony Barbourclass Command(object): 302f18b292ff155af7df35930474857b507dbf18feTony Barbour PLATFORM = 0 312f18b292ff155af7df35930474857b507dbf18feTony Barbour LOADER = 1 322f18b292ff155af7df35930474857b507dbf18feTony Barbour INSTANCE = 2 332f18b292ff155af7df35930474857b507dbf18feTony Barbour DEVICE = 3 342f18b292ff155af7df35930474857b507dbf18feTony Barbour 352f18b292ff155af7df35930474857b507dbf18feTony Barbour def __init__(self, name, dispatch): 362f18b292ff155af7df35930474857b507dbf18feTony Barbour self.name = name 372f18b292ff155af7df35930474857b507dbf18feTony Barbour self.dispatch = dispatch 382f18b292ff155af7df35930474857b507dbf18feTony Barbour self.ty = self._get_type() 392f18b292ff155af7df35930474857b507dbf18feTony Barbour 402f18b292ff155af7df35930474857b507dbf18feTony Barbour @staticmethod 412f18b292ff155af7df35930474857b507dbf18feTony Barbour def valid_c_typedef(c): 422f18b292ff155af7df35930474857b507dbf18feTony Barbour return (c.startswith("typedef") and 432f18b292ff155af7df35930474857b507dbf18feTony Barbour c.endswith(");") and 442f18b292ff155af7df35930474857b507dbf18feTony Barbour "*PFN_vkVoidFunction" not in c) 452f18b292ff155af7df35930474857b507dbf18feTony Barbour 462f18b292ff155af7df35930474857b507dbf18feTony Barbour @classmethod 472f18b292ff155af7df35930474857b507dbf18feTony Barbour def from_c_typedef(cls, c): 482f18b292ff155af7df35930474857b507dbf18feTony Barbour name_begin = c.find("*PFN_vk") + 7 492f18b292ff155af7df35930474857b507dbf18feTony Barbour name_end = c.find(")(", name_begin) 502f18b292ff155af7df35930474857b507dbf18feTony Barbour name = c[name_begin:name_end] 512f18b292ff155af7df35930474857b507dbf18feTony Barbour 522f18b292ff155af7df35930474857b507dbf18feTony Barbour dispatch_begin = name_end + 2 532f18b292ff155af7df35930474857b507dbf18feTony Barbour dispatch_end = c.find(" ", dispatch_begin) 542f18b292ff155af7df35930474857b507dbf18feTony Barbour dispatch = c[dispatch_begin:dispatch_end] 552f18b292ff155af7df35930474857b507dbf18feTony Barbour if not dispatch.startswith("Vk"): 562f18b292ff155af7df35930474857b507dbf18feTony Barbour dispatch = None 572f18b292ff155af7df35930474857b507dbf18feTony Barbour 582f18b292ff155af7df35930474857b507dbf18feTony Barbour return cls(name, dispatch) 592f18b292ff155af7df35930474857b507dbf18feTony Barbour 602f18b292ff155af7df35930474857b507dbf18feTony Barbour def _get_type(self): 612f18b292ff155af7df35930474857b507dbf18feTony Barbour if self.dispatch: 622f18b292ff155af7df35930474857b507dbf18feTony Barbour if self.dispatch in ["VkDevice", "VkQueue", "VkCommandBuffer"]: 632f18b292ff155af7df35930474857b507dbf18feTony Barbour return self.DEVICE 642f18b292ff155af7df35930474857b507dbf18feTony Barbour else: 652f18b292ff155af7df35930474857b507dbf18feTony Barbour return self.INSTANCE 662f18b292ff155af7df35930474857b507dbf18feTony Barbour else: 672f18b292ff155af7df35930474857b507dbf18feTony Barbour if self.name in ["GetInstanceProcAddr"]: 682f18b292ff155af7df35930474857b507dbf18feTony Barbour return self.PLATFORM 692f18b292ff155af7df35930474857b507dbf18feTony Barbour else: 702f18b292ff155af7df35930474857b507dbf18feTony Barbour return self.LOADER 712f18b292ff155af7df35930474857b507dbf18feTony Barbour 722f18b292ff155af7df35930474857b507dbf18feTony Barbour def __repr__(self): 732f18b292ff155af7df35930474857b507dbf18feTony Barbour return "Command(name=%s, dispatch=%s)" % \ 742f18b292ff155af7df35930474857b507dbf18feTony Barbour (repr(self.name), repr(self.dispatch)) 752f18b292ff155af7df35930474857b507dbf18feTony Barbour 762f18b292ff155af7df35930474857b507dbf18feTony Barbourclass Extension(object): 772f18b292ff155af7df35930474857b507dbf18feTony Barbour def __init__(self, name, version, guard=None, commands=[]): 782f18b292ff155af7df35930474857b507dbf18feTony Barbour self.name = name 792f18b292ff155af7df35930474857b507dbf18feTony Barbour self.version = version 802f18b292ff155af7df35930474857b507dbf18feTony Barbour self.guard = guard 812f18b292ff155af7df35930474857b507dbf18feTony Barbour self.commands = commands[:] 822f18b292ff155af7df35930474857b507dbf18feTony Barbour 832f18b292ff155af7df35930474857b507dbf18feTony Barbour def add_command(self, cmd): 842f18b292ff155af7df35930474857b507dbf18feTony Barbour self.commands.append(cmd) 852f18b292ff155af7df35930474857b507dbf18feTony Barbour 862f18b292ff155af7df35930474857b507dbf18feTony Barbour def __repr__(self): 872f18b292ff155af7df35930474857b507dbf18feTony Barbour lines = [] 882f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("Extension(name=%s, version=%s, guard=%s, commands=[" % 892f18b292ff155af7df35930474857b507dbf18feTony Barbour (repr(self.name), repr(self.version), repr(self.guard))) 902f18b292ff155af7df35930474857b507dbf18feTony Barbour 912f18b292ff155af7df35930474857b507dbf18feTony Barbour for cmd in self.commands: 922f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(" %s," % repr(cmd)) 932f18b292ff155af7df35930474857b507dbf18feTony Barbour 942f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("])") 952f18b292ff155af7df35930474857b507dbf18feTony Barbour 962f18b292ff155af7df35930474857b507dbf18feTony Barbour return "\n".join(lines) 972f18b292ff155af7df35930474857b507dbf18feTony Barbour 982f18b292ff155af7df35930474857b507dbf18feTony Barbour# generated by "generate-dispatch-table parse vulkan.h" 992f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_core = Extension(name='VK_core', version=0, guard=None, commands=[ 1002f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateInstance', dispatch=None), 1012f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyInstance', dispatch='VkInstance'), 1022f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='EnumeratePhysicalDevices', dispatch='VkInstance'), 1032f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceFeatures', dispatch='VkPhysicalDevice'), 1042f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceFormatProperties', dispatch='VkPhysicalDevice'), 1052f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceImageFormatProperties', dispatch='VkPhysicalDevice'), 1062f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceProperties', dispatch='VkPhysicalDevice'), 1072f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceQueueFamilyProperties', dispatch='VkPhysicalDevice'), 1082f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceMemoryProperties', dispatch='VkPhysicalDevice'), 1092f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetInstanceProcAddr', dispatch='VkInstance'), 1102f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetDeviceProcAddr', dispatch='VkDevice'), 1112f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateDevice', dispatch='VkPhysicalDevice'), 1122f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyDevice', dispatch='VkDevice'), 1132f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='EnumerateInstanceExtensionProperties', dispatch=None), 1142f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='EnumerateDeviceExtensionProperties', dispatch='VkPhysicalDevice'), 1152f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='EnumerateInstanceLayerProperties', dispatch=None), 1162f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='EnumerateDeviceLayerProperties', dispatch='VkPhysicalDevice'), 1172f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetDeviceQueue', dispatch='VkDevice'), 1182f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='QueueSubmit', dispatch='VkQueue'), 1192f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='QueueWaitIdle', dispatch='VkQueue'), 1202f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DeviceWaitIdle', dispatch='VkDevice'), 1212f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='AllocateMemory', dispatch='VkDevice'), 1222f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='FreeMemory', dispatch='VkDevice'), 1232f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='MapMemory', dispatch='VkDevice'), 1242f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='UnmapMemory', dispatch='VkDevice'), 1252f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='FlushMappedMemoryRanges', dispatch='VkDevice'), 1262f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='InvalidateMappedMemoryRanges', dispatch='VkDevice'), 1272f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetDeviceMemoryCommitment', dispatch='VkDevice'), 1282f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='BindBufferMemory', dispatch='VkDevice'), 1292f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='BindImageMemory', dispatch='VkDevice'), 1302f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetBufferMemoryRequirements', dispatch='VkDevice'), 1312f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetImageMemoryRequirements', dispatch='VkDevice'), 1322f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetImageSparseMemoryRequirements', dispatch='VkDevice'), 1332f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceSparseImageFormatProperties', dispatch='VkPhysicalDevice'), 1342f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='QueueBindSparse', dispatch='VkQueue'), 1352f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateFence', dispatch='VkDevice'), 1362f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyFence', dispatch='VkDevice'), 1372f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='ResetFences', dispatch='VkDevice'), 1382f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetFenceStatus', dispatch='VkDevice'), 1392f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='WaitForFences', dispatch='VkDevice'), 1402f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateSemaphore', dispatch='VkDevice'), 1412f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroySemaphore', dispatch='VkDevice'), 1422f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateEvent', dispatch='VkDevice'), 1432f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyEvent', dispatch='VkDevice'), 1442f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetEventStatus', dispatch='VkDevice'), 1452f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='SetEvent', dispatch='VkDevice'), 1462f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='ResetEvent', dispatch='VkDevice'), 1472f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateQueryPool', dispatch='VkDevice'), 1482f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyQueryPool', dispatch='VkDevice'), 1492f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetQueryPoolResults', dispatch='VkDevice'), 1502f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateBuffer', dispatch='VkDevice'), 1512f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyBuffer', dispatch='VkDevice'), 1522f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateBufferView', dispatch='VkDevice'), 1532f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyBufferView', dispatch='VkDevice'), 1542f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateImage', dispatch='VkDevice'), 1552f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyImage', dispatch='VkDevice'), 1562f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetImageSubresourceLayout', dispatch='VkDevice'), 1572f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateImageView', dispatch='VkDevice'), 1582f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyImageView', dispatch='VkDevice'), 1592f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateShaderModule', dispatch='VkDevice'), 1602f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyShaderModule', dispatch='VkDevice'), 1612f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreatePipelineCache', dispatch='VkDevice'), 1622f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyPipelineCache', dispatch='VkDevice'), 1632f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPipelineCacheData', dispatch='VkDevice'), 1642f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='MergePipelineCaches', dispatch='VkDevice'), 1652f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateGraphicsPipelines', dispatch='VkDevice'), 1662f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateComputePipelines', dispatch='VkDevice'), 1672f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyPipeline', dispatch='VkDevice'), 1682f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreatePipelineLayout', dispatch='VkDevice'), 1692f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyPipelineLayout', dispatch='VkDevice'), 1702f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateSampler', dispatch='VkDevice'), 1712f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroySampler', dispatch='VkDevice'), 1722f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateDescriptorSetLayout', dispatch='VkDevice'), 1732f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyDescriptorSetLayout', dispatch='VkDevice'), 1742f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateDescriptorPool', dispatch='VkDevice'), 1752f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyDescriptorPool', dispatch='VkDevice'), 1762f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='ResetDescriptorPool', dispatch='VkDevice'), 1772f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='AllocateDescriptorSets', dispatch='VkDevice'), 1782f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='FreeDescriptorSets', dispatch='VkDevice'), 1792f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='UpdateDescriptorSets', dispatch='VkDevice'), 1802f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateFramebuffer', dispatch='VkDevice'), 1812f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyFramebuffer', dispatch='VkDevice'), 1822f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateRenderPass', dispatch='VkDevice'), 1832f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyRenderPass', dispatch='VkDevice'), 1842f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetRenderAreaGranularity', dispatch='VkDevice'), 1852f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateCommandPool', dispatch='VkDevice'), 1862f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyCommandPool', dispatch='VkDevice'), 1872f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='ResetCommandPool', dispatch='VkDevice'), 1882f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='AllocateCommandBuffers', dispatch='VkDevice'), 1892f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='FreeCommandBuffers', dispatch='VkDevice'), 1902f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='BeginCommandBuffer', dispatch='VkCommandBuffer'), 1912f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='EndCommandBuffer', dispatch='VkCommandBuffer'), 1922f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='ResetCommandBuffer', dispatch='VkCommandBuffer'), 1932f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdBindPipeline', dispatch='VkCommandBuffer'), 1942f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetViewport', dispatch='VkCommandBuffer'), 1952f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetScissor', dispatch='VkCommandBuffer'), 1962f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetLineWidth', dispatch='VkCommandBuffer'), 1972f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetDepthBias', dispatch='VkCommandBuffer'), 1982f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetBlendConstants', dispatch='VkCommandBuffer'), 1992f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetDepthBounds', dispatch='VkCommandBuffer'), 2002f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetStencilCompareMask', dispatch='VkCommandBuffer'), 2012f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetStencilWriteMask', dispatch='VkCommandBuffer'), 2022f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetStencilReference', dispatch='VkCommandBuffer'), 2032f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdBindDescriptorSets', dispatch='VkCommandBuffer'), 2042f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdBindIndexBuffer', dispatch='VkCommandBuffer'), 2052f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdBindVertexBuffers', dispatch='VkCommandBuffer'), 2062f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdDraw', dispatch='VkCommandBuffer'), 2072f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdDrawIndexed', dispatch='VkCommandBuffer'), 2082f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdDrawIndirect', dispatch='VkCommandBuffer'), 2092f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdDrawIndexedIndirect', dispatch='VkCommandBuffer'), 2102f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdDispatch', dispatch='VkCommandBuffer'), 2112f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdDispatchIndirect', dispatch='VkCommandBuffer'), 2122f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdCopyBuffer', dispatch='VkCommandBuffer'), 2132f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdCopyImage', dispatch='VkCommandBuffer'), 2142f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdBlitImage', dispatch='VkCommandBuffer'), 2152f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdCopyBufferToImage', dispatch='VkCommandBuffer'), 2162f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdCopyImageToBuffer', dispatch='VkCommandBuffer'), 2172f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdUpdateBuffer', dispatch='VkCommandBuffer'), 2182f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdFillBuffer', dispatch='VkCommandBuffer'), 2192f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdClearColorImage', dispatch='VkCommandBuffer'), 2202f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdClearDepthStencilImage', dispatch='VkCommandBuffer'), 2212f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdClearAttachments', dispatch='VkCommandBuffer'), 2222f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdResolveImage', dispatch='VkCommandBuffer'), 2232f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdSetEvent', dispatch='VkCommandBuffer'), 2242f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdResetEvent', dispatch='VkCommandBuffer'), 2252f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdWaitEvents', dispatch='VkCommandBuffer'), 2262f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdPipelineBarrier', dispatch='VkCommandBuffer'), 2272f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdBeginQuery', dispatch='VkCommandBuffer'), 2282f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdEndQuery', dispatch='VkCommandBuffer'), 2292f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdResetQueryPool', dispatch='VkCommandBuffer'), 2302f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdWriteTimestamp', dispatch='VkCommandBuffer'), 2312f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdCopyQueryPoolResults', dispatch='VkCommandBuffer'), 2322f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdPushConstants', dispatch='VkCommandBuffer'), 2332f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdBeginRenderPass', dispatch='VkCommandBuffer'), 2342f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdNextSubpass', dispatch='VkCommandBuffer'), 2352f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdEndRenderPass', dispatch='VkCommandBuffer'), 2362f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CmdExecuteCommands', dispatch='VkCommandBuffer'), 2372f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2382f18b292ff155af7df35930474857b507dbf18feTony Barbour 2392f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_surface = Extension(name='VK_KHR_surface', version=25, guard=None, commands=[ 2402f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroySurfaceKHR', dispatch='VkInstance'), 2412f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceSurfaceSupportKHR', dispatch='VkPhysicalDevice'), 2422f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceSurfaceCapabilitiesKHR', dispatch='VkPhysicalDevice'), 2432f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceSurfaceFormatsKHR', dispatch='VkPhysicalDevice'), 2442f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceSurfacePresentModesKHR', dispatch='VkPhysicalDevice'), 2452f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2462f18b292ff155af7df35930474857b507dbf18feTony Barbour 2472f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_swapchain = Extension(name='VK_KHR_swapchain', version=67, guard=None, commands=[ 2482f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateSwapchainKHR', dispatch='VkDevice'), 2492f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroySwapchainKHR', dispatch='VkDevice'), 2502f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetSwapchainImagesKHR', dispatch='VkDevice'), 2512f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='AcquireNextImageKHR', dispatch='VkDevice'), 2522f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='QueuePresentKHR', dispatch='VkQueue'), 2532f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2542f18b292ff155af7df35930474857b507dbf18feTony Barbour 2552f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_display = Extension(name='VK_KHR_display', version=21, guard=None, commands=[ 2562f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceDisplayPropertiesKHR', dispatch='VkPhysicalDevice'), 2572f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceDisplayPlanePropertiesKHR', dispatch='VkPhysicalDevice'), 2582f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetDisplayPlaneSupportedDisplaysKHR', dispatch='VkPhysicalDevice'), 2592f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetDisplayModePropertiesKHR', dispatch='VkPhysicalDevice'), 2602f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateDisplayModeKHR', dispatch='VkPhysicalDevice'), 2612f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetDisplayPlaneCapabilitiesKHR', dispatch='VkPhysicalDevice'), 2622f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateDisplayPlaneSurfaceKHR', dispatch='VkInstance'), 2632f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2642f18b292ff155af7df35930474857b507dbf18feTony Barbour 2652f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_display_swapchain = Extension(name='VK_KHR_display_swapchain', version=9, guard=None, commands=[ 2662f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateSharedSwapchainsKHR', dispatch='VkDevice'), 2672f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2682f18b292ff155af7df35930474857b507dbf18feTony Barbour 2692f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_xlib_surface = Extension(name='VK_KHR_xlib_surface', version=6, guard='VK_USE_PLATFORM_XLIB_KHR', commands=[ 2702f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateXlibSurfaceKHR', dispatch='VkInstance'), 2712f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceXlibPresentationSupportKHR', dispatch='VkPhysicalDevice'), 2722f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2732f18b292ff155af7df35930474857b507dbf18feTony Barbour 2742f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_xcb_surface = Extension(name='VK_KHR_xcb_surface', version=6, guard='VK_USE_PLATFORM_XCB_KHR', commands=[ 2752f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateXcbSurfaceKHR', dispatch='VkInstance'), 2762f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceXcbPresentationSupportKHR', dispatch='VkPhysicalDevice'), 2772f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2782f18b292ff155af7df35930474857b507dbf18feTony Barbour 2792f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_wayland_surface = Extension(name='VK_KHR_wayland_surface', version=5, guard='VK_USE_PLATFORM_WAYLAND_KHR', commands=[ 2802f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateWaylandSurfaceKHR', dispatch='VkInstance'), 2812f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceWaylandPresentationSupportKHR', dispatch='VkPhysicalDevice'), 2822f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2832f18b292ff155af7df35930474857b507dbf18feTony Barbour 2842f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_mir_surface = Extension(name='VK_KHR_mir_surface', version=4, guard='VK_USE_PLATFORM_MIR_KHR', commands=[ 2852f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateMirSurfaceKHR', dispatch='VkInstance'), 2862f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceMirPresentationSupportKHR', dispatch='VkPhysicalDevice'), 2872f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2882f18b292ff155af7df35930474857b507dbf18feTony Barbour 2892f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_android_surface = Extension(name='VK_KHR_android_surface', version=6, guard='VK_USE_PLATFORM_ANDROID_KHR', commands=[ 2902f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateAndroidSurfaceKHR', dispatch='VkInstance'), 2912f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2922f18b292ff155af7df35930474857b507dbf18feTony Barbour 2932f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_khr_win32_surface = Extension(name='VK_KHR_win32_surface', version=5, guard='VK_USE_PLATFORM_WIN32_KHR', commands=[ 2942f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateWin32SurfaceKHR', dispatch='VkInstance'), 2952f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='GetPhysicalDeviceWin32PresentationSupportKHR', dispatch='VkPhysicalDevice'), 2962f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 2972f18b292ff155af7df35930474857b507dbf18feTony Barbour 2982f18b292ff155af7df35930474857b507dbf18feTony Barbourvk_ext_debug_report = Extension(name='VK_EXT_debug_report', version=1, guard=None, commands=[ 2992f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='CreateDebugReportCallbackEXT', dispatch='VkInstance'), 3002f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DestroyDebugReportCallbackEXT', dispatch='VkInstance'), 3012f18b292ff155af7df35930474857b507dbf18feTony Barbour Command(name='DebugReportMessageEXT', dispatch='VkInstance'), 3022f18b292ff155af7df35930474857b507dbf18feTony Barbour]) 3032f18b292ff155af7df35930474857b507dbf18feTony Barbour 3042f18b292ff155af7df35930474857b507dbf18feTony Barbourextensions = [ 3052f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_core, 3062f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_surface, 3072f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_swapchain, 3082f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_display, 3092f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_display_swapchain, 3102f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_xlib_surface, 3112f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_xcb_surface, 3122f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_wayland_surface, 3132f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_mir_surface, 3142f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_android_surface, 3152f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_khr_win32_surface, 3162f18b292ff155af7df35930474857b507dbf18feTony Barbour vk_ext_debug_report, 3172f18b292ff155af7df35930474857b507dbf18feTony Barbour] 3182f18b292ff155af7df35930474857b507dbf18feTony Barbour 3192f18b292ff155af7df35930474857b507dbf18feTony Barbourdef generate_header(guard): 3202f18b292ff155af7df35930474857b507dbf18feTony Barbour lines = [] 3212f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("// This file is generated.") 3222f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#ifndef %s" % guard) 3232f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#define %s" % guard) 3242f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3252f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#include <vulkan/vulkan.h>") 3262f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3272f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("namespace vk {") 3282f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3292f18b292ff155af7df35930474857b507dbf18feTony Barbour 3302f18b292ff155af7df35930474857b507dbf18feTony Barbour for ext in extensions: 3312f18b292ff155af7df35930474857b507dbf18feTony Barbour if ext.guard: 3322f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#ifdef %s" % ext.guard) 3332f18b292ff155af7df35930474857b507dbf18feTony Barbour 3342f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("// %s" % ext.name) 3352f18b292ff155af7df35930474857b507dbf18feTony Barbour for cmd in ext.commands: 3362f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("extern PFN_vk%s %s;" % (cmd.name, cmd.name)) 3372f18b292ff155af7df35930474857b507dbf18feTony Barbour 3382f18b292ff155af7df35930474857b507dbf18feTony Barbour if ext.guard: 3392f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#endif") 3402f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3412f18b292ff155af7df35930474857b507dbf18feTony Barbour 3422f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("void init_dispatch_table_top(PFN_vkGetInstanceProcAddr get_instance_proc_addr);") 3432f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("void init_dispatch_table_middle(VkInstance instance, bool include_bottom);") 3442f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("void init_dispatch_table_bottom(VkInstance instance, VkDevice dev);") 3452f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3462f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("} // namespace vk") 3472f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3482f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#endif // %s" % guard) 3492f18b292ff155af7df35930474857b507dbf18feTony Barbour 3502f18b292ff155af7df35930474857b507dbf18feTony Barbour return "\n".join(lines) 3512f18b292ff155af7df35930474857b507dbf18feTony Barbour 3522f18b292ff155af7df35930474857b507dbf18feTony Barbourdef get_proc_addr(dispatchable, cmd, guard=None): 3532f18b292ff155af7df35930474857b507dbf18feTony Barbour if dispatchable == "dev": 3542f18b292ff155af7df35930474857b507dbf18feTony Barbour func = "GetDeviceProcAddr" 3552f18b292ff155af7df35930474857b507dbf18feTony Barbour else: 3562f18b292ff155af7df35930474857b507dbf18feTony Barbour func = "GetInstanceProcAddr" 3572f18b292ff155af7df35930474857b507dbf18feTony Barbour 3582f18b292ff155af7df35930474857b507dbf18feTony Barbour c = " %s = reinterpret_cast<PFN_vk%s>(%s(%s, \"vk%s\"));" % \ 3592f18b292ff155af7df35930474857b507dbf18feTony Barbour (cmd.name, cmd.name, func, dispatchable, cmd.name) 3602f18b292ff155af7df35930474857b507dbf18feTony Barbour 3612f18b292ff155af7df35930474857b507dbf18feTony Barbour if guard: 3622f18b292ff155af7df35930474857b507dbf18feTony Barbour c = ("#ifdef %s\n" % guard) + c + "\n#endif" 3632f18b292ff155af7df35930474857b507dbf18feTony Barbour 3642f18b292ff155af7df35930474857b507dbf18feTony Barbour return c 3652f18b292ff155af7df35930474857b507dbf18feTony Barbour 3662f18b292ff155af7df35930474857b507dbf18feTony Barbourdef generate_source(header): 3672f18b292ff155af7df35930474857b507dbf18feTony Barbour lines = [] 3682f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("// This file is generated.") 3692f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#include \"%s\"" % header) 3702f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3712f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("namespace vk {") 3722f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3732f18b292ff155af7df35930474857b507dbf18feTony Barbour 3742f18b292ff155af7df35930474857b507dbf18feTony Barbour commands_by_types = {} 3752f18b292ff155af7df35930474857b507dbf18feTony Barbour get_instance_proc_addr = None 3762f18b292ff155af7df35930474857b507dbf18feTony Barbour get_device_proc_addr = None 3772f18b292ff155af7df35930474857b507dbf18feTony Barbour for ext in extensions: 3782f18b292ff155af7df35930474857b507dbf18feTony Barbour if ext.guard: 3792f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#ifdef %s" % ext.guard) 3802f18b292ff155af7df35930474857b507dbf18feTony Barbour 3812f18b292ff155af7df35930474857b507dbf18feTony Barbour for cmd in ext.commands: 3822f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("PFN_vk%s %s;" % (cmd.name, cmd.name)) 3832f18b292ff155af7df35930474857b507dbf18feTony Barbour 3842f18b292ff155af7df35930474857b507dbf18feTony Barbour if cmd.ty not in commands_by_types: 3852f18b292ff155af7df35930474857b507dbf18feTony Barbour commands_by_types[cmd.ty] = [] 3862f18b292ff155af7df35930474857b507dbf18feTony Barbour commands_by_types[cmd.ty].append([cmd, ext.guard]) 3872f18b292ff155af7df35930474857b507dbf18feTony Barbour 3882f18b292ff155af7df35930474857b507dbf18feTony Barbour if cmd.name == "GetInstanceProcAddr": 3892f18b292ff155af7df35930474857b507dbf18feTony Barbour get_instance_proc_addr = cmd 3902f18b292ff155af7df35930474857b507dbf18feTony Barbour elif cmd.name == "GetDeviceProcAddr": 3912f18b292ff155af7df35930474857b507dbf18feTony Barbour get_device_proc_addr = cmd 3922f18b292ff155af7df35930474857b507dbf18feTony Barbour 3932f18b292ff155af7df35930474857b507dbf18feTony Barbour if ext.guard: 3942f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("#endif") 3952f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 3962f18b292ff155af7df35930474857b507dbf18feTony Barbour 3972f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("void init_dispatch_table_top(PFN_vkGetInstanceProcAddr get_instance_proc_addr)") 3982f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("{") 3992f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(" GetInstanceProcAddr = get_instance_proc_addr;") 4002f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4012f18b292ff155af7df35930474857b507dbf18feTony Barbour for cmd, guard in commands_by_types[Command.LOADER]: 4022f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(get_proc_addr("VK_NULL_HANDLE", cmd, guard)) 4032f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("}") 4042f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4052f18b292ff155af7df35930474857b507dbf18feTony Barbour 4062f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("void init_dispatch_table_middle(VkInstance instance, bool include_bottom)") 4072f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("{") 4082f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(get_proc_addr("instance", get_instance_proc_addr)) 4092f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4102f18b292ff155af7df35930474857b507dbf18feTony Barbour for cmd, guard in commands_by_types[Command.INSTANCE]: 4112f18b292ff155af7df35930474857b507dbf18feTony Barbour if cmd == get_instance_proc_addr: 4122f18b292ff155af7df35930474857b507dbf18feTony Barbour continue 4132f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(get_proc_addr("instance", cmd, guard)) 4142f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4152f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(" if (!include_bottom)") 4162f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(" return;") 4172f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4182f18b292ff155af7df35930474857b507dbf18feTony Barbour for cmd, guard in commands_by_types[Command.DEVICE]: 4192f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(get_proc_addr("instance", cmd, guard)) 4202f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("}") 4212f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4222f18b292ff155af7df35930474857b507dbf18feTony Barbour 4232f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("void init_dispatch_table_bottom(VkInstance instance, VkDevice dev)") 4242f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("{") 4252f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(get_proc_addr("instance", get_device_proc_addr)) 4262f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(get_proc_addr("dev", get_device_proc_addr)) 4272f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4282f18b292ff155af7df35930474857b507dbf18feTony Barbour for cmd, guard in commands_by_types[Command.DEVICE]: 4292f18b292ff155af7df35930474857b507dbf18feTony Barbour if cmd == get_device_proc_addr: 4302f18b292ff155af7df35930474857b507dbf18feTony Barbour continue 4312f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append(get_proc_addr("dev", cmd, guard)) 4322f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("}") 4332f18b292ff155af7df35930474857b507dbf18feTony Barbour 4342f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("") 4352f18b292ff155af7df35930474857b507dbf18feTony Barbour lines.append("} // namespace vk") 4362f18b292ff155af7df35930474857b507dbf18feTony Barbour 4372f18b292ff155af7df35930474857b507dbf18feTony Barbour return "\n".join(lines) 4382f18b292ff155af7df35930474857b507dbf18feTony Barbour 4392f18b292ff155af7df35930474857b507dbf18feTony Barbourdef parse_vulkan_h(filename): 4402f18b292ff155af7df35930474857b507dbf18feTony Barbour extensions = [] 4412f18b292ff155af7df35930474857b507dbf18feTony Barbour 4422f18b292ff155af7df35930474857b507dbf18feTony Barbour with open(filename, "r") as f: 4432f18b292ff155af7df35930474857b507dbf18feTony Barbour current_ext = None 4442f18b292ff155af7df35930474857b507dbf18feTony Barbour ext_guard = None 4452f18b292ff155af7df35930474857b507dbf18feTony Barbour spec_version = None 4462f18b292ff155af7df35930474857b507dbf18feTony Barbour 4472f18b292ff155af7df35930474857b507dbf18feTony Barbour for line in f: 4482f18b292ff155af7df35930474857b507dbf18feTony Barbour line = line.strip(); 4492f18b292ff155af7df35930474857b507dbf18feTony Barbour 4502f18b292ff155af7df35930474857b507dbf18feTony Barbour if line.startswith("#define VK_API_VERSION"): 4512f18b292ff155af7df35930474857b507dbf18feTony Barbour minor_end = line.rfind(",") 4522f18b292ff155af7df35930474857b507dbf18feTony Barbour minor_begin = line.rfind(",", 0, minor_end) + 1 4532f18b292ff155af7df35930474857b507dbf18feTony Barbour spec_version = int(line[minor_begin:minor_end]) 4542f18b292ff155af7df35930474857b507dbf18feTony Barbour # add core 4552f18b292ff155af7df35930474857b507dbf18feTony Barbour current_ext = Extension("VK_core", spec_version) 4562f18b292ff155af7df35930474857b507dbf18feTony Barbour extensions.append(current_ext) 4572f18b292ff155af7df35930474857b507dbf18feTony Barbour elif Command.valid_c_typedef(line): 4582f18b292ff155af7df35930474857b507dbf18feTony Barbour current_ext.add_command(Command.from_c_typedef(line)) 4592f18b292ff155af7df35930474857b507dbf18feTony Barbour elif line.startswith("#ifdef VK_USE_PLATFORM"): 4602f18b292ff155af7df35930474857b507dbf18feTony Barbour guard_begin = line.find(" ") + 1 4612f18b292ff155af7df35930474857b507dbf18feTony Barbour ext_guard = line[guard_begin:] 4622f18b292ff155af7df35930474857b507dbf18feTony Barbour elif line.startswith("#define") and "SPEC_VERSION " in line: 4632f18b292ff155af7df35930474857b507dbf18feTony Barbour version_begin = line.rfind(" ") + 1 4642f18b292ff155af7df35930474857b507dbf18feTony Barbour spec_version = int(line[version_begin:]) 4652f18b292ff155af7df35930474857b507dbf18feTony Barbour elif line.startswith("#define") and "EXTENSION_NAME " in line: 4662f18b292ff155af7df35930474857b507dbf18feTony Barbour name_end = line.rfind("\"") 4672f18b292ff155af7df35930474857b507dbf18feTony Barbour name_begin = line.rfind("\"", 0, name_end) + 1 4682f18b292ff155af7df35930474857b507dbf18feTony Barbour name = line[name_begin:name_end] 4692f18b292ff155af7df35930474857b507dbf18feTony Barbour # add extension 4702f18b292ff155af7df35930474857b507dbf18feTony Barbour current_ext = Extension(name, spec_version, ext_guard) 4712f18b292ff155af7df35930474857b507dbf18feTony Barbour extensions.append(current_ext) 4722f18b292ff155af7df35930474857b507dbf18feTony Barbour elif ext_guard and line.startswith("#endif") and ext_guard in line: 4732f18b292ff155af7df35930474857b507dbf18feTony Barbour ext_guard = None 4742f18b292ff155af7df35930474857b507dbf18feTony Barbour 4752f18b292ff155af7df35930474857b507dbf18feTony Barbour for ext in extensions: 4762f18b292ff155af7df35930474857b507dbf18feTony Barbour print("%s = %s" % (ext.name.lower(), repr(ext))) 4772f18b292ff155af7df35930474857b507dbf18feTony Barbour print("") 4782f18b292ff155af7df35930474857b507dbf18feTony Barbour 4792f18b292ff155af7df35930474857b507dbf18feTony Barbour print("extensions = [") 4802f18b292ff155af7df35930474857b507dbf18feTony Barbour for ext in extensions: 4812f18b292ff155af7df35930474857b507dbf18feTony Barbour print(" %s," % ext.name.lower()) 4822f18b292ff155af7df35930474857b507dbf18feTony Barbour print("]") 4832f18b292ff155af7df35930474857b507dbf18feTony Barbour 4842f18b292ff155af7df35930474857b507dbf18feTony Barbourif __name__ == "__main__": 4852f18b292ff155af7df35930474857b507dbf18feTony Barbour if sys.argv[1] == "parse": 4862f18b292ff155af7df35930474857b507dbf18feTony Barbour parse_vulkan_h(sys.argv[2]) 4872f18b292ff155af7df35930474857b507dbf18feTony Barbour else: 4882f18b292ff155af7df35930474857b507dbf18feTony Barbour filename = sys.argv[1] 4892f18b292ff155af7df35930474857b507dbf18feTony Barbour base = os.path.basename(filename) 4902f18b292ff155af7df35930474857b507dbf18feTony Barbour contents = [] 4912f18b292ff155af7df35930474857b507dbf18feTony Barbour 4922f18b292ff155af7df35930474857b507dbf18feTony Barbour if base.endswith(".h"): 4932f18b292ff155af7df35930474857b507dbf18feTony Barbour contents = generate_header(base.replace(".", "_").upper()) 4942f18b292ff155af7df35930474857b507dbf18feTony Barbour elif base.endswith(".cpp"): 4952f18b292ff155af7df35930474857b507dbf18feTony Barbour contents = generate_source(base.replace(".cpp", ".h")) 4962f18b292ff155af7df35930474857b507dbf18feTony Barbour 4972f18b292ff155af7df35930474857b507dbf18feTony Barbour with open(filename, "w") as f: 4982f18b292ff155af7df35930474857b507dbf18feTony Barbour print(contents, file=f) 499