renaming: Move many xgl files to vk version
diff --git a/vulkan.py b/vulkan.py
new file mode 100755
index 0000000..6e30e45
--- /dev/null
+++ b/vulkan.py
@@ -0,0 +1,1034 @@
+"""VK API description"""
+
+# Copyright (C) 2014 LunarG, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+
+class Param(object):
+ """A function parameter."""
+
+ def __init__(self, ty, name):
+ self.ty = ty
+ self.name = name
+
+ def c(self):
+ """Return the parameter in C."""
+ idx = self.ty.find("[")
+
+ # arrays have a different syntax
+ if idx >= 0:
+ return "%s %s%s" % (self.ty[:idx], self.name, self.ty[idx:])
+ else:
+ return "%s %s" % (self.ty, self.name)
+
+ def indirection_level(self):
+ """Return the level of indirection."""
+ return self.ty.count("*") + self.ty.count("[")
+
+ def dereferenced_type(self, level=0):
+ """Return the type after dereferencing."""
+ if not level:
+ level = self.indirection_level()
+
+ deref = self.ty if level else ""
+ while level > 0:
+ idx = deref.rfind("[")
+ if idx < 0:
+ idx = deref.rfind("*")
+ if idx < 0:
+ deref = ""
+ break
+ deref = deref[:idx]
+ level -= 1;
+
+ return deref.rstrip()
+
+ def __repr__(self):
+ return "Param(\"%s\", \"%s\")" % (self.ty, self.name)
+
+class Proto(object):
+ """A function prototype."""
+
+ def __init__(self, ret, name, params=[]):
+ # the proto has only a param
+ if not isinstance(params, list):
+ params = [params]
+
+ self.ret = ret
+ self.name = name
+ self.params = params
+
+ def c_params(self, need_type=True, need_name=True):
+ """Return the parameter list in C."""
+ if self.params and (need_type or need_name):
+ if need_type and need_name:
+ return ", ".join([param.c() for param in self.params])
+ elif need_type:
+ return ", ".join([param.ty for param in self.params])
+ else:
+ return ", ".join([param.name for param in self.params])
+ else:
+ return "void" if need_type else ""
+
+ def c_decl(self, name, attr="", typed=False, need_param_names=True):
+ """Return a named declaration in C."""
+ format_vals = (self.ret,
+ attr + " " if attr else "",
+ name,
+ self.c_params(need_name=need_param_names))
+
+ if typed:
+ return "%s (%s*%s)(%s)" % format_vals
+ else:
+ return "%s %s%s(%s)" % format_vals
+
+ def c_pretty_decl(self, name, attr=""):
+ """Return a named declaration in C, with vulkan.h formatting."""
+ plist = []
+ for param in self.params:
+ idx = param.ty.find("[")
+ if idx < 0:
+ idx = len(param.ty)
+
+ pad = 44 - idx
+ if pad <= 0:
+ pad = 1
+
+ plist.append(" %s%s%s%s" % (param.ty[:idx],
+ " " * pad, param.name, param.ty[idx:]))
+
+ return "%s %s%s(\n%s)" % (self.ret,
+ attr + " " if attr else "",
+ name,
+ ",\n".join(plist))
+
+ def c_typedef(self, suffix="", attr=""):
+ """Return the typedef for the prototype in C."""
+ return self.c_decl(self.name + suffix, attr=attr, typed=True)
+
+ def c_func(self, prefix="", attr=""):
+ """Return the prototype in C."""
+ return self.c_decl(prefix + self.name, attr=attr, typed=False)
+
+ def c_call(self):
+ """Return a call to the prototype in C."""
+ return "%s(%s)" % (self.name, self.c_params(need_type=False))
+
+ def object_in_params(self):
+ """Return the params that are simple VK objects and are inputs."""
+ return [param for param in self.params if param.ty in objects]
+
+ def object_out_params(self):
+ """Return the params that are simple VK objects and are outputs."""
+ return [param for param in self.params
+ if param.dereferenced_type() in objects]
+
+ def __repr__(self):
+ param_strs = []
+ for param in self.params:
+ param_strs.append(str(param))
+ param_str = " [%s]" % (",\n ".join(param_strs))
+
+ return "Proto(\"%s\", \"%s\",\n%s)" % \
+ (self.ret, self.name, param_str)
+
+class Extension(object):
+ def __init__(self, name, headers, objects, protos):
+ self.name = name
+ self.headers = headers
+ self.objects = objects
+ self.protos = protos
+
+ def __repr__(self):
+ lines = []
+ lines.append("Extension(")
+ lines.append(" name=\"%s\"," % self.name)
+ lines.append(" headers=[\"%s\"]," %
+ "\", \"".join(self.headers))
+
+ lines.append(" objects=[")
+ for obj in self.objects:
+ lines.append(" \"%s\"," % obj)
+ lines.append(" ],")
+
+ lines.append(" protos=[")
+ for proto in self.protos:
+ param_lines = str(proto).splitlines()
+ param_lines[-1] += ",\n" if proto != self.protos[-1] else ","
+ for p in param_lines:
+ lines.append(" " + p)
+ lines.append(" ],")
+ lines.append(")")
+
+ return "\n".join(lines)
+
+# VK core API
+core = Extension(
+ name="VK_CORE",
+ headers=["vulkan.h", "vkDbg.h"],
+ objects=[
+ "VK_INSTANCE",
+ "VK_PHYSICAL_GPU",
+ "VK_BASE_OBJECT",
+ "VK_DEVICE",
+ "VK_QUEUE",
+ "VK_GPU_MEMORY",
+ "VK_OBJECT",
+ "VK_BUFFER",
+ "VK_BUFFER_VIEW",
+ "VK_IMAGE",
+ "VK_IMAGE_VIEW",
+ "VK_COLOR_ATTACHMENT_VIEW",
+ "VK_DEPTH_STENCIL_VIEW",
+ "VK_SHADER",
+ "VK_PIPELINE",
+ "VK_SAMPLER",
+ "VK_DESCRIPTOR_SET",
+ "VK_DESCRIPTOR_SET_LAYOUT",
+ "VK_DESCRIPTOR_SET_LAYOUT_CHAIN",
+ "VK_DESCRIPTOR_POOL",
+ "VK_DYNAMIC_STATE_OBJECT",
+ "VK_DYNAMIC_VP_STATE_OBJECT",
+ "VK_DYNAMIC_RS_STATE_OBJECT",
+ "VK_DYNAMIC_CB_STATE_OBJECT",
+ "VK_DYNAMIC_DS_STATE_OBJECT",
+ "VK_CMD_BUFFER",
+ "VK_FENCE",
+ "VK_SEMAPHORE",
+ "VK_EVENT",
+ "VK_QUERY_POOL",
+ "VK_FRAMEBUFFER",
+ "VK_RENDER_PASS",
+ ],
+ protos=[
+ Proto("VK_RESULT", "CreateInstance",
+ [Param("const VK_INSTANCE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_INSTANCE*", "pInstance")]),
+
+ Proto("VK_RESULT", "DestroyInstance",
+ [Param("VK_INSTANCE", "instance")]),
+
+ Proto("VK_RESULT", "EnumerateGpus",
+ [Param("VK_INSTANCE", "instance"),
+ Param("uint32_t", "maxGpus"),
+ Param("uint32_t*", "pGpuCount"),
+ Param("VK_PHYSICAL_GPU*", "pGpus")]),
+
+ Proto("VK_RESULT", "GetGpuInfo",
+ [Param("VK_PHYSICAL_GPU", "gpu"),
+ Param("VK_PHYSICAL_GPU_INFO_TYPE", "infoType"),
+ Param("size_t*", "pDataSize"),
+ Param("void*", "pData")]),
+
+ Proto("void*", "GetProcAddr",
+ [Param("VK_PHYSICAL_GPU", "gpu"),
+ Param("const char*", "pName")]),
+
+ Proto("VK_RESULT", "CreateDevice",
+ [Param("VK_PHYSICAL_GPU", "gpu"),
+ Param("const VK_DEVICE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DEVICE*", "pDevice")]),
+
+ Proto("VK_RESULT", "DestroyDevice",
+ [Param("VK_DEVICE", "device")]),
+
+ Proto("VK_RESULT", "GetExtensionSupport",
+ [Param("VK_PHYSICAL_GPU", "gpu"),
+ Param("const char*", "pExtName")]),
+
+ Proto("VK_RESULT", "EnumerateLayers",
+ [Param("VK_PHYSICAL_GPU", "gpu"),
+ Param("size_t", "maxLayerCount"),
+ Param("size_t", "maxStringSize"),
+ Param("size_t*", "pOutLayerCount"),
+ Param("char* const*", "pOutLayers"),
+ Param("void*", "pReserved")]),
+
+ Proto("VK_RESULT", "GetDeviceQueue",
+ [Param("VK_DEVICE", "device"),
+ Param("uint32_t", "queueNodeIndex"),
+ Param("uint32_t", "queueIndex"),
+ Param("VK_QUEUE*", "pQueue")]),
+
+ Proto("VK_RESULT", "QueueSubmit",
+ [Param("VK_QUEUE", "queue"),
+ Param("uint32_t", "cmdBufferCount"),
+ Param("const VK_CMD_BUFFER*", "pCmdBuffers"),
+ Param("VK_FENCE", "fence")]),
+
+ Proto("VK_RESULT", "QueueAddMemReference",
+ [Param("VK_QUEUE", "queue"),
+ Param("VK_GPU_MEMORY", "mem")]),
+
+ Proto("VK_RESULT", "QueueRemoveMemReference",
+ [Param("VK_QUEUE", "queue"),
+ Param("VK_GPU_MEMORY", "mem")]),
+
+ Proto("VK_RESULT", "QueueWaitIdle",
+ [Param("VK_QUEUE", "queue")]),
+
+ Proto("VK_RESULT", "DeviceWaitIdle",
+ [Param("VK_DEVICE", "device")]),
+
+ Proto("VK_RESULT", "AllocMemory",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_MEMORY_ALLOC_INFO*", "pAllocInfo"),
+ Param("VK_GPU_MEMORY*", "pMem")]),
+
+ Proto("VK_RESULT", "FreeMemory",
+ [Param("VK_GPU_MEMORY", "mem")]),
+
+ Proto("VK_RESULT", "SetMemoryPriority",
+ [Param("VK_GPU_MEMORY", "mem"),
+ Param("VK_MEMORY_PRIORITY", "priority")]),
+
+ Proto("VK_RESULT", "MapMemory",
+ [Param("VK_GPU_MEMORY", "mem"),
+ Param("VK_FLAGS", "flags"),
+ Param("void**", "ppData")]),
+
+ Proto("VK_RESULT", "UnmapMemory",
+ [Param("VK_GPU_MEMORY", "mem")]),
+
+ Proto("VK_RESULT", "PinSystemMemory",
+ [Param("VK_DEVICE", "device"),
+ Param("const void*", "pSysMem"),
+ Param("size_t", "memSize"),
+ Param("VK_GPU_MEMORY*", "pMem")]),
+
+ Proto("VK_RESULT", "GetMultiGpuCompatibility",
+ [Param("VK_PHYSICAL_GPU", "gpu0"),
+ Param("VK_PHYSICAL_GPU", "gpu1"),
+ Param("VK_GPU_COMPATIBILITY_INFO*", "pInfo")]),
+
+ Proto("VK_RESULT", "OpenSharedMemory",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_MEMORY_OPEN_INFO*", "pOpenInfo"),
+ Param("VK_GPU_MEMORY*", "pMem")]),
+
+ Proto("VK_RESULT", "OpenSharedSemaphore",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_SEMAPHORE_OPEN_INFO*", "pOpenInfo"),
+ Param("VK_SEMAPHORE*", "pSemaphore")]),
+
+ Proto("VK_RESULT", "OpenPeerMemory",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_PEER_MEMORY_OPEN_INFO*", "pOpenInfo"),
+ Param("VK_GPU_MEMORY*", "pMem")]),
+
+ Proto("VK_RESULT", "OpenPeerImage",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_PEER_IMAGE_OPEN_INFO*", "pOpenInfo"),
+ Param("VK_IMAGE*", "pImage"),
+ Param("VK_GPU_MEMORY*", "pMem")]),
+
+ Proto("VK_RESULT", "DestroyObject",
+ [Param("VK_OBJECT", "object")]),
+
+ Proto("VK_RESULT", "GetObjectInfo",
+ [Param("VK_BASE_OBJECT", "object"),
+ Param("VK_OBJECT_INFO_TYPE", "infoType"),
+ Param("size_t*", "pDataSize"),
+ Param("void*", "pData")]),
+
+ Proto("VK_RESULT", "BindObjectMemory",
+ [Param("VK_OBJECT", "object"),
+ Param("uint32_t", "allocationIdx"),
+ Param("VK_GPU_MEMORY", "mem"),
+ Param("VK_GPU_SIZE", "offset")]),
+
+ Proto("VK_RESULT", "BindObjectMemoryRange",
+ [Param("VK_OBJECT", "object"),
+ Param("uint32_t", "allocationIdx"),
+ Param("VK_GPU_SIZE", "rangeOffset"),
+ Param("VK_GPU_SIZE", "rangeSize"),
+ Param("VK_GPU_MEMORY", "mem"),
+ Param("VK_GPU_SIZE", "memOffset")]),
+
+ Proto("VK_RESULT", "BindImageMemoryRange",
+ [Param("VK_IMAGE", "image"),
+ Param("uint32_t", "allocationIdx"),
+ Param("const VK_IMAGE_MEMORY_BIND_INFO*", "bindInfo"),
+ Param("VK_GPU_MEMORY", "mem"),
+ Param("VK_GPU_SIZE", "memOffset")]),
+
+ Proto("VK_RESULT", "CreateFence",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_FENCE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_FENCE*", "pFence")]),
+
+ Proto("VK_RESULT", "ResetFences",
+ [Param("VK_DEVICE", "device"),
+ Param("uint32_t", "fenceCount"),
+ Param("VK_FENCE*", "pFences")]),
+
+ Proto("VK_RESULT", "GetFenceStatus",
+ [Param("VK_FENCE", "fence")]),
+
+ Proto("VK_RESULT", "WaitForFences",
+ [Param("VK_DEVICE", "device"),
+ Param("uint32_t", "fenceCount"),
+ Param("const VK_FENCE*", "pFences"),
+ Param("bool32_t", "waitAll"),
+ Param("uint64_t", "timeout")]),
+
+ Proto("VK_RESULT", "CreateSemaphore",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_SEMAPHORE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_SEMAPHORE*", "pSemaphore")]),
+
+ Proto("VK_RESULT", "QueueSignalSemaphore",
+ [Param("VK_QUEUE", "queue"),
+ Param("VK_SEMAPHORE", "semaphore")]),
+
+ Proto("VK_RESULT", "QueueWaitSemaphore",
+ [Param("VK_QUEUE", "queue"),
+ Param("VK_SEMAPHORE", "semaphore")]),
+
+ Proto("VK_RESULT", "CreateEvent",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_EVENT_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_EVENT*", "pEvent")]),
+
+ Proto("VK_RESULT", "GetEventStatus",
+ [Param("VK_EVENT", "event")]),
+
+ Proto("VK_RESULT", "SetEvent",
+ [Param("VK_EVENT", "event")]),
+
+ Proto("VK_RESULT", "ResetEvent",
+ [Param("VK_EVENT", "event")]),
+
+ Proto("VK_RESULT", "CreateQueryPool",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_QUERY_POOL_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_QUERY_POOL*", "pQueryPool")]),
+
+ Proto("VK_RESULT", "GetQueryPoolResults",
+ [Param("VK_QUERY_POOL", "queryPool"),
+ Param("uint32_t", "startQuery"),
+ Param("uint32_t", "queryCount"),
+ Param("size_t*", "pDataSize"),
+ Param("void*", "pData")]),
+
+ Proto("VK_RESULT", "GetFormatInfo",
+ [Param("VK_DEVICE", "device"),
+ Param("VK_FORMAT", "format"),
+ Param("VK_FORMAT_INFO_TYPE", "infoType"),
+ Param("size_t*", "pDataSize"),
+ Param("void*", "pData")]),
+
+ Proto("VK_RESULT", "CreateBuffer",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_BUFFER_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_BUFFER*", "pBuffer")]),
+
+ Proto("VK_RESULT", "CreateBufferView",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_BUFFER_VIEW_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_BUFFER_VIEW*", "pView")]),
+
+ Proto("VK_RESULT", "CreateImage",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_IMAGE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_IMAGE*", "pImage")]),
+
+ Proto("VK_RESULT", "GetImageSubresourceInfo",
+ [Param("VK_IMAGE", "image"),
+ Param("const VK_IMAGE_SUBRESOURCE*", "pSubresource"),
+ Param("VK_SUBRESOURCE_INFO_TYPE", "infoType"),
+ Param("size_t*", "pDataSize"),
+ Param("void*", "pData")]),
+
+ Proto("VK_RESULT", "CreateImageView",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_IMAGE_VIEW_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_IMAGE_VIEW*", "pView")]),
+
+ Proto("VK_RESULT", "CreateColorAttachmentView",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_COLOR_ATTACHMENT_VIEW_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_COLOR_ATTACHMENT_VIEW*", "pView")]),
+
+ Proto("VK_RESULT", "CreateDepthStencilView",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_DEPTH_STENCIL_VIEW_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DEPTH_STENCIL_VIEW*", "pView")]),
+
+ Proto("VK_RESULT", "CreateShader",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_SHADER_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_SHADER*", "pShader")]),
+
+ Proto("VK_RESULT", "CreateGraphicsPipeline",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_GRAPHICS_PIPELINE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_PIPELINE*", "pPipeline")]),
+
+ Proto("VK_RESULT", "CreateGraphicsPipelineDerivative",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_GRAPHICS_PIPELINE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_PIPELINE", "basePipeline"),
+ Param("VK_PIPELINE*", "pPipeline")]),
+
+ Proto("VK_RESULT", "CreateComputePipeline",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_COMPUTE_PIPELINE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_PIPELINE*", "pPipeline")]),
+
+ Proto("VK_RESULT", "StorePipeline",
+ [Param("VK_PIPELINE", "pipeline"),
+ Param("size_t*", "pDataSize"),
+ Param("void*", "pData")]),
+
+ Proto("VK_RESULT", "LoadPipeline",
+ [Param("VK_DEVICE", "device"),
+ Param("size_t", "dataSize"),
+ Param("const void*", "pData"),
+ Param("VK_PIPELINE*", "pPipeline")]),
+
+ Proto("VK_RESULT", "LoadPipelineDerivative",
+ [Param("VK_DEVICE", "device"),
+ Param("size_t", "dataSize"),
+ Param("const void*", "pData"),
+ Param("VK_PIPELINE", "basePipeline"),
+ Param("VK_PIPELINE*", "pPipeline")]),
+
+ Proto("VK_RESULT", "CreateSampler",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_SAMPLER_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_SAMPLER*", "pSampler")]),
+
+ Proto("VK_RESULT", "CreateDescriptorSetLayout",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_DESCRIPTOR_SET_LAYOUT_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DESCRIPTOR_SET_LAYOUT*", "pSetLayout")]),
+
+ Proto("VK_RESULT", "CreateDescriptorSetLayoutChain",
+ [Param("VK_DEVICE", "device"),
+ Param("uint32_t", "setLayoutArrayCount"),
+ Param("const VK_DESCRIPTOR_SET_LAYOUT*", "pSetLayoutArray"),
+ Param("VK_DESCRIPTOR_SET_LAYOUT_CHAIN*", "pLayoutChain")]),
+
+ Proto("VK_RESULT", "BeginDescriptorPoolUpdate",
+ [Param("VK_DEVICE", "device"),
+ Param("VK_DESCRIPTOR_UPDATE_MODE", "updateMode")]),
+
+ Proto("VK_RESULT", "EndDescriptorPoolUpdate",
+ [Param("VK_DEVICE", "device"),
+ Param("VK_CMD_BUFFER", "cmd")]),
+
+ Proto("VK_RESULT", "CreateDescriptorPool",
+ [Param("VK_DEVICE", "device"),
+ Param("VK_DESCRIPTOR_POOL_USAGE", "poolUsage"),
+ Param("uint32_t", "maxSets"),
+ Param("const VK_DESCRIPTOR_POOL_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DESCRIPTOR_POOL*", "pDescriptorPool")]),
+
+ Proto("VK_RESULT", "ResetDescriptorPool",
+ [Param("VK_DESCRIPTOR_POOL", "descriptorPool")]),
+
+ Proto("VK_RESULT", "AllocDescriptorSets",
+ [Param("VK_DESCRIPTOR_POOL", "descriptorPool"),
+ Param("VK_DESCRIPTOR_SET_USAGE", "setUsage"),
+ Param("uint32_t", "count"),
+ Param("const VK_DESCRIPTOR_SET_LAYOUT*", "pSetLayouts"),
+ Param("VK_DESCRIPTOR_SET*", "pDescriptorSets"),
+ Param("uint32_t*", "pCount")]),
+
+ Proto("void", "ClearDescriptorSets",
+ [Param("VK_DESCRIPTOR_POOL", "descriptorPool"),
+ Param("uint32_t", "count"),
+ Param("const VK_DESCRIPTOR_SET*", "pDescriptorSets")]),
+
+ Proto("void", "UpdateDescriptors",
+ [Param("VK_DESCRIPTOR_SET", "descriptorSet"),
+ Param("uint32_t", "updateCount"),
+ Param("const void**", "ppUpdateArray")]),
+
+ Proto("VK_RESULT", "CreateDynamicViewportState",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_DYNAMIC_VP_STATE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DYNAMIC_VP_STATE_OBJECT*", "pState")]),
+
+ Proto("VK_RESULT", "CreateDynamicRasterState",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_DYNAMIC_RS_STATE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DYNAMIC_RS_STATE_OBJECT*", "pState")]),
+
+ Proto("VK_RESULT", "CreateDynamicColorBlendState",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_DYNAMIC_CB_STATE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DYNAMIC_CB_STATE_OBJECT*", "pState")]),
+
+ Proto("VK_RESULT", "CreateDynamicDepthStencilState",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_DYNAMIC_DS_STATE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_DYNAMIC_DS_STATE_OBJECT*", "pState")]),
+
+ Proto("VK_RESULT", "CreateCommandBuffer",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_CMD_BUFFER_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_CMD_BUFFER*", "pCmdBuffer")]),
+
+ Proto("VK_RESULT", "BeginCommandBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("const VK_CMD_BUFFER_BEGIN_INFO*", "pBeginInfo")]),
+
+ Proto("VK_RESULT", "EndCommandBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer")]),
+
+ Proto("VK_RESULT", "ResetCommandBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer")]),
+
+ Proto("void", "CmdBindPipeline",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_PIPELINE_BIND_POINT", "pipelineBindPoint"),
+ Param("VK_PIPELINE", "pipeline")]),
+
+ Proto("void", "CmdBindDynamicStateObject",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_STATE_BIND_POINT", "stateBindPoint"),
+ Param("VK_DYNAMIC_STATE_OBJECT", "state")]),
+
+ Proto("void", "CmdBindDescriptorSets",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_PIPELINE_BIND_POINT", "pipelineBindPoint"),
+ Param("VK_DESCRIPTOR_SET_LAYOUT_CHAIN", "layoutChain"),
+ Param("uint32_t", "layoutChainSlot"),
+ Param("uint32_t", "count"),
+ Param("const VK_DESCRIPTOR_SET*", "pDescriptorSets"),
+ Param("const uint32_t*", "pUserData")]),
+
+ Proto("void", "CmdBindVertexBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "buffer"),
+ Param("VK_GPU_SIZE", "offset"),
+ Param("uint32_t", "binding")]),
+
+ Proto("void", "CmdBindIndexBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "buffer"),
+ Param("VK_GPU_SIZE", "offset"),
+ Param("VK_INDEX_TYPE", "indexType")]),
+
+ Proto("void", "CmdDraw",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("uint32_t", "firstVertex"),
+ Param("uint32_t", "vertexCount"),
+ Param("uint32_t", "firstInstance"),
+ Param("uint32_t", "instanceCount")]),
+
+ Proto("void", "CmdDrawIndexed",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("uint32_t", "firstIndex"),
+ Param("uint32_t", "indexCount"),
+ Param("int32_t", "vertexOffset"),
+ Param("uint32_t", "firstInstance"),
+ Param("uint32_t", "instanceCount")]),
+
+ Proto("void", "CmdDrawIndirect",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "buffer"),
+ Param("VK_GPU_SIZE", "offset"),
+ Param("uint32_t", "count"),
+ Param("uint32_t", "stride")]),
+
+ Proto("void", "CmdDrawIndexedIndirect",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "buffer"),
+ Param("VK_GPU_SIZE", "offset"),
+ Param("uint32_t", "count"),
+ Param("uint32_t", "stride")]),
+
+ Proto("void", "CmdDispatch",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("uint32_t", "x"),
+ Param("uint32_t", "y"),
+ Param("uint32_t", "z")]),
+
+ Proto("void", "CmdDispatchIndirect",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "buffer"),
+ Param("VK_GPU_SIZE", "offset")]),
+
+ Proto("void", "CmdCopyBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "srcBuffer"),
+ Param("VK_BUFFER", "destBuffer"),
+ Param("uint32_t", "regionCount"),
+ Param("const VK_BUFFER_COPY*", "pRegions")]),
+
+ Proto("void", "CmdCopyImage",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_IMAGE", "srcImage"),
+ Param("VK_IMAGE_LAYOUT", "srcImageLayout"),
+ Param("VK_IMAGE", "destImage"),
+ Param("VK_IMAGE_LAYOUT", "destImageLayout"),
+ Param("uint32_t", "regionCount"),
+ Param("const VK_IMAGE_COPY*", "pRegions")]),
+
+ Proto("void", "CmdBlitImage",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_IMAGE", "srcImage"),
+ Param("VK_IMAGE_LAYOUT", "srcImageLayout"),
+ Param("VK_IMAGE", "destImage"),
+ Param("VK_IMAGE_LAYOUT", "destImageLayout"),
+ Param("uint32_t", "regionCount"),
+ Param("const VK_IMAGE_BLIT*", "pRegions")]),
+
+ Proto("void", "CmdCopyBufferToImage",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "srcBuffer"),
+ Param("VK_IMAGE", "destImage"),
+ Param("VK_IMAGE_LAYOUT", "destImageLayout"),
+ Param("uint32_t", "regionCount"),
+ Param("const VK_BUFFER_IMAGE_COPY*", "pRegions")]),
+
+ Proto("void", "CmdCopyImageToBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_IMAGE", "srcImage"),
+ Param("VK_IMAGE_LAYOUT", "srcImageLayout"),
+ Param("VK_BUFFER", "destBuffer"),
+ Param("uint32_t", "regionCount"),
+ Param("const VK_BUFFER_IMAGE_COPY*", "pRegions")]),
+
+ Proto("void", "CmdCloneImageData",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_IMAGE", "srcImage"),
+ Param("VK_IMAGE_LAYOUT", "srcImageLayout"),
+ Param("VK_IMAGE", "destImage"),
+ Param("VK_IMAGE_LAYOUT", "destImageLayout")]),
+
+ Proto("void", "CmdUpdateBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "destBuffer"),
+ Param("VK_GPU_SIZE", "destOffset"),
+ Param("VK_GPU_SIZE", "dataSize"),
+ Param("const uint32_t*", "pData")]),
+
+ Proto("void", "CmdFillBuffer",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_BUFFER", "destBuffer"),
+ Param("VK_GPU_SIZE", "destOffset"),
+ Param("VK_GPU_SIZE", "fillSize"),
+ Param("uint32_t", "data")]),
+
+ Proto("void", "CmdClearColorImage",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_IMAGE", "image"),
+ Param("VK_IMAGE_LAYOUT", "imageLayout"),
+ Param("VK_CLEAR_COLOR", "color"),
+ Param("uint32_t", "rangeCount"),
+ Param("const VK_IMAGE_SUBRESOURCE_RANGE*", "pRanges")]),
+
+ Proto("void", "CmdClearDepthStencil",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_IMAGE", "image"),
+ Param("VK_IMAGE_LAYOUT", "imageLayout"),
+ Param("float", "depth"),
+ Param("uint32_t", "stencil"),
+ Param("uint32_t", "rangeCount"),
+ Param("const VK_IMAGE_SUBRESOURCE_RANGE*", "pRanges")]),
+
+ Proto("void", "CmdResolveImage",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_IMAGE", "srcImage"),
+ Param("VK_IMAGE_LAYOUT", "srcImageLayout"),
+ Param("VK_IMAGE", "destImage"),
+ Param("VK_IMAGE_LAYOUT", "destImageLayout"),
+ Param("uint32_t", "rectCount"),
+ Param("const VK_IMAGE_RESOLVE*", "pRects")]),
+
+ Proto("void", "CmdSetEvent",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_EVENT", "event"),
+ Param("VK_PIPE_EVENT", "pipeEvent")]),
+
+ Proto("void", "CmdResetEvent",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_EVENT", "event"),
+ Param("VK_PIPE_EVENT", "pipeEvent")]),
+
+ Proto("void", "CmdWaitEvents",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("const VK_EVENT_WAIT_INFO*", "pWaitInfo")]),
+
+ Proto("void", "CmdPipelineBarrier",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("const VK_PIPELINE_BARRIER*", "pBarrier")]),
+
+ Proto("void", "CmdBeginQuery",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_QUERY_POOL", "queryPool"),
+ Param("uint32_t", "slot"),
+ Param("VK_FLAGS", "flags")]),
+
+ Proto("void", "CmdEndQuery",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_QUERY_POOL", "queryPool"),
+ Param("uint32_t", "slot")]),
+
+ Proto("void", "CmdResetQueryPool",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_QUERY_POOL", "queryPool"),
+ Param("uint32_t", "startQuery"),
+ Param("uint32_t", "queryCount")]),
+
+ Proto("void", "CmdWriteTimestamp",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_TIMESTAMP_TYPE", "timestampType"),
+ Param("VK_BUFFER", "destBuffer"),
+ Param("VK_GPU_SIZE", "destOffset")]),
+
+ Proto("void", "CmdInitAtomicCounters",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_PIPELINE_BIND_POINT", "pipelineBindPoint"),
+ Param("uint32_t", "startCounter"),
+ Param("uint32_t", "counterCount"),
+ Param("const uint32_t*", "pData")]),
+
+ Proto("void", "CmdLoadAtomicCounters",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_PIPELINE_BIND_POINT", "pipelineBindPoint"),
+ Param("uint32_t", "startCounter"),
+ Param("uint32_t", "counterCount"),
+ Param("VK_BUFFER", "srcBuffer"),
+ Param("VK_GPU_SIZE", "srcOffset")]),
+
+ Proto("void", "CmdSaveAtomicCounters",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_PIPELINE_BIND_POINT", "pipelineBindPoint"),
+ Param("uint32_t", "startCounter"),
+ Param("uint32_t", "counterCount"),
+ Param("VK_BUFFER", "destBuffer"),
+ Param("VK_GPU_SIZE", "destOffset")]),
+
+ Proto("VK_RESULT", "CreateFramebuffer",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_FRAMEBUFFER_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_FRAMEBUFFER*", "pFramebuffer")]),
+
+ Proto("VK_RESULT", "CreateRenderPass",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_RENDER_PASS_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_RENDER_PASS*", "pRenderPass")]),
+
+ Proto("void", "CmdBeginRenderPass",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("const VK_RENDER_PASS_BEGIN*", "pRenderPassBegin")]),
+
+ Proto("void", "CmdEndRenderPass",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("VK_RENDER_PASS", "renderPass")]),
+
+ Proto("VK_RESULT", "DbgSetValidationLevel",
+ [Param("VK_DEVICE", "device"),
+ Param("VK_VALIDATION_LEVEL", "validationLevel")]),
+
+ Proto("VK_RESULT", "DbgRegisterMsgCallback",
+ [Param("VK_INSTANCE", "instance"),
+ Param("VK_DBG_MSG_CALLBACK_FUNCTION", "pfnMsgCallback"),
+ Param("void*", "pUserData")]),
+
+ Proto("VK_RESULT", "DbgUnregisterMsgCallback",
+ [Param("VK_INSTANCE", "instance"),
+ Param("VK_DBG_MSG_CALLBACK_FUNCTION", "pfnMsgCallback")]),
+
+ Proto("VK_RESULT", "DbgSetMessageFilter",
+ [Param("VK_DEVICE", "device"),
+ Param("int32_t", "msgCode"),
+ Param("VK_DBG_MSG_FILTER", "filter")]),
+
+ Proto("VK_RESULT", "DbgSetObjectTag",
+ [Param("VK_BASE_OBJECT", "object"),
+ Param("size_t", "tagSize"),
+ Param("const void*", "pTag")]),
+
+ Proto("VK_RESULT", "DbgSetGlobalOption",
+ [Param("VK_INSTANCE", "instance"),
+ Param("VK_DBG_GLOBAL_OPTION", "dbgOption"),
+ Param("size_t", "dataSize"),
+ Param("const void*", "pData")]),
+
+ Proto("VK_RESULT", "DbgSetDeviceOption",
+ [Param("VK_DEVICE", "device"),
+ Param("VK_DBG_DEVICE_OPTION", "dbgOption"),
+ Param("size_t", "dataSize"),
+ Param("const void*", "pData")]),
+
+ Proto("void", "CmdDbgMarkerBegin",
+ [Param("VK_CMD_BUFFER", "cmdBuffer"),
+ Param("const char*", "pMarker")]),
+
+ Proto("void", "CmdDbgMarkerEnd",
+ [Param("VK_CMD_BUFFER", "cmdBuffer")]),
+ ],
+)
+
+wsi_x11 = Extension(
+ name="VK_WSI_X11",
+ headers=["vkWsiX11Ext.h"],
+ objects=[],
+ protos=[
+ Proto("VK_RESULT", "WsiX11AssociateConnection",
+ [Param("VK_PHYSICAL_GPU", "gpu"),
+ Param("const VK_WSI_X11_CONNECTION_INFO*", "pConnectionInfo")]),
+
+ Proto("VK_RESULT", "WsiX11GetMSC",
+ [Param("VK_DEVICE", "device"),
+ Param("xcb_window_t", "window"),
+ Param("xcb_randr_crtc_t", "crtc"),
+ Param("uint64_t*", "pMsc")]),
+
+ Proto("VK_RESULT", "WsiX11CreatePresentableImage",
+ [Param("VK_DEVICE", "device"),
+ Param("const VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO*", "pCreateInfo"),
+ Param("VK_IMAGE*", "pImage"),
+ Param("VK_GPU_MEMORY*", "pMem")]),
+
+ Proto("VK_RESULT", "WsiX11QueuePresent",
+ [Param("VK_QUEUE", "queue"),
+ Param("const VK_WSI_X11_PRESENT_INFO*", "pPresentInfo"),
+ Param("VK_FENCE", "fence")]),
+ ],
+)
+
+extensions = [core, wsi_x11]
+
+object_root_list = [
+ "VK_INSTANCE",
+ "VK_PHYSICAL_GPU",
+ "VK_BASE_OBJECT"
+]
+
+object_base_list = [
+ "VK_DEVICE",
+ "VK_QUEUE",
+ "VK_GPU_MEMORY",
+ "VK_OBJECT"
+]
+
+object_list = [
+ "VK_BUFFER",
+ "VK_BUFFER_VIEW",
+ "VK_IMAGE",
+ "VK_IMAGE_VIEW",
+ "VK_COLOR_ATTACHMENT_VIEW",
+ "VK_DEPTH_STENCIL_VIEW",
+ "VK_SHADER",
+ "VK_PIPELINE",
+ "VK_SAMPLER",
+ "VK_DESCRIPTOR_SET",
+ "VK_DESCRIPTOR_SET_LAYOUT",
+ "VK_DESCRIPTOR_SET_LAYOUT_CHAIN",
+ "VK_DESCRIPTOR_POOL",
+ "VK_DYNAMIC_STATE_OBJECT",
+ "VK_CMD_BUFFER",
+ "VK_FENCE",
+ "VK_SEMAPHORE",
+ "VK_EVENT",
+ "VK_QUERY_POOL",
+ "VK_FRAMEBUFFER",
+ "VK_RENDER_PASS"
+]
+
+object_dynamic_state_list = [
+ "VK_DYNAMIC_VP_STATE_OBJECT",
+ "VK_DYNAMIC_RS_STATE_OBJECT",
+ "VK_DYNAMIC_CB_STATE_OBJECT",
+ "VK_DYNAMIC_DS_STATE_OBJECT"
+]
+
+object_type_list = object_root_list + object_base_list + object_list + object_dynamic_state_list
+
+object_parent_list = ["VK_BASE_OBJECT", "VK_OBJECT", "VK_DYNAMIC_STATE_OBJECT"]
+
+headers = []
+objects = []
+protos = []
+for ext in extensions:
+ headers.extend(ext.headers)
+ objects.extend(ext.objects)
+ protos.extend(ext.protos)
+
+proto_names = [proto.name for proto in protos]
+
+def parse_vk_h(filename):
+ # read object and protoype typedefs
+ object_lines = []
+ proto_lines = []
+ with open(filename, "r") as fp:
+ for line in fp:
+ line = line.strip()
+ if line.startswith("VK_DEFINE"):
+ begin = line.find("(") + 1
+ end = line.find(",")
+ # extract the object type
+ object_lines.append(line[begin:end])
+ if line.startswith("typedef") and line.endswith(");"):
+ # drop leading "typedef " and trailing ");"
+ proto_lines.append(line[8:-2])
+
+ # parse proto_lines to protos
+ protos = []
+ for line in proto_lines:
+ first, rest = line.split(" (VKAPI *vk")
+ second, third = rest.split("Type)(")
+
+ # get the return type, no space before "*"
+ proto_ret = "*".join([t.rstrip() for t in first.split("*")])
+
+ # get the name
+ proto_name = second.strip()
+
+ # get the list of params
+ param_strs = third.split(", ")
+ params = []
+ for s in param_strs:
+ ty, name = s.rsplit(" ", 1)
+
+ # no space before "*"
+ ty = "*".join([t.rstrip() for t in ty.split("*")])
+ # attach [] to ty
+ idx = name.rfind("[")
+ if idx >= 0:
+ ty += name[idx:]
+ name = name[:idx]
+
+ params.append(Param(ty, name))
+
+ protos.append(Proto(proto_ret, proto_name, params))
+
+ # make them an extension and print
+ ext = Extension("VK_CORE",
+ headers=["vulkan.h", "vkDbg.h"],
+ objects=object_lines,
+ protos=protos)
+ print("core =", str(ext))
+
+ print("")
+ print("typedef struct _VK_LAYER_DISPATCH_TABLE")
+ print("{")
+ for proto in ext.protos:
+ print(" vk%sType %s;" % (proto.name, proto.name))
+ print("} VK_LAYER_DISPATCH_TABLE;")
+
+if __name__ == "__main__":
+ parse_vk_h("include/vulkan.h")