Snap for 8952093 from 7b025b07724c0eb736ffe57de4da310d0dfd921d to sdk-release
Change-Id: I1142ab205e674e91a1b5a52cb312d38ab20f4a89
diff --git a/registry/vulkan/scripts/cereal/__init__.py b/registry/vulkan/scripts/cereal/__init__.py
index 861cee3..e4710d2 100644
--- a/registry/vulkan/scripts/cereal/__init__.py
+++ b/registry/vulkan/scripts/cereal/__init__.py
@@ -15,3 +15,4 @@
from .unbox import *
from .decodersnapshot import *
from .subdecode import *
+from .api_log_decoder import *
\ No newline at end of file
diff --git a/registry/vulkan/scripts/cereal/api_log_decoder.py b/registry/vulkan/scripts/cereal/api_log_decoder.py
new file mode 100644
index 0000000..0e6aa64
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/api_log_decoder.py
@@ -0,0 +1,340 @@
+import os
+from typing import List, Set, Dict, Optional
+
+from . import VulkanType, VulkanCompoundType
+from .wrapperdefs import VulkanWrapperGenerator
+
+
+class ApiLogDecoder(VulkanWrapperGenerator):
+ """
+ This class generates decoding logic for the graphics API logs captured by
+ [GfxApiLogger](http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/base/GfxApiLogger.h)
+
+ This allows developers to see a pretty-printed version of the API log data when using
+ print_gfx_logs.py
+ """
+
+ # List of Vulkan APIs that we will generate decoding logic for
+ generated_apis = [
+ "vkAcquireImageANDROID",
+ "vkAllocateMemory",
+ "vkBeginCommandBufferAsyncGOOGLE",
+ "vkBindBufferMemory",
+ "vkBindImageMemory",
+ "vkCmdBeginRenderPass",
+ "vkCmdBindDescriptorSets",
+ "vkCmdBindIndexBuffer",
+ "vkCmdBindPipeline",
+ "vkCmdBindVertexBuffers",
+ "vkCmdClearAttachments",
+ "vkCmdClearColorImage",
+ "vkCmdCopyBufferToImage",
+ "vkCmdCopyImageToBuffer",
+ "vkCmdDraw",
+ "vkCmdDrawIndexed",
+ "vkCmdEndRenderPass",
+ "vkCmdPipelineBarrier",
+ "vkCmdSetScissor",
+ "vkCmdSetViewport",
+ "vkCollectDescriptorPoolIdsGOOGLE",
+ "vkCreateBufferWithRequirementsGOOGLE",
+ "vkCreateDescriptorPool",
+ "vkCreateDescriptorSetLayout",
+ "vkCreateFence",
+ "vkCreateFramebuffer",
+ "vkCreateGraphicsPipelines",
+ "vkCreateImageView",
+ "vkCreateImageWithRequirementsGOOGLE",
+ "vkCreatePipelineCache",
+ "vkCreateRenderPass",
+ "vkCreateSampler",
+ "vkCreateSemaphore",
+ "vkCreateShaderModule",
+ "vkDestroyBuffer",
+ "vkDestroyCommandPool",
+ "vkDestroyDescriptorPool",
+ "vkDestroyDescriptorSetLayout",
+ "vkDestroyDevice",
+ "vkDestroyFence",
+ "vkDestroyFramebuffer",
+ "vkDestroyImage",
+ "vkDestroyImageView",
+ "vkDestroyInstance",
+ "vkDestroyPipeline",
+ "vkDestroyPipelineCache",
+ "vkDestroyPipelineLayout",
+ "vkDestroyRenderPass",
+ "vkDestroySemaphore",
+ "vkDestroyShaderModule",
+ "vkEndCommandBufferAsyncGOOGLE",
+ "vkFreeCommandBuffers",
+ "vkFreeMemory",
+ "vkFreeMemorySyncGOOGLE",
+ "vkGetFenceStatus",
+ "vkGetMemoryHostAddressInfoGOOGLE",
+ "vkGetPhysicalDeviceFormatProperties",
+ "vkGetPhysicalDeviceProperties2KHR",
+ "vkGetPipelineCacheData",
+ "vkGetSwapchainGrallocUsageANDROID",
+ "vkQueueCommitDescriptorSetUpdatesGOOGLE",
+ "vkQueueFlushCommandsGOOGLE",
+ "vkQueueSignalReleaseImageANDROIDAsyncGOOGLE",
+ "vkQueueSubmitAsyncGOOGLE",
+ "vkQueueWaitIdle",
+ "vkResetFences",
+ "vkWaitForFences",
+ ]
+
+ def __init__(self, module, typeInfo):
+ VulkanWrapperGenerator.__init__(self, module, typeInfo)
+ self.typeInfo = typeInfo
+
+ # Output file
+ self.out = open(
+ os.path.join(self.repo_root(), "scripts", "print_gfx_logs", "vulkan_printer.py"), "w")
+
+ # Set of Vulkan structs that we need to write decoding logic for
+ self.structs: Set[str] = set()
+
+ # Maps enum group names to the list of enums in the group, for all enum groups in the spec
+ # E.g.: "VkResult": ["VK_SUCCESS", "VK_NOT_READY", "VK_TIMEOUT", etc...]
+ self.all_enums: Dict[str, List[str]] = {}
+
+ # Set of Vulkan enums that we need to write decoding logic for
+ self.needed_enums: Set[str] = {"VkStructureType"}
+
+ def repo_root(self):
+ """Returns the path to the root of gfxstream's git repo"""
+ return os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..'))
+
+ def onBegin(self):
+ self.out.write("""
+#####################################################################################################
+# Pretty-printer functions for Vulkan data structures
+# THIS FILE IS AUTO-GENERATED - DO NOT EDIT
+#
+# To re-generate this file, run generate-vulkan-sources.sh
+#####################################################################################################
+
+""".lstrip())
+
+ def onGenGroup(self, groupinfo, groupName, alias=None):
+ """Called for each enum group in the spec"""
+ for enum in groupinfo.elem.findall("enum"):
+ self.all_enums[groupName] = self.all_enums.get(groupName, []) + [enum.get('name')]
+
+ def onEnd(self):
+ for api_name in sorted(self.generated_apis):
+ self.process_api(api_name)
+ self.process_structs()
+ self.process_enums()
+
+ def process_api(self, api_name):
+ """Main entry point to generate decoding logic for each Vulkan API"""
+ api = self.typeInfo.apis[api_name]
+ self.out.write('def OP_{}(printer, indent: int):\n'.format(api_name))
+
+ # Decode the sequence number. All commands have sequence numbers, except those handled
+ # by VkSubdecoder.cpp. The logic here is a bit of a hack since it's based on the command
+ # name. Ideally, we would detect whether a particular command is part of a subdecode block
+ # in the decoding script.
+ if not api_name.startswith("vkCmd") and api_name != "vkBeginCommandBufferAsyncGOOGLE":
+ self.out.write(' printer.write_int("seqno: ", 4, indent)\n')
+
+ for param in api.parameters:
+ # Add any structs that this API uses to the list of structs to write decoding logic for
+ if self.typeInfo.isCompoundType(param.typeName):
+ self.structs.add(param.typeName)
+
+ # Don't try to print the pData field of vkQueueFlushCommandsGOOGLE, those are the
+ # commands processed as part of the subdecode pass
+ if api.name == "vkQueueFlushCommandsGOOGLE" and param.paramName == "pData":
+ continue
+
+ # Write out decoding logic for that parameter
+ self.process_type(param)
+
+ # Finally, add a return statement. This is needed in case the API has no parameters.
+ self.out.write(' return\n\n')
+
+ def process_structs(self):
+ """Writes decoding logic for all the structs that we use"""
+
+ # self.structs now contains all the structs used directly by the Vulkan APIs we use.
+ # Recursively expand this set to add all the structs used by these structs.
+ copy = self.structs.copy()
+ self.structs.clear()
+ for struct_name in copy:
+ self.expand_needed_structs(struct_name)
+
+ # Now we have the full list of structs that we need to write decoding logic for.
+ # Write a decoder for each of them
+ for struct_name in sorted(self.structs):
+ struct = self.typeInfo.structs[struct_name]
+ self.out.write('def struct_{}(printer, indent: int):\n'.format(struct_name))
+ for member in self.get_members(struct):
+ self.process_type(member)
+ self.out.write('\n')
+
+ def expand_needed_structs(self, struct_name: str):
+ """
+ Recursively adds all the structs used by a given struct to the list of structs to process
+ """
+ if struct_name in self.structs:
+ return
+ self.structs.add(struct_name)
+ struct = self.typeInfo.structs[struct_name]
+ for member in self.get_members(struct):
+ if self.typeInfo.isCompoundType(member.typeName):
+ self.expand_needed_structs(member.typeName)
+
+ def get_members(self, struct: VulkanCompoundType):
+ """
+ Returns the members of a struct/union that we need to process.
+ For structs, returns the list of all members
+ For unions, returns a list with just the first member.
+ """
+ return struct.members[0:1] if struct.isUnion else struct.members
+
+ def process_type(self, type: VulkanType):
+ """
+ Writes decoding logic for a single Vulkan type. This could be the parameter in a Vulkan API,
+ or a struct member.
+ """
+ if type.typeName == "VkStructureType":
+ self.out.write(' printer.write_stype_and_pnext("{}", indent)\n'
+ .format(type.parent.structEnumExpr))
+ return
+
+ if type.isNextPointer():
+ return
+
+ if type.paramName == "commandBuffer":
+ if type.parent.name != "vkQueueFlushCommandsGOOGLE":
+ return
+
+ # Enums
+ if type.isEnum(self.typeInfo):
+ self.needed_enums.add(type.typeName)
+ self.out.write(' printer.write_enum("{}", {}, indent)\n'.format(
+ type.paramName, type.typeName))
+ return
+
+ # Bitmasks
+ if type.isBitmask(self.typeInfo):
+ enum_type = self.typeInfo.bitmasks.get(type.typeName)
+ if enum_type:
+ self.needed_enums.add(enum_type)
+ self.out.write(' printer.write_flags("{}", {}, indent)\n'.format(
+ type.paramName, enum_type))
+ return
+ # else, fall through and let the primitive type logic handle it
+
+ # Structs or unions
+ if self.typeInfo.isCompoundType(type.typeName):
+ self.out.write(
+ ' printer.write_struct("{name}", struct_{type}, {optional}, {count}, indent)\n'
+ .format(name=type.paramName,
+ type=type.typeName,
+ optional=type.isOptionalPointer(),
+ count=self.get_length_expression(type)))
+ return
+
+ # Null-terminated strings
+ if type.isString():
+ self.out.write(' printer.write_string("{}", None, indent)\n'.format(type.paramName))
+ return
+
+ # Arrays of primitive types
+ if type.staticArrExpr and type.primitiveEncodingSize and type.primitiveEncodingSize <= 8:
+ # Array sizes are specified either as a number, or as an enum value
+ array_size = int(type.staticArrExpr) if type.staticArrExpr.isdigit() \
+ else self.typeInfo.enumValues.get(type.staticArrExpr)
+ assert array_size is not None, type.staticArrExpr
+
+ if type.typeName == "char":
+ self.out.write(' printer.write_string("{}", {}, indent)\n'
+ .format(type.paramName, array_size))
+ elif type.typeName == "float":
+ self.out.write(
+ ' printer.write_float("{}", indent, count={})\n'
+ .format(type.paramName, array_size))
+ else:
+ self.out.write(
+ ' printer.write_int("{name}", {int_size}, indent, signed={signed}, count={array_size})\n'
+ .format(name=type.paramName,
+ array_size=array_size,
+ int_size=type.primitiveEncodingSize,
+ signed=type.isSigned()))
+ return
+
+ # Pointers
+ if type.pointerIndirectionLevels > 0:
+ # Assume that all uint32* are always serialized directly rather than passed by pointers.
+ # This is probably not always true (e.g. out params) - fix this as needed.
+ size = 4 if type.primitiveEncodingSize == 4 else 8
+ self.out.write(
+ ' {name} = printer.write_int("{name}", {size}, indent, optional={opt}, count={count}, big_endian={big_endian})\n'
+ .format(name=type.paramName,
+ size=size,
+ opt=type.isOptionalPointer(),
+ count=self.get_length_expression(type),
+ big_endian=self.using_big_endian(type)))
+ return
+
+ # Primitive types (ints, floats)
+ if type.isSimpleValueType(self.typeInfo) and type.primitiveEncodingSize:
+ if type.typeName == "float":
+ self.out.write(
+ ' printer.write_float("{name}", indent)\n'.format(name=type.paramName))
+ else:
+ self.out.write(
+ ' {name} = printer.write_int("{name}", {size}, indent, signed={signed}, big_endian={big_endian})\n'.format(
+ name=type.paramName,
+ size=type.primitiveEncodingSize,
+ signed=type.isSigned(),
+ big_endian=self.using_big_endian(type))
+ )
+ return
+
+ raise NotImplementedError(
+ "No decoding logic for {} {}".format(type.typeName, type.paramName))
+
+ def using_big_endian(self, type: VulkanType):
+ """For some reason gfxstream serializes some types as big endian"""
+ return type.typeName == "size_t"
+
+ def get_length_expression(self, type: VulkanType) -> Optional[str]:
+ """Returns the length expression for a given type"""
+ if type.lenExpr is None:
+ return None
+
+ if type.lenExpr.isalpha():
+ return type.lenExpr
+
+ # There are a couple of instances in the spec where we use a math expression to express the
+ # length (e.g. VkPipelineMultisampleStateCreateInfo). CodeGen().generalLengthAccess() has
+ # logic o parse these expressions correctly, but for now,we just use a simple lookup table.
+ known_expressions = {
+ r"latexmath:[\lceil{\mathit{rasterizationSamples} \over 32}\rceil]":
+ "int(rasterizationSamples / 32)",
+ r"latexmath:[\textrm{codeSize} \over 4]": "int(codeSize / 4)",
+ r"null-terminated": None
+ }
+ if type.lenExpr in known_expressions:
+ return known_expressions[type.lenExpr]
+
+ raise NotImplementedError("Unknown length expression: " + type.lenExpr)
+
+ def process_enums(self):
+ """
+ For each Vulkan enum that we use, write out a python dictionary mapping the enum values back
+ to the enum name as a string
+ """
+ for enum_name in sorted(self.needed_enums):
+ self.out.write('{} = {{\n'.format(enum_name))
+ for identifier in self.all_enums[enum_name]:
+ value = self.typeInfo.enumValues.get(identifier)
+ if value is not None and isinstance(value, int):
+ self.out.write(' {}: "{}",\n'.format(value, identifier))
+ self.out.write('}\n\n')
diff --git a/registry/vulkan/scripts/cereal/common/codegen.py b/registry/vulkan/scripts/cereal/common/codegen.py
index b3d8d61..bb39231 100644
--- a/registry/vulkan/scripts/cereal/common/codegen.py
+++ b/registry/vulkan/scripts/cereal/common/codegen.py
@@ -16,6 +16,7 @@
from .vulkantypes import VulkanType, VulkanTypeInfo, VulkanCompoundType, VulkanAPI
from collections import OrderedDict
from copy import copy
+from pathlib import Path, PurePosixPath
import os
import sys
@@ -53,10 +54,10 @@
def getCMakeSrcEntry(self):
if self.customAbsDir:
return "\n" + self.basename + ".cpp "
- dirName = self.directory
- baseName = self.basename
- joined = os.path.join(dirName, baseName)
- return "\n " + joined + ".cpp "
+ dirName = Path(self.directory)
+ baseName = Path(self.basename)
+ joined = PurePosixPath(dirName / baseName)
+ return "\n " + str(joined) + ".cpp "
def begin(self, globalDir):
if self.suppress:
@@ -577,7 +578,7 @@
def generalLengthAccessGuard(self, vulkanType, parentVarName="parent"):
return self.makeLengthAccess(vulkanType, parentVarName)[1]
- def vkApiCall(self, api, customPrefix="", customParameters=None, retVarDecl=True, retVarAssign=True):
+ def vkApiCall(self, api, customPrefix="", globalStatePrefix="", customParameters=None, checkForDeviceLost=False):
callLhs = None
retTypeName = api.getRetTypeExpr()
@@ -585,10 +586,8 @@
if retTypeName != "void":
retVar = api.getRetVarExpr()
- if retVarDecl:
- self.stmt("%s %s = (%s)0" % (retTypeName, retVar, retTypeName))
- if retVarAssign:
- callLhs = retVar
+ self.stmt("%s %s = (%s)0" % (retTypeName, retVar, retTypeName))
+ callLhs = retVar
if customParameters is None:
self.funcCall(
@@ -597,6 +596,9 @@
self.funcCall(
callLhs, customPrefix + api.name, customParameters)
+ if retTypeName == "VkResult" and checkForDeviceLost:
+ self.stmt("if ((%s) == VK_ERROR_DEVICE_LOST) %sDeviceLost()" % (callLhs, globalStatePrefix))
+
return (retTypeName, retVar)
def makeCheckVkSuccess(self, expr):
@@ -844,9 +846,9 @@
# VulkanAPIWrapper objects to make it easier to generate the code.
class VulkanWrapperGenerator(object):
- def __init__(self, module, typeInfo):
- self.module = module
- self.typeInfo = typeInfo
+ def __init__(self, module: Module, typeInfo: VulkanTypeInfo):
+ self.module: Module = module
+ self.typeInfo: VulkanTypeInfo = typeInfo
self.extensionStructTypes = OrderedDict()
def onBegin(self):
diff --git a/registry/vulkan/scripts/cereal/common/vulkantypes.py b/registry/vulkan/scripts/cereal/common/vulkantypes.py
index ee2a4e0..f91dddb 100644
--- a/registry/vulkan/scripts/cereal/common/vulkantypes.py
+++ b/registry/vulkan/scripts/cereal/common/vulkantypes.py
@@ -12,6 +12,8 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+from typing import Dict, Optional, List, Set, Union
+from xml.etree.ElementTree import Element
from generator import noneStr
@@ -87,6 +89,7 @@
"VkDeviceMemory",
"VkDescriptorSet",
"VkCommandBuffer",
+ "VkRenderPass",
]
HANDLE_TYPES = list(sorted(list(set(DISPATCHABLE_HANDLE_TYPES +
@@ -124,6 +127,12 @@
HANDLE_INFO[h] = \
HandleInfo("VkCommandBuffer", "vkAllocateCommandBuffers",
"vkFreeCommandBuffers")
+ if h == "VkRenderPass":
+ HANDLE_INFO[h] = \
+ HandleInfo(
+ "VkRenderPass",
+ ["vkCreateRenderPass", "vkCreateRenderPass2", "vkCreateRenderPass2KHR"],
+ "vkDestroyRenderPass")
else:
HANDLE_INFO[h] = \
HandleInfo(h, "vkCreate" + h[2:], "vkDestroy" + h[2:])
@@ -184,16 +193,16 @@
class VulkanType(object):
def __init__(self):
- self.parent = None
- self.typeName = ""
+ self.parent: Optional[VulkanType] = None
+ self.typeName: str = ""
self.isTransformed = False
- self.paramName = None
+ self.paramName: Optional[str] = None
- self.lenExpr = None
- self.isOptional = False
- self.optionalStr = None
+ self.lenExpr: Optional[str] = None # Value of the `len` attribute in the spec
+ self.isOptional: bool = False
+ self.optionalStr: Optional[str] = None # Value of the `optional` attribute in the spec
self.isConst = False
@@ -240,27 +249,34 @@
# All other annotations
self.attribs = {}
+ self.nonDispatchableHandleCreate = False
+ self.nonDispatchableHandleDestroy = False
+ self.dispatchHandle = False
+ self.dispatchableHandleCreate = False
+ self.dispatchableHandleDestroy = False
+
+
def __str__(self,):
return ("(vulkantype %s %s paramName %s len %s optional? %s "
- "staticArrExpr %s %s)") % (
+ "staticArrExpr %s)") % (
self.typeName + ("*" * self.pointerIndirectionLevels) +
("ptr2constptr" if self.isPointerToConstPointer else ""), "const"
if self.isConst else "nonconst", self.paramName, self.lenExpr,
- self.isOptional, self.staticArrExpr, self.staticArrCount)
+ self.isOptional, self.staticArrExpr)
- def isString(self,):
+ def isString(self):
return self.pointerIndirectionLevels == 1 and (self.typeName == "char")
- def isArrayOfStrings(self,):
+ def isArrayOfStrings(self):
return self.isPointerToConstPointer and (self.typeName == "char")
- def primEncodingSize(self,):
+ def primEncodingSize(self):
return self.primitiveEncodingSize
# Utility functions to make codegen life easier.
# This method derives the correct "count" expression if possible.
# Otherwise, returns None or "null-terminated" if a string.
- def getLengthExpression(self,):
+ def getLengthExpression(self):
if self.staticArrExpr != "":
return self.staticArrExpr
if self.lenExpr:
@@ -268,7 +284,7 @@
return None
# Can we just pass this to functions expecting T*
- def accessibleAsPointer(self,):
+ def accessibleAsPointer(self):
if self.staticArrExpr != "":
return True
if self.pointerIndirectionLevels > 0:
@@ -322,9 +338,16 @@
return res
def isNextPointer(self):
- if self.paramName == "pNext":
- return True
- return False
+ return self.paramName == "pNext"
+
+ def isSigned(self):
+ return self.typeName in ["int", "int8_t", "int16_t", "int32_t", "int64_t"]
+
+ def isEnum(self, typeInfo):
+ return typeInfo.categoryOf(self.typeName) == "enum"
+
+ def isBitmask(self, typeInfo):
+ return typeInfo.categoryOf(self.typeName) == "enum"
# Only deals with 'core' handle types here.
def isDispatchableHandleType(self):
@@ -401,6 +424,11 @@
return '%d'
return None
+ def isOptionalPointer(self) -> bool:
+ return self.isOptional and \
+ self.pointerIndirectionLevels > 0 and \
+ (not self.isNextPointer())
+
# Is an S-expression w/ the following spec:
# From https://gist.github.com/pib/240957
@@ -507,7 +535,8 @@
print("parseLetBodyExpr: parsed %s" % res)
return res
-def makeVulkanTypeFromXMLTag(typeInfo, tag):
+
+def makeVulkanTypeFromXMLTag(typeInfo, tag: Element) -> VulkanType:
res = VulkanType()
# Process the length expression
@@ -542,7 +571,6 @@
res.isConst = True
# Calculate type and pointer info
-
for elem in tag:
if elem.tag == "name":
res.paramName = elem.text
@@ -585,8 +613,7 @@
if res.paramName == "pNext":
res.isOptional = True
- res.primitiveEncodingSize = \
- typeInfo.getPrimitiveEncodingSize(res.typeName)
+ res.primitiveEncodingSize = typeInfo.getPrimitiveEncodingSize(res.typeName)
# Annotations: Environment binds
if tag.attrib.get("binds") is not None:
@@ -598,9 +625,8 @@
for k in DEVICE_MEMORY_INFO_KEYS:
if tag.attrib.get(k) is not None:
res.deviceMemoryAttrib = k
- res.deviceMemoryVal = \
- tag.attrib.get(k)
- break;
+ res.deviceMemoryVal = tag.attrib.get(k)
+ break
# Annotations: Filters
if tag.attrib.get("filterVar") is not None:
@@ -663,9 +689,7 @@
if a in DEVICE_MEMORY_INFO_KEYS:
use = True
- deviceMemoryInfoById[
- p.deviceMemoryVal] = \
- DeviceMemoryInfoParameterIndices(
+ deviceMemoryInfoById[p.deviceMemoryVal] = DeviceMemoryInfoParameterIndices(
None, None, None, None, None)
for (i, p) in enumerate(parameters):
@@ -673,8 +697,7 @@
if not a:
continue
- info = \
- deviceMemoryInfoById[p.deviceMemoryVal]
+ info = deviceMemoryInfoById[p.deviceMemoryVal]
if a == "devicememoryhandle":
info.handle = i
@@ -695,24 +718,18 @@
# Classes for describing aggregate types (unions, structs) and API calls.
class VulkanCompoundType(object):
- def __init__(self, name, members, isUnion=False, structEnumExpr=None, structExtendsExpr=None, feature=None, initialEnv={}, optional=None):
- self.name = name
- self.typeName = name
- self.members = members
+ def __init__(self, name: str, members: List[VulkanType], isUnion=False, structEnumExpr=None, structExtendsExpr=None, feature=None, initialEnv={}, optional=None):
+ self.name: str = name
+ self.typeName: str = name
+ self.members: List[VulkanType] = members
self.environment = initialEnv
-
self.isUnion = isUnion
self.structEnumExpr = structEnumExpr
self.structExtendsExpr = structExtendsExpr
self.feature = feature
-
- self.deviceMemoryInfoParameterIndices = \
- initDeviceMemoryInfoParameterIndices(self.members)
-
+ self.deviceMemoryInfoParameterIndices = initDeviceMemoryInfoParameterIndices(self.members)
self.isTransformed = name in TRANSFORMED_TYPES
-
self.copy = None
-
self.optionalStr = optional
def initCopies(self):
@@ -721,7 +738,7 @@
for m in self.members:
m.parent = self.copy
- def getMember(self, memberName):
+ def getMember(self, memberName) -> Optional[VulkanType]:
for m in self.members:
if m.paramName == memberName:
return m
@@ -732,14 +749,13 @@
class VulkanAPI(object):
- def __init__(self, name, retType, parameters, origName=None):
- self.name = name
+ def __init__(self, name: str, retType: VulkanType, parameters: list[VulkanType], origName=None):
+ self.name: str = name
self.origName = name
- self.retType = retType
- self.parameters = parameters
+ self.retType: VulkanType = retType
+ self.parameters: List[VulkanType] = parameters
- self.deviceMemoryInfoParameterIndices = \
- initDeviceMemoryInfoParameterIndices(self.parameters)
+ self.deviceMemoryInfoParameterIndices = initDeviceMemoryInfoParameterIndices(self.parameters)
self.copy = None
@@ -809,22 +825,30 @@
# Parses everything about Vulkan types into a Python readable format.
class VulkanTypeInfo(object):
- def __init__(self,):
- self.categories = set([])
+ def __init__(self, generator):
+ self.generator = generator
+ self.categories: Set[str] = set([])
# Tracks what Vulkan type is part of what category.
- self.typeCategories = {}
+ self.typeCategories: Dict[str, str] = {}
- # Tracks the primitve encoding size for each type,
- # if applicable.
- self.encodingSizes = {}
+ # Tracks the primitive encoding size for each type, if applicable.
+ self.encodingSizes: Dict[str, Optional[int]] = {}
- self.structs = {}
- self.apis = {}
+ self.structs: Dict[str, VulkanCompoundType] = {}
+ self.apis: Dict[str, VulkanAPI] = {}
+
+ # Maps bitmask types to the enum type used for the flags
+ # E.g. "VkImageAspectFlags" -> "VkImageAspectFlagBits"
+ self.bitmasks: Dict[str, str] = {}
+
+ # Maps all enum names to their values.
+ # For aliases, the value is the name of the canonical enum
+ self.enumValues: Dict[str, Union[int, str]] = {}
self.feature = None
- def initType(self, name, category):
+ def initType(self, name: str, category: str):
self.categories.add(category)
self.typeCategories[name] = category
self.encodingSizes[name] = self.setPrimitiveEncodingSize(name)
@@ -837,30 +861,31 @@
# Queries relating to categories of Vulkan types.
def isHandleType(self, name):
- if name in self.typeCategories:
- return self.typeCategories[name] == "handle"
- return False
+ return self.typeCategories.get(name) == "handle"
- def isCompoundType(self, name):
- if name in self.typeCategories:
- return self.typeCategories[name] in ["struct", "union"]
- else:
- return False
+ def isCompoundType(self, name: str):
+ return self.typeCategories.get(name) in ["struct", "union"]
# Gets the best size in bytes
# for encoding/decoding a particular Vulkan type.
# If not applicable, returns None.
- def setPrimitiveEncodingSize(self, name):
+ def setPrimitiveEncodingSize(self, name: str) -> Optional[int]:
baseEncodingSizes = {
- "void" : 8,
- "char" : 1,
- "float" : 4,
- "uint8_t" : 1,
- "uint16_t" : 2,
- "uint32_t" : 4,
- "uint64_t" : 8,
- "size_t" : 8,
- "ssize_t" : 8,
+ "void": 8,
+ "char": 1,
+ "float": 4,
+ "uint8_t": 1,
+ "uint16_t": 2,
+ "uint32_t": 4,
+ "uint64_t": 8,
+ "int": 4,
+ "int8_t": 1,
+ "int16_t": 2,
+ "int32_t": 4,
+ "int64_t": 8,
+ "size_t": 8,
+ "ssize_t": 8,
+ "VkBool32": 4,
}
if name in baseEncodingSizes:
@@ -868,19 +893,15 @@
category = self.typeCategories[name]
- if category in [None, "api", "bitmask", "include", "define", "struct", "union"]:
+ if category in [None, "api", "include", "define", "struct", "union"]:
return None
- # Must be 8---handles are pointers and basetype includes VkDeviceSize
- # which is 8 bytes
+ # Handles are pointers so they must be 8 bytes. Basetype includes VkDeviceSize which is 8 bytes.
if category in ["handle", "basetype", "funcpointer"]:
return 8
- # Most of the time, enums are only 4 bytes, but this is
- # vague enough to be the source of a future headache, and
- # it's easy to just stream 8 bytes there anyway.
- if category in ["enum"]:
- return 8
+ if category in ["enum", "bitmask"]:
+ return 4
def isNonAbiPortableType(self, typeName):
if typeName in EXPLICITLY_ABI_PORTABLE_TYPES:
@@ -905,9 +926,12 @@
if category in ["struct", "union"]:
self.onGenStruct(typeinfo, name, alias)
+ if category == "bitmask":
+ self.bitmasks[name] = typeinfo.elem.get("requires")
+
def onGenStruct(self, typeinfo, typeName, alias):
if not alias:
- members = []
+ members: List[VulkanType] = []
structExtendsExpr = typeinfo.elem.get("structextends")
@@ -941,19 +965,18 @@
for member in typeinfo.elem.findall(".//member"):
vulkanType = makeVulkanTypeFromXMLTag(self, member)
initialEnv[vulkanType.paramName] = {
- "type" : vulkanType.typeName,
- "binding" : vulkanType.paramName,
- "structmember" : True,
- "body" : None,
+ "type": vulkanType.typeName,
+ "binding": vulkanType.paramName,
+ "structmember": True,
+ "body": None,
}
- vulkanType.paramName
members.append(vulkanType)
if vulkanType.typeName == "VkStructureType" and \
member.get("values"):
structEnumExpr = member.get("values")
self.structs[typeName] = \
- VulkanCompoundType( \
+ VulkanCompoundType(
typeName,
members,
isUnion = self.categoryOf(typeName) == "union",
@@ -964,11 +987,28 @@
optional = typeinfo.elem.get("optional", None))
self.structs[typeName].initCopies()
- def onGenGroup(self, _groupinfo, groupName, _alias=None):
+ def onGenGroup(self, groupinfo, groupName, _alias=None):
self.initType(groupName, "enum")
+ enums = groupinfo.elem.findall("enum")
+ for enum in enums:
+ intVal, strVal = self.generator.enumToValue(enum, True)
+ self.enumValues[enum.get('name')] = intVal if intVal is not None else strVal
- def onGenEnum(self, _enuminfo, name, _alias):
+
+ def onGenEnum(self, enuminfo, name: str, alias):
self.initType(name, "enum")
+ value: str = enuminfo.elem.get("value")
+ if value and value.isdigit():
+ self.enumValues[name] = int(value)
+ elif value and value[0] == '"' and value[-1] == '"':
+ self.enumValues[name] = value[1:-1]
+ elif alias is not None:
+ self.enumValues[name] = alias
+ else:
+ # There's about a dozen cases of using the bitwise NOT operator (e.g.: `(~0U)`, `(~0ULL)`)
+ # to concisely represent large values. Just ignore them for now.
+ # In the future, we can add a lookup table to convert these to int
+ return
def onGenCmd(self, cmdinfo, name, _alias):
self.initType(name, "api")
@@ -984,7 +1024,7 @@
params)))
self.apis[name].initCopies()
- def onEnd(self,):
+ def onEnd(self):
pass
def hasNullOptionalStringFeature(forEachType):
@@ -992,19 +1032,17 @@
(hasattr(forEachType, "endCheckWithNullOptionalStringFeature")) and \
(hasattr(forEachType, "finalCheckWithNullOptionalStringFeature"))
+
# General function to iterate over a vulkan type and call code that processes
# each of its sub-components, if any.
-def iterateVulkanType(typeInfo, vulkanType, forEachType):
+def iterateVulkanType(typeInfo: VulkanTypeInfo, vulkanType: VulkanType, forEachType):
if not vulkanType.isArrayOfStrings():
if vulkanType.isPointerToConstPointer:
return False
forEachType.registerTypeInfo(typeInfo)
- needCheck = \
- vulkanType.isOptional and \
- vulkanType.pointerIndirectionLevels > 0 and \
- (not vulkanType.isNextPointer())
+ needCheck = vulkanType.isOptionalPointer()
if typeInfo.isCompoundType(vulkanType.typeName) and not vulkanType.isNextPointer():
@@ -1017,9 +1055,7 @@
forEachType.endCheck(vulkanType)
else:
-
if vulkanType.isString():
-
if needCheck and hasNullOptionalStringFeature(forEachType):
forEachType.onCheckWithNullOptionalStringFeature(vulkanType)
forEachType.onString(vulkanType)
@@ -1034,15 +1070,12 @@
forEachType.onString(vulkanType)
elif vulkanType.isArrayOfStrings():
-
forEachType.onStringArray(vulkanType)
elif vulkanType.staticArrExpr:
-
forEachType.onStaticArr(vulkanType)
elif vulkanType.isNextPointer():
-
if needCheck:
forEachType.onCheck(vulkanType)
forEachType.onStructExtension(vulkanType)
@@ -1055,8 +1088,8 @@
forEachType.onPointer(vulkanType)
if needCheck:
forEachType.endCheck(vulkanType)
- else:
+ else:
forEachType.onValue(vulkanType)
return True
@@ -1086,15 +1119,12 @@
]
for c in cases:
- if (structInfo.name, vulkanType.paramName) == (c["structName"],
- c["field"]):
+ if (structInfo.name, vulkanType.paramName) == (c["structName"], c["field"]):
return c
return None
- specialCaseAccess = \
- getSpecialCaseVulkanStructFieldLength( \
- structInfo, vulkanType)
+ specialCaseAccess = getSpecialCaseVulkanStructFieldLength(structInfo, vulkanType)
if specialCaseAccess is not None:
return specialCaseAccess
@@ -1102,17 +1132,17 @@
lenExpr = vulkanType.getLengthExpression()
if lenExpr is None:
- return lenExpr
+ return None
return {
- "structName" : structInfo.name,
+ "structName": structInfo.name,
"field": vulkanType.typeName,
"lenExpr": lenExpr,
- "postprocess": lambda expr: expr }
+ "postprocess": lambda expr: expr}
+
class VulkanTypeProtobufInfo(object):
def __init__(self, typeInfo, structInfo, vulkanType):
-
self.needsMessage = typeInfo.isCompoundType(vulkanType.typeName)
self.isRepeatedString = vulkanType.isArrayOfStrings()
self.isString = vulkanType.isString() or (
diff --git a/registry/vulkan/scripts/cereal/counting.py b/registry/vulkan/scripts/cereal/counting.py
index d8df778..0557d32 100644
--- a/registry/vulkan/scripts/cereal/counting.py
+++ b/registry/vulkan/scripts/cereal/counting.py
@@ -195,6 +195,8 @@
return "(%s && %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
if "or" == fnamestr:
return "(%s || %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+ if "bitwise_and" == fnamestr:
+ return "(%s & %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
if "getfield" == fnamestr:
ptrlevels = get_ptrlevels(expr.args[0].val.name)
if ptrlevels == 0:
diff --git a/registry/vulkan/scripts/cereal/decoder.py b/registry/vulkan/scripts/cereal/decoder.py
index d7f446d..0a998ad 100644
--- a/registry/vulkan/scripts/cereal/decoder.py
+++ b/registry/vulkan/scripts/cereal/decoder.py
@@ -1,18 +1,17 @@
-from .common.codegen import CodeGen, VulkanWrapperGenerator, VulkanAPIWrapper
-from .common.vulkantypes import \
- VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, DISPATCHABLE_HANDLE_TYPES, NON_DISPATCHABLE_HANDLE_TYPES
+from .common.codegen import CodeGen, VulkanWrapperGenerator
+from .common.vulkantypes import VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, VulkanTypeInfo,\
+ VulkanType
from .marshaling import VulkanMarshalingCodegen
from .reservedmarshaling import VulkanReservedMarshalingCodegen
-from .transform import TransformCodegen, genTransformsForVulkanType
+from .transform import TransformCodegen
from .wrapperdefs import API_PREFIX_MARSHAL
-from .wrapperdefs import API_PREFIX_UNMARSHAL, API_PREFIX_RESERVEDUNMARSHAL
+from .wrapperdefs import API_PREFIX_RESERVEDUNMARSHAL
from .wrapperdefs import VULKAN_STREAM_TYPE
from .wrapperdefs import ROOT_TYPE_DEFAULT_VALUE
from .wrapperdefs import RELAXED_APIS
-from copy import copy
SKIPPED_DECODER_DELETES = [
"vkFreeDescriptorSets",
@@ -22,6 +21,8 @@
"vkDestroyPipelineLayout",
]
+global_state_prefix = "m_state->on_"
+
decoder_decl_preamble = """
class IOStream;
@@ -31,7 +32,7 @@
VkDecoder();
~VkDecoder();
void setForSnapshotLoad(bool forSnapshotLoad);
- size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr);
+ size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr, emugl::GfxApiLogger& gfx_logger);
private:
class Impl;
std::unique_ptr<Impl> mImpl;
@@ -40,6 +41,7 @@
decoder_impl_preamble ="""
using emugl::vkDispatch;
+using emugl::GfxApiLogger;
using namespace goldfish_vk;
@@ -60,7 +62,7 @@
m_forSnapshotLoad = forSnapshotLoad;
}
- size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr);
+ size_t decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr, GfxApiLogger& gfx_logger);
private:
bool m_logCalls;
@@ -86,8 +88,8 @@
mImpl->setForSnapshotLoad(forSnapshotLoad);
}
-size_t VkDecoder::decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr) {
- return mImpl->decode(buf, bufsize, stream, seqnoPtr);
+size_t VkDecoder::decode(void* buf, size_t bufsize, IOStream* stream, uint32_t* seqnoPtr, GfxApiLogger& gfx_logger) {
+ return mImpl->decode(buf, bufsize, stream, seqnoPtr, gfx_logger);
}
// VkDecoder::Impl::decode to follow
@@ -150,45 +152,38 @@
direction="read",
dynAlloc=True))
-def emit_dispatch_unmarshal(typeInfo, param, cgen, globalWrapped):
- if globalWrapped:
- cgen.stmt("// Begin global wrapped dispatchable handle unboxing for %s" % param.paramName)
- iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
- cgen,
- READ_STREAM,
- ROOT_TYPE_DEFAULT_VALUE,
- param.paramName,
- "readStreamPtrPtr",
- API_PREFIX_RESERVEDUNMARSHAL,
- "",
- direction="read",
- dynAlloc=True))
- else:
- cgen.stmt("// Begin non wrapped dispatchable handle unboxing for %s" % param.paramName)
- # cgen.stmt("%s->unsetHandleMapping()" % READ_STREAM)
- iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
- cgen,
- READ_STREAM,
- ROOT_TYPE_DEFAULT_VALUE,
- param.paramName,
- "readStreamPtrPtr",
- API_PREFIX_RESERVEDUNMARSHAL,
- "",
- direction="read",
- dynAlloc=True))
+
+def emit_dispatch_unmarshal(typeInfo: VulkanTypeInfo, param: VulkanType, cgen, globalWrapped):
+ cgen.stmt("// Begin {} wrapped dispatchable handle unboxing for {}".format(
+ "global" if globalWrapped else "non",
+ param.paramName))
+
+ iterateVulkanType(typeInfo, param, VulkanReservedMarshalingCodegen(
+ cgen,
+ READ_STREAM,
+ ROOT_TYPE_DEFAULT_VALUE,
+ param.paramName,
+ "readStreamPtrPtr",
+ API_PREFIX_RESERVEDUNMARSHAL,
+ "",
+ direction="read",
+ dynAlloc=True))
+
+ if not globalWrapped:
cgen.stmt("auto unboxed_%s = unbox_%s(%s)" %
(param.paramName, param.typeName, param.paramName))
cgen.stmt("auto vk = dispatch_%s(%s)" %
(param.typeName, param.paramName))
cgen.stmt("// End manual dispatchable handle unboxing for %s" % param.paramName)
+
def emit_transform(typeInfo, param, cgen, variant="tohost"):
- res = \
- iterateVulkanType(typeInfo, param, TransformCodegen( \
- cgen, param.paramName, "m_state", "transform_%s_" % variant, variant))
+ res = iterateVulkanType(typeInfo, param, TransformCodegen(
+ cgen, param.paramName, "m_state", "transform_%s_" % variant, variant))
if not res:
cgen.stmt("(void)%s" % param.paramName)
+
def emit_marshal(typeInfo, param, cgen, handleMapOverwrites=False):
iterateVulkanType(typeInfo, param, VulkanMarshalingCodegen(
cgen,
@@ -199,21 +194,14 @@
direction="write",
handleMapOverwrites=handleMapOverwrites))
+
class DecodingParameters(object):
- def __init__(self, api):
- self.params = []
- self.toRead = []
- self.toWrite = []
+ def __init__(self, api: VulkanAPI):
+ self.params: list[VulkanType] = []
+ self.toRead: list[VulkanType] = []
+ self.toWrite: list[VulkanType] = []
- i = 0
-
- for param in api.parameters:
- param.nonDispatchableHandleCreate = False
- param.nonDispatchableHandleDestroy = False
- param.dispatchHandle = False
- param.dispatchableHandleCreate = False
- param.dispatchableHandleDestroy = False
-
+ for i, param in enumerate(api.parameters):
if i == 0 and param.isDispatchableHandleType():
param.dispatchHandle = True
@@ -236,7 +224,6 @@
self.params.append(param)
- i += 1
def emit_call_log(api, cgen):
decodingParams = DecodingParameters(api)
@@ -252,8 +239,7 @@
cgen.stmt("fprintf(stderr, \"stream %%p: call %s %s\\n\", ioStream, %s)" % (api.name, paramLogFormat, ", ".join(paramLogArgs)))
cgen.endIf()
-def emit_decode_parameters(typeInfo, api, cgen, globalWrapped=False):
-
+def emit_decode_parameters(typeInfo: VulkanTypeInfo, api: VulkanAPI, cgen, globalWrapped=False):
decodingParams = DecodingParameters(api)
paramsToRead = decodingParams.toRead
@@ -261,9 +247,8 @@
for p in paramsToRead:
emit_param_decl_for_reading(p, cgen)
- i = 0
- for p in paramsToRead:
- lenAccess = cgen.generalLengthAccess(p)
+ for i, p in enumerate(paramsToRead):
+ lenAccess = cgen.generalLengthAccess(p)
if p.dispatchHandle:
emit_dispatch_unmarshal(typeInfo, p, cgen, globalWrapped)
@@ -284,10 +269,9 @@
cgen.stmt("%s->unsetHandleMapping()" % READ_STREAM)
emit_unmarshal(typeInfo, p, cgen, output = p.possiblyOutput(), destroy = destroy, noUnbox = noUnbox)
- i += 1
for p in paramsToRead:
- emit_transform(typeInfo, p, cgen, variant="tohost");
+ emit_transform(typeInfo, p, cgen, variant="tohost")
emit_call_log(api, cgen)
@@ -299,7 +283,7 @@
delay = api.name in DELAYED_DECODER_DELETES
- for (i, p) in enumerate(api.parameters):
+ for i, p in enumerate(api.parameters):
customParam = p.paramName
if decodingParams.params[i].dispatchHandle:
customParam = "unboxed_%s" % p.paramName
@@ -315,7 +299,8 @@
else:
cgen.stmt("m_state->lock()")
- cgen.vkApiCall(api, customPrefix="vk->", customParameters=customParams)
+ cgen.vkApiCall(api, customPrefix="vk->", customParameters=customParams, \
+ globalStatePrefix=global_state_prefix, checkForDeviceLost=True)
if api.name in driver_workarounds_global_lock_apis:
if not delay:
@@ -326,14 +311,17 @@
if delay:
cgen.line("};")
-def emit_global_state_wrapped_call(api, cgen):
+def emit_global_state_wrapped_call(api, cgen, logger):
if api.name in DELAYED_DECODER_DELETES:
print("Error: Cannot generate a global state wrapped call that is also a delayed delete (yet)");
raise
customParams = ["&m_pool"] + list(map(lambda p: p.paramName, api.parameters))
- cgen.vkApiCall(api, customPrefix="m_state->on_", \
- customParameters=customParams)
+ if logger:
+ customParams += ["gfx_logger"]
+ cgen.vkApiCall(api, customPrefix=global_state_prefix, \
+ customParameters=customParams, globalStatePrefix=global_state_prefix, \
+ checkForDeviceLost=True)
def emit_decode_parameters_writeback(typeInfo, api, cgen, autobox=True):
decodingParams = DecodingParameters(api)
@@ -463,15 +451,19 @@
cgen.vkApiCall(apiForSnapshot, customPrefix="m_state->snapshot()->")
cgen.endIf()
-def emit_default_decoding(typeInfo, api, cgen):
+def emit_decoding(typeInfo, api, cgen, globalWrapped=False, logger=False):
isAcquire = api.name in RELAXED_APIS
- emit_decode_parameters(typeInfo, api, cgen)
+ emit_decode_parameters(typeInfo, api, cgen, globalWrapped)
if isAcquire:
emit_seqno_incr(api, cgen)
- emit_dispatch_call(api, cgen)
- emit_decode_parameters_writeback(typeInfo, api, cgen)
+ if globalWrapped:
+ emit_global_state_wrapped_call(api, cgen, logger)
+ else:
+ emit_dispatch_call(api, cgen)
+
+ emit_decode_parameters_writeback(typeInfo, api, cgen, autobox=not globalWrapped)
emit_decode_return_writeback(api, cgen)
emit_decode_finish(api, cgen)
emit_snapshot(typeInfo, api, cgen)
@@ -481,26 +473,17 @@
if not isAcquire:
emit_seqno_incr(api, cgen)
+def emit_default_decoding(typeInfo, api, cgen):
+ emit_decoding(typeInfo, api, cgen)
+
def emit_global_state_wrapped_decoding(typeInfo, api, cgen):
- isAcquire = api.name in RELAXED_APIS
+ emit_decoding(typeInfo, api, cgen, globalWrapped=True)
- emit_decode_parameters(typeInfo, api, cgen, globalWrapped=True)
-
- if isAcquire:
- emit_seqno_incr(api, cgen)
-
- emit_global_state_wrapped_call(api, cgen)
- emit_decode_parameters_writeback(typeInfo, api, cgen, autobox=False)
- emit_decode_return_writeback(api, cgen)
- emit_decode_finish(api, cgen)
- emit_snapshot(typeInfo, api, cgen)
- emit_destroyed_handle_cleanup(api, cgen)
- emit_pool_free(cgen)
- if not isAcquire:
- emit_seqno_incr(api, cgen)
+def emit_global_state_wrapped_decoding_with_logger(typeInfo, api, cgen):
+ emit_decoding(typeInfo, api, cgen, globalWrapped=True, logger=True)
## Custom decoding definitions##################################################
-def decode_vkFlushMappedMemoryRanges(typeInfo, api, cgen):
+def decode_vkFlushMappedMemoryRanges(typeInfo: VulkanTypeInfo, api, cgen):
emit_decode_parameters(typeInfo, api, cgen)
cgen.beginIf("!m_state->usingDirectMapping()")
@@ -641,8 +624,8 @@
"vkCmdExecuteCommands" : emit_global_state_wrapped_decoding,
"vkQueueSubmit" : emit_global_state_wrapped_decoding,
"vkQueueWaitIdle" : emit_global_state_wrapped_decoding,
- "vkBeginCommandBuffer" : emit_global_state_wrapped_decoding,
- "vkEndCommandBuffer" : emit_global_state_wrapped_decoding,
+ "vkBeginCommandBuffer" : emit_global_state_wrapped_decoding_with_logger,
+ "vkEndCommandBuffer" : emit_global_state_wrapped_decoding_with_logger,
"vkResetCommandBuffer" : emit_global_state_wrapped_decoding,
"vkFreeCommandBuffers" : emit_global_state_wrapped_decoding,
"vkCreateCommandPool" : emit_global_state_wrapped_decoding,
@@ -653,10 +636,15 @@
"vkCmdBindDescriptorSets" : emit_global_state_wrapped_decoding,
"vkCreateRenderPass" : emit_global_state_wrapped_decoding,
+ "vkCreateRenderPass2" : emit_global_state_wrapped_decoding,
+ "vkCreateRenderPass2KHR" : emit_global_state_wrapped_decoding,
"vkDestroyRenderPass" : emit_global_state_wrapped_decoding,
"vkCreateFramebuffer" : emit_global_state_wrapped_decoding,
"vkDestroyFramebuffer" : emit_global_state_wrapped_decoding,
+ "vkCreateSamplerYcbcrConversion": emit_global_state_wrapped_decoding,
+ "vkDestroySamplerYcbcrConversion": emit_global_state_wrapped_decoding,
+
# VK_ANDROID_native_buffer
"vkGetSwapchainGrallocUsageANDROID" : emit_global_state_wrapped_decoding,
"vkGetSwapchainGrallocUsage2ANDROID" : emit_global_state_wrapped_decoding,
@@ -689,8 +677,8 @@
"vkUpdateDescriptorSetWithTemplateSizedGOOGLE" : emit_global_state_wrapped_decoding,
# VK_GOOGLE_gfxstream
- "vkBeginCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding,
- "vkEndCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding,
+ "vkBeginCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding_with_logger,
+ "vkEndCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding_with_logger,
"vkResetCommandBufferAsyncGOOGLE" : emit_global_state_wrapped_decoding,
"vkCommandBufferHostSyncGOOGLE" : emit_global_state_wrapped_decoding,
"vkCreateImageWithRequirementsGOOGLE" : emit_global_state_wrapped_decoding,
@@ -701,7 +689,7 @@
"vkQueueBindSparseAsyncGOOGLE" : emit_global_state_wrapped_decoding,
"vkGetLinearImageLayoutGOOGLE" : emit_global_state_wrapped_decoding,
"vkGetLinearImageLayout2GOOGLE" : emit_global_state_wrapped_decoding,
- "vkQueueFlushCommandsGOOGLE" : emit_global_state_wrapped_decoding,
+ "vkQueueFlushCommandsGOOGLE" : emit_global_state_wrapped_decoding_with_logger,
"vkQueueCommitDescriptorSetUpdatesGOOGLE" : emit_global_state_wrapped_decoding,
"vkCollectDescriptorPoolIdsGOOGLE" : emit_global_state_wrapped_decoding,
"vkQueueSignalReleaseImageANDROIDAsyncGOOGLE" : emit_global_state_wrapped_decoding,
@@ -714,12 +702,16 @@
# VK_EXT_metal_surface
"vkCreateMetalSurfaceEXT": decode_unsupported_api,
+
+ # VK_KHR_sampler_ycbcr_conversion
+ "vkCreateSamplerYcbcrConversionKHR": emit_global_state_wrapped_decoding,
+ "vkDestroySamplerYcbcrConversionKHR": emit_global_state_wrapped_decoding,
}
class VulkanDecoder(VulkanWrapperGenerator):
def __init__(self, module, typeInfo):
VulkanWrapperGenerator.__init__(self, module, typeInfo)
- self.typeInfo = typeInfo
+ self.typeInfo: VulkanTypeInfo = typeInfo
self.cgen = CodeGen()
def onBegin(self,):
@@ -727,7 +719,7 @@
self.module.appendImpl(decoder_impl_preamble)
self.module.appendImpl(
- "size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream, uint32_t* seqnoPtr)\n")
+ "size_t VkDecoder::Impl::decode(void* buf, size_t len, IOStream* ioStream, uint32_t* seqnoPtr, GfxApiLogger& gfx_logger)\n")
self.cgen.beginBlock() # function body
@@ -746,6 +738,7 @@
self.cgen.stmt("uint32_t opcode = *(uint32_t *)ptr")
self.cgen.stmt("uint32_t packetLen = *(uint32_t *)(ptr + 4)")
self.cgen.stmt("if (end - ptr < packetLen) return ptr - (unsigned char*)buf")
+ self.cgen.stmt("gfx_logger.record(ptr, std::min(size_t(packetLen + 8), size_t(end - ptr)))")
self.cgen.stmt("stream()->setStream(ioStream)")
self.cgen.stmt("VulkanStream* %s = stream()" % WRITE_STREAM)
@@ -758,21 +751,27 @@
if (queueSubmitWithCommandsEnabled && ((opcode >= OP_vkFirst && opcode < OP_vkLast) || (opcode >= OP_vkFirst_old && opcode < OP_vkLast_old))) {
uint32_t seqno; memcpy(&seqno, *readStreamPtrPtr, sizeof(uint32_t)); *readStreamPtrPtr += sizeof(uint32_t);
if (seqnoPtr && !m_forSnapshotLoad) {
- while ((seqno - __atomic_load_n(seqnoPtr, __ATOMIC_SEQ_CST) != 1));
+ while ((seqno - __atomic_load_n(seqnoPtr, __ATOMIC_SEQ_CST) != 1)) {
+ #if (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)))
+ _mm_pause();
+ #elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)))
+ __asm__ __volatile__("pause;");
+ #endif
+ }
}
}
""")
self.cgen.stmt("auto vk = m_vk")
self.cgen.line("switch (opcode)")
- self.cgen.beginBlock() # switch stmt
+ self.cgen.beginBlock() # switch stmt
self.module.appendImpl(self.cgen.swapCode())
def onGenCmd(self, cmdinfo, name, alias):
typeInfo = self.typeInfo
cgen = self.cgen
- api = typeInfo.apis[name]
+ api: VulkanAPI = typeInfo.apis[name]
cgen.line("case OP_%s:" % name)
cgen.beginBlock()
diff --git a/registry/vulkan/scripts/cereal/decodersnapshot.py b/registry/vulkan/scripts/cereal/decodersnapshot.py
index 668efb8..308c1cd 100644
--- a/registry/vulkan/scripts/cereal/decodersnapshot.py
+++ b/registry/vulkan/scripts/cereal/decodersnapshot.py
@@ -25,7 +25,7 @@
~VkDecoderSnapshot();
void save(android::base::Stream* stream);
- void load(android::base::Stream* stream);
+ void load(android::base::Stream* stream, emugl::GfxApiLogger& gfx_logger);
"""
decoder_snapshot_decl_postamble = """
@@ -39,6 +39,7 @@
decoder_snapshot_impl_preamble ="""
using namespace goldfish_vk;
+using emugl::GfxApiLogger;
class VkDecoderSnapshot::Impl {
public:
@@ -48,8 +49,8 @@
mReconstruction.save(stream);
}
- void load(android::base::Stream* stream) {
- mReconstruction.load(stream);
+ void load(android::base::Stream* stream, GfxApiLogger& gfx_logger) {
+ mReconstruction.load(stream, gfx_logger);
}
"""
@@ -67,8 +68,8 @@
mImpl->save(stream);
}
-void VkDecoderSnapshot::load(android::base::Stream* stream) {
- mImpl->load(stream);
+void VkDecoderSnapshot::load(android::base::Stream* stream, GfxApiLogger& gfx_logger) {
+ mImpl->load(stream, gfx_logger);
}
VkDecoderSnapshot::~VkDecoderSnapshot() = default;
diff --git a/registry/vulkan/scripts/cereal/encoder.py b/registry/vulkan/scripts/cereal/encoder.py
index 63923ab..4547723 100644
--- a/registry/vulkan/scripts/cereal/encoder.py
+++ b/registry/vulkan/scripts/cereal/encoder.py
@@ -37,8 +37,6 @@
using namespace goldfish_vk;
-using android::aligned_buf_alloc;
-using android::aligned_buf_free;
using android::base::guest::AutoLock;
using android::base::guest::Lock;
using android::base::BumpPool;
diff --git a/registry/vulkan/scripts/cereal/marshaling.py b/registry/vulkan/scripts/cereal/marshaling.py
index bdaa992..3427fed 100644
--- a/registry/vulkan/scripts/cereal/marshaling.py
+++ b/registry/vulkan/scripts/cereal/marshaling.py
@@ -267,6 +267,8 @@
return "(%s && %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
if "or" == fnamestr:
return "(%s || %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+ if "bitwise_and" == fnamestr:
+ return "(%s & %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
if "getfield" == fnamestr:
ptrlevels = get_ptrlevels(expr.args[0].val.name)
if ptrlevels == 0:
diff --git a/registry/vulkan/scripts/cereal/reservedmarshaling.py b/registry/vulkan/scripts/cereal/reservedmarshaling.py
index 82b30c2..23ace9d 100644
--- a/registry/vulkan/scripts/cereal/reservedmarshaling.py
+++ b/registry/vulkan/scripts/cereal/reservedmarshaling.py
@@ -212,7 +212,7 @@
self.genStreamCall(handle64VarType, handle64VarAccess, handle64Bytes)
self.cgen.stmt("*%s%s = (%s)%s((%s)(*%s))" % (
self.makeCastExpr(vulkanType.getForNonConstAccess()), access,
- vulkanType.typeName,mapFunc, vulkanType.typeName, handle64VarAccess))
+ vulkanType.typeName, mapFunc, vulkanType.typeName, handle64VarAccess))
else:
self.genPtrIncr("8 * %s" % lenAccess)
if lenAccessGuard is not None:
@@ -233,8 +233,7 @@
if self.dynAlloc and self.direction == "read":
access = self.exprAccessor(vulkanType)
lenAccess = self.lenAccessor(vulkanType)
- sizeof = self.cgen.sizeofExpr( \
- vulkanType.getForValueAccess())
+ sizeof = self.cgen.sizeofExpr(vulkanType.getForValueAccess())
if lenAccess:
bytesExpr = "%s * %s" % (lenAccess, sizeof)
else:
@@ -245,7 +244,7 @@
if self.stackArrSize != lenAccess:
self.cgen.beginIf("%s <= %s" % (lenAccess, self.stackArrSize))
- self.cgen.stmt( \
+ self.cgen.stmt(
"%s = %s%s" % (access, self.makeCastExpr(vulkanType.getForNonConstAccess()), self.stackVar))
if self.stackArrSize != lenAccess:
@@ -253,7 +252,7 @@
self.cgen.beginElse()
if self.stackArrSize != lenAccess:
- self.cgen.stmt( \
+ self.cgen.stmt(
"%s->alloc((void**)&%s, %s)" %
(self.streamVarName,
access, bytesExpr))
@@ -261,7 +260,7 @@
if self.stackArrSize != lenAccess:
self.cgen.endIf()
else:
- self.cgen.stmt( \
+ self.cgen.stmt(
"%s->alloc((void**)&%s, %s)" %
(self.streamVarName,
access, bytesExpr))
@@ -275,16 +274,12 @@
return None
def onCheck(self, vulkanType):
-
if self.forApiOutput:
return
- featureExpr = self.getOptionalStringFeatureExpr(vulkanType);
-
+ featureExpr = self.getOptionalStringFeatureExpr(vulkanType)
self.checked = True
-
access = self.exprAccessor(vulkanType)
-
needConsistencyCheck = False
self.cgen.line("// WARNING PTR CHECK")
@@ -353,6 +348,8 @@
return "(%s && %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
if "or" == fnamestr:
return "(%s || %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
+ if "bitwise_and" == fnamestr:
+ return "(%s & %s)" % (loop(expr.args[0], lambdaEnv), loop(expr.args[1], lambdaEnv))
if "getfield" == fnamestr:
ptrlevels = get_ptrlevels(expr.args[0].val.name)
if ptrlevels == 0:
diff --git a/registry/vulkan/scripts/cereal/subdecode.py b/registry/vulkan/scripts/cereal/subdecode.py
index 080f4c7..5ca744c 100644
--- a/registry/vulkan/scripts/cereal/subdecode.py
+++ b/registry/vulkan/scripts/cereal/subdecode.py
@@ -1,16 +1,12 @@
-from .common.codegen import CodeGen, VulkanWrapperGenerator, VulkanAPIWrapper
-from .common.vulkantypes import \
- VulkanAPI, makeVulkanTypeSimple, iterateVulkanType, DISPATCHABLE_HANDLE_TYPES, NON_DISPATCHABLE_HANDLE_TYPES
+from .common.codegen import CodeGen, VulkanWrapperGenerator
+from .common.vulkantypes import VulkanAPI, iterateVulkanType, VulkanType
from .reservedmarshaling import VulkanReservedMarshalingCodegen
-from .transform import TransformCodegen, genTransformsForVulkanType
+from .transform import TransformCodegen
-from .wrapperdefs import API_PREFIX_MARSHAL
-from .wrapperdefs import API_PREFIX_UNMARSHAL, API_PREFIX_RESERVEDUNMARSHAL
+from .wrapperdefs import API_PREFIX_RESERVEDUNMARSHAL
from .wrapperdefs import ROOT_TYPE_DEFAULT_VALUE
-from .wrapperdefs import VULKAN_STREAM_TYPE
-from copy import copy
decoder_decl_preamble = """
"""
@@ -18,6 +14,8 @@
decoder_impl_preamble = """
"""
+global_state_prefix = "this->on_"
+
READ_STREAM = "readStream"
WRITE_STREAM = "vkStream"
@@ -149,20 +147,12 @@
class DecodingParameters(object):
- def __init__(self, api):
- self.params = []
- self.toRead = []
- self.toWrite = []
+ def __init__(self, api: VulkanAPI):
+ self.params: list[VulkanType] = []
+ self.toRead: list[VulkanType] = []
+ self.toWrite: list[VulkanType] = []
- i = 0
-
- for param in api.parameters[1:]:
- param.nonDispatchableHandleCreate = False
- param.nonDispatchableHandleDestroy = False
- param.dispatchHandle = False
- param.dispatchableHandleCreate = False
- param.dispatchableHandleDestroy = False
-
+ for i, param in enumerate(api.parameters[1:]):
if i == 0 and param.isDispatchableHandleType():
param.dispatchHandle = True
@@ -185,8 +175,6 @@
self.params.append(param)
- i += 1
-
def emit_call_log(api, cgen):
decodingParams = DecodingParameters(api)
@@ -265,17 +253,19 @@
cgen.stmt("lock()")
cgen.vkApiCall(api, customPrefix="vk->", customParameters=customParams,
- retVarDecl=False, retVarAssign=False)
+ checkForDeviceLost=True, globalStatePrefix=global_state_prefix)
if api.name in driver_workarounds_global_lock_apis:
cgen.stmt("unlock()")
-def emit_global_state_wrapped_call(api, cgen):
+def emit_global_state_wrapped_call(api, cgen, logger=False):
customParams = ["pool", "(VkCommandBuffer)(boxed_dispatchHandle)"] + \
list(map(lambda p: p.paramName, api.parameters[1:]))
- cgen.vkApiCall(api, customPrefix="this->on_",
- customParameters=customParams, retVarDecl=False, retVarAssign=False)
+ if logger:
+ customParams += ["gfx_logger"];
+ cgen.vkApiCall(api, customPrefix=global_state_prefix,
+ customParameters=customParams, checkForDeviceLost=True, globalStatePrefix=global_state_prefix)
def emit_default_decoding(typeInfo, api, cgen):
@@ -287,20 +277,25 @@
emit_decode_parameters(typeInfo, api, cgen, globalWrapped=True)
emit_global_state_wrapped_call(api, cgen)
+def emit_global_state_wrapped_decoding_with_logger(typeInfo, api, cgen):
+ emit_decode_parameters(typeInfo, api, cgen, globalWrapped=True)
+ emit_global_state_wrapped_call(api, cgen, logger=True)
+
custom_decodes = {
"vkCmdCopyBufferToImage": emit_global_state_wrapped_decoding,
"vkCmdCopyImage": emit_global_state_wrapped_decoding,
"vkCmdCopyImageToBuffer": emit_global_state_wrapped_decoding,
"vkCmdExecuteCommands": emit_global_state_wrapped_decoding,
- "vkBeginCommandBuffer": emit_global_state_wrapped_decoding,
- "vkEndCommandBuffer": emit_global_state_wrapped_decoding,
+ "vkBeginCommandBuffer": emit_global_state_wrapped_decoding_with_logger,
+ "vkEndCommandBuffer": emit_global_state_wrapped_decoding_with_logger,
"vkResetCommandBuffer": emit_global_state_wrapped_decoding,
"vkCmdPipelineBarrier": emit_global_state_wrapped_decoding,
"vkCmdBindPipeline": emit_global_state_wrapped_decoding,
"vkCmdBindDescriptorSets": emit_global_state_wrapped_decoding,
- "vkBeginCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding,
- "vkEndCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding,
+ "vkCmdCopyQueryPoolResults": emit_global_state_wrapped_decoding,
+ "vkBeginCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding_with_logger,
+ "vkEndCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding_with_logger,
"vkResetCommandBufferAsyncGOOGLE": emit_global_state_wrapped_decoding,
"vkCommandBufferHostSyncGOOGLE": emit_global_state_wrapped_decoding,
}
@@ -317,7 +312,7 @@
"#define MAX_STACK_ITEMS %s\n" % MAX_STACK_ITEMS)
self.module.appendImpl(
- "size_t subDecode(VulkanMemReadingStream* readStream, VulkanDispatch* vk, void* boxed_dispatchHandle, void* dispatchHandle, VkDeviceSize dataSize, const void* pData)\n")
+ "size_t subDecode(VulkanMemReadingStream* readStream, VulkanDispatch* vk, void* boxed_dispatchHandle, void* dispatchHandle, VkDeviceSize dataSize, const void* pData, GfxApiLogger& gfx_logger)\n")
self.cgen.beginBlock() # function body
@@ -335,8 +330,9 @@
self.cgen.stmt("uint32_t opcode = *(uint32_t *)ptr")
self.cgen.stmt("uint32_t packetLen = *(uint32_t *)(ptr + 4)")
- self.cgen.stmt(
- "if (end - ptr < packetLen) return ptr - (unsigned char*)buf")
+ self.cgen.stmt("if (end - ptr < packetLen) return ptr - (unsigned char*)buf")
+ self.cgen.stmt("gfx_logger.record(ptr, std::min(size_t(packetLen + 8), size_t(end - ptr)))")
+
self.cgen.stmt("%s->setBuf((uint8_t*)(ptr + 8))" % READ_STREAM)
self.cgen.stmt(
diff --git a/registry/vulkan/scripts/cerealgenerator.py b/registry/vulkan/scripts/cerealgenerator.py
index ad2960d..3b43a91 100644
--- a/registry/vulkan/scripts/cerealgenerator.py
+++ b/registry/vulkan/scripts/cerealgenerator.py
@@ -17,6 +17,7 @@
import os, re, sys
from generator import *
+from pathlib import Path, PurePosixPath
import cereal
from cereal.wrapperdefs import VULKAN_STREAM_TYPE
@@ -24,6 +25,7 @@
# CerealGenerator - generates set of driver sources
# while being agnostic to the stream implementation
+from reg import GroupInfo, TypeInfo, EnumInfo
copyrightHeader = """// Copyright (C) 2018 The Android Open Source Project
// Copyright (C) 2018 Google Inc.
@@ -71,12 +73,12 @@
Return a string corresponding to the command, with platform-specific
paths removed."""
- def makeRelative(someArg):
+ def makePosixRelative(someArg):
if os.path.exists(someArg):
- return os.path.relpath(someArg)
+ return str(PurePosixPath(Path(os.path.relpath(someArg))))
return someArg
- return ' '.join(map(makeRelative, argv))
+ return ' '.join(map(makePosixRelative, argv))
suppressEnabled = False
suppressExceptModule = None
@@ -119,7 +121,7 @@
init_suppress_option()
- self.typeInfo = cereal.VulkanTypeInfo()
+ self.typeInfo = cereal.VulkanTypeInfo(self)
self.modules = {}
self.protos = {}
@@ -344,6 +346,7 @@
decoderSnapshotHeaderIncludes = """
#include <memory>
+#include "base/GfxApiLogger.h"
#include "common/goldfish_vk_private_defs.h"
"""
decoderSnapshotImplIncludes = f"""
@@ -355,6 +358,8 @@
"""
decoderHeaderIncludes = """
+#include "base/GfxApiLogger.h"
+
#include <memory>
namespace android {
@@ -485,6 +490,12 @@
extraImpl="",
useNamespace=False,
implOnly=True)
+ self.addHostModule("ApiLogDecoder",
+ extraHeader="",
+ extraImpl="",
+ useNamespace=False,
+ implOnly=True,
+ suppress=True)
self.addWrapper(cereal.VulkanEncoder, "VkEncoder")
self.addWrapper(cereal.VulkanExtensionStructs, "goldfish_vk_extension_structs_guest")
@@ -506,6 +517,7 @@
self.addWrapper(cereal.VulkanDecoder, "VkDecoder")
self.addWrapper(cereal.VulkanDecoderSnapshot, "VkDecoderSnapshot")
self.addWrapper(cereal.VulkanSubDecoder, "VkSubDecoder")
+ self.addWrapper(cereal.ApiLogDecoder, "ApiLogDecoder")
self.guestAndroidMkCppFiles = ""
self.hostCMakeCppFiles = ""
@@ -524,6 +536,9 @@
self.forEachModule(addSrcEntry)
def addGuestEncoderModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True):
+ if not os.path.exists(self.guest_abs_encoder_destination):
+ print("Path [%s] not found (guest encoder path), skipping" % self.guest_abs_encoder_destination)
+ return
self.addModule(self.guest_encoder_tag,
basename,
extraHeader = extraHeader,
@@ -532,6 +547,9 @@
useNamespace = useNamespace)
def addGuestHalModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True):
+ if not os.path.exists(self.guest_abs_hal_destination):
+ print("Path [%s] not found (guest encoder path), skipping" % self.guest_abs_encoder_destination)
+ return
self.addModule(self.guest_hal_tag,
basename,
extraHeader = extraHeader,
@@ -539,23 +557,29 @@
customAbsDir = self.guest_abs_hal_destination,
useNamespace = useNamespace)
- def addHostModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True, implOnly = False):
+ def addHostModule(self, basename, extraHeader = "", extraImpl = "", useNamespace = True,
+ implOnly = False, suppress = False):
+ if not os.path.exists(self.host_abs_decoder_destination):
+ print("Path [%s] not found (guest encoder path), skipping" % self.guest_abs_encoder_destination)
+ return
self.addModule(self.host_tag,
basename,
extraHeader = extraHeader,
extraImpl = extraImpl,
customAbsDir = self.host_abs_decoder_destination,
useNamespace = useNamespace,
- implOnly = implOnly)
+ implOnly = implOnly,
+ suppress = suppress)
def addModule(self, directory, basename,
extraHeader = "", extraImpl = "",
customAbsDir = None,
useNamespace = True,
- implOnly = False):
+ implOnly = False,
+ suppress = False):
self.moduleList.append(basename)
self.modules[basename] = \
- cereal.Module(directory, basename, customAbsDir = customAbsDir, implOnly = implOnly)
+ cereal.Module(directory, basename, customAbsDir = customAbsDir, suppress = suppress, implOnly = implOnly)
self.modules[basename].headerPreamble = copyrightHeader
self.modules[basename].headerPreamble += \
autogeneratedHeaderTemplate % \
@@ -598,8 +622,11 @@
""" % namespaceEnd
def addWrapper(self, moduleType, moduleName, **kwargs):
- self.wrappers.append( \
- moduleType( \
+ if moduleName not in self.modules:
+ print(f'Unknown module: {moduleName}. All known modules are: {", ".join(self.modules)}.')
+ return
+ self.wrappers.append(
+ moduleType(
self.modules[moduleName],
self.typeInfo, **kwargs))
@@ -618,7 +645,7 @@
if suppressEnabled:
def enableSuppression(m):
- m.suppress = True;
+ m.suppress = True
self.forEachModule(enableSuppression)
self.modules[suppressExceptModule].suppress = False
@@ -666,7 +693,7 @@
self.forEachModule(lambda m: m.appendImpl("#endif\n"))
self.forEachWrapper(lambda w: w.onEndFeature())
- def genType(self, typeinfo, name, alias):
+ def genType(self, typeinfo: TypeInfo, name, alias):
OutputGenerator.genType(self, typeinfo, name, alias)
self.typeInfo.onGenType(typeinfo, name, alias)
self.forEachWrapper(lambda w: w.onGenType(typeinfo, name, alias))
@@ -676,12 +703,12 @@
self.typeInfo.onGenStruct(typeinfo, typeName, alias)
self.forEachWrapper(lambda w: w.onGenStruct(typeinfo, typeName, alias))
- def genGroup(self, groupinfo, groupName, alias = None):
+ def genGroup(self, groupinfo: GroupInfo, groupName, alias = None):
OutputGenerator.genGroup(self, groupinfo, groupName, alias)
self.typeInfo.onGenGroup(groupinfo, groupName, alias)
self.forEachWrapper(lambda w: w.onGenGroup(groupinfo, groupName, alias))
- def genEnum(self, enuminfo, name, alias):
+ def genEnum(self, enuminfo: EnumInfo, name, alias):
OutputGenerator.genEnum(self, enuminfo, name, alias)
self.typeInfo.onGenEnum(enuminfo, name, alias)
self.forEachWrapper(lambda w: w.onGenEnum(enuminfo, name, alias))
diff --git a/registry/vulkan/xml/vk.xml b/registry/vulkan/xml/vk.xml
index 25344df..89d400f 100644
--- a/registry/vulkan/xml/vk.xml
+++ b/registry/vulkan/xml/vk.xml
@@ -1761,7 +1761,10 @@
<member optional="true"><type>VkFramebufferCreateFlags</type> <name>flags</name></member>
<member><type>VkRenderPass</type> <name>renderPass</name></member>
<member optional="true"><type>uint32_t</type> <name>attachmentCount</name></member>
- <member len="attachmentCount">const <type>VkImageView</type>* <name>pAttachments</name></member>
+ <member len="attachmentCount"
+ filterVar="flags"
+ filterFunc="(eq (bitwise_and flags VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT) 0)">
+ const <type>VkImageView</type>* <name>pAttachments</name></member>
<member><type>uint32_t</type> <name>width</name></member>
<member><type>uint32_t</type> <name>height</name></member>
<member><type>uint32_t</type> <name>layers</name></member>
diff --git a/scripts/print_gfx_logs/comand_printer_test.py b/scripts/print_gfx_logs/comand_printer_test.py
new file mode 100644
index 0000000..70f68e4
--- /dev/null
+++ b/scripts/print_gfx_logs/comand_printer_test.py
@@ -0,0 +1,771 @@
+import io
+
+import unittest
+from typing import Dict
+
+import opcodes
+from scripts.print_gfx_logs import command_printer
+
+reverse_opcodes: Dict[str, int] = {v: k for k, v in opcodes.opcodes.items()}
+
+
+class ComandPrinterOutputTestCase(unittest.TestCase):
+ """
+ Tests individual aspects of the command printer logic.
+ """
+
+ def get_printer(self, hex_data: str):
+ """Helper function to return the command printer"""
+ out = io.StringIO()
+ buf = bytes.fromhex(hex_data)
+ cmd_printer = command_printer.CommandPrinter(0, len(buf), buf, 0, 0, out)
+ return cmd_printer, out
+
+ def test_raises_if_not_all_bytes_decoded(self):
+ # Make a command printer with 5 bytes
+ cmd_printer, output = self.get_printer("01 02 03 04 05")
+ # Decode 4 of them
+ cmd_printer.write_int("foobar", size=4, indent=0)
+ self.assertRaises(BufferError, cmd_printer.check_no_more_bytes)
+
+ def test_decode_int(self):
+ cmd_printer, output = self.get_printer("02 00 00 00")
+ r = cmd_printer.write_int("foobar", size=4, indent=0)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(r, 2)
+ self.assertEqual(output.getvalue(), "foobar: 2\n")
+
+ def test_decode_optional_int(self):
+ cmd_printer, output = self.get_printer("00 00 00 00 00 00 00 01 08")
+ r = cmd_printer.write_int("i", size=1, indent=0, optional=True)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(r, 8)
+ self.assertEqual(output.getvalue(), "i: 8\n")
+
+ def test_decode_missing_int(self):
+ cmd_printer, output = self.get_printer("00 00 00 00 00 00 00 00")
+ r = cmd_printer.write_int("i", size=1, indent=0, optional=True)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(r, None)
+ self.assertEqual(output.getvalue(), "i: (null)\n")
+
+ def test_decode_optional_repeated_int(self):
+ cmd_printer, output = self.get_printer("00 00 00 00 00 00 00 01 02 00 03 00")
+ cmd_printer.write_int("i", size=2, indent=0, optional=True, count=2)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), "i: [0x2, 0x3]\n")
+
+ def test_decode_float(self):
+ cmd_printer, output = self.get_printer("00 00 00 3f")
+ cmd_printer.write_float("foo", indent=0)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), "foo: 0.5\n")
+
+ def test_decode_repeated_float(self):
+ cmd_printer, output = self.get_printer("00 00 00 3f 00 00 80 3f")
+ cmd_printer.write_float("foo", indent=0, count=2)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), "foo: [0.5, 1.0]\n")
+
+ def test_decode_null_terminated_string(self):
+ cmd_printer, output = self.get_printer("77 6f 72 6c 64 00")
+ cmd_printer.write_string("hello", indent=1, size=None)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), ' hello: "world"\n')
+
+ def test_decode_fixed_size_string(self):
+ cmd_printer, output = self.get_printer("77 6f 72 6c 64 00 00 00")
+ cmd_printer.write_string("hello", indent=1, size=8)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), ' hello: "world"\n')
+
+ def test_decode_enum(self):
+ enum = {1000156007: "FOOBAR"}
+ cmd_printer, output = self.get_printer("67 2B 9D 3B")
+ cmd_printer.write_enum("foo", enum, indent=0)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), 'foo: FOOBAR (1000156007)\n')
+
+ def test_decode_unknown_enum(self):
+ cmd_printer, output = self.get_printer("67 2B 9D 3B")
+ cmd_printer.write_enum("foo", {}, indent=0)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), 'foo: (1000156007)\n')
+
+ def test_decode_flags(self):
+ enum = {1: "FOO", 2: "BAR", 4: "BAZ"}
+ cmd_printer, output = self.get_printer("03 00 00 00")
+ cmd_printer.write_flags("foo", enum, indent=0)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), 'foo: FOO | BAR (0x3)\n')
+
+ def test_decode_unknown_flags(self):
+ enum = {1: "FOO", 2: "BAR", 4: "BAZ"}
+ cmd_printer, output = self.get_printer("0A 00 00 00")
+ cmd_printer.write_flags("foo", enum, indent=0)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), 'foo: 0x8 | BAR (0xa)\n')
+
+ def test_decode_all_flags(self):
+ enum = {1: "FOO", 2: "BAR", 4: "BAZ"}
+ cmd_printer, output = self.get_printer("ff ff ff ff")
+ cmd_printer.write_flags("foo", enum, indent=0)
+ cmd_printer.check_no_more_bytes()
+ self.assertEqual(output.getvalue(), 'foo: (all flags) (0xffffffff)\n')
+
+
+class SuccessfullyDecodesCommandTestCase(unittest.TestCase):
+ """
+ This test suite checks that we're able to successfully decode each command (but doesn't check
+ the exact output.)
+ Each command that we pretty print should have at least one test here (unless the command takes
+ no arguments).
+
+ Please keep the test methods sorted in alphabetical order.
+ """
+
+ def run_test(self, opcode_str: str, cmd_data_hex: str):
+ opcode = reverse_opcodes[opcode_str]
+ cmd_data = bytes.fromhex(cmd_data_hex)
+ cmd_printer = command_printer.CommandPrinter(opcode, len(cmd_data), cmd_data, 0, 0)
+ cmd_printer.print_cmd()
+
+ def test_OP_vkAcquireImageANDROID(self):
+ self.run_test("OP_vkAcquireImageANDROID", """
+ e2 00 00 00 b8 08 00 00 02 00 03 00 e5 08 00 00
+ 02 00 06 00 ff ff ff ff f3 08 00 00 02 00 17 00
+ 00 00 00 00 00 00 00 00
+ """)
+
+ @unittest.skip("Needs support for struct extensions")
+ def test_OP_vkAllocateMemory(self):
+ self.run_test("OP_vkAllocateMemory", """
+ d7 01 00 00 02 00 00 00 02 00 03 00 05 00 00 00
+ 00 00 00 18 e8 a9 a0 3b e8 a9 a0 3b 00 00 00 00
+ 0d 00 00 00 00 90 7e 00 00 00 00 00 07 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkBeginCommandBufferAsyncGOOGLE(self):
+ self.run_test("OP_vkBeginCommandBufferAsyncGOOGLE", """
+ 2a 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkBindBufferMemory(self):
+ self.run_test("OP_vkBindBufferMemory", """
+ cc 00 00 00 b8 08 00 00 02 00 03 00 e3 08 00 00
+ 03 00 05 00 e4 08 00 00 02 00 07 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkBindImageMemory(self):
+ self.run_test("OP_vkBindImageMemory", """
+ de 00 00 00 b8 08 00 00 02 00 03 00 f1 08 00 00
+ 02 00 06 00 f2 08 00 00 02 00 07 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkCmdBeginRenderPass(self):
+ self.run_test("OP_vkCmdBeginRenderPass", """
+ 2b 00 00 00 00 00 00 00 65 0a 00 00 02 00 11 00
+ e7 09 00 00 03 00 12 00 00 00 00 00 00 00 00 00
+ c4 01 00 00 80 00 00 00 02 00 00 00 00 00 79 bd
+ 2d fe 70 70 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 80 3f 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCmdBindDescriptorSets(self):
+ self.run_test("OP_vkCmdBindDescriptorSets", """
+ 00 00 00 00 c8 09 00 00 03 00 13 00 01 00 00 00
+ 01 00 00 00 41 09 00 00 03 00 0d 00 02 00 00 00
+ 00 03 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCmdBindIndexBuffer(self):
+ self.run_test("OP_vkCmdBindIndexBuffer", """
+ a4 09 00 00 04 00 05 00 00 80 00 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkCmdBindPipeline(self):
+ self.run_test("OP_vkCmdBindPipeline", """
+ 00 00 00 00 ba 09 00 00 02 00 15 00
+ """)
+
+ def test_OP_vkCmdBindVertexBuffers(self):
+ self.run_test("OP_vkCmdBindVertexBuffers", """
+ 00 00 00 00 03 00 00 00 a4 09 00 00 04 00 05 00
+ a4 09 00 00 04 00 05 00 a4 09 00 00 04 00 05 00
+ 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00
+ 0c 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCmdClearAttachments(self):
+ self.run_test("OP_vkCmdClearAttachments", """
+ 01 00 00 00 06 00 00 00 00 00 00 00 00 00 80 3f
+ 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
+ 00 00 00 00 00 00 00 00 80 07 00 00 38 04 00 00
+ 00 00 00 00 01 00 00 00
+ """)
+
+ def test_OP_vkCmdClearColorImage(self):
+ self.run_test("OP_vkCmdClearColorImage", """
+ e5 08 00 00 02 00 06 00 07 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
+ 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 01 00 00 00
+ """)
+
+ def test_OP_vkCmdCopyBufferToImage(self):
+ self.run_test("OP_vkCmdCopyBufferToImage", """
+ 9f 09 00 00 02 00 05 00 a1 09 00 00 02 00 06 00
+ 07 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+ 40 0b 00 00 00 0a 00 00 01 00 00 00 00 00 00 00
+ 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 40 0b 00 00 00 0a 00 00 01 00 00 00
+ """)
+
+ def test_OP_vkCmdCopyImageToBuffer(self):
+ self.run_test("OP_vkCmdCopyImageToBuffer", """
+ 99 09 00 00 09 00 06 00 06 00 00 00 98 09 00 00
+ 07 00 05 00 01 00 00 00 00 00 00 00 00 00 00 00
+ 20 00 00 00 20 00 00 00 01 00 00 00 00 00 00 00
+ 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 20 00 00 00 20 00 00 00 01 00 00 00
+ """)
+
+ def test_OP_vkCmdDraw(self):
+ self.run_test("OP_vkCmdDraw", """
+ 06 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCmdDrawIndexed(self):
+ self.run_test("OP_vkCmdDrawIndexed", """
+ 6c 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkCmdPipelineBarrier(self):
+ self.run_test("OP_vkCmdPipelineBarrier", """
+ 01 04 00 00 80 04 00 00 00 00 00 00 01 00 00 00
+ 2e 00 00 00 00 00 00 00 00 01 00 00 a0 01 00 00
+ 00 00 00 00 03 00 00 00 2d 00 00 00 00 00 00 00
+ 00 01 00 00 20 00 00 00 02 00 00 00 05 00 00 00
+ 00 00 00 00 00 00 00 00 d2 11 00 00 04 00 06 00
+ 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 01 00 00 00 2d 00 00 00 00 00 00 00 00 01 00 00
+ 20 00 00 00 02 00 00 00 05 00 00 00 00 00 00 00
+ 00 00 00 00 ac 15 00 00 02 00 06 00 01 00 00 00
+ 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00
+ 2d 00 00 00 00 00 00 00 00 01 00 00 20 00 00 00
+ 02 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00
+ 9d 16 00 00 02 00 06 00 01 00 00 00 00 00 00 00
+ 01 00 00 00 00 00 00 00 01 00 00 00
+ """)
+
+ def test_OP_vkCmdSetScissor(self):
+ self.run_test("OP_vkCmdSetScissor", """
+ 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+ 40 0b 00 00 00 0a 00 00
+ """)
+
+ def test_OP_vkCmdSetViewport(self):
+ self.run_test("OP_vkCmdSetViewport", """
+ 00 00 00 00 01 00 00 00 00 00 00 00 00 00 20 45
+ 00 00 34 45 00 00 20 c5 00 00 00 00 00 00 80 3f
+ """)
+
+ def test_OP_vkCollectDescriptorPoolIdsGOOGLE(self):
+ self.run_test("OP_vkCollectDescriptorPoolIdsGOOGLE", """
+ c5 00 00 00 b8 08 00 00 02 00 03 00 c1 08 00 00
+ 02 00 0c 00 10 00 00 00 00 00 79 bc 3d fd b6 40
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCreateBufferWithRequirementsGOOGLE(self):
+ self.run_test("OP_vkCreateBufferWithRequirementsGOOGLE", """
+ 2b 00 00 00 b8 08 00 00 02 00 03 00 0c 00 00 00
+ 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00
+ 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCreateDescriptorPool(self):
+ self.run_test("OP_vkCreateDescriptorPool", """
+ e1 00 00 00 b7 15 00 00 03 00 03 00 21 00 00 00
+ 00 00 00 00 00 00 00 00 10 00 00 00 02 00 00 00
+ 08 00 00 00 10 00 00 00 08 00 00 00 10 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCreateDescriptorSetLayout(self):
+ self.run_test("OP_vkCreateDescriptorSetLayout", """
+ c3 00 00 00 b8 08 00 00 02 00 03 00 20 00 00 00
+ 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 08 00 00 00 01 00 00 00 3f 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkCreateFence(self):
+ self.run_test("OP_vkCreateFence", """
+ e3 00 00 00 b8 08 00 00 02 00 03 00 08 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCreateFramebuffer(self):
+ self.run_test("OP_vkCreateFramebuffer", """
+ 83 02 00 00 fb 08 00 00 02 00 03 00 25 00 00 00
+ 00 00 00 00 00 00 00 00 65 0a 00 00 02 00 11 00
+ 02 00 00 00 e8 09 00 00 03 00 09 00 e9 09 00 00
+ 03 00 09 00 c4 01 00 00 80 00 00 00 01 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ @unittest.skip("Needs support for stream features hasRasterization / hasTessellation")
+ def test_OP_vkCreateGraphicsPipelines(self):
+ self.run_test("OP_vkCreateGraphicsPipelines", """
+ 3b 01 00 00 fb 08 00 00 02 00 03 00 02 09 00 00
+ 02 00 14 00 01 00 00 00 00 00 00 01 00 00 00 00
+ 1c 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00
+ 12 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
+ b7 09 00 00 02 00 0a 00 00 00 00 04 6d 61 69 6e
+ 00 00 79 bd 2d fd a3 60 05 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 04 01 00 00 00
+ 04 00 00 00 00 00 00 00 00 00 00 04 02 00 00 00
+ 08 00 00 00 00 00 00 00 00 00 00 04 03 00 00 00
+ 0c 00 00 00 00 00 00 00 00 00 00 04 04 00 00 00
+ 10 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00
+ 00 00 00 14 00 00 00 00 00 00 00 00 00 00 80 3f
+ 00 00 80 3f 00 00 00 00 12 00 00 00 00 00 00 00
+ 00 00 00 00 10 00 00 00 b8 09 00 00 02 00 0a 00
+ 00 00 00 04 6d 61 69 6e 00 00 79 bd 2d fd a3 f0
+ 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 04 01 00 00 00 04 00 00 00 00 00 00 00
+ 00 00 00 04 02 00 00 00 08 00 00 00 00 00 00 00
+ 00 00 00 04 03 00 00 00 0c 00 00 00 00 00 00 00
+ 00 00 00 04 04 00 00 00 10 00 00 00 00 00 00 00
+ 00 00 00 04 00 00 00 00 00 00 00 14 00 00 00 00
+ 00 00 00 00 00 00 80 3f 00 00 80 3f 00 00 00 00
+ 00 00 79 bd 2d fd a4 78 13 00 00 00 00 00 00 00
+ 00 00 00 00 02 00 00 00 00 00 00 00 08 00 00 00
+ 00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
+ 02 00 00 00 00 00 00 00 00 00 00 00 67 00 00 00
+ 00 00 00 00 01 00 00 00 01 00 00 00 67 00 00 00
+ 00 00 00 00 00 00 79 bd 2d fd a4 e0 14 00 00 00
+ 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00
+ 00 00 79 bd 2d fd a5 00 00 00 79 bd 2d fd a5 18
+ 16 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
+ 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 79 bd 2d fd a5 48 17 00 00 00
+ 00 00 00 20 b9 bd 9e 3b b9 bd 9e 3b 00 00 00 18
+ 31 aa 9e 3b 31 aa 9e 3b 00 00 00 18 62 37 9b 3b
+ 62 37 9b 3b 00 00 00 00 00 00 00 00 00 00 00 00
+ 01 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 80 3f 00 00
+ 79 bd 2d fd a5 d8 18 00 00 00 00 00 00 00 00 00
+ 00 00 01 00 00 00 00 00 00 00 00 00 80 3f 00 00
+ 79 bd 2d fd a6 08 ff ff ff ff 00 00 00 00 00 00
+ 00 00 00 00 79 bd 2d fd a6 10 19 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 07 00 00 00 ff 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 07 00 00 00 ff 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 79 bd 2d fd
+ a6 78 1a 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 79 bb ee 02
+ ea 20 1b 00 00 00 00 00 00 00 00 00 00 00 02 00
+ 00 00 00 00 00 00 01 00 00 00 6b 09 00 00 02 00
+ 13 00 b9 09 00 00 03 00 11 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCreateImageView(self):
+ self.run_test("OP_vkCreateImageView", """
+ 3c 01 00 00 fb 08 00 00 02 00 03 00 0f 00 00 00
+ 00 00 00 00 00 00 00 00 06 09 00 00 02 00 06 00
+ 01 00 00 00 25 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ @unittest.skip("Needs support for struct extensions")
+ def test_OP_vkCreateImageWithRequirementsGOOGLE(self):
+ self.run_test("OP_vkCreateImageWithRequirementsGOOGLE", """
+ d0 00 00 00 b8 08 00 00 02 00 03 00 0e 00 00 00
+ 00 00 00 38 10 f1 9a 3b 10 f1 9a 3b 00 00 00 00
+ 00 00 79 bd 2d fd df e8 0d 00 00 00 80 07 00 00
+ 01 00 00 00 33 0b 00 00 06 09 00 00 00 00 00 00
+ 66 02 00 00 00 00 00 00 00 00 00 00 01 00 00 00
+ 25 00 00 00 80 07 00 00 38 04 00 00 01 00 00 00
+ 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00
+ 97 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCreatePipelineCache(self):
+ self.run_test("OP_vkCreatePipelineCache", """
+ 38 01 00 00 fb 08 00 00 02 00 03 00 11 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkCreateRenderPass(self):
+ self.run_test("OP_vkCreateRenderPass", """
+ 3a 01 00 00 fb 08 00 00 02 00 03 00 26 00 00 00
+ 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00
+ 25 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00
+ 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 01 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkCreateSampler(self):
+ self.run_test("OP_vkCreateSampler", """
+ eb 00 00 00 b7 15 00 00 03 00 03 00 1f 00 00 00
+ 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
+ 00 00 00 00 02 00 00 00 02 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 80 3f 00 00 00 00
+ 03 00 00 00 00 00 00 00 00 00 80 3e 01 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkCreateSemaphore(self):
+ self.run_test("OP_vkCreateSemaphore", """
+ d3 00 00 00 b8 08 00 00 02 00 03 00 09 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyBuffer(self):
+ self.run_test("OP_vkDestroyBuffer", """
+ 2a 00 00 00 b8 08 00 00 02 00 03 00 c0 08 00 00
+ 02 00 05 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyCommandPool(self):
+ self.run_test("OP_vkDestroyCommandPool", """
+ fb 05 00 00 b1 0a 00 00 05 00 03 00 a3 0a 00 00
+ 06 00 21 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyDescriptorPool(self):
+ self.run_test("OP_vkDestroyDescriptorPool", """
+ 8b 01 00 00 fb 08 00 00 02 00 03 00 44 09 00 00
+ 02 00 0c 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyDescriptorSetLayout(self):
+ self.run_test("OP_vkDestroyDescriptorSetLayout", """
+ a3 01 00 00 fb 08 00 00 02 00 03 00 69 09 00 00
+ 02 00 0b 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyDevice(self):
+ self.run_test("OP_vkDestroyDevice", """
+ 00 06 00 00 b1 0a 00 00 05 00 03 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyFence(self):
+ self.run_test("OP_vkDestroyFence", """
+ fc 05 00 00 b1 0a 00 00 05 00 03 00 b2 0a 00 00
+ 05 00 16 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyFramebuffer(self):
+ self.run_test("OP_vkDestroyFramebuffer", """
+ 61 01 00 00 fb 08 00 00 02 00 03 00 bc 09 00 00
+ 02 00 12 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyImage(self):
+ self.run_test("OP_vkDestroyImage", """
+ ee 00 00 00 b8 08 00 00 02 00 03 00 f1 08 00 00
+ 02 00 06 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyImageView(self):
+ self.run_test("OP_vkDestroyImageView", """
+ 60 01 00 00 fb 08 00 00 02 00 03 00 bb 09 00 00
+ 02 00 09 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyInstance(self):
+ self.run_test("OP_vkDestroyInstance", """
+ 01 06 00 00 e7 08 00 00 07 00 01 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyPipeline(self):
+ self.run_test("OP_vkDestroyPipeline", """
+ cd 05 00 00 b1 0a 00 00 05 00 03 00 8a 0a 00 00
+ 05 00 15 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyPipelineCache(self):
+ self.run_test("OP_vkDestroyPipelineCache", """
+ 39 01 00 00 fb 08 00 00 02 00 03 00 b9 09 00 00
+ 02 00 14 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyPipelineLayout(self):
+ self.run_test("OP_vkDestroyPipelineLayout", """
+ a2 01 00 00 fb 08 00 00 02 00 03 00 6b 09 00 00
+ 02 00 13 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyRenderPass(self):
+ self.run_test("OP_vkDestroyRenderPass", """
+ 9f 01 00 00 fb 08 00 00 02 00 03 00 c2 09 00 00
+ 02 00 11 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroySemaphore(self):
+ self.run_test("OP_vkDestroySemaphore", """
+ f3 00 00 00 b8 08 00 00 02 00 03 00 f3 08 00 00
+ 02 00 17 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkDestroyShaderModule(self):
+ self.run_test("OP_vkDestroyShaderModule", """
+ 7e 01 00 00 fb 08 00 00 02 00 03 00 b7 09 00 00
+ 02 00 0a 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkFreeCommandBuffers(self):
+ self.run_test("OP_vkFreeCommandBuffers", """
+ f9 05 00 00 b1 0a 00 00 05 00 03 00 a3 0a 00 00
+ 06 00 21 00 01 00 00 00 00 00 79 bb dd fe 4a b0
+ ec 08 00 00 07 00 22 00
+ """)
+
+ def test_OP_vkFreeMemory(self):
+ self.run_test("OP_vkFreeMemory", """
+ ef 00 00 00 b8 08 00 00 02 00 03 00 f2 08 00 00
+ 02 00 07 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkFreeMemorySyncGOOGLE(self):
+ self.run_test("OP_vkFreeMemorySyncGOOGLE", """
+ ff 05 00 00 b1 0a 00 00 05 00 03 00 74 0a 00 00
+ 06 00 07 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkGetFenceStatus(self):
+ self.run_test("OP_vkGetFenceStatus", """
+ e6 00 00 00 b8 08 00 00 02 00 03 00 f6 08 00 00
+ 02 00 16 00
+ """)
+
+ def test_OP_vkGetMemoryHostAddressInfoGOOGLE(self):
+ self.run_test("OP_vkGetMemoryHostAddressInfoGOOGLE", """
+ 01 01 00 00 5a 0c 00 00 05 00 03 00 5a 11 00 00
+ 02 00 07 00 00 00 00 00 bd d3 07 f0 00 00 00 00
+ 00 00 00 00 00 00 00 00 bd d3 07 f8 00 00 00 00
+ 00 00 00 00 00 00 00 00 bd d3 08 00 00 00 00 00
+ 00 00 00 00
+ """)
+
+ def test_OP_vkGetPhysicalDeviceFormatProperties(self):
+ self.run_test("OP_vkGetPhysicalDeviceFormatProperties", """
+ 2f 00 00 00 b7 08 00 00 02 00 02 00 7c 00 00 00
+ 00 00 00 00 00 00 00 00 ff ff ff ff
+ """)
+
+ def test_OP_vkGetPhysicalDeviceProperties2KHR(self):
+ self.run_test("OP_vkGetPhysicalDeviceProperties2KHR", """
+ cd 00 00 00 b7 08 00 00 02 00 02 00 79 b0 9b 3b
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkGetSwapchainGrallocUsageANDROID(self):
+ self.run_test("OP_vkGetSwapchainGrallocUsageANDROID", """
+ cf 00 00 00 b8 08 00 00 02 00 03 00 25 00 00 00
+ 97 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkQueueCommitDescriptorSetUpdatesGOOGLE(self):
+ self.run_test("OP_vkQueueCommitDescriptorSetUpdatesGOOGLE", """
+ bd 02 00 00 04 00 00 00 02 00 04 00 04 00 00 00
+ 0b 00 00 00 02 00 0c 00 79 01 00 00 02 00 0c 00
+ de 00 00 00 02 00 0c 00 8a 01 00 00 02 00 0c 00
+ 07 00 00 00 0a 00 00 00 05 00 0b 00 31 00 00 00
+ 02 00 0b 00 31 00 00 00 02 00 0b 00 44 01 00 00
+ 02 00 0b 00 44 01 00 00 02 00 0b 00 44 01 00 00
+ 02 00 0b 00 44 01 00 00 02 00 0b 00 1b 00 00 00
+ 02 00 0d 00 89 01 00 00 02 00 0d 00 ee 00 00 00
+ 02 00 0d 00 9a 01 00 00 02 00 0d 00 98 01 00 00
+ 02 00 0d 00 99 01 00 00 02 00 0d 00 97 01 00 00
+ 02 00 0d 00 00 00 00 00 01 00 00 00 02 00 00 00
+ 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00
+ 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00
+ 01 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00
+ 01 00 00 00 03 00 00 00 05 00 00 00 06 00 00 00
+ 07 00 00 00 08 00 00 00 09 00 00 00 23 00 00 00
+ 00 00 00 00 1b 00 00 00 02 00 0d 00 00 00 00 00
+ 00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 74 3c ce b3 aa 50 bd 16 00 00
+ 03 00 05 00 00 00 00 00 00 00 00 00 50 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
+ 00 00 00 00 89 01 00 00 02 00 0d 00 00 00 00 00
+ 00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 74 3c ce b3 aa 68 a8 16 00 00
+ 03 00 05 00 00 00 00 00 00 00 00 00 00 01 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
+ 00 00 00 00 89 01 00 00 02 00 0d 00 01 00 00 00
+ 00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 74 3c ce b3 aa 80 2d 00 00 00
+ 03 00 05 00 00 00 00 00 00 00 00 00 10 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
+ 00 00 00 00 ee 00 00 00 02 00 0d 00 00 00 00 00
+ 00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 74 3c ce b3 aa 98 a8 16 00 00
+ 03 00 05 00 00 00 00 00 00 00 00 00 00 01 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
+ 00 00 00 00 ee 00 00 00 02 00 0d 00 01 00 00 00
+ 00 00 00 00 01 00 00 00 08 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 74 3c ce b3 aa b0 a8 16 00 00
+ 03 00 05 00 00 00 00 00 00 00 00 00 00 01 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 23 00 00 00
+ 00 00 00 00 9a 01 00 00 02 00 0d 00 00 00 00 00
+ 00 00 00 00 01 00 00 00 01 00 00 00 00 00 74 3c
+ ce b3 aa c8 c1 16 00 00 02 00 0e 00 be 16 00 00
+ 02 00 09 00 05 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 23 00 00 00 00 00 00 00
+ 98 01 00 00 02 00 0d 00 00 00 00 00 00 00 00 00
+ 01 00 00 00 01 00 00 00 00 00 74 3c ce b3 aa e0
+ c1 16 00 00 02 00 0e 00 c9 16 00 00 02 00 09 00
+ 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 00 00 00 00 23 00 00 00 00 00 00 00 99 01 00 00
+ 02 00 0d 00 00 00 00 00 00 00 00 00 01 00 00 00
+ 01 00 00 00 00 00 74 3c ce b3 aa f8 c8 16 00 00
+ 02 00 0e 00 c6 16 00 00 02 00 09 00 05 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 23 00 00 00 00 00 00 00 97 01 00 00 02 00 0d 00
+ 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00
+ 00 00 74 3c ce b3 ab 10 c1 16 00 00 02 00 0e 00
+ cc 16 00 00 02 00 09 00 05 00 00 00 00 00 00 00
+ 00 00 00 00 00 00 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkQueueFlushCommandsGOOGLE(self):
+ self.run_test("OP_vkQueueFlushCommandsGOOGLE", """
+ e4 00 00 00 b9 08 00 00 02 00 04 00 be 08 00 00
+ 02 00 22 00 18 01 00 00 00 00 00 00
+ """)
+
+ def test_OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(self):
+ self.run_test("OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE", """
+ e7 00 00 00 b9 08 00 00 02 00 04 00 01 00 00 00
+ 00 00 79 bd 0d fe c9 20 e8 08 00 00 02 00 17 00
+ e5 08 00 00 02 00 06 00
+ """)
+
+ def test_OP_vkQueueSubmitAsyncGOOGLE(self):
+ self.run_test("OP_vkQueueSubmitAsyncGOOGLE", """
+ c0 02 00 00 04 00 00 00 02 00 04 00 01 00 00 00
+ 04 00 00 00 00 00 00 00 03 00 00 00 c0 16 00 00
+ 02 00 17 00 cb 16 00 00 02 00 17 00 ce 16 00 00
+ 02 00 17 00 00 00 01 00 00 00 01 00 00 00 01 00
+ 01 00 00 00 08 00 00 00 02 00 22 00 00 00 00 00
+ d1 16 00 00 02 00 16 00
+ """)
+
+ def test_OP_vkQueueWaitIdle(self):
+ self.run_test("OP_vkQueueWaitIdle", """
+ f3 05 00 00 8f 09 00 00 06 00 04 00
+ """)
+
+ def test_OP_vkResetFences(self):
+ self.run_test("OP_vkResetFences", """
+ 4f 01 00 00 fb 08 00 00 02 00 03 00 01 00 00 00
+ c3 09 00 00 02 00 16 00
+ """)
+
+ def test_OP_vkWaitForFences(self):
+ self.run_test("OP_vkWaitForFences", """
+ ed 00 00 00 b8 08 00 00 02 00 03 00 01 00 00 00
+ 03 09 00 00 05 00 16 00 01 00 00 00 00 b0 8e f0
+ 1b 00 00 00
+ """)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/scripts/print_gfx_logs/command_printer.py b/scripts/print_gfx_logs/command_printer.py
new file mode 100644
index 0000000..4c76cb2
--- /dev/null
+++ b/scripts/print_gfx_logs/command_printer.py
@@ -0,0 +1,219 @@
+import io
+import sys
+import textwrap
+from typing import Dict, Optional
+import vulkan_printer
+import opcodes
+import struct
+
+
+class CommandPrinter:
+ """This class is responsible for printing the commands found in the minidump file to the terminal."""
+
+ def __init__(self, opcode: int, original_size: int, data: bytes, stream_idx: int, cmd_idx: int,
+ out=sys.stdout):
+ self.opcode = opcode
+ self.original_size = original_size
+ self.data = io.BytesIO(data)
+ self.stream_idx = stream_idx
+ self.cmd_idx = cmd_idx
+ self.out = out
+
+ def print_cmd(self):
+ """
+ Tries to decode and pretty print the command to the terminal.
+ Falls back to printing hex data if the command doesn't have a printer.
+ """
+
+ # Print out the command name
+ print("\n{}.{} - {}: ({} bytes)".format(self.stream_idx, self.cmd_idx, self.cmd_name(),
+ self.original_size - 8), file=self.out)
+
+ if len(self.data.getbuffer()) == 0:
+ return
+
+ pretty_printer = getattr(vulkan_printer, self.cmd_name(), None)
+ if not pretty_printer:
+ self.print_raw()
+ return
+
+ try:
+ pretty_printer(self, indent=4)
+ self.check_no_more_bytes()
+ except Exception as ex:
+ print("Error while processing {}: {}".format(self.cmd_name(), repr(ex)), file=self.out)
+ print("Command raw data:", file=self.out)
+ self.print_raw()
+ raise ex
+
+ def check_no_more_bytes(self):
+ """
+ Checks that we processed all the bytes, otherwise there's probably a bug in the decoding
+ logic
+ """
+ if self.data.tell() != len(self.data.getbuffer()):
+ raise BufferError(
+ "Not all data was decoded. Decoded {} bytes but command had {}".format(
+ self.data.tell(), len(self.data.getbuffer())))
+
+ def cmd_name(self) -> str:
+ """Returns the command name (e.g.: "OP_vkBeginCommandBuffer", or the opcode as a string if unknown"""
+ return opcodes.opcodes.get(self.opcode, str(self.opcode))
+
+ def print_raw(self):
+ """Prints the command data as a hex bytes, as a fallback if we don't know how to decode it"""
+ truncated = self.original_size > len(self.data.getbuffer()) + 8
+ indent = 8
+ hex = ' '.join(["{:02x}".format(x) for x in self.data.getbuffer()])
+ if truncated:
+ hex += " [...]"
+ lines = textwrap.wrap(hex, width=16 * 3 + indent, initial_indent=' ' * indent,
+ subsequent_indent=' ' * indent)
+ for l in lines:
+ print(l, file=self.out)
+
+ def read_bytes(self, size: int):
+ buf = self.data.read(size)
+ if len(buf) != size:
+ raise EOFError("Unexpectedly reached the end of the buffer")
+ return buf
+
+ def read_int(self, size: int, signed: bool = False, big_endian: bool = False) -> int:
+ assert size in [1, 2, 4, 8], "Invalid size to read: " + str(size)
+ buf = self.read_bytes(size)
+ byte_order = 'big' if big_endian else 'little'
+ return int.from_bytes(buf, byteorder=byte_order, signed=signed)
+
+ def read_float(self) -> float:
+ buf = self.read_bytes(4)
+ return struct.unpack('f', buf)[0]
+
+ def write(self, msg: str, indent: int):
+ """Prints a string at a given indentation level"""
+ assert type(msg) == str
+ assert type(indent) == int and indent >= 0
+ print(" " * indent + msg, end='', file=self.out)
+
+ def write_int(self,
+ field_name: str,
+ size: int,
+ indent: int,
+ signed: bool = False,
+ big_endian: bool = False,
+ optional: bool = False,
+ count: Optional[int] = None) -> Optional[int]:
+ """
+ Reads and prints integers from the data stream.
+
+ When reading a single int (ie: when count=None), returns the int that was read, otherwise
+ returns None.
+
+ size: size of the integer in bytes
+ indent: indentation level that we should write at
+ signed: whether to treat it as a signed or unsigned int
+ big_endian: whether to treat it as little endian or big endian
+ optional: if True, we will first read an 8 byte boolean value. If that value is false, we
+ will return without further reading.
+ count: how many integers to read, for repeated values.
+ """
+ if optional and self.check_null(field_name, indent):
+ return
+
+ # Write the field name
+ self.write("{name}: ".format(name=field_name), indent)
+
+ if count is not None:
+ values = ["0x{:x}".format(self.read_int(size, signed, big_endian)) for i in
+ range(0, count)]
+ self.write("[{}]\n".format(", ".join(values)), indent=0)
+ else:
+ value = self.read_int(size, signed, big_endian)
+ # Print small values as decimal only, otherwise hex + decimal
+ format_str = ("{val}\n" if value < 10 else "0x{val:x} ({val})\n")
+ self.write(format_str.format(val=value), indent=0)
+ return value
+
+ def write_float(self, field_name: str, indent: int, count: Optional[int] = None):
+ if count is not None:
+ values = [str(self.read_float()) for i in range(0, count)]
+ self.write("{}: [{}]\n".format(field_name, ", ".join(values)), indent)
+ else:
+ self.write("{}: {}\n".format(field_name, self.read_float()), indent)
+
+ def write_enum(self, field_name: str, enum: Dict[int, str], indent: int) -> int:
+ """Reads the next 32-byte int from the data stream, prints it as an enum, and return it"""
+ value = self.read_int(4)
+ self.write("{}: {} ({})\n".format(field_name, enum.get(value, ""), value), indent)
+ return value
+
+ def write_flags(self, field_name: str, enum: Dict[int, str], indent: int):
+ """Reads and prints Vulkan flags (byte masks)"""
+ remaining_flags = flags = self.read_int(4)
+ flags_list = []
+ if remaining_flags == 0xffffffff:
+ # When the value is set to all flags, don't bother listing them all
+ flags_list.append("(all flags)")
+ else:
+ for (value, flag) in enum.items():
+ if value & remaining_flags:
+ remaining_flags ^= value
+ flags_list.append(flag)
+ if remaining_flags != 0:
+ flags_list.insert(0, "0x{:x}".format(remaining_flags))
+ self.write("{}: {} (0x{:x})\n".format(field_name, " | ".join(flags_list), flags), indent)
+
+ def write_stype_and_pnext(self, expected_stype: str, indent: int):
+ """Reads and prints the sType and pNext fields found in many Vulkan structs, while also sanity checking them"""
+ stype = self.write_enum("sType", vulkan_printer.VkStructureType, indent)
+ stype_str = vulkan_printer.VkStructureType.get(stype)
+ if stype_str != expected_stype:
+ raise ValueError("Wrong structure type. Expected: {}, got {} ({}) instead".format(
+ expected_stype, stype, stype_str))
+
+ pnext_size = self.write_int("pNext_size", 4, indent, big_endian=True)
+ if pnext_size != 0:
+ self.write_enum("ext type", vulkan_printer.VkStructureType, indent + 1)
+ raise NotImplementedError("Decoding structs with extensions is not supported")
+
+ def check_null(self, field_name: str, indent) -> bool:
+ is_null = self.read_int(8, big_endian=True) == 0
+ if is_null:
+ self.write("{}: (null)\n".format(field_name), indent)
+ return is_null
+
+ def write_struct(self, field_name: str, struct_fn, optional: bool, count: Optional[int],
+ indent: int):
+ """
+ Reads and prints a struct, calling `struct_fn` to pretty-print it
+ optional: whether this is an optional structure. In this case, we will read an int64 first
+ and skip the struct if the result is null.
+ count: how many times this is repeated. Pass None for non-repeated fields.
+ """
+ if optional and self.check_null(field_name, indent):
+ return
+
+ is_repeated = count is not None
+ for i in range(0, count if is_repeated else 1):
+ suffix = " #{}".format(i) if is_repeated else ""
+ self.write("{}{}:\n".format(field_name, suffix), indent)
+ struct_fn(self, indent + 1)
+
+ def write_string(self, field_name: str, size: Optional[int], indent: int):
+ """
+ Reads a null-terminated string from the stream.
+ size: if specified, reads up to this many characters
+ """
+ buf = bytearray()
+ if size is not None:
+ buf = self.read_bytes(size)
+ buf = buf.rstrip(b'\x00')
+ else:
+ # Reads from the string one char at a time, until we find a null
+ # Not the most efficient way of doing this, but whatever
+ while True:
+ c = self.read_int(1)
+ if c == 0:
+ break
+ buf.append(c)
+
+ self.write("{}: \"{}\"\n".format(field_name, buf.decode('utf-8')), indent)
diff --git a/scripts/print_gfx_logs/opcodes.py b/scripts/print_gfx_logs/opcodes.py
new file mode 100644
index 0000000..6543a63
--- /dev/null
+++ b/scripts/print_gfx_logs/opcodes.py
@@ -0,0 +1,1295 @@
+"""
+gfxstream opcodes
+
+This is a map of all gfxstream opcodes back to their string names.
+
+Currently, this was manually generated from the following files:
+
+Vulkan: http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/stream-servers/vulkan/cereal/common/goldfish_vk_marshaling.h
+RenderControl: http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/stream-servers/renderControl_dec/renderControl_opcodes.h
+GLES1: http://source/android/device/generic/vulkan-cereal/stream-servers/gles1_dec/gles1_opcodes.h
+GLES2: http://source/android/device/generic/vulkan-cereal/stream-servers/gles2_dec/gles2_opcodes.h
+
+TODO(gregschlom): Consider auto-generating this file in the future.
+"""
+
+opcodes = {
+ ###############################################################################################
+ # Vulkan opcodes
+ # http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/stream-servers/vulkan/cereal/common/goldfish_vk_marshaling.h
+ ###############################################################################################
+ 20000: "OP_vkCreateInstance",
+ 20001: "OP_vkDestroyInstance",
+ 20002: "OP_vkEnumeratePhysicalDevices",
+ 20003: "OP_vkGetPhysicalDeviceFeatures",
+ 20004: "OP_vkGetPhysicalDeviceFormatProperties",
+ 20005: "OP_vkGetPhysicalDeviceImageFormatProperties",
+ 20006: "OP_vkGetPhysicalDeviceProperties",
+ 20007: "OP_vkGetPhysicalDeviceQueueFamilyProperties",
+ 20008: "OP_vkGetPhysicalDeviceMemoryProperties",
+ 20009: "OP_vkGetInstanceProcAddr",
+ 20010: "OP_vkGetDeviceProcAddr",
+ 20011: "OP_vkCreateDevice",
+ 20012: "OP_vkDestroyDevice",
+ 20013: "OP_vkEnumerateInstanceExtensionProperties",
+ 20014: "OP_vkEnumerateDeviceExtensionProperties",
+ 20015: "OP_vkEnumerateInstanceLayerProperties",
+ 20016: "OP_vkEnumerateDeviceLayerProperties",
+ 20017: "OP_vkGetDeviceQueue",
+ 20018: "OP_vkQueueSubmit",
+ 20019: "OP_vkQueueWaitIdle",
+ 20020: "OP_vkDeviceWaitIdle",
+ 20021: "OP_vkAllocateMemory",
+ 20022: "OP_vkFreeMemory",
+ 20023: "OP_vkMapMemory",
+ 20024: "OP_vkUnmapMemory",
+ 20025: "OP_vkFlushMappedMemoryRanges",
+ 20026: "OP_vkInvalidateMappedMemoryRanges",
+ 20027: "OP_vkGetDeviceMemoryCommitment",
+ 20028: "OP_vkBindBufferMemory",
+ 20029: "OP_vkBindImageMemory",
+ 20030: "OP_vkGetBufferMemoryRequirements",
+ 20031: "OP_vkGetImageMemoryRequirements",
+ 20032: "OP_vkGetImageSparseMemoryRequirements",
+ 20033: "OP_vkGetPhysicalDeviceSparseImageFormatProperties",
+ 20034: "OP_vkQueueBindSparse",
+ 20035: "OP_vkCreateFence",
+ 20036: "OP_vkDestroyFence",
+ 20037: "OP_vkResetFences",
+ 20038: "OP_vkGetFenceStatus",
+ 20039: "OP_vkWaitForFences",
+ 20040: "OP_vkCreateSemaphore",
+ 20041: "OP_vkDestroySemaphore",
+ 20042: "OP_vkCreateEvent",
+ 20043: "OP_vkDestroyEvent",
+ 20044: "OP_vkGetEventStatus",
+ 20045: "OP_vkSetEvent",
+ 20046: "OP_vkResetEvent",
+ 20047: "OP_vkCreateQueryPool",
+ 20048: "OP_vkDestroyQueryPool",
+ 20049: "OP_vkGetQueryPoolResults",
+ 20050: "OP_vkCreateBuffer",
+ 20051: "OP_vkDestroyBuffer",
+ 20052: "OP_vkCreateBufferView",
+ 20053: "OP_vkDestroyBufferView",
+ 20054: "OP_vkCreateImage",
+ 20055: "OP_vkDestroyImage",
+ 20056: "OP_vkGetImageSubresourceLayout",
+ 20057: "OP_vkCreateImageView",
+ 20058: "OP_vkDestroyImageView",
+ 20059: "OP_vkCreateShaderModule",
+ 20060: "OP_vkDestroyShaderModule",
+ 20061: "OP_vkCreatePipelineCache",
+ 20062: "OP_vkDestroyPipelineCache",
+ 20063: "OP_vkGetPipelineCacheData",
+ 20064: "OP_vkMergePipelineCaches",
+ 20065: "OP_vkCreateGraphicsPipelines",
+ 20066: "OP_vkCreateComputePipelines",
+ 20067: "OP_vkDestroyPipeline",
+ 20068: "OP_vkCreatePipelineLayout",
+ 20069: "OP_vkDestroyPipelineLayout",
+ 20070: "OP_vkCreateSampler",
+ 20071: "OP_vkDestroySampler",
+ 20072: "OP_vkCreateDescriptorSetLayout",
+ 20073: "OP_vkDestroyDescriptorSetLayout",
+ 20074: "OP_vkCreateDescriptorPool",
+ 20075: "OP_vkDestroyDescriptorPool",
+ 20076: "OP_vkResetDescriptorPool",
+ 20077: "OP_vkAllocateDescriptorSets",
+ 20078: "OP_vkFreeDescriptorSets",
+ 20079: "OP_vkUpdateDescriptorSets",
+ 20080: "OP_vkCreateFramebuffer",
+ 20081: "OP_vkDestroyFramebuffer",
+ 20082: "OP_vkCreateRenderPass",
+ 20083: "OP_vkDestroyRenderPass",
+ 20084: "OP_vkGetRenderAreaGranularity",
+ 20085: "OP_vkCreateCommandPool",
+ 20086: "OP_vkDestroyCommandPool",
+ 20087: "OP_vkResetCommandPool",
+ 20088: "OP_vkAllocateCommandBuffers",
+ 20089: "OP_vkFreeCommandBuffers",
+ 20090: "OP_vkBeginCommandBuffer",
+ 20091: "OP_vkEndCommandBuffer",
+ 20092: "OP_vkResetCommandBuffer",
+ 20093: "OP_vkCmdBindPipeline",
+ 20094: "OP_vkCmdSetViewport",
+ 20095: "OP_vkCmdSetScissor",
+ 20096: "OP_vkCmdSetLineWidth",
+ 20097: "OP_vkCmdSetDepthBias",
+ 20098: "OP_vkCmdSetBlendConstants",
+ 20099: "OP_vkCmdSetDepthBounds",
+ 20100: "OP_vkCmdSetStencilCompareMask",
+ 20101: "OP_vkCmdSetStencilWriteMask",
+ 20102: "OP_vkCmdSetStencilReference",
+ 20103: "OP_vkCmdBindDescriptorSets",
+ 20104: "OP_vkCmdBindIndexBuffer",
+ 20105: "OP_vkCmdBindVertexBuffers",
+ 20106: "OP_vkCmdDraw",
+ 20107: "OP_vkCmdDrawIndexed",
+ 20108: "OP_vkCmdDrawIndirect",
+ 20109: "OP_vkCmdDrawIndexedIndirect",
+ 20110: "OP_vkCmdDispatch",
+ 20111: "OP_vkCmdDispatchIndirect",
+ 20112: "OP_vkCmdCopyBuffer",
+ 20113: "OP_vkCmdCopyImage",
+ 20114: "OP_vkCmdBlitImage",
+ 20115: "OP_vkCmdCopyBufferToImage",
+ 20116: "OP_vkCmdCopyImageToBuffer",
+ 20117: "OP_vkCmdUpdateBuffer",
+ 20118: "OP_vkCmdFillBuffer",
+ 20119: "OP_vkCmdClearColorImage",
+ 20120: "OP_vkCmdClearDepthStencilImage",
+ 20121: "OP_vkCmdClearAttachments",
+ 20122: "OP_vkCmdResolveImage",
+ 20123: "OP_vkCmdSetEvent",
+ 20124: "OP_vkCmdResetEvent",
+ 20125: "OP_vkCmdWaitEvents",
+ 20126: "OP_vkCmdPipelineBarrier",
+ 20127: "OP_vkCmdBeginQuery",
+ 20128: "OP_vkCmdEndQuery",
+ 20129: "OP_vkCmdResetQueryPool",
+ 20130: "OP_vkCmdWriteTimestamp",
+ 20131: "OP_vkCmdCopyQueryPoolResults",
+ 20132: "OP_vkCmdPushConstants",
+ 20133: "OP_vkCmdBeginRenderPass",
+ 20134: "OP_vkCmdNextSubpass",
+ 20135: "OP_vkCmdEndRenderPass",
+ 20136: "OP_vkCmdExecuteCommands",
+ 20137: "OP_vkEnumerateInstanceVersion",
+ 20138: "OP_vkBindBufferMemory2",
+ 20139: "OP_vkBindImageMemory2",
+ 20140: "OP_vkGetDeviceGroupPeerMemoryFeatures",
+ 20141: "OP_vkCmdSetDeviceMask",
+ 20142: "OP_vkCmdDispatchBase",
+ 20143: "OP_vkEnumeratePhysicalDeviceGroups",
+ 20144: "OP_vkGetImageMemoryRequirements2",
+ 20145: "OP_vkGetBufferMemoryRequirements2",
+ 20146: "OP_vkGetImageSparseMemoryRequirements2",
+ 20147: "OP_vkGetPhysicalDeviceFeatures2",
+ 20148: "OP_vkGetPhysicalDeviceProperties2",
+ 20149: "OP_vkGetPhysicalDeviceFormatProperties2",
+ 20150: "OP_vkGetPhysicalDeviceImageFormatProperties2",
+ 20151: "OP_vkGetPhysicalDeviceQueueFamilyProperties2",
+ 20152: "OP_vkGetPhysicalDeviceMemoryProperties2",
+ 20153: "OP_vkGetPhysicalDeviceSparseImageFormatProperties2",
+ 20154: "OP_vkTrimCommandPool",
+ 20155: "OP_vkGetDeviceQueue2",
+ 20156: "OP_vkCreateSamplerYcbcrConversion",
+ 20157: "OP_vkDestroySamplerYcbcrConversion",
+ 20158: "OP_vkCreateDescriptorUpdateTemplate",
+ 20159: "OP_vkDestroyDescriptorUpdateTemplate",
+ 20160: "OP_vkUpdateDescriptorSetWithTemplate",
+ 20161: "OP_vkGetPhysicalDeviceExternalBufferProperties",
+ 20162: "OP_vkGetPhysicalDeviceExternalFenceProperties",
+ 20163: "OP_vkGetPhysicalDeviceExternalSemaphoreProperties",
+ 20164: "OP_vkGetDescriptorSetLayoutSupport",
+ 282774587: "OP_vkCmdDrawIndirectCount",
+ 245204359: "OP_vkCmdDrawIndexedIndirectCount",
+ 279590827: "OP_vkCreateRenderPass2",
+ 235222847: "OP_vkCmdBeginRenderPass2",
+ 244873750: "OP_vkCmdNextSubpass2",
+ 221297834: "OP_vkCmdEndRenderPass2",
+ 252097672: "OP_vkResetQueryPool",
+ 267066974: "OP_vkGetSemaphoreCounterValue",
+ 224777382: "OP_vkWaitSemaphores",
+ 271024127: "OP_vkSignalSemaphore",
+ 222632266: "OP_vkGetBufferDeviceAddress",
+ 230188231: "OP_vkGetBufferOpaqueCaptureAddress",
+ 260620079: "OP_vkGetDeviceMemoryOpaqueCaptureAddress",
+ 20165: "OP_vkDestroySurfaceKHR",
+ 20166: "OP_vkGetPhysicalDeviceSurfaceSupportKHR",
+ 20167: "OP_vkGetPhysicalDeviceSurfaceCapabilitiesKHR",
+ 20168: "OP_vkGetPhysicalDeviceSurfaceFormatsKHR",
+ 20169: "OP_vkGetPhysicalDeviceSurfacePresentModesKHR",
+ 20170: "OP_vkCreateSwapchainKHR",
+ 20171: "OP_vkDestroySwapchainKHR",
+ 20172: "OP_vkGetSwapchainImagesKHR",
+ 20173: "OP_vkAcquireNextImageKHR",
+ 20174: "OP_vkQueuePresentKHR",
+ 20175: "OP_vkGetDeviceGroupPresentCapabilitiesKHR",
+ 20176: "OP_vkGetDeviceGroupSurfacePresentModesKHR",
+ 20177: "OP_vkGetPhysicalDevicePresentRectanglesKHR",
+ 20178: "OP_vkAcquireNextImage2KHR",
+ 20179: "OP_vkGetPhysicalDeviceDisplayPropertiesKHR",
+ 20180: "OP_vkGetPhysicalDeviceDisplayPlanePropertiesKHR",
+ 20181: "OP_vkGetDisplayPlaneSupportedDisplaysKHR",
+ 20182: "OP_vkGetDisplayModePropertiesKHR",
+ 20183: "OP_vkCreateDisplayModeKHR",
+ 20184: "OP_vkGetDisplayPlaneCapabilitiesKHR",
+ 20185: "OP_vkCreateDisplayPlaneSurfaceKHR",
+ 20186: "OP_vkCreateSharedSwapchainsKHR",
+ 20187: "OP_vkCreateXlibSurfaceKHR",
+ 20188: "OP_vkGetPhysicalDeviceXlibPresentationSupportKHR",
+ 20189: "OP_vkCreateXcbSurfaceKHR",
+ 20190: "OP_vkGetPhysicalDeviceXcbPresentationSupportKHR",
+ 20191: "OP_vkCreateWaylandSurfaceKHR",
+ 20192: "OP_vkGetPhysicalDeviceWaylandPresentationSupportKHR",
+ 20195: "OP_vkCreateAndroidSurfaceKHR",
+ 20196: "OP_vkCreateWin32SurfaceKHR",
+ 20197: "OP_vkGetPhysicalDeviceWin32PresentationSupportKHR",
+ 20198: "OP_vkGetPhysicalDeviceFeatures2KHR",
+ 20199: "OP_vkGetPhysicalDeviceProperties2KHR",
+ 20200: "OP_vkGetPhysicalDeviceFormatProperties2KHR",
+ 20201: "OP_vkGetPhysicalDeviceImageFormatProperties2KHR",
+ 20202: "OP_vkGetPhysicalDeviceQueueFamilyProperties2KHR",
+ 20203: "OP_vkGetPhysicalDeviceMemoryProperties2KHR",
+ 20204: "OP_vkGetPhysicalDeviceSparseImageFormatProperties2KHR",
+ 20205: "OP_vkGetDeviceGroupPeerMemoryFeaturesKHR",
+ 20206: "OP_vkCmdSetDeviceMaskKHR",
+ 20207: "OP_vkCmdDispatchBaseKHR",
+ 20208: "OP_vkTrimCommandPoolKHR",
+ 20209: "OP_vkEnumeratePhysicalDeviceGroupsKHR",
+ 20210: "OP_vkGetPhysicalDeviceExternalBufferPropertiesKHR",
+ 20211: "OP_vkGetMemoryWin32HandleKHR",
+ 20212: "OP_vkGetMemoryWin32HandlePropertiesKHR",
+ 20213: "OP_vkGetMemoryFdKHR",
+ 20214: "OP_vkGetMemoryFdPropertiesKHR",
+ 20215: "OP_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR",
+ 20216: "OP_vkImportSemaphoreWin32HandleKHR",
+ 20217: "OP_vkGetSemaphoreWin32HandleKHR",
+ 20218: "OP_vkImportSemaphoreFdKHR",
+ 20219: "OP_vkGetSemaphoreFdKHR",
+ 20220: "OP_vkCmdPushDescriptorSetKHR",
+ 20221: "OP_vkCmdPushDescriptorSetWithTemplateKHR",
+ 20222: "OP_vkCreateDescriptorUpdateTemplateKHR",
+ 20223: "OP_vkDestroyDescriptorUpdateTemplateKHR",
+ 20224: "OP_vkUpdateDescriptorSetWithTemplateKHR",
+ 20225: "OP_vkCreateRenderPass2KHR",
+ 20226: "OP_vkCmdBeginRenderPass2KHR",
+ 20227: "OP_vkCmdNextSubpass2KHR",
+ 20228: "OP_vkCmdEndRenderPass2KHR",
+ 20229: "OP_vkGetSwapchainStatusKHR",
+ 20230: "OP_vkGetPhysicalDeviceExternalFencePropertiesKHR",
+ 20231: "OP_vkImportFenceWin32HandleKHR",
+ 20232: "OP_vkGetFenceWin32HandleKHR",
+ 20233: "OP_vkImportFenceFdKHR",
+ 20234: "OP_vkGetFenceFdKHR",
+ 299033148: "OP_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR",
+ 282029987: "OP_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR",
+ 238952296: "OP_vkAcquireProfilingLockKHR",
+ 223904011: "OP_vkReleaseProfilingLockKHR",
+ 20235: "OP_vkGetPhysicalDeviceSurfaceCapabilities2KHR",
+ 20236: "OP_vkGetPhysicalDeviceSurfaceFormats2KHR",
+ 20237: "OP_vkGetPhysicalDeviceDisplayProperties2KHR",
+ 20238: "OP_vkGetPhysicalDeviceDisplayPlaneProperties2KHR",
+ 20239: "OP_vkGetDisplayModeProperties2KHR",
+ 20240: "OP_vkGetDisplayPlaneCapabilities2KHR",
+ 20241: "OP_vkGetImageMemoryRequirements2KHR",
+ 20242: "OP_vkGetBufferMemoryRequirements2KHR",
+ 20243: "OP_vkGetImageSparseMemoryRequirements2KHR",
+ 20244: "OP_vkCreateSamplerYcbcrConversionKHR",
+ 20245: "OP_vkDestroySamplerYcbcrConversionKHR",
+ 20246: "OP_vkBindBufferMemory2KHR",
+ 20247: "OP_vkBindImageMemory2KHR",
+ 20248: "OP_vkGetDescriptorSetLayoutSupportKHR",
+ 20249: "OP_vkCmdDrawIndirectCountKHR",
+ 20250: "OP_vkCmdDrawIndexedIndirectCountKHR",
+ 229059496: "OP_vkGetSemaphoreCounterValueKHR",
+ 263904357: "OP_vkWaitSemaphoresKHR",
+ 269919108: "OP_vkSignalSemaphoreKHR",
+ 272978593: "OP_vkGetPhysicalDeviceFragmentShadingRatesKHR",
+ 204060280: "OP_vkCmdSetFragmentShadingRateKHR",
+ 219261480: "OP_vkGetBufferDeviceAddressKHR",
+ 285631711: "OP_vkGetBufferOpaqueCaptureAddressKHR",
+ 294671624: "OP_vkGetDeviceMemoryOpaqueCaptureAddressKHR",
+ 274342644: "OP_vkCreateDeferredOperationKHR",
+ 215419514: "OP_vkDestroyDeferredOperationKHR",
+ 203387076: "OP_vkGetDeferredOperationMaxConcurrencyKHR",
+ 263822960: "OP_vkGetDeferredOperationResultKHR",
+ 218492930: "OP_vkDeferredOperationJoinKHR",
+ 269458798: "OP_vkGetPipelineExecutablePropertiesKHR",
+ 271191699: "OP_vkGetPipelineExecutableStatisticsKHR",
+ 274148497: "OP_vkGetPipelineExecutableInternalRepresentationsKHR",
+ 247893766: "OP_vkCmdCopyBuffer2KHR",
+ 227008250: "OP_vkCmdCopyImage2KHR",
+ 248841963: "OP_vkCmdCopyBufferToImage2KHR",
+ 252249060: "OP_vkCmdCopyImageToBuffer2KHR",
+ 259838288: "OP_vkCmdBlitImage2KHR",
+ 254857232: "OP_vkCmdResolveImage2KHR",
+ 20251: "OP_vkGetSwapchainGrallocUsageANDROID",
+ 20252: "OP_vkAcquireImageANDROID",
+ 20253: "OP_vkQueueSignalReleaseImageANDROID",
+ 20254: "OP_vkCreateDebugReportCallbackEXT",
+ 20255: "OP_vkDestroyDebugReportCallbackEXT",
+ 20256: "OP_vkDebugReportMessageEXT",
+ 20257: "OP_vkDebugMarkerSetObjectTagEXT",
+ 20258: "OP_vkDebugMarkerSetObjectNameEXT",
+ 20259: "OP_vkCmdDebugMarkerBeginEXT",
+ 20260: "OP_vkCmdDebugMarkerEndEXT",
+ 20261: "OP_vkCmdDebugMarkerInsertEXT",
+ 267779978: "OP_vkCmdBindTransformFeedbackBuffersEXT",
+ 294396901: "OP_vkCmdBeginTransformFeedbackEXT",
+ 272333731: "OP_vkCmdEndTransformFeedbackEXT",
+ 275810601: "OP_vkCmdBeginQueryIndexedEXT",
+ 279821337: "OP_vkCmdEndQueryIndexedEXT",
+ 285235943: "OP_vkCmdDrawIndirectByteCountEXT",
+ 204379647: "OP_vkGetImageViewHandleNVX",
+ 210668576: "OP_vkGetImageViewAddressNVX",
+ 20262: "OP_vkCmdDrawIndirectCountAMD",
+ 20263: "OP_vkCmdDrawIndexedIndirectCountAMD",
+ 20264: "OP_vkGetShaderInfoAMD",
+ 241902685: "OP_vkCreateStreamDescriptorSurfaceGGP",
+ 20265: "OP_vkGetPhysicalDeviceExternalImageFormatPropertiesNV",
+ 20266: "OP_vkGetMemoryWin32HandleNV",
+ 20267: "OP_vkCreateViSurfaceNN",
+ 20268: "OP_vkCmdBeginConditionalRenderingEXT",
+ 20269: "OP_vkCmdEndConditionalRenderingEXT",
+ 20279: "OP_vkCmdSetViewportWScalingNV",
+ 20280: "OP_vkReleaseDisplayEXT",
+ 20281: "OP_vkAcquireXlibDisplayEXT",
+ 20282: "OP_vkGetRandROutputDisplayEXT",
+ 20283: "OP_vkGetPhysicalDeviceSurfaceCapabilities2EXT",
+ 20284: "OP_vkDisplayPowerControlEXT",
+ 20285: "OP_vkRegisterDeviceEventEXT",
+ 20286: "OP_vkRegisterDisplayEventEXT",
+ 20287: "OP_vkGetSwapchainCounterEXT",
+ 20288: "OP_vkGetRefreshCycleDurationGOOGLE",
+ 20289: "OP_vkGetPastPresentationTimingGOOGLE",
+ 20290: "OP_vkCmdSetDiscardRectangleEXT",
+ 20291: "OP_vkSetHdrMetadataEXT",
+ 20292: "OP_vkCreateIOSSurfaceMVK",
+ 20293: "OP_vkCreateMacOSSurfaceMVK",
+ 20334: "OP_vkGetMTLDeviceMVK",
+ 20335: "OP_vkSetMTLTextureMVK",
+ 20336: "OP_vkGetMTLTextureMVK",
+ 20337: "OP_vkGetMTLBufferMVK",
+ 20338: "OP_vkUseIOSurfaceMVK",
+ 20339: "OP_vkGetIOSurfaceMVK",
+ 20294: "OP_vkSetDebugUtilsObjectNameEXT",
+ 20295: "OP_vkSetDebugUtilsObjectTagEXT",
+ 20296: "OP_vkQueueBeginDebugUtilsLabelEXT",
+ 20297: "OP_vkQueueEndDebugUtilsLabelEXT",
+ 20298: "OP_vkQueueInsertDebugUtilsLabelEXT",
+ 20299: "OP_vkCmdBeginDebugUtilsLabelEXT",
+ 20300: "OP_vkCmdEndDebugUtilsLabelEXT",
+ 20301: "OP_vkCmdInsertDebugUtilsLabelEXT",
+ 20302: "OP_vkCreateDebugUtilsMessengerEXT",
+ 20303: "OP_vkDestroyDebugUtilsMessengerEXT",
+ 20304: "OP_vkSubmitDebugUtilsMessageEXT",
+ 20305: "OP_vkGetAndroidHardwareBufferPropertiesANDROID",
+ 20306: "OP_vkGetMemoryAndroidHardwareBufferANDROID",
+ 20307: "OP_vkCmdSetSampleLocationsEXT",
+ 20308: "OP_vkGetPhysicalDeviceMultisamplePropertiesEXT",
+ 251301237: "OP_vkGetImageDrmFormatModifierPropertiesEXT",
+ 20309: "OP_vkCreateValidationCacheEXT",
+ 20310: "OP_vkDestroyValidationCacheEXT",
+ 20311: "OP_vkMergeValidationCachesEXT",
+ 20312: "OP_vkGetValidationCacheDataEXT",
+ 238618340: "OP_vkCmdBindShadingRateImageNV",
+ 215295078: "OP_vkCmdSetViewportShadingRatePaletteNV",
+ 236858637: "OP_vkCmdSetCoarseSampleOrderNV",
+ 259713020: "OP_vkCreateAccelerationStructureNV",
+ 252775746: "OP_vkDestroyAccelerationStructureNV",
+ 220234370: "OP_vkGetAccelerationStructureMemoryRequirementsNV",
+ 202856743: "OP_vkBindAccelerationStructureMemoryNV",
+ 269050897: "OP_vkCmdBuildAccelerationStructureNV",
+ 211075498: "OP_vkCmdCopyAccelerationStructureNV",
+ 210219912: "OP_vkCmdTraceRaysNV",
+ 203653638: "OP_vkCreateRayTracingPipelinesNV",
+ 271962641: "OP_vkGetRayTracingShaderGroupHandlesKHR",
+ 230045846: "OP_vkGetRayTracingShaderGroupHandlesNV",
+ 269898134: "OP_vkGetAccelerationStructureHandleNV",
+ 207954431: "OP_vkCmdWriteAccelerationStructuresPropertiesNV",
+ 278731610: "OP_vkCompileDeferredNV",
+ 20313: "OP_vkGetMemoryHostPointerPropertiesEXT",
+ 20314: "OP_vkCmdWriteBufferMarkerAMD",
+ 295643221: "OP_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT",
+ 203583186: "OP_vkGetCalibratedTimestampsEXT",
+ 207334931: "OP_vkCmdDrawMeshTasksNV",
+ 274079208: "OP_vkCmdDrawMeshTasksIndirectNV",
+ 223801967: "OP_vkCmdDrawMeshTasksIndirectCountNV",
+ 225408194: "OP_vkCmdSetExclusiveScissorNV",
+ 20315: "OP_vkCmdSetCheckpointNV",
+ 20316: "OP_vkGetQueueCheckpointDataNV",
+ 203336121: "OP_vkInitializePerformanceApiINTEL",
+ 296137321: "OP_vkUninitializePerformanceApiINTEL",
+ 270016385: "OP_vkCmdSetPerformanceMarkerINTEL",
+ 261519634: "OP_vkCmdSetPerformanceStreamMarkerINTEL",
+ 251310287: "OP_vkCmdSetPerformanceOverrideINTEL",
+ 245737492: "OP_vkAcquirePerformanceConfigurationINTEL",
+ 252877217: "OP_vkReleasePerformanceConfigurationINTEL",
+ 294947726: "OP_vkQueueSetPerformanceConfigurationINTEL",
+ 213620482: "OP_vkGetPerformanceParameterINTEL",
+ 267533472: "OP_vkSetLocalDimmingAMD",
+ 261626137: "OP_vkCreateImagePipeSurfaceFUCHSIA",
+ 254915953: "OP_vkCreateMetalSurfaceEXT",
+ 224361693: "OP_vkGetBufferDeviceAddressEXT",
+ 282247593: "OP_vkGetPhysicalDeviceToolPropertiesEXT",
+ 287711429: "OP_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV",
+ 292032159: "OP_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV",
+ 268126279: "OP_vkGetPhysicalDeviceSurfacePresentModes2EXT",
+ 200946668: "OP_vkAcquireFullScreenExclusiveModeEXT",
+ 257629142: "OP_vkReleaseFullScreenExclusiveModeEXT",
+ 206369543: "OP_vkGetDeviceGroupSurfacePresentModes2EXT",
+ 298411290: "OP_vkCreateHeadlessSurfaceEXT",
+ 263855692: "OP_vkCmdSetLineStippleEXT",
+ 242995959: "OP_vkResetQueryPoolEXT",
+ 266285895: "OP_vkCmdSetCullModeEXT",
+ 212644406: "OP_vkCmdSetFrontFaceEXT",
+ 260783979: "OP_vkCmdSetPrimitiveTopologyEXT",
+ 257105245: "OP_vkCmdSetViewportWithCountEXT",
+ 204588120: "OP_vkCmdSetScissorWithCountEXT",
+ 243419921: "OP_vkCmdBindVertexBuffers2EXT",
+ 233771166: "OP_vkCmdSetDepthTestEnableEXT",
+ 218663304: "OP_vkCmdSetDepthWriteEnableEXT",
+ 247761589: "OP_vkCmdSetDepthCompareOpEXT",
+ 223213519: "OP_vkCmdSetDepthBoundsTestEnableEXT",
+ 286438749: "OP_vkCmdSetStencilTestEnableEXT",
+ 277159578: "OP_vkCmdSetStencilOpEXT",
+ 249047049: "OP_vkGetGeneratedCommandsMemoryRequirementsNV",
+ 297624330: "OP_vkCmdPreprocessGeneratedCommandsNV",
+ 234711184: "OP_vkCmdExecuteGeneratedCommandsNV",
+ 270362239: "OP_vkCmdBindPipelineShaderGroupNV",
+ 285310710: "OP_vkCreateIndirectCommandsLayoutNV",
+ 292584135: "OP_vkDestroyIndirectCommandsLayoutNV",
+ 236374049: "OP_vkCreatePrivateDataSlotEXT",
+ 208891309: "OP_vkDestroyPrivateDataSlotEXT",
+ 225259406: "OP_vkSetPrivateDataEXT",
+ 291399427: "OP_vkGetPrivateDataEXT",
+ 264649847: "OP_vkCmdSetFragmentShadingRateEnumNV",
+ 220792403: "OP_vkCreateDirectFBSurfaceEXT",
+ 285441990: "OP_vkGetPhysicalDeviceDirectFBPresentationSupportEXT",
+ 20318: "OP_vkRegisterImageColorBufferGOOGLE",
+ 20319: "OP_vkRegisterBufferColorBufferGOOGLE",
+ 20317: "OP_vkMapMemoryIntoAddressSpaceGOOGLE",
+ 20320: "OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE",
+ 20321: "OP_vkBeginCommandBufferAsyncGOOGLE",
+ 20322: "OP_vkEndCommandBufferAsyncGOOGLE",
+ 20323: "OP_vkResetCommandBufferAsyncGOOGLE",
+ 20324: "OP_vkCommandBufferHostSyncGOOGLE",
+ 20325: "OP_vkCreateImageWithRequirementsGOOGLE",
+ 20326: "OP_vkCreateBufferWithRequirementsGOOGLE",
+ 20327: "OP_vkGetMemoryHostAddressInfoGOOGLE",
+ 20328: "OP_vkFreeMemorySyncGOOGLE",
+ 20329: "OP_vkQueueHostSyncGOOGLE",
+ 20330: "OP_vkQueueSubmitAsyncGOOGLE",
+ 20331: "OP_vkQueueWaitIdleAsyncGOOGLE",
+ 20332: "OP_vkQueueBindSparseAsyncGOOGLE",
+ 20333: "OP_vkGetLinearImageLayoutGOOGLE",
+ 20340: "OP_vkQueueFlushCommandsGOOGLE",
+ 267932433: "OP_vkQueueCommitDescriptorSetUpdatesGOOGLE",
+ 213659202: "OP_vkCollectDescriptorPoolIdsGOOGLE",
+ 243985229: "OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE",
+ 259403971: "OP_vkCreateAccelerationStructureKHR",
+ 223971120: "OP_vkDestroyAccelerationStructureKHR",
+ 272943905: "OP_vkCmdBuildAccelerationStructuresKHR",
+ 258066143: "OP_vkCmdBuildAccelerationStructuresIndirectKHR",
+ 241919567: "OP_vkBuildAccelerationStructuresKHR",
+ 241495016: "OP_vkCopyAccelerationStructureKHR",
+ 256139578: "OP_vkCopyAccelerationStructureToMemoryKHR",
+ 261558680: "OP_vkCopyMemoryToAccelerationStructureKHR",
+ 289745796: "OP_vkWriteAccelerationStructuresPropertiesKHR",
+ 279460332: "OP_vkCmdCopyAccelerationStructureKHR",
+ 223539733: "OP_vkCmdCopyAccelerationStructureToMemoryKHR",
+ 203733963: "OP_vkCmdCopyMemoryToAccelerationStructureKHR",
+ 223466148: "OP_vkGetAccelerationStructureDeviceAddressKHR",
+ 271696183: "OP_vkCmdWriteAccelerationStructuresPropertiesKHR",
+ 266386590: "OP_vkGetDeviceAccelerationStructureCompatibilityKHR",
+ 219720024: "OP_vkGetAccelerationStructureBuildSizesKHR",
+ 213680716: "OP_vkCmdTraceRaysKHR",
+ 247628685: "OP_vkCreateRayTracingPipelinesKHR",
+ 221334934: "OP_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR",
+ 211788517: "OP_vkCmdTraceRaysIndirectKHR",
+ 205271933: "OP_vkGetRayTracingShaderGroupStackSizeKHR",
+ 260219604: "OP_vkCmdSetRayTracingPipelineStackSizeKHR",
+
+ ###############################################################################################
+ # Render Control opcodes
+ # http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/stream-servers/renderControl_dec/renderControl_opcodes.h
+ ###############################################################################################
+ 10000: "OP_rcGetRendererVersion",
+ 10001: "OP_rcGetEGLVersion",
+ 10002: "OP_rcQueryEGLString",
+ 10003: "OP_rcGetGLString",
+ 10004: "OP_rcGetNumConfigs",
+ 10005: "OP_rcGetConfigs",
+ 10006: "OP_rcChooseConfig",
+ 10007: "OP_rcGetFBParam",
+ 10008: "OP_rcCreateContext",
+ 10009: "OP_rcDestroyContext",
+ 10010: "OP_rcCreateWindowSurface",
+ 10011: "OP_rcDestroyWindowSurface",
+ 10012: "OP_rcCreateColorBuffer",
+ 10013: "OP_rcOpenColorBuffer",
+ 10014: "OP_rcCloseColorBuffer",
+ 10015: "OP_rcSetWindowColorBuffer",
+ 10016: "OP_rcFlushWindowColorBuffer",
+ 10017: "OP_rcMakeCurrent",
+ 10018: "OP_rcFBPost",
+ 10019: "OP_rcFBSetSwapInterval",
+ 10020: "OP_rcBindTexture",
+ 10021: "OP_rcBindRenderbuffer",
+ 10022: "OP_rcColorBufferCacheFlush",
+ 10023: "OP_rcReadColorBuffer",
+ 10024: "OP_rcUpdateColorBuffer",
+ 10025: "OP_rcOpenColorBuffer2",
+ 10026: "OP_rcCreateClientImage",
+ 10027: "OP_rcDestroyClientImage",
+ 10028: "OP_rcSelectChecksumHelper",
+ 10029: "OP_rcCreateSyncKHR",
+ 10030: "OP_rcClientWaitSyncKHR",
+ 10031: "OP_rcFlushWindowColorBufferAsync",
+ 10032: "OP_rcDestroySyncKHR",
+ 10033: "OP_rcSetPuid",
+ 10034: "OP_rcUpdateColorBufferDMA",
+ 10035: "OP_rcCreateColorBufferDMA",
+ 10036: "OP_rcWaitSyncKHR",
+ 10037: "OP_rcCompose",
+ 10038: "OP_rcCreateDisplay",
+ 10039: "OP_rcDestroyDisplay",
+ 10040: "OP_rcSetDisplayColorBuffer",
+ 10041: "OP_rcGetDisplayColorBuffer",
+ 10042: "OP_rcGetColorBufferDisplay",
+ 10043: "OP_rcGetDisplayPose",
+ 10044: "OP_rcSetDisplayPose",
+ 10045: "OP_rcSetColorBufferVulkanMode",
+ 10046: "OP_rcReadColorBufferYUV",
+ 10047: "OP_rcIsSyncSignaled",
+ 10048: "OP_rcCreateColorBufferWithHandle",
+ 10049: "OP_rcCreateBuffer",
+ 10050: "OP_rcCloseBuffer",
+ 10051: "OP_rcSetColorBufferVulkanMode2",
+ 10052: "OP_rcMapGpaToBufferHandle",
+ 10053: "OP_rcCreateBuffer2",
+ 10054: "OP_rcMapGpaToBufferHandle2",
+ 10055: "OP_rcFlushWindowColorBufferAsyncWithFrameNumber",
+ 10056: "OP_rcSetTracingForPuid",
+ 10057: "OP_rcMakeCurrentAsync",
+ 10058: "OP_rcComposeAsync",
+ 10059: "OP_rcDestroySyncKHRAsync",
+ 10060: "OP_rcComposeWithoutPost",
+ 10061: "OP_rcComposeAsyncWithoutPost",
+ 10062: "OP_rcCreateDisplayById",
+ 10063: "OP_rcSetDisplayPoseDpi",
+ 10064: "OP_rcReadColorBufferDMA",
+
+ ###############################################################################################
+ # GLES1 opcodes
+ # http://source/android/device/generic/vulkan-cereal/stream-servers/gles1_dec/gles1_opcodes.h
+ ###############################################################################################
+ 1024: "OP_glAlphaFunc",
+ 1025: "OP_glClearColor",
+ 1026: "OP_glClearDepthf",
+ 1027: "OP_glClipPlanef",
+ 1028: "OP_glColor4f",
+ 1029: "OP_glDepthRangef",
+ 1030: "OP_glFogf",
+ 1031: "OP_glFogfv",
+ 1032: "OP_glFrustumf",
+ 1033: "OP_glGetClipPlanef",
+ 1034: "OP_glGetFloatv",
+ 1035: "OP_glGetLightfv",
+ 1036: "OP_glGetMaterialfv",
+ 1037: "OP_glGetTexEnvfv",
+ 1038: "OP_glGetTexParameterfv",
+ 1039: "OP_glLightModelf",
+ 1040: "OP_glLightModelfv",
+ 1041: "OP_glLightf",
+ 1042: "OP_glLightfv",
+ 1043: "OP_glLineWidth",
+ 1044: "OP_glLoadMatrixf",
+ 1045: "OP_glMaterialf",
+ 1046: "OP_glMaterialfv",
+ 1047: "OP_glMultMatrixf",
+ 1048: "OP_glMultiTexCoord4f",
+ 1049: "OP_glNormal3f",
+ 1050: "OP_glOrthof",
+ 1051: "OP_glPointParameterf",
+ 1052: "OP_glPointParameterfv",
+ 1053: "OP_glPointSize",
+ 1054: "OP_glPolygonOffset",
+ 1055: "OP_glRotatef",
+ 1056: "OP_glScalef",
+ 1057: "OP_glTexEnvf",
+ 1058: "OP_glTexEnvfv",
+ 1059: "OP_glTexParameterf",
+ 1060: "OP_glTexParameterfv",
+ 1061: "OP_glTranslatef",
+ 1062: "OP_glActiveTexture",
+ 1063: "OP_glAlphaFuncx",
+ 1064: "OP_glBindBuffer",
+ 1065: "OP_glBindTexture",
+ 1066: "OP_glBlendFunc",
+ 1067: "OP_glBufferData",
+ 1068: "OP_glBufferSubData",
+ 1069: "OP_glClear",
+ 1070: "OP_glClearColorx",
+ 1071: "OP_glClearDepthx",
+ 1072: "OP_glClearStencil",
+ 1073: "OP_glClientActiveTexture",
+ 1074: "OP_glColor4ub",
+ 1075: "OP_glColor4x",
+ 1076: "OP_glColorMask",
+ 1077: "OP_glColorPointer",
+ 1078: "OP_glCompressedTexImage2D",
+ 1079: "OP_glCompressedTexSubImage2D",
+ 1080: "OP_glCopyTexImage2D",
+ 1081: "OP_glCopyTexSubImage2D",
+ 1082: "OP_glCullFace",
+ 1083: "OP_glDeleteBuffers",
+ 1084: "OP_glDeleteTextures",
+ 1085: "OP_glDepthFunc",
+ 1086: "OP_glDepthMask",
+ 1087: "OP_glDepthRangex",
+ 1088: "OP_glDisable",
+ 1089: "OP_glDisableClientState",
+ 1090: "OP_glDrawArrays",
+ 1091: "OP_glDrawElements",
+ 1092: "OP_glEnable",
+ 1093: "OP_glEnableClientState",
+ 1094: "OP_glFinish",
+ 1095: "OP_glFlush",
+ 1096: "OP_glFogx",
+ 1097: "OP_glFogxv",
+ 1098: "OP_glFrontFace",
+ 1099: "OP_glFrustumx",
+ 1100: "OP_glGetBooleanv",
+ 1101: "OP_glGetBufferParameteriv",
+ 1102: "OP_glClipPlanex",
+ 1103: "OP_glGenBuffers",
+ 1104: "OP_glGenTextures",
+ 1105: "OP_glGetError",
+ 1106: "OP_glGetFixedv",
+ 1107: "OP_glGetIntegerv",
+ 1108: "OP_glGetLightxv",
+ 1109: "OP_glGetMaterialxv",
+ 1110: "OP_glGetPointerv",
+ 1111: "OP_glGetString",
+ 1112: "OP_glGetTexEnviv",
+ 1113: "OP_glGetTexEnvxv",
+ 1114: "OP_glGetTexParameteriv",
+ 1115: "OP_glGetTexParameterxv",
+ 1116: "OP_glHint",
+ 1117: "OP_glIsBuffer",
+ 1118: "OP_glIsEnabled",
+ 1119: "OP_glIsTexture",
+ 1120: "OP_glLightModelx",
+ 1121: "OP_glLightModelxv",
+ 1122: "OP_glLightx",
+ 1123: "OP_glLightxv",
+ 1124: "OP_glLineWidthx",
+ 1125: "OP_glLoadIdentity",
+ 1126: "OP_glLoadMatrixx",
+ 1127: "OP_glLogicOp",
+ 1128: "OP_glMaterialx",
+ 1129: "OP_glMaterialxv",
+ 1130: "OP_glMatrixMode",
+ 1131: "OP_glMultMatrixx",
+ 1132: "OP_glMultiTexCoord4x",
+ 1133: "OP_glNormal3x",
+ 1134: "OP_glNormalPointer",
+ 1135: "OP_glOrthox",
+ 1136: "OP_glPixelStorei",
+ 1137: "OP_glPointParameterx",
+ 1138: "OP_glPointParameterxv",
+ 1139: "OP_glPointSizex",
+ 1140: "OP_glPolygonOffsetx",
+ 1141: "OP_glPopMatrix",
+ 1142: "OP_glPushMatrix",
+ 1143: "OP_glReadPixels",
+ 1144: "OP_glRotatex",
+ 1145: "OP_glSampleCoverage",
+ 1146: "OP_glSampleCoveragex",
+ 1147: "OP_glScalex",
+ 1148: "OP_glScissor",
+ 1149: "OP_glShadeModel",
+ 1150: "OP_glStencilFunc",
+ 1151: "OP_glStencilMask",
+ 1152: "OP_glStencilOp",
+ 1153: "OP_glTexCoordPointer",
+ 1154: "OP_glTexEnvi",
+ 1155: "OP_glTexEnvx",
+ 1156: "OP_glTexEnviv",
+ 1157: "OP_glTexEnvxv",
+ 1158: "OP_glTexImage2D",
+ 1159: "OP_glTexParameteri",
+ 1160: "OP_glTexParameterx",
+ 1161: "OP_glTexParameteriv",
+ 1162: "OP_glTexParameterxv",
+ 1163: "OP_glTexSubImage2D",
+ 1164: "OP_glTranslatex",
+ 1165: "OP_glVertexPointer",
+ 1166: "OP_glViewport",
+ 1167: "OP_glPointSizePointerOES",
+ 1168: "OP_glVertexPointerOffset",
+ 1169: "OP_glColorPointerOffset",
+ 1170: "OP_glNormalPointerOffset",
+ 1171: "OP_glPointSizePointerOffset",
+ 1172: "OP_glTexCoordPointerOffset",
+ 1173: "OP_glWeightPointerOffset",
+ 1174: "OP_glMatrixIndexPointerOffset",
+ 1175: "OP_glVertexPointerData",
+ 1176: "OP_glColorPointerData",
+ 1177: "OP_glNormalPointerData",
+ 1178: "OP_glTexCoordPointerData",
+ 1179: "OP_glPointSizePointerData",
+ 1180: "OP_glWeightPointerData",
+ 1181: "OP_glMatrixIndexPointerData",
+ 1182: "OP_glDrawElementsOffset",
+ 1183: "OP_glDrawElementsData",
+ 1184: "OP_glGetCompressedTextureFormats",
+ 1185: "OP_glFinishRoundTrip",
+ 1186: "OP_glBlendEquationSeparateOES",
+ 1187: "OP_glBlendFuncSeparateOES",
+ 1188: "OP_glBlendEquationOES",
+ 1189: "OP_glDrawTexsOES",
+ 1190: "OP_glDrawTexiOES",
+ 1191: "OP_glDrawTexxOES",
+ 1192: "OP_glDrawTexsvOES",
+ 1193: "OP_glDrawTexivOES",
+ 1194: "OP_glDrawTexxvOES",
+ 1195: "OP_glDrawTexfOES",
+ 1196: "OP_glDrawTexfvOES",
+ 1197: "OP_glEGLImageTargetTexture2DOES",
+ 1198: "OP_glEGLImageTargetRenderbufferStorageOES",
+ 1199: "OP_glAlphaFuncxOES",
+ 1200: "OP_glClearColorxOES",
+ 1201: "OP_glClearDepthxOES",
+ 1202: "OP_glClipPlanexOES",
+ 1203: "OP_glClipPlanexIMG",
+ 1204: "OP_glColor4xOES",
+ 1205: "OP_glDepthRangexOES",
+ 1206: "OP_glFogxOES",
+ 1207: "OP_glFogxvOES",
+ 1208: "OP_glFrustumxOES",
+ 1209: "OP_glGetClipPlanexOES",
+ 1210: "OP_glGetClipPlanex",
+ 1211: "OP_glGetFixedvOES",
+ 1212: "OP_glGetLightxvOES",
+ 1213: "OP_glGetMaterialxvOES",
+ 1214: "OP_glGetTexEnvxvOES",
+ 1215: "OP_glGetTexParameterxvOES",
+ 1216: "OP_glLightModelxOES",
+ 1217: "OP_glLightModelxvOES",
+ 1218: "OP_glLightxOES",
+ 1219: "OP_glLightxvOES",
+ 1220: "OP_glLineWidthxOES",
+ 1221: "OP_glLoadMatrixxOES",
+ 1222: "OP_glMaterialxOES",
+ 1223: "OP_glMaterialxvOES",
+ 1224: "OP_glMultMatrixxOES",
+ 1225: "OP_glMultiTexCoord4xOES",
+ 1226: "OP_glNormal3xOES",
+ 1227: "OP_glOrthoxOES",
+ 1228: "OP_glPointParameterxOES",
+ 1229: "OP_glPointParameterxvOES",
+ 1230: "OP_glPointSizexOES",
+ 1231: "OP_glPolygonOffsetxOES",
+ 1232: "OP_glRotatexOES",
+ 1233: "OP_glSampleCoveragexOES",
+ 1234: "OP_glScalexOES",
+ 1235: "OP_glTexEnvxOES",
+ 1236: "OP_glTexEnvxvOES",
+ 1237: "OP_glTexParameterxOES",
+ 1238: "OP_glTexParameterxvOES",
+ 1239: "OP_glTranslatexOES",
+ 1240: "OP_glIsRenderbufferOES",
+ 1241: "OP_glBindRenderbufferOES",
+ 1242: "OP_glDeleteRenderbuffersOES",
+ 1243: "OP_glGenRenderbuffersOES",
+ 1244: "OP_glRenderbufferStorageOES",
+ 1245: "OP_glGetRenderbufferParameterivOES",
+ 1246: "OP_glIsFramebufferOES",
+ 1247: "OP_glBindFramebufferOES",
+ 1248: "OP_glDeleteFramebuffersOES",
+ 1249: "OP_glGenFramebuffersOES",
+ 1250: "OP_glCheckFramebufferStatusOES",
+ 1251: "OP_glFramebufferRenderbufferOES",
+ 1252: "OP_glFramebufferTexture2DOES",
+ 1253: "OP_glGetFramebufferAttachmentParameterivOES",
+ 1254: "OP_glGenerateMipmapOES",
+ 1255: "OP_glMapBufferOES",
+ 1256: "OP_glUnmapBufferOES",
+ 1257: "OP_glGetBufferPointervOES",
+ 1258: "OP_glCurrentPaletteMatrixOES",
+ 1259: "OP_glLoadPaletteFromModelViewMatrixOES",
+ 1260: "OP_glMatrixIndexPointerOES",
+ 1261: "OP_glWeightPointerOES",
+ 1262: "OP_glQueryMatrixxOES",
+ 1263: "OP_glDepthRangefOES",
+ 1264: "OP_glFrustumfOES",
+ 1265: "OP_glOrthofOES",
+ 1266: "OP_glClipPlanefOES",
+ 1267: "OP_glClipPlanefIMG",
+ 1268: "OP_glGetClipPlanefOES",
+ 1269: "OP_glClearDepthfOES",
+ 1270: "OP_glTexGenfOES",
+ 1271: "OP_glTexGenfvOES",
+ 1272: "OP_glTexGeniOES",
+ 1273: "OP_glTexGenivOES",
+ 1274: "OP_glTexGenxOES",
+ 1275: "OP_glTexGenxvOES",
+ 1276: "OP_glGetTexGenfvOES",
+ 1277: "OP_glGetTexGenivOES",
+ 1278: "OP_glGetTexGenxvOES",
+ 1279: "OP_glBindVertexArrayOES",
+ 1280: "OP_glDeleteVertexArraysOES",
+ 1281: "OP_glGenVertexArraysOES",
+ 1282: "OP_glIsVertexArrayOES",
+ 1283: "OP_glDiscardFramebufferEXT",
+ 1284: "OP_glMultiDrawArraysEXT",
+ 1285: "OP_glMultiDrawElementsEXT",
+ 1286: "OP_glMultiDrawArraysSUN",
+ 1287: "OP_glMultiDrawElementsSUN",
+ 1288: "OP_glRenderbufferStorageMultisampleIMG",
+ 1289: "OP_glFramebufferTexture2DMultisampleIMG",
+ 1290: "OP_glDeleteFencesNV",
+ 1291: "OP_glGenFencesNV",
+ 1292: "OP_glIsFenceNV",
+ 1293: "OP_glTestFenceNV",
+ 1294: "OP_glGetFenceivNV",
+ 1295: "OP_glFinishFenceNV",
+ 1296: "OP_glSetFenceNV",
+ 1297: "OP_glGetDriverControlsQCOM",
+ 1298: "OP_glGetDriverControlStringQCOM",
+ 1299: "OP_glEnableDriverControlQCOM",
+ 1300: "OP_glDisableDriverControlQCOM",
+ 1301: "OP_glExtGetTexturesQCOM",
+ 1302: "OP_glExtGetBuffersQCOM",
+ 1303: "OP_glExtGetRenderbuffersQCOM",
+ 1304: "OP_glExtGetFramebuffersQCOM",
+ 1305: "OP_glExtGetTexLevelParameterivQCOM",
+ 1306: "OP_glExtTexObjectStateOverrideiQCOM",
+ 1307: "OP_glExtGetTexSubImageQCOM",
+ 1308: "OP_glExtGetBufferPointervQCOM",
+ 1309: "OP_glExtGetShadersQCOM",
+ 1310: "OP_glExtGetProgramsQCOM",
+ 1311: "OP_glExtIsProgramBinaryQCOM",
+ 1312: "OP_glExtGetProgramBinarySourceQCOM",
+ 1313: "OP_glStartTilingQCOM",
+ 1314: "OP_glEndTilingQCOM",
+ 1315: "OP_glGetGraphicsResetStatusEXT",
+ 1316: "OP_glReadnPixelsEXT",
+
+ ###############################################################################################
+ # GLES2 opcodes
+ # http://source/android/device/generic/vulkan-cereal/stream-servers/gles2_dec/gles2_opcodes.h
+ ###############################################################################################
+ 2048: "OP_glActiveTexture",
+ 2049: "OP_glAttachShader",
+ 2050: "OP_glBindAttribLocation",
+ 2051: "OP_glBindBuffer",
+ 2052: "OP_glBindFramebuffer",
+ 2053: "OP_glBindRenderbuffer",
+ 2054: "OP_glBindTexture",
+ 2055: "OP_glBlendColor",
+ 2056: "OP_glBlendEquation",
+ 2057: "OP_glBlendEquationSeparate",
+ 2058: "OP_glBlendFunc",
+ 2059: "OP_glBlendFuncSeparate",
+ 2060: "OP_glBufferData",
+ 2061: "OP_glBufferSubData",
+ 2062: "OP_glCheckFramebufferStatus",
+ 2063: "OP_glClear",
+ 2064: "OP_glClearColor",
+ 2065: "OP_glClearDepthf",
+ 2066: "OP_glClearStencil",
+ 2067: "OP_glColorMask",
+ 2068: "OP_glCompileShader",
+ 2069: "OP_glCompressedTexImage2D",
+ 2070: "OP_glCompressedTexSubImage2D",
+ 2071: "OP_glCopyTexImage2D",
+ 2072: "OP_glCopyTexSubImage2D",
+ 2073: "OP_glCreateProgram",
+ 2074: "OP_glCreateShader",
+ 2075: "OP_glCullFace",
+ 2076: "OP_glDeleteBuffers",
+ 2077: "OP_glDeleteFramebuffers",
+ 2078: "OP_glDeleteProgram",
+ 2079: "OP_glDeleteRenderbuffers",
+ 2080: "OP_glDeleteShader",
+ 2081: "OP_glDeleteTextures",
+ 2082: "OP_glDepthFunc",
+ 2083: "OP_glDepthMask",
+ 2084: "OP_glDepthRangef",
+ 2085: "OP_glDetachShader",
+ 2086: "OP_glDisable",
+ 2087: "OP_glDisableVertexAttribArray",
+ 2088: "OP_glDrawArrays",
+ 2089: "OP_glDrawElements",
+ 2090: "OP_glEnable",
+ 2091: "OP_glEnableVertexAttribArray",
+ 2092: "OP_glFinish",
+ 2093: "OP_glFlush",
+ 2094: "OP_glFramebufferRenderbuffer",
+ 2095: "OP_glFramebufferTexture2D",
+ 2096: "OP_glFrontFace",
+ 2097: "OP_glGenBuffers",
+ 2098: "OP_glGenerateMipmap",
+ 2099: "OP_glGenFramebuffers",
+ 2100: "OP_glGenRenderbuffers",
+ 2101: "OP_glGenTextures",
+ 2102: "OP_glGetActiveAttrib",
+ 2103: "OP_glGetActiveUniform",
+ 2104: "OP_glGetAttachedShaders",
+ 2105: "OP_glGetAttribLocation",
+ 2106: "OP_glGetBooleanv",
+ 2107: "OP_glGetBufferParameteriv",
+ 2108: "OP_glGetError",
+ 2109: "OP_glGetFloatv",
+ 2110: "OP_glGetFramebufferAttachmentParameteriv",
+ 2111: "OP_glGetIntegerv",
+ 2112: "OP_glGetProgramiv",
+ 2113: "OP_glGetProgramInfoLog",
+ 2114: "OP_glGetRenderbufferParameteriv",
+ 2115: "OP_glGetShaderiv",
+ 2116: "OP_glGetShaderInfoLog",
+ 2117: "OP_glGetShaderPrecisionFormat",
+ 2118: "OP_glGetShaderSource",
+ 2119: "OP_glGetString",
+ 2120: "OP_glGetTexParameterfv",
+ 2121: "OP_glGetTexParameteriv",
+ 2122: "OP_glGetUniformfv",
+ 2123: "OP_glGetUniformiv",
+ 2124: "OP_glGetUniformLocation",
+ 2125: "OP_glGetVertexAttribfv",
+ 2126: "OP_glGetVertexAttribiv",
+ 2127: "OP_glGetVertexAttribPointerv",
+ 2128: "OP_glHint",
+ 2129: "OP_glIsBuffer",
+ 2130: "OP_glIsEnabled",
+ 2131: "OP_glIsFramebuffer",
+ 2132: "OP_glIsProgram",
+ 2133: "OP_glIsRenderbuffer",
+ 2134: "OP_glIsShader",
+ 2135: "OP_glIsTexture",
+ 2136: "OP_glLineWidth",
+ 2137: "OP_glLinkProgram",
+ 2138: "OP_glPixelStorei",
+ 2139: "OP_glPolygonOffset",
+ 2140: "OP_glReadPixels",
+ 2141: "OP_glReleaseShaderCompiler",
+ 2142: "OP_glRenderbufferStorage",
+ 2143: "OP_glSampleCoverage",
+ 2144: "OP_glScissor",
+ 2145: "OP_glShaderBinary",
+ 2146: "OP_glShaderSource",
+ 2147: "OP_glStencilFunc",
+ 2148: "OP_glStencilFuncSeparate",
+ 2149: "OP_glStencilMask",
+ 2150: "OP_glStencilMaskSeparate",
+ 2151: "OP_glStencilOp",
+ 2152: "OP_glStencilOpSeparate",
+ 2153: "OP_glTexImage2D",
+ 2154: "OP_glTexParameterf",
+ 2155: "OP_glTexParameterfv",
+ 2156: "OP_glTexParameteri",
+ 2157: "OP_glTexParameteriv",
+ 2158: "OP_glTexSubImage2D",
+ 2159: "OP_glUniform1f",
+ 2160: "OP_glUniform1fv",
+ 2161: "OP_glUniform1i",
+ 2162: "OP_glUniform1iv",
+ 2163: "OP_glUniform2f",
+ 2164: "OP_glUniform2fv",
+ 2165: "OP_glUniform2i",
+ 2166: "OP_glUniform2iv",
+ 2167: "OP_glUniform3f",
+ 2168: "OP_glUniform3fv",
+ 2169: "OP_glUniform3i",
+ 2170: "OP_glUniform3iv",
+ 2171: "OP_glUniform4f",
+ 2172: "OP_glUniform4fv",
+ 2173: "OP_glUniform4i",
+ 2174: "OP_glUniform4iv",
+ 2175: "OP_glUniformMatrix2fv",
+ 2176: "OP_glUniformMatrix3fv",
+ 2177: "OP_glUniformMatrix4fv",
+ 2178: "OP_glUseProgram",
+ 2179: "OP_glValidateProgram",
+ 2180: "OP_glVertexAttrib1f",
+ 2181: "OP_glVertexAttrib1fv",
+ 2182: "OP_glVertexAttrib2f",
+ 2183: "OP_glVertexAttrib2fv",
+ 2184: "OP_glVertexAttrib3f",
+ 2185: "OP_glVertexAttrib3fv",
+ 2186: "OP_glVertexAttrib4f",
+ 2187: "OP_glVertexAttrib4fv",
+ 2188: "OP_glVertexAttribPointer",
+ 2189: "OP_glViewport",
+ 2190: "OP_glEGLImageTargetTexture2DOES",
+ 2191: "OP_glEGLImageTargetRenderbufferStorageOES",
+ 2192: "OP_glGetProgramBinaryOES",
+ 2193: "OP_glProgramBinaryOES",
+ 2194: "OP_glMapBufferOES",
+ 2195: "OP_glUnmapBufferOES",
+ 2196: "OP_glTexImage3DOES",
+ 2197: "OP_glTexSubImage3DOES",
+ 2198: "OP_glCopyTexSubImage3DOES",
+ 2199: "OP_glCompressedTexImage3DOES",
+ 2200: "OP_glCompressedTexSubImage3DOES",
+ 2201: "OP_glFramebufferTexture3DOES",
+ 2202: "OP_glBindVertexArrayOES",
+ 2203: "OP_glDeleteVertexArraysOES",
+ 2204: "OP_glGenVertexArraysOES",
+ 2205: "OP_glIsVertexArrayOES",
+ 2206: "OP_glDiscardFramebufferEXT",
+ 2207: "OP_glMultiDrawArraysEXT",
+ 2208: "OP_glMultiDrawElementsEXT",
+ 2209: "OP_glGetPerfMonitorGroupsAMD",
+ 2210: "OP_glGetPerfMonitorCountersAMD",
+ 2211: "OP_glGetPerfMonitorGroupStringAMD",
+ 2212: "OP_glGetPerfMonitorCounterStringAMD",
+ 2213: "OP_glGetPerfMonitorCounterInfoAMD",
+ 2214: "OP_glGenPerfMonitorsAMD",
+ 2215: "OP_glDeletePerfMonitorsAMD",
+ 2216: "OP_glSelectPerfMonitorCountersAMD",
+ 2217: "OP_glBeginPerfMonitorAMD",
+ 2218: "OP_glEndPerfMonitorAMD",
+ 2219: "OP_glGetPerfMonitorCounterDataAMD",
+ 2220: "OP_glRenderbufferStorageMultisampleIMG",
+ 2221: "OP_glFramebufferTexture2DMultisampleIMG",
+ 2222: "OP_glDeleteFencesNV",
+ 2223: "OP_glGenFencesNV",
+ 2224: "OP_glIsFenceNV",
+ 2225: "OP_glTestFenceNV",
+ 2226: "OP_glGetFenceivNV",
+ 2227: "OP_glFinishFenceNV",
+ 2228: "OP_glSetFenceNV",
+ 2229: "OP_glCoverageMaskNV",
+ 2230: "OP_glCoverageOperationNV",
+ 2231: "OP_glGetDriverControlsQCOM",
+ 2232: "OP_glGetDriverControlStringQCOM",
+ 2233: "OP_glEnableDriverControlQCOM",
+ 2234: "OP_glDisableDriverControlQCOM",
+ 2235: "OP_glExtGetTexturesQCOM",
+ 2236: "OP_glExtGetBuffersQCOM",
+ 2237: "OP_glExtGetRenderbuffersQCOM",
+ 2238: "OP_glExtGetFramebuffersQCOM",
+ 2239: "OP_glExtGetTexLevelParameterivQCOM",
+ 2240: "OP_glExtTexObjectStateOverrideiQCOM",
+ 2241: "OP_glExtGetTexSubImageQCOM",
+ 2242: "OP_glExtGetBufferPointervQCOM",
+ 2243: "OP_glExtGetShadersQCOM",
+ 2244: "OP_glExtGetProgramsQCOM",
+ 2245: "OP_glExtIsProgramBinaryQCOM",
+ 2246: "OP_glExtGetProgramBinarySourceQCOM",
+ 2247: "OP_glStartTilingQCOM",
+ 2248: "OP_glEndTilingQCOM",
+ 2249: "OP_glVertexAttribPointerData",
+ 2250: "OP_glVertexAttribPointerOffset",
+ 2251: "OP_glDrawElementsOffset",
+ 2252: "OP_glDrawElementsData",
+ 2253: "OP_glGetCompressedTextureFormats",
+ 2254: "OP_glShaderString",
+ 2255: "OP_glFinishRoundTrip",
+ 2256: "OP_glGenVertexArrays",
+ 2257: "OP_glBindVertexArray",
+ 2258: "OP_glDeleteVertexArrays",
+ 2259: "OP_glIsVertexArray",
+ 2260: "OP_glMapBufferRange",
+ 2261: "OP_glUnmapBuffer",
+ 2262: "OP_glFlushMappedBufferRange",
+ 2263: "OP_glMapBufferRangeAEMU",
+ 2264: "OP_glUnmapBufferAEMU",
+ 2265: "OP_glFlushMappedBufferRangeAEMU",
+ 2266: "OP_glReadPixelsOffsetAEMU",
+ 2267: "OP_glCompressedTexImage2DOffsetAEMU",
+ 2268: "OP_glCompressedTexSubImage2DOffsetAEMU",
+ 2269: "OP_glTexImage2DOffsetAEMU",
+ 2270: "OP_glTexSubImage2DOffsetAEMU",
+ 2271: "OP_glBindBufferRange",
+ 2272: "OP_glBindBufferBase",
+ 2273: "OP_glCopyBufferSubData",
+ 2274: "OP_glClearBufferiv",
+ 2275: "OP_glClearBufferuiv",
+ 2276: "OP_glClearBufferfv",
+ 2277: "OP_glClearBufferfi",
+ 2278: "OP_glGetBufferParameteri64v",
+ 2279: "OP_glGetBufferPointerv",
+ 2280: "OP_glUniformBlockBinding",
+ 2281: "OP_glGetUniformBlockIndex",
+ 2282: "OP_glGetUniformIndices",
+ 2283: "OP_glGetUniformIndicesAEMU",
+ 2284: "OP_glGetActiveUniformBlockiv",
+ 2285: "OP_glGetActiveUniformBlockName",
+ 2286: "OP_glUniform1ui",
+ 2287: "OP_glUniform2ui",
+ 2288: "OP_glUniform3ui",
+ 2289: "OP_glUniform4ui",
+ 2290: "OP_glUniform1uiv",
+ 2291: "OP_glUniform2uiv",
+ 2292: "OP_glUniform3uiv",
+ 2293: "OP_glUniform4uiv",
+ 2294: "OP_glUniformMatrix2x3fv",
+ 2295: "OP_glUniformMatrix3x2fv",
+ 2296: "OP_glUniformMatrix2x4fv",
+ 2297: "OP_glUniformMatrix4x2fv",
+ 2298: "OP_glUniformMatrix3x4fv",
+ 2299: "OP_glUniformMatrix4x3fv",
+ 2300: "OP_glGetUniformuiv",
+ 2301: "OP_glGetActiveUniformsiv",
+ 2302: "OP_glVertexAttribI4i",
+ 2303: "OP_glVertexAttribI4ui",
+ 2304: "OP_glVertexAttribI4iv",
+ 2305: "OP_glVertexAttribI4uiv",
+ 2306: "OP_glVertexAttribIPointer",
+ 2307: "OP_glVertexAttribIPointerOffsetAEMU",
+ 2308: "OP_glVertexAttribIPointerDataAEMU",
+ 2309: "OP_glGetVertexAttribIiv",
+ 2310: "OP_glGetVertexAttribIuiv",
+ 2311: "OP_glVertexAttribDivisor",
+ 2312: "OP_glDrawArraysInstanced",
+ 2313: "OP_glDrawElementsInstanced",
+ 2314: "OP_glDrawElementsInstancedDataAEMU",
+ 2315: "OP_glDrawElementsInstancedOffsetAEMU",
+ 2316: "OP_glDrawRangeElements",
+ 2317: "OP_glDrawRangeElementsDataAEMU",
+ 2318: "OP_glDrawRangeElementsOffsetAEMU",
+ 2319: "OP_glFenceSync",
+ 2320: "OP_glClientWaitSync",
+ 2321: "OP_glWaitSync",
+ 2322: "OP_glDeleteSync",
+ 2323: "OP_glIsSync",
+ 2324: "OP_glGetSynciv",
+ 2325: "OP_glFenceSyncAEMU",
+ 2326: "OP_glClientWaitSyncAEMU",
+ 2327: "OP_glWaitSyncAEMU",
+ 2328: "OP_glDeleteSyncAEMU",
+ 2329: "OP_glIsSyncAEMU",
+ 2330: "OP_glGetSyncivAEMU",
+ 2331: "OP_glDrawBuffers",
+ 2332: "OP_glReadBuffer",
+ 2333: "OP_glBlitFramebuffer",
+ 2334: "OP_glInvalidateFramebuffer",
+ 2335: "OP_glInvalidateSubFramebuffer",
+ 2336: "OP_glFramebufferTextureLayer",
+ 2337: "OP_glRenderbufferStorageMultisample",
+ 2338: "OP_glTexStorage2D",
+ 2339: "OP_glGetInternalformativ",
+ 2340: "OP_glBeginTransformFeedback",
+ 2341: "OP_glEndTransformFeedback",
+ 2342: "OP_glGenTransformFeedbacks",
+ 2343: "OP_glDeleteTransformFeedbacks",
+ 2344: "OP_glBindTransformFeedback",
+ 2345: "OP_glPauseTransformFeedback",
+ 2346: "OP_glResumeTransformFeedback",
+ 2347: "OP_glIsTransformFeedback",
+ 2348: "OP_glTransformFeedbackVaryings",
+ 2349: "OP_glTransformFeedbackVaryingsAEMU",
+ 2350: "OP_glGetTransformFeedbackVarying",
+ 2351: "OP_glGenSamplers",
+ 2352: "OP_glDeleteSamplers",
+ 2353: "OP_glBindSampler",
+ 2354: "OP_glSamplerParameterf",
+ 2355: "OP_glSamplerParameteri",
+ 2356: "OP_glSamplerParameterfv",
+ 2357: "OP_glSamplerParameteriv",
+ 2358: "OP_glGetSamplerParameterfv",
+ 2359: "OP_glGetSamplerParameteriv",
+ 2360: "OP_glIsSampler",
+ 2361: "OP_glGenQueries",
+ 2362: "OP_glDeleteQueries",
+ 2363: "OP_glBeginQuery",
+ 2364: "OP_glEndQuery",
+ 2365: "OP_glGetQueryiv",
+ 2366: "OP_glGetQueryObjectuiv",
+ 2367: "OP_glIsQuery",
+ 2368: "OP_glProgramParameteri",
+ 2369: "OP_glProgramBinary",
+ 2370: "OP_glGetProgramBinary",
+ 2371: "OP_glGetFragDataLocation",
+ 2372: "OP_glGetInteger64v",
+ 2373: "OP_glGetIntegeri_v",
+ 2374: "OP_glGetInteger64i_v",
+ 2375: "OP_glTexImage3D",
+ 2376: "OP_glTexImage3DOffsetAEMU",
+ 2377: "OP_glTexStorage3D",
+ 2378: "OP_glTexSubImage3D",
+ 2379: "OP_glTexSubImage3DOffsetAEMU",
+ 2380: "OP_glCompressedTexImage3D",
+ 2381: "OP_glCompressedTexImage3DOffsetAEMU",
+ 2382: "OP_glCompressedTexSubImage3D",
+ 2383: "OP_glCompressedTexSubImage3DOffsetAEMU",
+ 2384: "OP_glCopyTexSubImage3D",
+ 2385: "OP_glGetStringi",
+ 2386: "OP_glGetBooleani_v",
+ 2387: "OP_glMemoryBarrier",
+ 2388: "OP_glMemoryBarrierByRegion",
+ 2389: "OP_glGenProgramPipelines",
+ 2390: "OP_glDeleteProgramPipelines",
+ 2391: "OP_glBindProgramPipeline",
+ 2392: "OP_glGetProgramPipelineiv",
+ 2393: "OP_glGetProgramPipelineInfoLog",
+ 2394: "OP_glValidateProgramPipeline",
+ 2395: "OP_glIsProgramPipeline",
+ 2396: "OP_glUseProgramStages",
+ 2397: "OP_glActiveShaderProgram",
+ 2398: "OP_glCreateShaderProgramv",
+ 2399: "OP_glCreateShaderProgramvAEMU",
+ 2400: "OP_glProgramUniform1f",
+ 2401: "OP_glProgramUniform2f",
+ 2402: "OP_glProgramUniform3f",
+ 2403: "OP_glProgramUniform4f",
+ 2404: "OP_glProgramUniform1i",
+ 2405: "OP_glProgramUniform2i",
+ 2406: "OP_glProgramUniform3i",
+ 2407: "OP_glProgramUniform4i",
+ 2408: "OP_glProgramUniform1ui",
+ 2409: "OP_glProgramUniform2ui",
+ 2410: "OP_glProgramUniform3ui",
+ 2411: "OP_glProgramUniform4ui",
+ 2412: "OP_glProgramUniform1fv",
+ 2413: "OP_glProgramUniform2fv",
+ 2414: "OP_glProgramUniform3fv",
+ 2415: "OP_glProgramUniform4fv",
+ 2416: "OP_glProgramUniform1iv",
+ 2417: "OP_glProgramUniform2iv",
+ 2418: "OP_glProgramUniform3iv",
+ 2419: "OP_glProgramUniform4iv",
+ 2420: "OP_glProgramUniform1uiv",
+ 2421: "OP_glProgramUniform2uiv",
+ 2422: "OP_glProgramUniform3uiv",
+ 2423: "OP_glProgramUniform4uiv",
+ 2424: "OP_glProgramUniformMatrix2fv",
+ 2425: "OP_glProgramUniformMatrix3fv",
+ 2426: "OP_glProgramUniformMatrix4fv",
+ 2427: "OP_glProgramUniformMatrix2x3fv",
+ 2428: "OP_glProgramUniformMatrix3x2fv",
+ 2429: "OP_glProgramUniformMatrix2x4fv",
+ 2430: "OP_glProgramUniformMatrix4x2fv",
+ 2431: "OP_glProgramUniformMatrix3x4fv",
+ 2432: "OP_glProgramUniformMatrix4x3fv",
+ 2433: "OP_glGetProgramInterfaceiv",
+ 2434: "OP_glGetProgramResourceiv",
+ 2435: "OP_glGetProgramResourceIndex",
+ 2436: "OP_glGetProgramResourceLocation",
+ 2437: "OP_glGetProgramResourceName",
+ 2438: "OP_glBindImageTexture",
+ 2439: "OP_glDispatchCompute",
+ 2440: "OP_glDispatchComputeIndirect",
+ 2441: "OP_glBindVertexBuffer",
+ 2442: "OP_glVertexAttribBinding",
+ 2443: "OP_glVertexAttribFormat",
+ 2444: "OP_glVertexAttribIFormat",
+ 2445: "OP_glVertexBindingDivisor",
+ 2446: "OP_glDrawArraysIndirect",
+ 2447: "OP_glDrawArraysIndirectDataAEMU",
+ 2448: "OP_glDrawArraysIndirectOffsetAEMU",
+ 2449: "OP_glDrawElementsIndirect",
+ 2450: "OP_glDrawElementsIndirectDataAEMU",
+ 2451: "OP_glDrawElementsIndirectOffsetAEMU",
+ 2452: "OP_glTexStorage2DMultisample",
+ 2453: "OP_glSampleMaski",
+ 2454: "OP_glGetMultisamplefv",
+ 2455: "OP_glFramebufferParameteri",
+ 2456: "OP_glGetFramebufferParameteriv",
+ 2457: "OP_glGetTexLevelParameterfv",
+ 2458: "OP_glGetTexLevelParameteriv",
+ 2459: "OP_glMapBufferRangeDMA",
+ 2460: "OP_glUnmapBufferDMA",
+ 2461: "OP_glMapBufferRangeDirect",
+ 2462: "OP_glUnmapBufferDirect",
+ 2463: "OP_glFlushMappedBufferRangeDirect",
+ 2464: "OP_glGetGraphicsResetStatusEXT",
+ 2465: "OP_glReadnPixelsEXT",
+ 2466: "OP_glGetnUniformfvEXT",
+ 2467: "OP_glGetnUniformivEXT",
+ 2468: "OP_glDrawArraysNullAEMU",
+ 2469: "OP_glDrawElementsNullAEMU",
+ 2470: "OP_glDrawElementsOffsetNullAEMU",
+ 2471: "OP_glDrawElementsDataNullAEMU",
+ 2472: "OP_glUnmapBufferAsyncAEMU",
+ 2473: "OP_glFlushMappedBufferRangeAEMU2",
+ 2474: "OP_glBufferDataSyncAEMU",
+}
diff --git a/scripts/print_gfx_logs/print_gfx_logs.py b/scripts/print_gfx_logs/print_gfx_logs.py
new file mode 100644
index 0000000..76854e6
--- /dev/null
+++ b/scripts/print_gfx_logs/print_gfx_logs.py
@@ -0,0 +1,194 @@
+"""
+Command line tool to process minidump files and print what was logged by GfxApiLogger.
+
+For more details see:
+
+design: go/bstar-gfx-logging
+g3doc: http://g3doc/play/g3doc/games/battlestar/kiwivm/graphics-tips.md#gfx-logs
+C++: http://source/play-internal/battlestar/aosp/device/generic/vulkan-cereal/base/GfxApiLogger.h
+
+Usage:
+
+python3 print_gfx_logs.py <path to minidump file>
+"""
+
+import argparse
+import ctypes
+import sys
+from datetime import datetime
+import mmap
+import textwrap
+import command_printer
+from typing import NamedTuple, Optional, List
+import traceback
+
+
+class Header(ctypes.Structure):
+ """The C struct that we use to represent the data in memory
+ Keep in sync with GfxApiLogger.h
+ """
+ _fields_ = [('signature', ctypes.c_char * 10),
+ ('version', ctypes.c_uint16),
+ ('thread_id', ctypes.c_uint32),
+ ('last_written_time', ctypes.c_uint64),
+ ('write_index', ctypes.c_uint32),
+ ('committed_index', ctypes.c_uint32),
+ ('capture_id', ctypes.c_uint64),
+ ('data_size', ctypes.c_uint32)]
+
+
+class Command(NamedTuple):
+ """A single command in the stream"""
+ opcode: int
+ original_size: int
+ data: bytes
+
+
+class Stream(NamedTuple):
+ """Stream of commands received from the guest"""
+ pos_in_file: int # Location of this stream in the minidump file, useful for debugging
+ timestamp: int # Unix timestamp of last command received, in milliseconds
+ thread_id: int
+ capture_id: int
+ commands: List[Command]
+ error_message: Optional[str] # `None` if there were no errors parsing this stream
+
+
+def read_uint32(buf: bytes, pos: int) -> int:
+ """Reads a single uint32 from buf at a given position"""
+ assert pos + 4 <= len(buf)
+ return int.from_bytes(buf[pos:pos + 4], byteorder='little', signed=False)
+
+
+def process_command(buf: bytes) -> Command:
+ opcode = read_uint32(buf, 0)
+ size = read_uint32(buf, 4)
+ return Command(opcode, size, bytes(buf[8:]))
+
+
+def process_stream(file_bytes: mmap, file_pos: int) -> Stream:
+ # Read the header
+ file_bytes.seek(file_pos)
+ header = Header()
+ header_bytes = file_bytes.read(ctypes.sizeof(header))
+ ctypes.memmove(ctypes.addressof(header), header_bytes, ctypes.sizeof(header))
+
+ if header.signature != b'GFXAPILOG':
+ return Stream(file_pos, error_message="Signature doesn't match")
+
+ if header.version != 2:
+ return Stream(file_pos, error_message=("This script can only process version 2 of the graphics API logs, " +
+ "but the dump file uses version {} ").format(data.version))
+
+ # Convert Windows' GetSystemTimeAsFileTime to Unix timestamp
+ # https://stackoverflow.com/questions/1695288/getting-the-current-time-in-milliseconds-from-the-system-clock-in-windows
+ timestamp_ms = int(header.last_written_time / 10000 - 11644473600000)
+ if timestamp_ms <= 0: timestamp_ms = 0
+
+ # Sanity check the size
+ if header.data_size > 5_000_000:
+ return Stream(file_pos,
+ error_message="data size is larger than 5MB. This likely indicates garbage/corrupted data")
+
+ if header.committed_index >= header.data_size:
+ return Stream(file_pos,
+ error_message="index is larger than buffer size. Likely indicates garbage/corrupted data")
+
+ file_bytes.seek(file_pos + ctypes.sizeof(header))
+ data = file_bytes.read(header.data_size)
+
+ # Reorder the buffer so that we can read it in a single pass from back to front
+ buf = data[header.committed_index:] + data[:header.committed_index]
+
+ commands = []
+ i = len(buf)
+ while i >= 4:
+ i -= 4
+ size = read_uint32(buf, i)
+ if size == 0 or size > i:
+ # We reached the end of the stream
+ break
+ cmd = process_command(buf[i - size:i])
+
+ commands.append(cmd)
+ i -= size
+
+ commands.reverse() # so that they're sorted from oldest to most recent
+ return Stream(file_pos, timestamp_ms, header.thread_id, header.capture_id, commands, None)
+
+
+def process_minidump(dump_file: str) -> List[Stream]:
+ """
+ Extracts a list of commands streams from a minidump file
+ """
+ streams = []
+ with open(dump_file, "r+b") as f:
+ mm = mmap.mmap(f.fileno(), 0)
+ pos = 0
+ while True:
+ pos = mm.find(b'GFXAPILOG', pos + 1)
+ if pos == -1:
+ break
+ streams.append(process_stream(mm, pos))
+
+ return streams
+
+
+def main():
+ parser = argparse.ArgumentParser(description="""Command line tool to process crash reports and print out the
+ commands logged by GfxApiLogger""")
+ parser.add_argument('dump_file', help="Path to minidump file")
+
+ args = parser.parse_args()
+ streams = process_minidump(args.dump_file)
+
+ streams.sort(key=lambda s: s.timestamp)
+
+ total_commands = 0
+ num_errors = 0
+ for stream_idx, stream in enumerate(streams):
+ print(textwrap.dedent("""
+ =======================================================
+ GfxApiLog command stream #{} at offset {} in dump
+ - Timestamp: {}
+ - Thread id: {}
+ - Capture id: {}""".format(stream_idx, stream.pos_in_file,
+ datetime.fromtimestamp(stream.timestamp / 1000.0),
+ stream.thread_id,
+ stream.capture_id)))
+ if stream.error_message:
+ print("Could not decode stream. Error: ", stream.error_message)
+ continue
+
+ subdecode_size = 0
+ for cmd_idx, cmd in enumerate(stream.commands):
+ total_commands += 1
+ cmd_printer = command_printer.CommandPrinter(cmd.opcode, cmd.original_size, cmd.data, stream_idx, cmd_idx)
+
+ try:
+ cmd_printer.print_cmd()
+ except:
+ num_errors += 1
+ # Print stack trace and continue
+ traceback.print_exc(file=sys.stdout)
+
+ if subdecode_size > 0:
+ subdecode_size -= cmd.original_size
+ assert subdecode_size >= 0
+ if subdecode_size == 0:
+ print("\n--- end of subdecode ---")
+
+ if cmd_printer.cmd_name() == "OP_vkQueueFlushCommandsGOOGLE":
+ assert subdecode_size == 0
+ subdecode_size = cmd.original_size - 36
+ print("\n--- start of subdecode, size = {} bytes ---".format(subdecode_size))
+ print("\nDone: {} commands, {} errors".format(total_commands, num_errors))
+ if num_errors > 0:
+ print("""
+NOTE: This script uses some simplifying assumptions to decode the commands. All
+decoding errors are almost certainly a bug with this script, NOT a sign of bad
+or corrupted data.""")
+
+
+if __name__ == '__main__':
+ main()
diff --git a/scripts/print_gfx_logs/vulkan_printer.py b/scripts/print_gfx_logs/vulkan_printer.py
new file mode 100644
index 0000000..2873225
--- /dev/null
+++ b/scripts/print_gfx_logs/vulkan_printer.py
@@ -0,0 +1,2390 @@
+#####################################################################################################
+# Pretty-printer functions for Vulkan data structures
+# THIS FILE IS AUTO-GENERATED - DO NOT EDIT
+#
+# To re-generate this file, run generate-vulkan-sources.sh
+#####################################################################################################
+
+def OP_vkAcquireImageANDROID(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+ nativeFenceFd = printer.write_int("nativeFenceFd", 4, indent, signed=True, big_endian=False)
+ semaphore = printer.write_int("semaphore", 8, indent, signed=False, big_endian=False)
+ fence = printer.write_int("fence", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkAllocateMemory(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocateInfo", struct_VkMemoryAllocateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pMemory = printer.write_int("pMemory", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkBeginCommandBufferAsyncGOOGLE(printer, indent: int):
+ printer.write_struct("pBeginInfo", struct_VkCommandBufferBeginInfo, False, None, indent)
+ return
+
+def OP_vkBindBufferMemory(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ buffer = printer.write_int("buffer", 8, indent, signed=False, big_endian=False)
+ memory = printer.write_int("memory", 8, indent, signed=False, big_endian=False)
+ memoryOffset = printer.write_int("memoryOffset", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkBindImageMemory(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+ memory = printer.write_int("memory", 8, indent, signed=False, big_endian=False)
+ memoryOffset = printer.write_int("memoryOffset", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkCmdBeginRenderPass(printer, indent: int):
+ printer.write_struct("pRenderPassBegin", struct_VkRenderPassBeginInfo, False, None, indent)
+ printer.write_enum("contents", VkSubpassContents, indent)
+ return
+
+def OP_vkCmdBindDescriptorSets(printer, indent: int):
+ printer.write_enum("pipelineBindPoint", VkPipelineBindPoint, indent)
+ layout = printer.write_int("layout", 8, indent, signed=False, big_endian=False)
+ firstSet = printer.write_int("firstSet", 4, indent, signed=False, big_endian=False)
+ descriptorSetCount = printer.write_int("descriptorSetCount", 4, indent, signed=False, big_endian=False)
+ pDescriptorSets = printer.write_int("pDescriptorSets", 8, indent, optional=False, count=descriptorSetCount, big_endian=False)
+ dynamicOffsetCount = printer.write_int("dynamicOffsetCount", 4, indent, signed=False, big_endian=False)
+ pDynamicOffsets = printer.write_int("pDynamicOffsets", 4, indent, optional=False, count=dynamicOffsetCount, big_endian=False)
+ return
+
+def OP_vkCmdBindIndexBuffer(printer, indent: int):
+ buffer = printer.write_int("buffer", 8, indent, signed=False, big_endian=False)
+ offset = printer.write_int("offset", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("indexType", VkIndexType, indent)
+ return
+
+def OP_vkCmdBindPipeline(printer, indent: int):
+ printer.write_enum("pipelineBindPoint", VkPipelineBindPoint, indent)
+ pipeline = printer.write_int("pipeline", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkCmdBindVertexBuffers(printer, indent: int):
+ firstBinding = printer.write_int("firstBinding", 4, indent, signed=False, big_endian=False)
+ bindingCount = printer.write_int("bindingCount", 4, indent, signed=False, big_endian=False)
+ pBuffers = printer.write_int("pBuffers", 8, indent, optional=False, count=bindingCount, big_endian=False)
+ pOffsets = printer.write_int("pOffsets", 8, indent, optional=False, count=bindingCount, big_endian=False)
+ return
+
+def OP_vkCmdClearAttachments(printer, indent: int):
+ attachmentCount = printer.write_int("attachmentCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pAttachments", struct_VkClearAttachment, False, attachmentCount, indent)
+ rectCount = printer.write_int("rectCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pRects", struct_VkClearRect, False, rectCount, indent)
+ return
+
+def OP_vkCmdClearColorImage(printer, indent: int):
+ image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("imageLayout", VkImageLayout, indent)
+ printer.write_struct("pColor", struct_VkClearColorValue, False, None, indent)
+ rangeCount = printer.write_int("rangeCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pRanges", struct_VkImageSubresourceRange, False, rangeCount, indent)
+ return
+
+def OP_vkCmdCopyBufferToImage(printer, indent: int):
+ srcBuffer = printer.write_int("srcBuffer", 8, indent, signed=False, big_endian=False)
+ dstImage = printer.write_int("dstImage", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("dstImageLayout", VkImageLayout, indent)
+ regionCount = printer.write_int("regionCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pRegions", struct_VkBufferImageCopy, False, regionCount, indent)
+ return
+
+def OP_vkCmdCopyImageToBuffer(printer, indent: int):
+ srcImage = printer.write_int("srcImage", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("srcImageLayout", VkImageLayout, indent)
+ dstBuffer = printer.write_int("dstBuffer", 8, indent, signed=False, big_endian=False)
+ regionCount = printer.write_int("regionCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pRegions", struct_VkBufferImageCopy, False, regionCount, indent)
+ return
+
+def OP_vkCmdDraw(printer, indent: int):
+ vertexCount = printer.write_int("vertexCount", 4, indent, signed=False, big_endian=False)
+ instanceCount = printer.write_int("instanceCount", 4, indent, signed=False, big_endian=False)
+ firstVertex = printer.write_int("firstVertex", 4, indent, signed=False, big_endian=False)
+ firstInstance = printer.write_int("firstInstance", 4, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkCmdDrawIndexed(printer, indent: int):
+ indexCount = printer.write_int("indexCount", 4, indent, signed=False, big_endian=False)
+ instanceCount = printer.write_int("instanceCount", 4, indent, signed=False, big_endian=False)
+ firstIndex = printer.write_int("firstIndex", 4, indent, signed=False, big_endian=False)
+ vertexOffset = printer.write_int("vertexOffset", 4, indent, signed=True, big_endian=False)
+ firstInstance = printer.write_int("firstInstance", 4, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkCmdEndRenderPass(printer, indent: int):
+ return
+
+def OP_vkCmdPipelineBarrier(printer, indent: int):
+ srcStageMask = printer.write_int("srcStageMask", 4, indent, signed=False, big_endian=False)
+ dstStageMask = printer.write_int("dstStageMask", 4, indent, signed=False, big_endian=False)
+ dependencyFlags = printer.write_int("dependencyFlags", 4, indent, signed=False, big_endian=False)
+ memoryBarrierCount = printer.write_int("memoryBarrierCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pMemoryBarriers", struct_VkMemoryBarrier, False, memoryBarrierCount, indent)
+ bufferMemoryBarrierCount = printer.write_int("bufferMemoryBarrierCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pBufferMemoryBarriers", struct_VkBufferMemoryBarrier, False, bufferMemoryBarrierCount, indent)
+ imageMemoryBarrierCount = printer.write_int("imageMemoryBarrierCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pImageMemoryBarriers", struct_VkImageMemoryBarrier, False, imageMemoryBarrierCount, indent)
+ return
+
+def OP_vkCmdSetScissor(printer, indent: int):
+ firstScissor = printer.write_int("firstScissor", 4, indent, signed=False, big_endian=False)
+ scissorCount = printer.write_int("scissorCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pScissors", struct_VkRect2D, False, scissorCount, indent)
+ return
+
+def OP_vkCmdSetViewport(printer, indent: int):
+ firstViewport = printer.write_int("firstViewport", 4, indent, signed=False, big_endian=False)
+ viewportCount = printer.write_int("viewportCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pViewports", struct_VkViewport, False, viewportCount, indent)
+ return
+
+def OP_vkCollectDescriptorPoolIdsGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ descriptorPool = printer.write_int("descriptorPool", 8, indent, signed=False, big_endian=False)
+ pPoolIdCount = printer.write_int("pPoolIdCount", 4, indent, optional=False, count=None, big_endian=False)
+ pPoolIds = printer.write_int("pPoolIds", 8, indent, optional=True, count=pPoolIdCount, big_endian=False)
+ return
+
+def OP_vkCreateBufferWithRequirementsGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkBufferCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pBuffer = printer.write_int("pBuffer", 8, indent, optional=False, count=None, big_endian=False)
+ printer.write_struct("pMemoryRequirements", struct_VkMemoryRequirements, False, None, indent)
+ return
+
+def OP_vkCreateDescriptorPool(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkDescriptorPoolCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pDescriptorPool = printer.write_int("pDescriptorPool", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateDescriptorSetLayout(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkDescriptorSetLayoutCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pSetLayout = printer.write_int("pSetLayout", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateFence(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkFenceCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pFence = printer.write_int("pFence", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateFramebuffer(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkFramebufferCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pFramebuffer = printer.write_int("pFramebuffer", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateGraphicsPipelines(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ pipelineCache = printer.write_int("pipelineCache", 8, indent, signed=False, big_endian=False)
+ createInfoCount = printer.write_int("createInfoCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfos", struct_VkGraphicsPipelineCreateInfo, False, createInfoCount, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pPipelines = printer.write_int("pPipelines", 8, indent, optional=False, count=createInfoCount, big_endian=False)
+ return
+
+def OP_vkCreateImageView(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkImageViewCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pView = printer.write_int("pView", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateImageWithRequirementsGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkImageCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pImage = printer.write_int("pImage", 8, indent, optional=False, count=None, big_endian=False)
+ printer.write_struct("pMemoryRequirements", struct_VkMemoryRequirements, False, None, indent)
+ return
+
+def OP_vkCreatePipelineCache(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkPipelineCacheCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pPipelineCache = printer.write_int("pPipelineCache", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateRenderPass(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkRenderPassCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pRenderPass = printer.write_int("pRenderPass", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateSampler(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkSamplerCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pSampler = printer.write_int("pSampler", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateSemaphore(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkSemaphoreCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pSemaphore = printer.write_int("pSemaphore", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkCreateShaderModule(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pCreateInfo", struct_VkShaderModuleCreateInfo, False, None, indent)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ pShaderModule = printer.write_int("pShaderModule", 8, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkDestroyBuffer(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ buffer = printer.write_int("buffer", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyCommandPool(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ commandPool = printer.write_int("commandPool", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyDescriptorPool(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ descriptorPool = printer.write_int("descriptorPool", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyDescriptorSetLayout(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ descriptorSetLayout = printer.write_int("descriptorSetLayout", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyDevice(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyFence(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ fence = printer.write_int("fence", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyFramebuffer(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ framebuffer = printer.write_int("framebuffer", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyImage(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyImageView(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ imageView = printer.write_int("imageView", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyInstance(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ instance = printer.write_int("instance", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyPipeline(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ pipeline = printer.write_int("pipeline", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyPipelineCache(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ pipelineCache = printer.write_int("pipelineCache", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyPipelineLayout(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ pipelineLayout = printer.write_int("pipelineLayout", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyRenderPass(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ renderPass = printer.write_int("renderPass", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroySemaphore(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ semaphore = printer.write_int("semaphore", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkDestroyShaderModule(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ shaderModule = printer.write_int("shaderModule", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkEndCommandBufferAsyncGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ return
+
+def OP_vkFreeCommandBuffers(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ commandPool = printer.write_int("commandPool", 8, indent, signed=False, big_endian=False)
+ commandBufferCount = printer.write_int("commandBufferCount", 4, indent, signed=False, big_endian=False)
+ pCommandBuffers = printer.write_int("pCommandBuffers", 8, indent, optional=True, count=commandBufferCount, big_endian=False)
+ return
+
+def OP_vkFreeMemory(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ memory = printer.write_int("memory", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkFreeMemorySyncGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ memory = printer.write_int("memory", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pAllocator", struct_VkAllocationCallbacks, True, None, indent)
+ return
+
+def OP_vkGetFenceStatus(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ fence = printer.write_int("fence", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkGetMemoryHostAddressInfoGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ memory = printer.write_int("memory", 8, indent, signed=False, big_endian=False)
+ pAddress = printer.write_int("pAddress", 8, indent, optional=True, count=None, big_endian=False)
+ pSize = printer.write_int("pSize", 8, indent, optional=True, count=None, big_endian=False)
+ pHostmemId = printer.write_int("pHostmemId", 8, indent, optional=True, count=None, big_endian=False)
+ return
+
+def OP_vkGetPhysicalDeviceFormatProperties(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ physicalDevice = printer.write_int("physicalDevice", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("format", VkFormat, indent)
+ printer.write_struct("pFormatProperties", struct_VkFormatProperties, False, None, indent)
+ return
+
+def OP_vkGetPhysicalDeviceProperties2KHR(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ physicalDevice = printer.write_int("physicalDevice", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("pProperties", struct_VkPhysicalDeviceProperties2, False, None, indent)
+ return
+
+def OP_vkGetPipelineCacheData(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ pipelineCache = printer.write_int("pipelineCache", 8, indent, signed=False, big_endian=False)
+ pDataSize = printer.write_int("pDataSize", 8, indent, optional=True, count=None, big_endian=True)
+ pData = printer.write_int("pData", 8, indent, optional=True, count=pDataSize, big_endian=False)
+ return
+
+def OP_vkGetSwapchainGrallocUsageANDROID(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("format", VkFormat, indent)
+ imageUsage = printer.write_int("imageUsage", 4, indent, signed=False, big_endian=False)
+ grallocUsage = printer.write_int("grallocUsage", 4, indent, optional=False, count=None, big_endian=False)
+ return
+
+def OP_vkQueueCommitDescriptorSetUpdatesGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ queue = printer.write_int("queue", 8, indent, signed=False, big_endian=False)
+ descriptorPoolCount = printer.write_int("descriptorPoolCount", 4, indent, signed=False, big_endian=False)
+ pDescriptorPools = printer.write_int("pDescriptorPools", 8, indent, optional=False, count=descriptorPoolCount, big_endian=False)
+ descriptorSetCount = printer.write_int("descriptorSetCount", 4, indent, signed=False, big_endian=False)
+ pSetLayouts = printer.write_int("pSetLayouts", 8, indent, optional=False, count=descriptorSetCount, big_endian=False)
+ pDescriptorSetPoolIds = printer.write_int("pDescriptorSetPoolIds", 8, indent, optional=False, count=descriptorSetCount, big_endian=False)
+ pDescriptorSetWhichPool = printer.write_int("pDescriptorSetWhichPool", 4, indent, optional=False, count=descriptorSetCount, big_endian=False)
+ pDescriptorSetPendingAllocation = printer.write_int("pDescriptorSetPendingAllocation", 4, indent, optional=False, count=descriptorSetCount, big_endian=False)
+ pDescriptorWriteStartingIndices = printer.write_int("pDescriptorWriteStartingIndices", 4, indent, optional=False, count=descriptorSetCount, big_endian=False)
+ pendingDescriptorWriteCount = printer.write_int("pendingDescriptorWriteCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pPendingDescriptorWrites", struct_VkWriteDescriptorSet, False, pendingDescriptorWriteCount, indent)
+ return
+
+def OP_vkQueueFlushCommandsGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ queue = printer.write_int("queue", 8, indent, signed=False, big_endian=False)
+ commandBuffer = printer.write_int("commandBuffer", 8, indent, signed=False, big_endian=False)
+ dataSize = printer.write_int("dataSize", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ queue = printer.write_int("queue", 8, indent, signed=False, big_endian=False)
+ waitSemaphoreCount = printer.write_int("waitSemaphoreCount", 4, indent, signed=False, big_endian=False)
+ pWaitSemaphores = printer.write_int("pWaitSemaphores", 8, indent, optional=True, count=waitSemaphoreCount, big_endian=False)
+ image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkQueueSubmitAsyncGOOGLE(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ queue = printer.write_int("queue", 8, indent, signed=False, big_endian=False)
+ submitCount = printer.write_int("submitCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pSubmits", struct_VkSubmitInfo, False, submitCount, indent)
+ fence = printer.write_int("fence", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkQueueWaitIdle(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ queue = printer.write_int("queue", 8, indent, signed=False, big_endian=False)
+ return
+
+def OP_vkResetFences(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ fenceCount = printer.write_int("fenceCount", 4, indent, signed=False, big_endian=False)
+ pFences = printer.write_int("pFences", 8, indent, optional=False, count=fenceCount, big_endian=False)
+ return
+
+def OP_vkWaitForFences(printer, indent: int):
+ printer.write_int("seqno: ", 4, indent)
+ device = printer.write_int("device", 8, indent, signed=False, big_endian=False)
+ fenceCount = printer.write_int("fenceCount", 4, indent, signed=False, big_endian=False)
+ pFences = printer.write_int("pFences", 8, indent, optional=False, count=fenceCount, big_endian=False)
+ waitAll = printer.write_int("waitAll", 4, indent, signed=False, big_endian=False)
+ timeout = printer.write_int("timeout", 8, indent, signed=False, big_endian=False)
+ return
+
+def struct_VkAllocationCallbacks(printer, indent: int):
+ pUserData = printer.write_int("pUserData", 8, indent, optional=True, count=None, big_endian=False)
+ pfnAllocation = printer.write_int("pfnAllocation", 8, indent, signed=False, big_endian=False)
+ pfnReallocation = printer.write_int("pfnReallocation", 8, indent, signed=False, big_endian=False)
+ pfnFree = printer.write_int("pfnFree", 8, indent, signed=False, big_endian=False)
+ pfnInternalAllocation = printer.write_int("pfnInternalAllocation", 8, indent, signed=False, big_endian=False)
+ pfnInternalFree = printer.write_int("pfnInternalFree", 8, indent, signed=False, big_endian=False)
+
+def struct_VkAttachmentDescription(printer, indent: int):
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("format", VkFormat, indent)
+ printer.write_enum("samples", VkSampleCountFlagBits, indent)
+ printer.write_enum("loadOp", VkAttachmentLoadOp, indent)
+ printer.write_enum("storeOp", VkAttachmentStoreOp, indent)
+ printer.write_enum("stencilLoadOp", VkAttachmentLoadOp, indent)
+ printer.write_enum("stencilStoreOp", VkAttachmentStoreOp, indent)
+ printer.write_enum("initialLayout", VkImageLayout, indent)
+ printer.write_enum("finalLayout", VkImageLayout, indent)
+
+def struct_VkAttachmentReference(printer, indent: int):
+ attachment = printer.write_int("attachment", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("layout", VkImageLayout, indent)
+
+def struct_VkBufferCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ size = printer.write_int("size", 8, indent, signed=False, big_endian=False)
+ usage = printer.write_int("usage", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("sharingMode", VkSharingMode, indent)
+ queueFamilyIndexCount = printer.write_int("queueFamilyIndexCount", 4, indent, signed=False, big_endian=False)
+ pQueueFamilyIndices = printer.write_int("pQueueFamilyIndices", 4, indent, optional=True, count=queueFamilyIndexCount, big_endian=False)
+
+def struct_VkBufferImageCopy(printer, indent: int):
+ bufferOffset = printer.write_int("bufferOffset", 8, indent, signed=False, big_endian=False)
+ bufferRowLength = printer.write_int("bufferRowLength", 4, indent, signed=False, big_endian=False)
+ bufferImageHeight = printer.write_int("bufferImageHeight", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("imageSubresource", struct_VkImageSubresourceLayers, False, None, indent)
+ printer.write_struct("imageOffset", struct_VkOffset3D, False, None, indent)
+ printer.write_struct("imageExtent", struct_VkExtent3D, False, None, indent)
+
+def struct_VkBufferMemoryBarrier(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER", indent)
+ srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
+ dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
+ srcQueueFamilyIndex = printer.write_int("srcQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+ dstQueueFamilyIndex = printer.write_int("dstQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+ buffer = printer.write_int("buffer", 8, indent, signed=False, big_endian=False)
+ offset = printer.write_int("offset", 8, indent, signed=False, big_endian=False)
+ size = printer.write_int("size", 8, indent, signed=False, big_endian=False)
+
+def struct_VkClearAttachment(printer, indent: int):
+ aspectMask = printer.write_int("aspectMask", 4, indent, signed=False, big_endian=False)
+ colorAttachment = printer.write_int("colorAttachment", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("clearValue", struct_VkClearValue, False, None, indent)
+
+def struct_VkClearColorValue(printer, indent: int):
+ printer.write_float("float32", indent, count=4)
+
+def struct_VkClearRect(printer, indent: int):
+ printer.write_struct("rect", struct_VkRect2D, False, None, indent)
+ baseArrayLayer = printer.write_int("baseArrayLayer", 4, indent, signed=False, big_endian=False)
+ layerCount = printer.write_int("layerCount", 4, indent, signed=False, big_endian=False)
+
+def struct_VkClearValue(printer, indent: int):
+ printer.write_struct("color", struct_VkClearColorValue, False, None, indent)
+
+def struct_VkCommandBufferBeginInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pInheritanceInfo", struct_VkCommandBufferInheritanceInfo, True, None, indent)
+
+def struct_VkCommandBufferInheritanceInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO", indent)
+ renderPass = printer.write_int("renderPass", 8, indent, signed=False, big_endian=False)
+ subpass = printer.write_int("subpass", 4, indent, signed=False, big_endian=False)
+ framebuffer = printer.write_int("framebuffer", 8, indent, signed=False, big_endian=False)
+ occlusionQueryEnable = printer.write_int("occlusionQueryEnable", 4, indent, signed=False, big_endian=False)
+ queryFlags = printer.write_int("queryFlags", 4, indent, signed=False, big_endian=False)
+ pipelineStatistics = printer.write_int("pipelineStatistics", 4, indent, signed=False, big_endian=False)
+
+def struct_VkComponentMapping(printer, indent: int):
+ printer.write_enum("r", VkComponentSwizzle, indent)
+ printer.write_enum("g", VkComponentSwizzle, indent)
+ printer.write_enum("b", VkComponentSwizzle, indent)
+ printer.write_enum("a", VkComponentSwizzle, indent)
+
+def struct_VkDescriptorBufferInfo(printer, indent: int):
+ buffer = printer.write_int("buffer", 8, indent, signed=False, big_endian=False)
+ offset = printer.write_int("offset", 8, indent, signed=False, big_endian=False)
+ range = printer.write_int("range", 8, indent, signed=False, big_endian=False)
+
+def struct_VkDescriptorImageInfo(printer, indent: int):
+ sampler = printer.write_int("sampler", 8, indent, signed=False, big_endian=False)
+ imageView = printer.write_int("imageView", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("imageLayout", VkImageLayout, indent)
+
+def struct_VkDescriptorPoolCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ maxSets = printer.write_int("maxSets", 4, indent, signed=False, big_endian=False)
+ poolSizeCount = printer.write_int("poolSizeCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pPoolSizes", struct_VkDescriptorPoolSize, False, poolSizeCount, indent)
+
+def struct_VkDescriptorPoolSize(printer, indent: int):
+ printer.write_enum("type", VkDescriptorType, indent)
+ descriptorCount = printer.write_int("descriptorCount", 4, indent, signed=False, big_endian=False)
+
+def struct_VkDescriptorSetLayoutBinding(printer, indent: int):
+ binding = printer.write_int("binding", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("descriptorType", VkDescriptorType, indent)
+ descriptorCount = printer.write_int("descriptorCount", 4, indent, signed=False, big_endian=False)
+ stageFlags = printer.write_int("stageFlags", 4, indent, signed=False, big_endian=False)
+ pImmutableSamplers = printer.write_int("pImmutableSamplers", 8, indent, optional=True, count=descriptorCount, big_endian=False)
+
+def struct_VkDescriptorSetLayoutCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ bindingCount = printer.write_int("bindingCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pBindings", struct_VkDescriptorSetLayoutBinding, False, bindingCount, indent)
+
+def struct_VkExtent2D(printer, indent: int):
+ width = printer.write_int("width", 4, indent, signed=False, big_endian=False)
+ height = printer.write_int("height", 4, indent, signed=False, big_endian=False)
+
+def struct_VkExtent3D(printer, indent: int):
+ width = printer.write_int("width", 4, indent, signed=False, big_endian=False)
+ height = printer.write_int("height", 4, indent, signed=False, big_endian=False)
+ depth = printer.write_int("depth", 4, indent, signed=False, big_endian=False)
+
+def struct_VkFenceCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_FENCE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+
+def struct_VkFormatProperties(printer, indent: int):
+ linearTilingFeatures = printer.write_int("linearTilingFeatures", 4, indent, signed=False, big_endian=False)
+ optimalTilingFeatures = printer.write_int("optimalTilingFeatures", 4, indent, signed=False, big_endian=False)
+ bufferFeatures = printer.write_int("bufferFeatures", 4, indent, signed=False, big_endian=False)
+
+def struct_VkFramebufferCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ renderPass = printer.write_int("renderPass", 8, indent, signed=False, big_endian=False)
+ attachmentCount = printer.write_int("attachmentCount", 4, indent, signed=False, big_endian=False)
+ pAttachments = printer.write_int("pAttachments", 8, indent, optional=False, count=attachmentCount, big_endian=False)
+ width = printer.write_int("width", 4, indent, signed=False, big_endian=False)
+ height = printer.write_int("height", 4, indent, signed=False, big_endian=False)
+ layers = printer.write_int("layers", 4, indent, signed=False, big_endian=False)
+
+def struct_VkGraphicsPipelineCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ stageCount = printer.write_int("stageCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pStages", struct_VkPipelineShaderStageCreateInfo, False, stageCount, indent)
+ printer.write_struct("pVertexInputState", struct_VkPipelineVertexInputStateCreateInfo, True, None, indent)
+ printer.write_struct("pInputAssemblyState", struct_VkPipelineInputAssemblyStateCreateInfo, True, None, indent)
+ printer.write_struct("pTessellationState", struct_VkPipelineTessellationStateCreateInfo, True, None, indent)
+ printer.write_struct("pViewportState", struct_VkPipelineViewportStateCreateInfo, True, None, indent)
+ printer.write_struct("pRasterizationState", struct_VkPipelineRasterizationStateCreateInfo, True, None, indent)
+ printer.write_struct("pMultisampleState", struct_VkPipelineMultisampleStateCreateInfo, True, None, indent)
+ printer.write_struct("pDepthStencilState", struct_VkPipelineDepthStencilStateCreateInfo, True, None, indent)
+ printer.write_struct("pColorBlendState", struct_VkPipelineColorBlendStateCreateInfo, True, None, indent)
+ printer.write_struct("pDynamicState", struct_VkPipelineDynamicStateCreateInfo, True, None, indent)
+ layout = printer.write_int("layout", 8, indent, signed=False, big_endian=False)
+ renderPass = printer.write_int("renderPass", 8, indent, signed=False, big_endian=False)
+ subpass = printer.write_int("subpass", 4, indent, signed=False, big_endian=False)
+ basePipelineHandle = printer.write_int("basePipelineHandle", 8, indent, signed=False, big_endian=False)
+ basePipelineIndex = printer.write_int("basePipelineIndex", 4, indent, signed=True, big_endian=False)
+
+def struct_VkImageCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("imageType", VkImageType, indent)
+ printer.write_enum("format", VkFormat, indent)
+ printer.write_struct("extent", struct_VkExtent3D, False, None, indent)
+ mipLevels = printer.write_int("mipLevels", 4, indent, signed=False, big_endian=False)
+ arrayLayers = printer.write_int("arrayLayers", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("samples", VkSampleCountFlagBits, indent)
+ printer.write_enum("tiling", VkImageTiling, indent)
+ usage = printer.write_int("usage", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("sharingMode", VkSharingMode, indent)
+ queueFamilyIndexCount = printer.write_int("queueFamilyIndexCount", 4, indent, signed=False, big_endian=False)
+ pQueueFamilyIndices = printer.write_int("pQueueFamilyIndices", 4, indent, optional=True, count=queueFamilyIndexCount, big_endian=False)
+ printer.write_enum("initialLayout", VkImageLayout, indent)
+
+def struct_VkImageMemoryBarrier(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", indent)
+ srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
+ dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("oldLayout", VkImageLayout, indent)
+ printer.write_enum("newLayout", VkImageLayout, indent)
+ srcQueueFamilyIndex = printer.write_int("srcQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+ dstQueueFamilyIndex = printer.write_int("dstQueueFamilyIndex", 4, indent, signed=False, big_endian=False)
+ image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("subresourceRange", struct_VkImageSubresourceRange, False, None, indent)
+
+def struct_VkImageSubresourceLayers(printer, indent: int):
+ aspectMask = printer.write_int("aspectMask", 4, indent, signed=False, big_endian=False)
+ mipLevel = printer.write_int("mipLevel", 4, indent, signed=False, big_endian=False)
+ baseArrayLayer = printer.write_int("baseArrayLayer", 4, indent, signed=False, big_endian=False)
+ layerCount = printer.write_int("layerCount", 4, indent, signed=False, big_endian=False)
+
+def struct_VkImageSubresourceRange(printer, indent: int):
+ aspectMask = printer.write_int("aspectMask", 4, indent, signed=False, big_endian=False)
+ baseMipLevel = printer.write_int("baseMipLevel", 4, indent, signed=False, big_endian=False)
+ levelCount = printer.write_int("levelCount", 4, indent, signed=False, big_endian=False)
+ baseArrayLayer = printer.write_int("baseArrayLayer", 4, indent, signed=False, big_endian=False)
+ layerCount = printer.write_int("layerCount", 4, indent, signed=False, big_endian=False)
+
+def struct_VkImageViewCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ image = printer.write_int("image", 8, indent, signed=False, big_endian=False)
+ printer.write_enum("viewType", VkImageViewType, indent)
+ printer.write_enum("format", VkFormat, indent)
+ printer.write_struct("components", struct_VkComponentMapping, False, None, indent)
+ printer.write_struct("subresourceRange", struct_VkImageSubresourceRange, False, None, indent)
+
+def struct_VkMemoryAllocateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO", indent)
+ allocationSize = printer.write_int("allocationSize", 8, indent, signed=False, big_endian=False)
+ memoryTypeIndex = printer.write_int("memoryTypeIndex", 4, indent, signed=False, big_endian=False)
+
+def struct_VkMemoryBarrier(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_MEMORY_BARRIER", indent)
+ srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
+ dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
+
+def struct_VkMemoryRequirements(printer, indent: int):
+ size = printer.write_int("size", 8, indent, signed=False, big_endian=False)
+ alignment = printer.write_int("alignment", 8, indent, signed=False, big_endian=False)
+ memoryTypeBits = printer.write_int("memoryTypeBits", 4, indent, signed=False, big_endian=False)
+
+def struct_VkOffset2D(printer, indent: int):
+ x = printer.write_int("x", 4, indent, signed=True, big_endian=False)
+ y = printer.write_int("y", 4, indent, signed=True, big_endian=False)
+
+def struct_VkOffset3D(printer, indent: int):
+ x = printer.write_int("x", 4, indent, signed=True, big_endian=False)
+ y = printer.write_int("y", 4, indent, signed=True, big_endian=False)
+ z = printer.write_int("z", 4, indent, signed=True, big_endian=False)
+
+def struct_VkPhysicalDeviceLimits(printer, indent: int):
+ maxImageDimension1D = printer.write_int("maxImageDimension1D", 4, indent, signed=False, big_endian=False)
+ maxImageDimension2D = printer.write_int("maxImageDimension2D", 4, indent, signed=False, big_endian=False)
+ maxImageDimension3D = printer.write_int("maxImageDimension3D", 4, indent, signed=False, big_endian=False)
+ maxImageDimensionCube = printer.write_int("maxImageDimensionCube", 4, indent, signed=False, big_endian=False)
+ maxImageArrayLayers = printer.write_int("maxImageArrayLayers", 4, indent, signed=False, big_endian=False)
+ maxTexelBufferElements = printer.write_int("maxTexelBufferElements", 4, indent, signed=False, big_endian=False)
+ maxUniformBufferRange = printer.write_int("maxUniformBufferRange", 4, indent, signed=False, big_endian=False)
+ maxStorageBufferRange = printer.write_int("maxStorageBufferRange", 4, indent, signed=False, big_endian=False)
+ maxPushConstantsSize = printer.write_int("maxPushConstantsSize", 4, indent, signed=False, big_endian=False)
+ maxMemoryAllocationCount = printer.write_int("maxMemoryAllocationCount", 4, indent, signed=False, big_endian=False)
+ maxSamplerAllocationCount = printer.write_int("maxSamplerAllocationCount", 4, indent, signed=False, big_endian=False)
+ bufferImageGranularity = printer.write_int("bufferImageGranularity", 8, indent, signed=False, big_endian=False)
+ sparseAddressSpaceSize = printer.write_int("sparseAddressSpaceSize", 8, indent, signed=False, big_endian=False)
+ maxBoundDescriptorSets = printer.write_int("maxBoundDescriptorSets", 4, indent, signed=False, big_endian=False)
+ maxPerStageDescriptorSamplers = printer.write_int("maxPerStageDescriptorSamplers", 4, indent, signed=False, big_endian=False)
+ maxPerStageDescriptorUniformBuffers = printer.write_int("maxPerStageDescriptorUniformBuffers", 4, indent, signed=False, big_endian=False)
+ maxPerStageDescriptorStorageBuffers = printer.write_int("maxPerStageDescriptorStorageBuffers", 4, indent, signed=False, big_endian=False)
+ maxPerStageDescriptorSampledImages = printer.write_int("maxPerStageDescriptorSampledImages", 4, indent, signed=False, big_endian=False)
+ maxPerStageDescriptorStorageImages = printer.write_int("maxPerStageDescriptorStorageImages", 4, indent, signed=False, big_endian=False)
+ maxPerStageDescriptorInputAttachments = printer.write_int("maxPerStageDescriptorInputAttachments", 4, indent, signed=False, big_endian=False)
+ maxPerStageResources = printer.write_int("maxPerStageResources", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetSamplers = printer.write_int("maxDescriptorSetSamplers", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetUniformBuffers = printer.write_int("maxDescriptorSetUniformBuffers", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetUniformBuffersDynamic = printer.write_int("maxDescriptorSetUniformBuffersDynamic", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetStorageBuffers = printer.write_int("maxDescriptorSetStorageBuffers", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetStorageBuffersDynamic = printer.write_int("maxDescriptorSetStorageBuffersDynamic", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetSampledImages = printer.write_int("maxDescriptorSetSampledImages", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetStorageImages = printer.write_int("maxDescriptorSetStorageImages", 4, indent, signed=False, big_endian=False)
+ maxDescriptorSetInputAttachments = printer.write_int("maxDescriptorSetInputAttachments", 4, indent, signed=False, big_endian=False)
+ maxVertexInputAttributes = printer.write_int("maxVertexInputAttributes", 4, indent, signed=False, big_endian=False)
+ maxVertexInputBindings = printer.write_int("maxVertexInputBindings", 4, indent, signed=False, big_endian=False)
+ maxVertexInputAttributeOffset = printer.write_int("maxVertexInputAttributeOffset", 4, indent, signed=False, big_endian=False)
+ maxVertexInputBindingStride = printer.write_int("maxVertexInputBindingStride", 4, indent, signed=False, big_endian=False)
+ maxVertexOutputComponents = printer.write_int("maxVertexOutputComponents", 4, indent, signed=False, big_endian=False)
+ maxTessellationGenerationLevel = printer.write_int("maxTessellationGenerationLevel", 4, indent, signed=False, big_endian=False)
+ maxTessellationPatchSize = printer.write_int("maxTessellationPatchSize", 4, indent, signed=False, big_endian=False)
+ maxTessellationControlPerVertexInputComponents = printer.write_int("maxTessellationControlPerVertexInputComponents", 4, indent, signed=False, big_endian=False)
+ maxTessellationControlPerVertexOutputComponents = printer.write_int("maxTessellationControlPerVertexOutputComponents", 4, indent, signed=False, big_endian=False)
+ maxTessellationControlPerPatchOutputComponents = printer.write_int("maxTessellationControlPerPatchOutputComponents", 4, indent, signed=False, big_endian=False)
+ maxTessellationControlTotalOutputComponents = printer.write_int("maxTessellationControlTotalOutputComponents", 4, indent, signed=False, big_endian=False)
+ maxTessellationEvaluationInputComponents = printer.write_int("maxTessellationEvaluationInputComponents", 4, indent, signed=False, big_endian=False)
+ maxTessellationEvaluationOutputComponents = printer.write_int("maxTessellationEvaluationOutputComponents", 4, indent, signed=False, big_endian=False)
+ maxGeometryShaderInvocations = printer.write_int("maxGeometryShaderInvocations", 4, indent, signed=False, big_endian=False)
+ maxGeometryInputComponents = printer.write_int("maxGeometryInputComponents", 4, indent, signed=False, big_endian=False)
+ maxGeometryOutputComponents = printer.write_int("maxGeometryOutputComponents", 4, indent, signed=False, big_endian=False)
+ maxGeometryOutputVertices = printer.write_int("maxGeometryOutputVertices", 4, indent, signed=False, big_endian=False)
+ maxGeometryTotalOutputComponents = printer.write_int("maxGeometryTotalOutputComponents", 4, indent, signed=False, big_endian=False)
+ maxFragmentInputComponents = printer.write_int("maxFragmentInputComponents", 4, indent, signed=False, big_endian=False)
+ maxFragmentOutputAttachments = printer.write_int("maxFragmentOutputAttachments", 4, indent, signed=False, big_endian=False)
+ maxFragmentDualSrcAttachments = printer.write_int("maxFragmentDualSrcAttachments", 4, indent, signed=False, big_endian=False)
+ maxFragmentCombinedOutputResources = printer.write_int("maxFragmentCombinedOutputResources", 4, indent, signed=False, big_endian=False)
+ maxComputeSharedMemorySize = printer.write_int("maxComputeSharedMemorySize", 4, indent, signed=False, big_endian=False)
+ printer.write_int("maxComputeWorkGroupCount", 4, indent, signed=False, count=3)
+ maxComputeWorkGroupInvocations = printer.write_int("maxComputeWorkGroupInvocations", 4, indent, signed=False, big_endian=False)
+ printer.write_int("maxComputeWorkGroupSize", 4, indent, signed=False, count=3)
+ subPixelPrecisionBits = printer.write_int("subPixelPrecisionBits", 4, indent, signed=False, big_endian=False)
+ subTexelPrecisionBits = printer.write_int("subTexelPrecisionBits", 4, indent, signed=False, big_endian=False)
+ mipmapPrecisionBits = printer.write_int("mipmapPrecisionBits", 4, indent, signed=False, big_endian=False)
+ maxDrawIndexedIndexValue = printer.write_int("maxDrawIndexedIndexValue", 4, indent, signed=False, big_endian=False)
+ maxDrawIndirectCount = printer.write_int("maxDrawIndirectCount", 4, indent, signed=False, big_endian=False)
+ printer.write_float("maxSamplerLodBias", indent)
+ printer.write_float("maxSamplerAnisotropy", indent)
+ maxViewports = printer.write_int("maxViewports", 4, indent, signed=False, big_endian=False)
+ printer.write_int("maxViewportDimensions", 4, indent, signed=False, count=2)
+ printer.write_float("viewportBoundsRange", indent, count=2)
+ viewportSubPixelBits = printer.write_int("viewportSubPixelBits", 4, indent, signed=False, big_endian=False)
+ minMemoryMapAlignment = printer.write_int("minMemoryMapAlignment", 8, indent, signed=False, big_endian=True)
+ minTexelBufferOffsetAlignment = printer.write_int("minTexelBufferOffsetAlignment", 8, indent, signed=False, big_endian=False)
+ minUniformBufferOffsetAlignment = printer.write_int("minUniformBufferOffsetAlignment", 8, indent, signed=False, big_endian=False)
+ minStorageBufferOffsetAlignment = printer.write_int("minStorageBufferOffsetAlignment", 8, indent, signed=False, big_endian=False)
+ minTexelOffset = printer.write_int("minTexelOffset", 4, indent, signed=True, big_endian=False)
+ maxTexelOffset = printer.write_int("maxTexelOffset", 4, indent, signed=False, big_endian=False)
+ minTexelGatherOffset = printer.write_int("minTexelGatherOffset", 4, indent, signed=True, big_endian=False)
+ maxTexelGatherOffset = printer.write_int("maxTexelGatherOffset", 4, indent, signed=False, big_endian=False)
+ printer.write_float("minInterpolationOffset", indent)
+ printer.write_float("maxInterpolationOffset", indent)
+ subPixelInterpolationOffsetBits = printer.write_int("subPixelInterpolationOffsetBits", 4, indent, signed=False, big_endian=False)
+ maxFramebufferWidth = printer.write_int("maxFramebufferWidth", 4, indent, signed=False, big_endian=False)
+ maxFramebufferHeight = printer.write_int("maxFramebufferHeight", 4, indent, signed=False, big_endian=False)
+ maxFramebufferLayers = printer.write_int("maxFramebufferLayers", 4, indent, signed=False, big_endian=False)
+ framebufferColorSampleCounts = printer.write_int("framebufferColorSampleCounts", 4, indent, signed=False, big_endian=False)
+ framebufferDepthSampleCounts = printer.write_int("framebufferDepthSampleCounts", 4, indent, signed=False, big_endian=False)
+ framebufferStencilSampleCounts = printer.write_int("framebufferStencilSampleCounts", 4, indent, signed=False, big_endian=False)
+ framebufferNoAttachmentsSampleCounts = printer.write_int("framebufferNoAttachmentsSampleCounts", 4, indent, signed=False, big_endian=False)
+ maxColorAttachments = printer.write_int("maxColorAttachments", 4, indent, signed=False, big_endian=False)
+ sampledImageColorSampleCounts = printer.write_int("sampledImageColorSampleCounts", 4, indent, signed=False, big_endian=False)
+ sampledImageIntegerSampleCounts = printer.write_int("sampledImageIntegerSampleCounts", 4, indent, signed=False, big_endian=False)
+ sampledImageDepthSampleCounts = printer.write_int("sampledImageDepthSampleCounts", 4, indent, signed=False, big_endian=False)
+ sampledImageStencilSampleCounts = printer.write_int("sampledImageStencilSampleCounts", 4, indent, signed=False, big_endian=False)
+ storageImageSampleCounts = printer.write_int("storageImageSampleCounts", 4, indent, signed=False, big_endian=False)
+ maxSampleMaskWords = printer.write_int("maxSampleMaskWords", 4, indent, signed=False, big_endian=False)
+ timestampComputeAndGraphics = printer.write_int("timestampComputeAndGraphics", 4, indent, signed=False, big_endian=False)
+ printer.write_float("timestampPeriod", indent)
+ maxClipDistances = printer.write_int("maxClipDistances", 4, indent, signed=False, big_endian=False)
+ maxCullDistances = printer.write_int("maxCullDistances", 4, indent, signed=False, big_endian=False)
+ maxCombinedClipAndCullDistances = printer.write_int("maxCombinedClipAndCullDistances", 4, indent, signed=False, big_endian=False)
+ discreteQueuePriorities = printer.write_int("discreteQueuePriorities", 4, indent, signed=False, big_endian=False)
+ printer.write_float("pointSizeRange", indent, count=2)
+ printer.write_float("lineWidthRange", indent, count=2)
+ printer.write_float("pointSizeGranularity", indent)
+ printer.write_float("lineWidthGranularity", indent)
+ strictLines = printer.write_int("strictLines", 4, indent, signed=False, big_endian=False)
+ standardSampleLocations = printer.write_int("standardSampleLocations", 4, indent, signed=False, big_endian=False)
+ optimalBufferCopyOffsetAlignment = printer.write_int("optimalBufferCopyOffsetAlignment", 8, indent, signed=False, big_endian=False)
+ optimalBufferCopyRowPitchAlignment = printer.write_int("optimalBufferCopyRowPitchAlignment", 8, indent, signed=False, big_endian=False)
+ nonCoherentAtomSize = printer.write_int("nonCoherentAtomSize", 8, indent, signed=False, big_endian=False)
+
+def struct_VkPhysicalDeviceProperties(printer, indent: int):
+ apiVersion = printer.write_int("apiVersion", 4, indent, signed=False, big_endian=False)
+ driverVersion = printer.write_int("driverVersion", 4, indent, signed=False, big_endian=False)
+ vendorID = printer.write_int("vendorID", 4, indent, signed=False, big_endian=False)
+ deviceID = printer.write_int("deviceID", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("deviceType", VkPhysicalDeviceType, indent)
+ printer.write_string("deviceName", 256, indent)
+ printer.write_int("pipelineCacheUUID", 1, indent, signed=False, count=16)
+ printer.write_struct("limits", struct_VkPhysicalDeviceLimits, False, None, indent)
+ printer.write_struct("sparseProperties", struct_VkPhysicalDeviceSparseProperties, False, None, indent)
+
+def struct_VkPhysicalDeviceProperties2(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2", indent)
+ printer.write_struct("properties", struct_VkPhysicalDeviceProperties, False, None, indent)
+
+def struct_VkPhysicalDeviceSparseProperties(printer, indent: int):
+ residencyStandard2DBlockShape = printer.write_int("residencyStandard2DBlockShape", 4, indent, signed=False, big_endian=False)
+ residencyStandard2DMultisampleBlockShape = printer.write_int("residencyStandard2DMultisampleBlockShape", 4, indent, signed=False, big_endian=False)
+ residencyStandard3DBlockShape = printer.write_int("residencyStandard3DBlockShape", 4, indent, signed=False, big_endian=False)
+ residencyAlignedMipSize = printer.write_int("residencyAlignedMipSize", 4, indent, signed=False, big_endian=False)
+ residencyNonResidentStrict = printer.write_int("residencyNonResidentStrict", 4, indent, signed=False, big_endian=False)
+
+def struct_VkPipelineCacheCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ initialDataSize = printer.write_int("initialDataSize", 8, indent, signed=False, big_endian=True)
+ pInitialData = printer.write_int("pInitialData", 8, indent, optional=False, count=initialDataSize, big_endian=False)
+
+def struct_VkPipelineColorBlendAttachmentState(printer, indent: int):
+ blendEnable = printer.write_int("blendEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("srcColorBlendFactor", VkBlendFactor, indent)
+ printer.write_enum("dstColorBlendFactor", VkBlendFactor, indent)
+ printer.write_enum("colorBlendOp", VkBlendOp, indent)
+ printer.write_enum("srcAlphaBlendFactor", VkBlendFactor, indent)
+ printer.write_enum("dstAlphaBlendFactor", VkBlendFactor, indent)
+ printer.write_enum("alphaBlendOp", VkBlendOp, indent)
+ colorWriteMask = printer.write_int("colorWriteMask", 4, indent, signed=False, big_endian=False)
+
+def struct_VkPipelineColorBlendStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ logicOpEnable = printer.write_int("logicOpEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("logicOp", VkLogicOp, indent)
+ attachmentCount = printer.write_int("attachmentCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pAttachments", struct_VkPipelineColorBlendAttachmentState, False, attachmentCount, indent)
+ printer.write_float("blendConstants", indent, count=4)
+
+def struct_VkPipelineDepthStencilStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ depthTestEnable = printer.write_int("depthTestEnable", 4, indent, signed=False, big_endian=False)
+ depthWriteEnable = printer.write_int("depthWriteEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("depthCompareOp", VkCompareOp, indent)
+ depthBoundsTestEnable = printer.write_int("depthBoundsTestEnable", 4, indent, signed=False, big_endian=False)
+ stencilTestEnable = printer.write_int("stencilTestEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("front", struct_VkStencilOpState, False, None, indent)
+ printer.write_struct("back", struct_VkStencilOpState, False, None, indent)
+ printer.write_float("minDepthBounds", indent)
+ printer.write_float("maxDepthBounds", indent)
+
+def struct_VkPipelineDynamicStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ dynamicStateCount = printer.write_int("dynamicStateCount", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("pDynamicStates", VkDynamicState, indent)
+
+def struct_VkPipelineInputAssemblyStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("topology", VkPrimitiveTopology, indent)
+ primitiveRestartEnable = printer.write_int("primitiveRestartEnable", 4, indent, signed=False, big_endian=False)
+
+def struct_VkPipelineMultisampleStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("rasterizationSamples", VkSampleCountFlagBits, indent)
+ sampleShadingEnable = printer.write_int("sampleShadingEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_float("minSampleShading", indent)
+ pSampleMask = printer.write_int("pSampleMask", 8, indent, optional=True, count=int(rasterizationSamples / 32), big_endian=False)
+ alphaToCoverageEnable = printer.write_int("alphaToCoverageEnable", 4, indent, signed=False, big_endian=False)
+ alphaToOneEnable = printer.write_int("alphaToOneEnable", 4, indent, signed=False, big_endian=False)
+
+def struct_VkPipelineRasterizationStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ depthClampEnable = printer.write_int("depthClampEnable", 4, indent, signed=False, big_endian=False)
+ rasterizerDiscardEnable = printer.write_int("rasterizerDiscardEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("polygonMode", VkPolygonMode, indent)
+ cullMode = printer.write_int("cullMode", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("frontFace", VkFrontFace, indent)
+ depthBiasEnable = printer.write_int("depthBiasEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_float("depthBiasConstantFactor", indent)
+ printer.write_float("depthBiasClamp", indent)
+ printer.write_float("depthBiasSlopeFactor", indent)
+ printer.write_float("lineWidth", indent)
+
+def struct_VkPipelineShaderStageCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("stage", VkShaderStageFlagBits, indent)
+ module = printer.write_int("module", 8, indent, signed=False, big_endian=False)
+ printer.write_string("pName", None, indent)
+ printer.write_struct("pSpecializationInfo", struct_VkSpecializationInfo, True, None, indent)
+
+def struct_VkPipelineTessellationStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ patchControlPoints = printer.write_int("patchControlPoints", 4, indent, signed=False, big_endian=False)
+
+def struct_VkPipelineVertexInputStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ vertexBindingDescriptionCount = printer.write_int("vertexBindingDescriptionCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pVertexBindingDescriptions", struct_VkVertexInputBindingDescription, False, vertexBindingDescriptionCount, indent)
+ vertexAttributeDescriptionCount = printer.write_int("vertexAttributeDescriptionCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pVertexAttributeDescriptions", struct_VkVertexInputAttributeDescription, False, vertexAttributeDescriptionCount, indent)
+
+def struct_VkPipelineViewportStateCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ viewportCount = printer.write_int("viewportCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pViewports", struct_VkViewport, True, viewportCount, indent)
+ scissorCount = printer.write_int("scissorCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pScissors", struct_VkRect2D, True, scissorCount, indent)
+
+def struct_VkRect2D(printer, indent: int):
+ printer.write_struct("offset", struct_VkOffset2D, False, None, indent)
+ printer.write_struct("extent", struct_VkExtent2D, False, None, indent)
+
+def struct_VkRenderPassBeginInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO", indent)
+ renderPass = printer.write_int("renderPass", 8, indent, signed=False, big_endian=False)
+ framebuffer = printer.write_int("framebuffer", 8, indent, signed=False, big_endian=False)
+ printer.write_struct("renderArea", struct_VkRect2D, False, None, indent)
+ clearValueCount = printer.write_int("clearValueCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pClearValues", struct_VkClearValue, True, clearValueCount, indent)
+
+def struct_VkRenderPassCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ attachmentCount = printer.write_int("attachmentCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pAttachments", struct_VkAttachmentDescription, False, attachmentCount, indent)
+ subpassCount = printer.write_int("subpassCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pSubpasses", struct_VkSubpassDescription, False, subpassCount, indent)
+ dependencyCount = printer.write_int("dependencyCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pDependencies", struct_VkSubpassDependency, False, dependencyCount, indent)
+
+def struct_VkSamplerCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("magFilter", VkFilter, indent)
+ printer.write_enum("minFilter", VkFilter, indent)
+ printer.write_enum("mipmapMode", VkSamplerMipmapMode, indent)
+ printer.write_enum("addressModeU", VkSamplerAddressMode, indent)
+ printer.write_enum("addressModeV", VkSamplerAddressMode, indent)
+ printer.write_enum("addressModeW", VkSamplerAddressMode, indent)
+ printer.write_float("mipLodBias", indent)
+ anisotropyEnable = printer.write_int("anisotropyEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_float("maxAnisotropy", indent)
+ compareEnable = printer.write_int("compareEnable", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("compareOp", VkCompareOp, indent)
+ printer.write_float("minLod", indent)
+ printer.write_float("maxLod", indent)
+ printer.write_enum("borderColor", VkBorderColor, indent)
+ unnormalizedCoordinates = printer.write_int("unnormalizedCoordinates", 4, indent, signed=False, big_endian=False)
+
+def struct_VkSemaphoreCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+
+def struct_VkShaderModuleCreateInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO", indent)
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ codeSize = printer.write_int("codeSize", 8, indent, signed=False, big_endian=True)
+ pCode = printer.write_int("pCode", 4, indent, optional=False, count=int(codeSize / 4), big_endian=False)
+
+def struct_VkSpecializationInfo(printer, indent: int):
+ mapEntryCount = printer.write_int("mapEntryCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pMapEntries", struct_VkSpecializationMapEntry, False, mapEntryCount, indent)
+ dataSize = printer.write_int("dataSize", 8, indent, signed=False, big_endian=True)
+ pData = printer.write_int("pData", 8, indent, optional=False, count=dataSize, big_endian=False)
+
+def struct_VkSpecializationMapEntry(printer, indent: int):
+ constantID = printer.write_int("constantID", 4, indent, signed=False, big_endian=False)
+ offset = printer.write_int("offset", 4, indent, signed=False, big_endian=False)
+ size = printer.write_int("size", 8, indent, signed=False, big_endian=True)
+
+def struct_VkStencilOpState(printer, indent: int):
+ printer.write_enum("failOp", VkStencilOp, indent)
+ printer.write_enum("passOp", VkStencilOp, indent)
+ printer.write_enum("depthFailOp", VkStencilOp, indent)
+ printer.write_enum("compareOp", VkCompareOp, indent)
+ compareMask = printer.write_int("compareMask", 4, indent, signed=False, big_endian=False)
+ writeMask = printer.write_int("writeMask", 4, indent, signed=False, big_endian=False)
+ reference = printer.write_int("reference", 4, indent, signed=False, big_endian=False)
+
+def struct_VkSubmitInfo(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_SUBMIT_INFO", indent)
+ waitSemaphoreCount = printer.write_int("waitSemaphoreCount", 4, indent, signed=False, big_endian=False)
+ pWaitSemaphores = printer.write_int("pWaitSemaphores", 8, indent, optional=False, count=waitSemaphoreCount, big_endian=False)
+ pWaitDstStageMask = printer.write_int("pWaitDstStageMask", 4, indent, optional=False, count=waitSemaphoreCount, big_endian=False)
+ commandBufferCount = printer.write_int("commandBufferCount", 4, indent, signed=False, big_endian=False)
+ pCommandBuffers = printer.write_int("pCommandBuffers", 8, indent, optional=False, count=commandBufferCount, big_endian=False)
+ signalSemaphoreCount = printer.write_int("signalSemaphoreCount", 4, indent, signed=False, big_endian=False)
+ pSignalSemaphores = printer.write_int("pSignalSemaphores", 8, indent, optional=False, count=signalSemaphoreCount, big_endian=False)
+
+def struct_VkSubpassDependency(printer, indent: int):
+ srcSubpass = printer.write_int("srcSubpass", 4, indent, signed=False, big_endian=False)
+ dstSubpass = printer.write_int("dstSubpass", 4, indent, signed=False, big_endian=False)
+ srcStageMask = printer.write_int("srcStageMask", 4, indent, signed=False, big_endian=False)
+ dstStageMask = printer.write_int("dstStageMask", 4, indent, signed=False, big_endian=False)
+ srcAccessMask = printer.write_int("srcAccessMask", 4, indent, signed=False, big_endian=False)
+ dstAccessMask = printer.write_int("dstAccessMask", 4, indent, signed=False, big_endian=False)
+ dependencyFlags = printer.write_int("dependencyFlags", 4, indent, signed=False, big_endian=False)
+
+def struct_VkSubpassDescription(printer, indent: int):
+ flags = printer.write_int("flags", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("pipelineBindPoint", VkPipelineBindPoint, indent)
+ inputAttachmentCount = printer.write_int("inputAttachmentCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pInputAttachments", struct_VkAttachmentReference, False, inputAttachmentCount, indent)
+ colorAttachmentCount = printer.write_int("colorAttachmentCount", 4, indent, signed=False, big_endian=False)
+ printer.write_struct("pColorAttachments", struct_VkAttachmentReference, False, colorAttachmentCount, indent)
+ printer.write_struct("pResolveAttachments", struct_VkAttachmentReference, True, colorAttachmentCount, indent)
+ printer.write_struct("pDepthStencilAttachment", struct_VkAttachmentReference, True, None, indent)
+ preserveAttachmentCount = printer.write_int("preserveAttachmentCount", 4, indent, signed=False, big_endian=False)
+ pPreserveAttachments = printer.write_int("pPreserveAttachments", 4, indent, optional=False, count=preserveAttachmentCount, big_endian=False)
+
+def struct_VkVertexInputAttributeDescription(printer, indent: int):
+ location = printer.write_int("location", 4, indent, signed=False, big_endian=False)
+ binding = printer.write_int("binding", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("format", VkFormat, indent)
+ offset = printer.write_int("offset", 4, indent, signed=False, big_endian=False)
+
+def struct_VkVertexInputBindingDescription(printer, indent: int):
+ binding = printer.write_int("binding", 4, indent, signed=False, big_endian=False)
+ stride = printer.write_int("stride", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("inputRate", VkVertexInputRate, indent)
+
+def struct_VkViewport(printer, indent: int):
+ printer.write_float("x", indent)
+ printer.write_float("y", indent)
+ printer.write_float("width", indent)
+ printer.write_float("height", indent)
+ printer.write_float("minDepth", indent)
+ printer.write_float("maxDepth", indent)
+
+def struct_VkWriteDescriptorSet(printer, indent: int):
+ printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET", indent)
+ dstSet = printer.write_int("dstSet", 8, indent, signed=False, big_endian=False)
+ dstBinding = printer.write_int("dstBinding", 4, indent, signed=False, big_endian=False)
+ dstArrayElement = printer.write_int("dstArrayElement", 4, indent, signed=False, big_endian=False)
+ descriptorCount = printer.write_int("descriptorCount", 4, indent, signed=False, big_endian=False)
+ printer.write_enum("descriptorType", VkDescriptorType, indent)
+ printer.write_struct("pImageInfo", struct_VkDescriptorImageInfo, True, descriptorCount, indent)
+ printer.write_struct("pBufferInfo", struct_VkDescriptorBufferInfo, True, descriptorCount, indent)
+ pTexelBufferView = printer.write_int("pTexelBufferView", 8, indent, optional=True, count=descriptorCount, big_endian=False)
+
+VkAttachmentLoadOp = {
+ 0: "VK_ATTACHMENT_LOAD_OP_LOAD",
+ 1: "VK_ATTACHMENT_LOAD_OP_CLEAR",
+ 2: "VK_ATTACHMENT_LOAD_OP_DONT_CARE",
+ 1000400000: "VK_ATTACHMENT_LOAD_OP_NONE_EXT",
+}
+
+VkAttachmentStoreOp = {
+ 0: "VK_ATTACHMENT_STORE_OP_STORE",
+ 1: "VK_ATTACHMENT_STORE_OP_DONT_CARE",
+ 1000301000: "VK_ATTACHMENT_STORE_OP_NONE_KHR",
+}
+
+VkBlendFactor = {
+ 0: "VK_BLEND_FACTOR_ZERO",
+ 1: "VK_BLEND_FACTOR_ONE",
+ 2: "VK_BLEND_FACTOR_SRC_COLOR",
+ 3: "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR",
+ 4: "VK_BLEND_FACTOR_DST_COLOR",
+ 5: "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR",
+ 6: "VK_BLEND_FACTOR_SRC_ALPHA",
+ 7: "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA",
+ 8: "VK_BLEND_FACTOR_DST_ALPHA",
+ 9: "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA",
+ 10: "VK_BLEND_FACTOR_CONSTANT_COLOR",
+ 11: "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR",
+ 12: "VK_BLEND_FACTOR_CONSTANT_ALPHA",
+ 13: "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA",
+ 14: "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE",
+ 15: "VK_BLEND_FACTOR_SRC1_COLOR",
+ 16: "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR",
+ 17: "VK_BLEND_FACTOR_SRC1_ALPHA",
+ 18: "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA",
+}
+
+VkBlendOp = {
+ 0: "VK_BLEND_OP_ADD",
+ 1: "VK_BLEND_OP_SUBTRACT",
+ 2: "VK_BLEND_OP_REVERSE_SUBTRACT",
+ 3: "VK_BLEND_OP_MIN",
+ 4: "VK_BLEND_OP_MAX",
+ 1000148000: "VK_BLEND_OP_ZERO_EXT",
+ 1000148001: "VK_BLEND_OP_SRC_EXT",
+ 1000148002: "VK_BLEND_OP_DST_EXT",
+ 1000148003: "VK_BLEND_OP_SRC_OVER_EXT",
+ 1000148004: "VK_BLEND_OP_DST_OVER_EXT",
+ 1000148005: "VK_BLEND_OP_SRC_IN_EXT",
+ 1000148006: "VK_BLEND_OP_DST_IN_EXT",
+ 1000148007: "VK_BLEND_OP_SRC_OUT_EXT",
+ 1000148008: "VK_BLEND_OP_DST_OUT_EXT",
+ 1000148009: "VK_BLEND_OP_SRC_ATOP_EXT",
+ 1000148010: "VK_BLEND_OP_DST_ATOP_EXT",
+ 1000148011: "VK_BLEND_OP_XOR_EXT",
+ 1000148012: "VK_BLEND_OP_MULTIPLY_EXT",
+ 1000148013: "VK_BLEND_OP_SCREEN_EXT",
+ 1000148014: "VK_BLEND_OP_OVERLAY_EXT",
+ 1000148015: "VK_BLEND_OP_DARKEN_EXT",
+ 1000148016: "VK_BLEND_OP_LIGHTEN_EXT",
+ 1000148017: "VK_BLEND_OP_COLORDODGE_EXT",
+ 1000148018: "VK_BLEND_OP_COLORBURN_EXT",
+ 1000148019: "VK_BLEND_OP_HARDLIGHT_EXT",
+ 1000148020: "VK_BLEND_OP_SOFTLIGHT_EXT",
+ 1000148021: "VK_BLEND_OP_DIFFERENCE_EXT",
+ 1000148022: "VK_BLEND_OP_EXCLUSION_EXT",
+ 1000148023: "VK_BLEND_OP_INVERT_EXT",
+ 1000148024: "VK_BLEND_OP_INVERT_RGB_EXT",
+ 1000148025: "VK_BLEND_OP_LINEARDODGE_EXT",
+ 1000148026: "VK_BLEND_OP_LINEARBURN_EXT",
+ 1000148027: "VK_BLEND_OP_VIVIDLIGHT_EXT",
+ 1000148028: "VK_BLEND_OP_LINEARLIGHT_EXT",
+ 1000148029: "VK_BLEND_OP_PINLIGHT_EXT",
+ 1000148030: "VK_BLEND_OP_HARDMIX_EXT",
+ 1000148031: "VK_BLEND_OP_HSL_HUE_EXT",
+ 1000148032: "VK_BLEND_OP_HSL_SATURATION_EXT",
+ 1000148033: "VK_BLEND_OP_HSL_COLOR_EXT",
+ 1000148034: "VK_BLEND_OP_HSL_LUMINOSITY_EXT",
+ 1000148035: "VK_BLEND_OP_PLUS_EXT",
+ 1000148036: "VK_BLEND_OP_PLUS_CLAMPED_EXT",
+ 1000148037: "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT",
+ 1000148038: "VK_BLEND_OP_PLUS_DARKER_EXT",
+ 1000148039: "VK_BLEND_OP_MINUS_EXT",
+ 1000148040: "VK_BLEND_OP_MINUS_CLAMPED_EXT",
+ 1000148041: "VK_BLEND_OP_CONTRAST_EXT",
+ 1000148042: "VK_BLEND_OP_INVERT_OVG_EXT",
+ 1000148043: "VK_BLEND_OP_RED_EXT",
+ 1000148044: "VK_BLEND_OP_GREEN_EXT",
+ 1000148045: "VK_BLEND_OP_BLUE_EXT",
+}
+
+VkBorderColor = {
+ 0: "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK",
+ 1: "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK",
+ 2: "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK",
+ 3: "VK_BORDER_COLOR_INT_OPAQUE_BLACK",
+ 4: "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE",
+ 5: "VK_BORDER_COLOR_INT_OPAQUE_WHITE",
+ 1000287003: "VK_BORDER_COLOR_FLOAT_CUSTOM_EXT",
+ 1000287004: "VK_BORDER_COLOR_INT_CUSTOM_EXT",
+}
+
+VkCompareOp = {
+ 0: "VK_COMPARE_OP_NEVER",
+ 1: "VK_COMPARE_OP_LESS",
+ 2: "VK_COMPARE_OP_EQUAL",
+ 3: "VK_COMPARE_OP_LESS_OR_EQUAL",
+ 4: "VK_COMPARE_OP_GREATER",
+ 5: "VK_COMPARE_OP_NOT_EQUAL",
+ 6: "VK_COMPARE_OP_GREATER_OR_EQUAL",
+ 7: "VK_COMPARE_OP_ALWAYS",
+}
+
+VkComponentSwizzle = {
+ 0: "VK_COMPONENT_SWIZZLE_IDENTITY",
+ 1: "VK_COMPONENT_SWIZZLE_ZERO",
+ 2: "VK_COMPONENT_SWIZZLE_ONE",
+ 3: "VK_COMPONENT_SWIZZLE_R",
+ 4: "VK_COMPONENT_SWIZZLE_G",
+ 5: "VK_COMPONENT_SWIZZLE_B",
+ 6: "VK_COMPONENT_SWIZZLE_A",
+}
+
+VkDescriptorType = {
+ 0: "VK_DESCRIPTOR_TYPE_SAMPLER",
+ 1: "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER",
+ 2: "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE",
+ 3: "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE",
+ 4: "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER",
+ 5: "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER",
+ 6: "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER",
+ 7: "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER",
+ 8: "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC",
+ 9: "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC",
+ 10: "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT",
+ 1000138000: "VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT",
+ 1000150000: "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR",
+ 1000165000: "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV",
+ 1000351000: "VK_DESCRIPTOR_TYPE_MUTABLE_VALVE",
+}
+
+VkDynamicState = {
+ 0: "VK_DYNAMIC_STATE_VIEWPORT",
+ 1: "VK_DYNAMIC_STATE_SCISSOR",
+ 2: "VK_DYNAMIC_STATE_LINE_WIDTH",
+ 3: "VK_DYNAMIC_STATE_DEPTH_BIAS",
+ 4: "VK_DYNAMIC_STATE_BLEND_CONSTANTS",
+ 5: "VK_DYNAMIC_STATE_DEPTH_BOUNDS",
+ 6: "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK",
+ 7: "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK",
+ 8: "VK_DYNAMIC_STATE_STENCIL_REFERENCE",
+ 1000087000: "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV",
+ 1000099000: "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT",
+ 1000143000: "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT",
+ 1000347000: "VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR",
+ 1000164004: "VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV",
+ 1000164006: "VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV",
+ 1000205001: "VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV",
+ 1000226000: "VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR",
+ 1000259000: "VK_DYNAMIC_STATE_LINE_STIPPLE_EXT",
+ 1000267000: "VK_DYNAMIC_STATE_CULL_MODE_EXT",
+ 1000267001: "VK_DYNAMIC_STATE_FRONT_FACE_EXT",
+ 1000267002: "VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT",
+ 1000267003: "VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT",
+ 1000267004: "VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT",
+ 1000267005: "VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT",
+ 1000267006: "VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT",
+ 1000267007: "VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT",
+ 1000267008: "VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT",
+ 1000267009: "VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT",
+ 1000267010: "VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT",
+ 1000267011: "VK_DYNAMIC_STATE_STENCIL_OP_EXT",
+ 1000352000: "VK_DYNAMIC_STATE_VERTEX_INPUT_EXT",
+ 1000377000: "VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT",
+ 1000377001: "VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT",
+ 1000377002: "VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT",
+ 1000377003: "VK_DYNAMIC_STATE_LOGIC_OP_EXT",
+ 1000377004: "VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT",
+ 1000381000: "VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT",
+}
+
+VkFilter = {
+ 0: "VK_FILTER_NEAREST",
+ 1: "VK_FILTER_LINEAR",
+ 1000015000: "VK_FILTER_CUBIC_IMG",
+}
+
+VkFormat = {
+ 0: "VK_FORMAT_UNDEFINED",
+ 1: "VK_FORMAT_R4G4_UNORM_PACK8",
+ 2: "VK_FORMAT_R4G4B4A4_UNORM_PACK16",
+ 3: "VK_FORMAT_B4G4R4A4_UNORM_PACK16",
+ 4: "VK_FORMAT_R5G6B5_UNORM_PACK16",
+ 5: "VK_FORMAT_B5G6R5_UNORM_PACK16",
+ 6: "VK_FORMAT_R5G5B5A1_UNORM_PACK16",
+ 7: "VK_FORMAT_B5G5R5A1_UNORM_PACK16",
+ 8: "VK_FORMAT_A1R5G5B5_UNORM_PACK16",
+ 9: "VK_FORMAT_R8_UNORM",
+ 10: "VK_FORMAT_R8_SNORM",
+ 11: "VK_FORMAT_R8_USCALED",
+ 12: "VK_FORMAT_R8_SSCALED",
+ 13: "VK_FORMAT_R8_UINT",
+ 14: "VK_FORMAT_R8_SINT",
+ 15: "VK_FORMAT_R8_SRGB",
+ 16: "VK_FORMAT_R8G8_UNORM",
+ 17: "VK_FORMAT_R8G8_SNORM",
+ 18: "VK_FORMAT_R8G8_USCALED",
+ 19: "VK_FORMAT_R8G8_SSCALED",
+ 20: "VK_FORMAT_R8G8_UINT",
+ 21: "VK_FORMAT_R8G8_SINT",
+ 22: "VK_FORMAT_R8G8_SRGB",
+ 23: "VK_FORMAT_R8G8B8_UNORM",
+ 24: "VK_FORMAT_R8G8B8_SNORM",
+ 25: "VK_FORMAT_R8G8B8_USCALED",
+ 26: "VK_FORMAT_R8G8B8_SSCALED",
+ 27: "VK_FORMAT_R8G8B8_UINT",
+ 28: "VK_FORMAT_R8G8B8_SINT",
+ 29: "VK_FORMAT_R8G8B8_SRGB",
+ 30: "VK_FORMAT_B8G8R8_UNORM",
+ 31: "VK_FORMAT_B8G8R8_SNORM",
+ 32: "VK_FORMAT_B8G8R8_USCALED",
+ 33: "VK_FORMAT_B8G8R8_SSCALED",
+ 34: "VK_FORMAT_B8G8R8_UINT",
+ 35: "VK_FORMAT_B8G8R8_SINT",
+ 36: "VK_FORMAT_B8G8R8_SRGB",
+ 37: "VK_FORMAT_R8G8B8A8_UNORM",
+ 38: "VK_FORMAT_R8G8B8A8_SNORM",
+ 39: "VK_FORMAT_R8G8B8A8_USCALED",
+ 40: "VK_FORMAT_R8G8B8A8_SSCALED",
+ 41: "VK_FORMAT_R8G8B8A8_UINT",
+ 42: "VK_FORMAT_R8G8B8A8_SINT",
+ 43: "VK_FORMAT_R8G8B8A8_SRGB",
+ 44: "VK_FORMAT_B8G8R8A8_UNORM",
+ 45: "VK_FORMAT_B8G8R8A8_SNORM",
+ 46: "VK_FORMAT_B8G8R8A8_USCALED",
+ 47: "VK_FORMAT_B8G8R8A8_SSCALED",
+ 48: "VK_FORMAT_B8G8R8A8_UINT",
+ 49: "VK_FORMAT_B8G8R8A8_SINT",
+ 50: "VK_FORMAT_B8G8R8A8_SRGB",
+ 51: "VK_FORMAT_A8B8G8R8_UNORM_PACK32",
+ 52: "VK_FORMAT_A8B8G8R8_SNORM_PACK32",
+ 53: "VK_FORMAT_A8B8G8R8_USCALED_PACK32",
+ 54: "VK_FORMAT_A8B8G8R8_SSCALED_PACK32",
+ 55: "VK_FORMAT_A8B8G8R8_UINT_PACK32",
+ 56: "VK_FORMAT_A8B8G8R8_SINT_PACK32",
+ 57: "VK_FORMAT_A8B8G8R8_SRGB_PACK32",
+ 58: "VK_FORMAT_A2R10G10B10_UNORM_PACK32",
+ 59: "VK_FORMAT_A2R10G10B10_SNORM_PACK32",
+ 60: "VK_FORMAT_A2R10G10B10_USCALED_PACK32",
+ 61: "VK_FORMAT_A2R10G10B10_SSCALED_PACK32",
+ 62: "VK_FORMAT_A2R10G10B10_UINT_PACK32",
+ 63: "VK_FORMAT_A2R10G10B10_SINT_PACK32",
+ 64: "VK_FORMAT_A2B10G10R10_UNORM_PACK32",
+ 65: "VK_FORMAT_A2B10G10R10_SNORM_PACK32",
+ 66: "VK_FORMAT_A2B10G10R10_USCALED_PACK32",
+ 67: "VK_FORMAT_A2B10G10R10_SSCALED_PACK32",
+ 68: "VK_FORMAT_A2B10G10R10_UINT_PACK32",
+ 69: "VK_FORMAT_A2B10G10R10_SINT_PACK32",
+ 70: "VK_FORMAT_R16_UNORM",
+ 71: "VK_FORMAT_R16_SNORM",
+ 72: "VK_FORMAT_R16_USCALED",
+ 73: "VK_FORMAT_R16_SSCALED",
+ 74: "VK_FORMAT_R16_UINT",
+ 75: "VK_FORMAT_R16_SINT",
+ 76: "VK_FORMAT_R16_SFLOAT",
+ 77: "VK_FORMAT_R16G16_UNORM",
+ 78: "VK_FORMAT_R16G16_SNORM",
+ 79: "VK_FORMAT_R16G16_USCALED",
+ 80: "VK_FORMAT_R16G16_SSCALED",
+ 81: "VK_FORMAT_R16G16_UINT",
+ 82: "VK_FORMAT_R16G16_SINT",
+ 83: "VK_FORMAT_R16G16_SFLOAT",
+ 84: "VK_FORMAT_R16G16B16_UNORM",
+ 85: "VK_FORMAT_R16G16B16_SNORM",
+ 86: "VK_FORMAT_R16G16B16_USCALED",
+ 87: "VK_FORMAT_R16G16B16_SSCALED",
+ 88: "VK_FORMAT_R16G16B16_UINT",
+ 89: "VK_FORMAT_R16G16B16_SINT",
+ 90: "VK_FORMAT_R16G16B16_SFLOAT",
+ 91: "VK_FORMAT_R16G16B16A16_UNORM",
+ 92: "VK_FORMAT_R16G16B16A16_SNORM",
+ 93: "VK_FORMAT_R16G16B16A16_USCALED",
+ 94: "VK_FORMAT_R16G16B16A16_SSCALED",
+ 95: "VK_FORMAT_R16G16B16A16_UINT",
+ 96: "VK_FORMAT_R16G16B16A16_SINT",
+ 97: "VK_FORMAT_R16G16B16A16_SFLOAT",
+ 98: "VK_FORMAT_R32_UINT",
+ 99: "VK_FORMAT_R32_SINT",
+ 100: "VK_FORMAT_R32_SFLOAT",
+ 101: "VK_FORMAT_R32G32_UINT",
+ 102: "VK_FORMAT_R32G32_SINT",
+ 103: "VK_FORMAT_R32G32_SFLOAT",
+ 104: "VK_FORMAT_R32G32B32_UINT",
+ 105: "VK_FORMAT_R32G32B32_SINT",
+ 106: "VK_FORMAT_R32G32B32_SFLOAT",
+ 107: "VK_FORMAT_R32G32B32A32_UINT",
+ 108: "VK_FORMAT_R32G32B32A32_SINT",
+ 109: "VK_FORMAT_R32G32B32A32_SFLOAT",
+ 110: "VK_FORMAT_R64_UINT",
+ 111: "VK_FORMAT_R64_SINT",
+ 112: "VK_FORMAT_R64_SFLOAT",
+ 113: "VK_FORMAT_R64G64_UINT",
+ 114: "VK_FORMAT_R64G64_SINT",
+ 115: "VK_FORMAT_R64G64_SFLOAT",
+ 116: "VK_FORMAT_R64G64B64_UINT",
+ 117: "VK_FORMAT_R64G64B64_SINT",
+ 118: "VK_FORMAT_R64G64B64_SFLOAT",
+ 119: "VK_FORMAT_R64G64B64A64_UINT",
+ 120: "VK_FORMAT_R64G64B64A64_SINT",
+ 121: "VK_FORMAT_R64G64B64A64_SFLOAT",
+ 122: "VK_FORMAT_B10G11R11_UFLOAT_PACK32",
+ 123: "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32",
+ 124: "VK_FORMAT_D16_UNORM",
+ 125: "VK_FORMAT_X8_D24_UNORM_PACK32",
+ 126: "VK_FORMAT_D32_SFLOAT",
+ 127: "VK_FORMAT_S8_UINT",
+ 128: "VK_FORMAT_D16_UNORM_S8_UINT",
+ 129: "VK_FORMAT_D24_UNORM_S8_UINT",
+ 130: "VK_FORMAT_D32_SFLOAT_S8_UINT",
+ 131: "VK_FORMAT_BC1_RGB_UNORM_BLOCK",
+ 132: "VK_FORMAT_BC1_RGB_SRGB_BLOCK",
+ 133: "VK_FORMAT_BC1_RGBA_UNORM_BLOCK",
+ 134: "VK_FORMAT_BC1_RGBA_SRGB_BLOCK",
+ 135: "VK_FORMAT_BC2_UNORM_BLOCK",
+ 136: "VK_FORMAT_BC2_SRGB_BLOCK",
+ 137: "VK_FORMAT_BC3_UNORM_BLOCK",
+ 138: "VK_FORMAT_BC3_SRGB_BLOCK",
+ 139: "VK_FORMAT_BC4_UNORM_BLOCK",
+ 140: "VK_FORMAT_BC4_SNORM_BLOCK",
+ 141: "VK_FORMAT_BC5_UNORM_BLOCK",
+ 142: "VK_FORMAT_BC5_SNORM_BLOCK",
+ 143: "VK_FORMAT_BC6H_UFLOAT_BLOCK",
+ 144: "VK_FORMAT_BC6H_SFLOAT_BLOCK",
+ 145: "VK_FORMAT_BC7_UNORM_BLOCK",
+ 146: "VK_FORMAT_BC7_SRGB_BLOCK",
+ 147: "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK",
+ 148: "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK",
+ 149: "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK",
+ 150: "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK",
+ 151: "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK",
+ 152: "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK",
+ 153: "VK_FORMAT_EAC_R11_UNORM_BLOCK",
+ 154: "VK_FORMAT_EAC_R11_SNORM_BLOCK",
+ 155: "VK_FORMAT_EAC_R11G11_UNORM_BLOCK",
+ 156: "VK_FORMAT_EAC_R11G11_SNORM_BLOCK",
+ 157: "VK_FORMAT_ASTC_4x4_UNORM_BLOCK",
+ 158: "VK_FORMAT_ASTC_4x4_SRGB_BLOCK",
+ 159: "VK_FORMAT_ASTC_5x4_UNORM_BLOCK",
+ 160: "VK_FORMAT_ASTC_5x4_SRGB_BLOCK",
+ 161: "VK_FORMAT_ASTC_5x5_UNORM_BLOCK",
+ 162: "VK_FORMAT_ASTC_5x5_SRGB_BLOCK",
+ 163: "VK_FORMAT_ASTC_6x5_UNORM_BLOCK",
+ 164: "VK_FORMAT_ASTC_6x5_SRGB_BLOCK",
+ 165: "VK_FORMAT_ASTC_6x6_UNORM_BLOCK",
+ 166: "VK_FORMAT_ASTC_6x6_SRGB_BLOCK",
+ 167: "VK_FORMAT_ASTC_8x5_UNORM_BLOCK",
+ 168: "VK_FORMAT_ASTC_8x5_SRGB_BLOCK",
+ 169: "VK_FORMAT_ASTC_8x6_UNORM_BLOCK",
+ 170: "VK_FORMAT_ASTC_8x6_SRGB_BLOCK",
+ 171: "VK_FORMAT_ASTC_8x8_UNORM_BLOCK",
+ 172: "VK_FORMAT_ASTC_8x8_SRGB_BLOCK",
+ 173: "VK_FORMAT_ASTC_10x5_UNORM_BLOCK",
+ 174: "VK_FORMAT_ASTC_10x5_SRGB_BLOCK",
+ 175: "VK_FORMAT_ASTC_10x6_UNORM_BLOCK",
+ 176: "VK_FORMAT_ASTC_10x6_SRGB_BLOCK",
+ 177: "VK_FORMAT_ASTC_10x8_UNORM_BLOCK",
+ 178: "VK_FORMAT_ASTC_10x8_SRGB_BLOCK",
+ 179: "VK_FORMAT_ASTC_10x10_UNORM_BLOCK",
+ 180: "VK_FORMAT_ASTC_10x10_SRGB_BLOCK",
+ 181: "VK_FORMAT_ASTC_12x10_UNORM_BLOCK",
+ 182: "VK_FORMAT_ASTC_12x10_SRGB_BLOCK",
+ 183: "VK_FORMAT_ASTC_12x12_UNORM_BLOCK",
+ 184: "VK_FORMAT_ASTC_12x12_SRGB_BLOCK",
+ 1000156000: "VK_FORMAT_G8B8G8R8_422_UNORM",
+ 1000156001: "VK_FORMAT_B8G8R8G8_422_UNORM",
+ 1000156002: "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM",
+ 1000156003: "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM",
+ 1000156004: "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM",
+ 1000156005: "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM",
+ 1000156006: "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM",
+ 1000156007: "VK_FORMAT_R10X6_UNORM_PACK16",
+ 1000156008: "VK_FORMAT_R10X6G10X6_UNORM_2PACK16",
+ 1000156009: "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16",
+ 1000156010: "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16",
+ 1000156011: "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16",
+ 1000156012: "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16",
+ 1000156013: "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16",
+ 1000156014: "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16",
+ 1000156015: "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16",
+ 1000156016: "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16",
+ 1000156017: "VK_FORMAT_R12X4_UNORM_PACK16",
+ 1000156018: "VK_FORMAT_R12X4G12X4_UNORM_2PACK16",
+ 1000156019: "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16",
+ 1000156020: "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16",
+ 1000156021: "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16",
+ 1000156022: "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16",
+ 1000156023: "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16",
+ 1000156024: "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16",
+ 1000156025: "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16",
+ 1000156026: "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16",
+ 1000156027: "VK_FORMAT_G16B16G16R16_422_UNORM",
+ 1000156028: "VK_FORMAT_B16G16R16G16_422_UNORM",
+ 1000156029: "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM",
+ 1000156030: "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM",
+ 1000156031: "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM",
+ 1000156032: "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM",
+ 1000156033: "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM",
+ 1000054000: "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG",
+ 1000054001: "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG",
+ 1000054002: "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG",
+ 1000054003: "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG",
+ 1000054004: "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG",
+ 1000054005: "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG",
+ 1000054006: "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG",
+ 1000054007: "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG",
+ 1000066000: "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT",
+ 1000066001: "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT",
+ 1000066002: "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT",
+ 1000066003: "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT",
+ 1000066004: "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT",
+ 1000066005: "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT",
+ 1000066006: "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT",
+ 1000066007: "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT",
+ 1000066008: "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT",
+ 1000066009: "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT",
+ 1000066010: "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT",
+ 1000066011: "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT",
+ 1000066012: "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT",
+ 1000066013: "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT",
+ 1000288000: "VK_FORMAT_ASTC_3x3x3_UNORM_BLOCK_EXT",
+ 1000288001: "VK_FORMAT_ASTC_3x3x3_SRGB_BLOCK_EXT",
+ 1000288002: "VK_FORMAT_ASTC_3x3x3_SFLOAT_BLOCK_EXT",
+ 1000288003: "VK_FORMAT_ASTC_4x3x3_UNORM_BLOCK_EXT",
+ 1000288004: "VK_FORMAT_ASTC_4x3x3_SRGB_BLOCK_EXT",
+ 1000288005: "VK_FORMAT_ASTC_4x3x3_SFLOAT_BLOCK_EXT",
+ 1000288006: "VK_FORMAT_ASTC_4x4x3_UNORM_BLOCK_EXT",
+ 1000288007: "VK_FORMAT_ASTC_4x4x3_SRGB_BLOCK_EXT",
+ 1000288008: "VK_FORMAT_ASTC_4x4x3_SFLOAT_BLOCK_EXT",
+ 1000288009: "VK_FORMAT_ASTC_4x4x4_UNORM_BLOCK_EXT",
+ 1000288010: "VK_FORMAT_ASTC_4x4x4_SRGB_BLOCK_EXT",
+ 1000288011: "VK_FORMAT_ASTC_4x4x4_SFLOAT_BLOCK_EXT",
+ 1000288012: "VK_FORMAT_ASTC_5x4x4_UNORM_BLOCK_EXT",
+ 1000288013: "VK_FORMAT_ASTC_5x4x4_SRGB_BLOCK_EXT",
+ 1000288014: "VK_FORMAT_ASTC_5x4x4_SFLOAT_BLOCK_EXT",
+ 1000288015: "VK_FORMAT_ASTC_5x5x4_UNORM_BLOCK_EXT",
+ 1000288016: "VK_FORMAT_ASTC_5x5x4_SRGB_BLOCK_EXT",
+ 1000288017: "VK_FORMAT_ASTC_5x5x4_SFLOAT_BLOCK_EXT",
+ 1000288018: "VK_FORMAT_ASTC_5x5x5_UNORM_BLOCK_EXT",
+ 1000288019: "VK_FORMAT_ASTC_5x5x5_SRGB_BLOCK_EXT",
+ 1000288020: "VK_FORMAT_ASTC_5x5x5_SFLOAT_BLOCK_EXT",
+ 1000288021: "VK_FORMAT_ASTC_6x5x5_UNORM_BLOCK_EXT",
+ 1000288022: "VK_FORMAT_ASTC_6x5x5_SRGB_BLOCK_EXT",
+ 1000288023: "VK_FORMAT_ASTC_6x5x5_SFLOAT_BLOCK_EXT",
+ 1000288024: "VK_FORMAT_ASTC_6x6x5_UNORM_BLOCK_EXT",
+ 1000288025: "VK_FORMAT_ASTC_6x6x5_SRGB_BLOCK_EXT",
+ 1000288026: "VK_FORMAT_ASTC_6x6x5_SFLOAT_BLOCK_EXT",
+ 1000288027: "VK_FORMAT_ASTC_6x6x6_UNORM_BLOCK_EXT",
+ 1000288028: "VK_FORMAT_ASTC_6x6x6_SRGB_BLOCK_EXT",
+ 1000288029: "VK_FORMAT_ASTC_6x6x6_SFLOAT_BLOCK_EXT",
+ 1000330000: "VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT",
+ 1000330001: "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT",
+ 1000330002: "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT",
+ 1000330003: "VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT",
+ 1000340000: "VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT",
+ 1000340001: "VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT",
+}
+
+VkFrontFace = {
+ 0: "VK_FRONT_FACE_COUNTER_CLOCKWISE",
+ 1: "VK_FRONT_FACE_CLOCKWISE",
+}
+
+VkImageLayout = {
+ 0: "VK_IMAGE_LAYOUT_UNDEFINED",
+ 1: "VK_IMAGE_LAYOUT_GENERAL",
+ 2: "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL",
+ 3: "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL",
+ 4: "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL",
+ 5: "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL",
+ 6: "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL",
+ 7: "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL",
+ 8: "VK_IMAGE_LAYOUT_PREINITIALIZED",
+ 1000117000: "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL",
+ 1000117001: "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL",
+ 1000241000: "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL",
+ 1000241001: "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL",
+ 1000241002: "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL",
+ 1000241003: "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL",
+ 1000001002: "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR",
+ 1000024000: "VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR",
+ 1000024001: "VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR",
+ 1000024002: "VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR",
+ 1000111000: "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR",
+ 1000218000: "VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT",
+ 1000164003: "VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR",
+ 1000299000: "VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR",
+ 1000299001: "VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR",
+ 1000299002: "VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR",
+ 1000314000: "VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR",
+ 1000314001: "VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR",
+}
+
+VkImageTiling = {
+ 0: "VK_IMAGE_TILING_OPTIMAL",
+ 1: "VK_IMAGE_TILING_LINEAR",
+ 1000158000: "VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT",
+}
+
+VkImageType = {
+ 0: "VK_IMAGE_TYPE_1D",
+ 1: "VK_IMAGE_TYPE_2D",
+ 2: "VK_IMAGE_TYPE_3D",
+}
+
+VkImageViewType = {
+ 0: "VK_IMAGE_VIEW_TYPE_1D",
+ 1: "VK_IMAGE_VIEW_TYPE_2D",
+ 2: "VK_IMAGE_VIEW_TYPE_3D",
+ 3: "VK_IMAGE_VIEW_TYPE_CUBE",
+ 4: "VK_IMAGE_VIEW_TYPE_1D_ARRAY",
+ 5: "VK_IMAGE_VIEW_TYPE_2D_ARRAY",
+ 6: "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY",
+}
+
+VkIndexType = {
+ 0: "VK_INDEX_TYPE_UINT16",
+ 1: "VK_INDEX_TYPE_UINT32",
+ 1000165000: "VK_INDEX_TYPE_NONE_KHR",
+ 1000265000: "VK_INDEX_TYPE_UINT8_EXT",
+}
+
+VkLogicOp = {
+ 0: "VK_LOGIC_OP_CLEAR",
+ 1: "VK_LOGIC_OP_AND",
+ 2: "VK_LOGIC_OP_AND_REVERSE",
+ 3: "VK_LOGIC_OP_COPY",
+ 4: "VK_LOGIC_OP_AND_INVERTED",
+ 5: "VK_LOGIC_OP_NO_OP",
+ 6: "VK_LOGIC_OP_XOR",
+ 7: "VK_LOGIC_OP_OR",
+ 8: "VK_LOGIC_OP_NOR",
+ 9: "VK_LOGIC_OP_EQUIVALENT",
+ 10: "VK_LOGIC_OP_INVERT",
+ 11: "VK_LOGIC_OP_OR_REVERSE",
+ 12: "VK_LOGIC_OP_COPY_INVERTED",
+ 13: "VK_LOGIC_OP_OR_INVERTED",
+ 14: "VK_LOGIC_OP_NAND",
+ 15: "VK_LOGIC_OP_SET",
+}
+
+VkPhysicalDeviceType = {
+ 0: "VK_PHYSICAL_DEVICE_TYPE_OTHER",
+ 1: "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU",
+ 2: "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU",
+ 3: "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU",
+ 4: "VK_PHYSICAL_DEVICE_TYPE_CPU",
+}
+
+VkPipelineBindPoint = {
+ 0: "VK_PIPELINE_BIND_POINT_GRAPHICS",
+ 1: "VK_PIPELINE_BIND_POINT_COMPUTE",
+ 1000165000: "VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR",
+ 1000369003: "VK_PIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI",
+}
+
+VkPolygonMode = {
+ 0: "VK_POLYGON_MODE_FILL",
+ 1: "VK_POLYGON_MODE_LINE",
+ 2: "VK_POLYGON_MODE_POINT",
+ 1000153000: "VK_POLYGON_MODE_FILL_RECTANGLE_NV",
+}
+
+VkPrimitiveTopology = {
+ 0: "VK_PRIMITIVE_TOPOLOGY_POINT_LIST",
+ 1: "VK_PRIMITIVE_TOPOLOGY_LINE_LIST",
+ 2: "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP",
+ 3: "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST",
+ 4: "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP",
+ 5: "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN",
+ 6: "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY",
+ 7: "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY",
+ 8: "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY",
+ 9: "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY",
+ 10: "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST",
+}
+
+VkSampleCountFlagBits = {
+ 1: "VK_SAMPLE_COUNT_1_BIT",
+ 2: "VK_SAMPLE_COUNT_2_BIT",
+ 4: "VK_SAMPLE_COUNT_4_BIT",
+ 8: "VK_SAMPLE_COUNT_8_BIT",
+ 16: "VK_SAMPLE_COUNT_16_BIT",
+ 32: "VK_SAMPLE_COUNT_32_BIT",
+ 64: "VK_SAMPLE_COUNT_64_BIT",
+}
+
+VkSamplerAddressMode = {
+ 0: "VK_SAMPLER_ADDRESS_MODE_REPEAT",
+ 1: "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT",
+ 2: "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE",
+ 3: "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER",
+ 4: "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE",
+ 4: "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE",
+}
+
+VkSamplerMipmapMode = {
+ 0: "VK_SAMPLER_MIPMAP_MODE_NEAREST",
+ 1: "VK_SAMPLER_MIPMAP_MODE_LINEAR",
+}
+
+VkShaderStageFlagBits = {
+ 1: "VK_SHADER_STAGE_VERTEX_BIT",
+ 2: "VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT",
+ 4: "VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT",
+ 8: "VK_SHADER_STAGE_GEOMETRY_BIT",
+ 16: "VK_SHADER_STAGE_FRAGMENT_BIT",
+ 32: "VK_SHADER_STAGE_COMPUTE_BIT",
+ 31: "VK_SHADER_STAGE_ALL_GRAPHICS",
+ 2147483647: "VK_SHADER_STAGE_ALL",
+ 256: "VK_SHADER_STAGE_RAYGEN_BIT_KHR",
+ 512: "VK_SHADER_STAGE_ANY_HIT_BIT_KHR",
+ 1024: "VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR",
+ 2048: "VK_SHADER_STAGE_MISS_BIT_KHR",
+ 4096: "VK_SHADER_STAGE_INTERSECTION_BIT_KHR",
+ 8192: "VK_SHADER_STAGE_CALLABLE_BIT_KHR",
+ 64: "VK_SHADER_STAGE_TASK_BIT_NV",
+ 128: "VK_SHADER_STAGE_MESH_BIT_NV",
+ 16384: "VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI",
+}
+
+VkSharingMode = {
+ 0: "VK_SHARING_MODE_EXCLUSIVE",
+ 1: "VK_SHARING_MODE_CONCURRENT",
+}
+
+VkStencilOp = {
+ 0: "VK_STENCIL_OP_KEEP",
+ 1: "VK_STENCIL_OP_ZERO",
+ 2: "VK_STENCIL_OP_REPLACE",
+ 3: "VK_STENCIL_OP_INCREMENT_AND_CLAMP",
+ 4: "VK_STENCIL_OP_DECREMENT_AND_CLAMP",
+ 5: "VK_STENCIL_OP_INVERT",
+ 6: "VK_STENCIL_OP_INCREMENT_AND_WRAP",
+ 7: "VK_STENCIL_OP_DECREMENT_AND_WRAP",
+}
+
+VkStructureType = {
+ 0: "VK_STRUCTURE_TYPE_APPLICATION_INFO",
+ 1: "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO",
+ 2: "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO",
+ 3: "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO",
+ 4: "VK_STRUCTURE_TYPE_SUBMIT_INFO",
+ 5: "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO",
+ 6: "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE",
+ 7: "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO",
+ 8: "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO",
+ 9: "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO",
+ 10: "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO",
+ 11: "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO",
+ 12: "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO",
+ 13: "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO",
+ 14: "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO",
+ 15: "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO",
+ 16: "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO",
+ 17: "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO",
+ 18: "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO",
+ 19: "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO",
+ 20: "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO",
+ 21: "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO",
+ 22: "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO",
+ 23: "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO",
+ 24: "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO",
+ 25: "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO",
+ 26: "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO",
+ 27: "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO",
+ 28: "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO",
+ 29: "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO",
+ 30: "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO",
+ 31: "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO",
+ 32: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO",
+ 33: "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO",
+ 34: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO",
+ 35: "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET",
+ 36: "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET",
+ 37: "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO",
+ 38: "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO",
+ 39: "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO",
+ 40: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO",
+ 41: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO",
+ 42: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO",
+ 43: "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO",
+ 44: "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER",
+ 45: "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER",
+ 46: "VK_STRUCTURE_TYPE_MEMORY_BARRIER",
+ 47: "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO",
+ 48: "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO",
+ 1000094000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES",
+ 1000157000: "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO",
+ 1000157001: "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO",
+ 1000083000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES",
+ 1000127000: "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS",
+ 1000127001: "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO",
+ 1000060000: "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO",
+ 1000060003: "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO",
+ 1000060004: "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO",
+ 1000060005: "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO",
+ 1000060006: "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO",
+ 1000060013: "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO",
+ 1000060014: "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO",
+ 1000070000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES",
+ 1000070001: "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO",
+ 1000146000: "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2",
+ 1000146001: "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2",
+ 1000146002: "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2",
+ 1000146003: "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2",
+ 1000146004: "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2",
+ 1000059000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2",
+ 1000059001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2",
+ 1000059002: "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2",
+ 1000059003: "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2",
+ 1000059004: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2",
+ 1000059005: "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2",
+ 1000059006: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2",
+ 1000059007: "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2",
+ 1000059008: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2",
+ 1000117000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES",
+ 1000117001: "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO",
+ 1000117002: "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO",
+ 1000117003: "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO",
+ 1000053000: "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO",
+ 1000053001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES",
+ 1000053002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES",
+ 1000120000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES",
+ 1000145000: "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO",
+ 1000145001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES",
+ 1000145002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES",
+ 1000145003: "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2",
+ 1000156000: "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO",
+ 1000156001: "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO",
+ 1000156002: "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO",
+ 1000156003: "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO",
+ 1000156004: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES",
+ 1000156005: "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES",
+ 1000085000: "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO",
+ 1000071000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO",
+ 1000071001: "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES",
+ 1000071002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO",
+ 1000071003: "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES",
+ 1000071004: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES",
+ 1000072000: "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO",
+ 1000072001: "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO",
+ 1000072002: "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO",
+ 1000112000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO",
+ 1000112001: "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES",
+ 1000113000: "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO",
+ 1000077000: "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO",
+ 1000076000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO",
+ 1000076001: "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES",
+ 1000168000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES",
+ 1000168001: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT",
+ 1000063000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES",
+ 49: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES",
+ 50: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES",
+ 51: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES",
+ 52: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES",
+ 1000147000: "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO",
+ 1000109000: "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2",
+ 1000109001: "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2",
+ 1000109002: "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2",
+ 1000109003: "VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2",
+ 1000109004: "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2",
+ 1000109005: "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO",
+ 1000109006: "VK_STRUCTURE_TYPE_SUBPASS_END_INFO",
+ 1000177000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES",
+ 1000196000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES",
+ 1000180000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES",
+ 1000082000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES",
+ 1000197000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES",
+ 1000161000: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO",
+ 1000161001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES",
+ 1000161002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES",
+ 1000161003: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO",
+ 1000161004: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT",
+ 1000199000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES",
+ 1000199001: "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE",
+ 1000221000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES",
+ 1000246000: "VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO",
+ 1000130000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES",
+ 1000130001: "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO",
+ 1000211000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES",
+ 1000108000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES",
+ 1000108001: "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO",
+ 1000108002: "VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO",
+ 1000108003: "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO",
+ 1000253000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES",
+ 1000175000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES",
+ 1000241000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES",
+ 1000241001: "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT",
+ 1000241002: "VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT",
+ 1000261000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES",
+ 1000207000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES",
+ 1000207001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES",
+ 1000207002: "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO",
+ 1000207003: "VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO",
+ 1000207004: "VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO",
+ 1000207005: "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO",
+ 1000257000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES",
+ 1000244001: "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO",
+ 1000257002: "VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO",
+ 1000257003: "VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO",
+ 1000257004: "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO",
+ 1000001000: "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR",
+ 1000001001: "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR",
+ 1000060007: "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR",
+ 1000060008: "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR",
+ 1000060009: "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR",
+ 1000060010: "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR",
+ 1000060011: "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR",
+ 1000060012: "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR",
+ 1000002000: "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR",
+ 1000002001: "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR",
+ 1000003000: "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR",
+ 1000004000: "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR",
+ 1000005000: "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR",
+ 1000006000: "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR",
+ 1000008000: "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR",
+ 1000009000: "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR",
+ 1000010000: "VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID",
+ 1000011000: "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT",
+ 1000018000: "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD",
+ 1000022000: "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT",
+ 1000022001: "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT",
+ 1000022002: "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT",
+ 1000023000: "VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR",
+ 1000023001: "VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR",
+ 1000023002: "VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR",
+ 1000023003: "VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR",
+ 1000023004: "VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR",
+ 1000023005: "VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR",
+ 1000023006: "VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR",
+ 1000023007: "VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR",
+ 1000023008: "VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR",
+ 1000023009: "VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR",
+ 1000023010: "VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR",
+ 1000023011: "VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR",
+ 1000023012: "VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR",
+ 1000023013: "VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR",
+ 1000023014: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR",
+ 1000023015: "VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR",
+ 1000024000: "VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR",
+ 1000026000: "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV",
+ 1000026001: "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV",
+ 1000026002: "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV",
+ 1000028000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT",
+ 1000028001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT",
+ 1000028002: "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT",
+ 1000029000: "VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX",
+ 1000029001: "VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX",
+ 1000029002: "VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX",
+ 1000030000: "VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX",
+ 1000030001: "VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX",
+ 1000038000: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT",
+ 1000038001: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT",
+ 1000038002: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT",
+ 1000038003: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT",
+ 1000038004: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT",
+ 1000038005: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT",
+ 1000038006: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT",
+ 1000038007: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT",
+ 1000038008: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT",
+ 1000039000: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT",
+ 1000039001: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT",
+ 1000039002: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT",
+ 1000039003: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT",
+ 1000039004: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT",
+ 1000039005: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT",
+ 1000039006: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_EXT",
+ 1000039007: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT",
+ 1000039008: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT",
+ 1000039009: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT",
+ 1000040000: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT",
+ 1000040001: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT",
+ 1000040002: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT",
+ 1000040003: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT",
+ 1000040004: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT",
+ 1000040005: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT",
+ 1000040006: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT",
+ 1000040007: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT",
+ 1000041000: "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD",
+ 1000044000: "VK_STRUCTURE_TYPE_RENDERING_INFO_KHR",
+ 1000044001: "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR",
+ 1000044002: "VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR",
+ 1000044003: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR",
+ 1000044004: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR",
+ 1000044006: "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR",
+ 1000044007: "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT",
+ 1000044008: "VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD",
+ 1000044009: "VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX",
+ 1000049000: "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP",
+ 1000050000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV",
+ 1000056000: "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV",
+ 1000056001: "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV",
+ 1000057000: "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV",
+ 1000057001: "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV",
+ 1000058000: "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV",
+ 1000060007: "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR",
+ 1000060008: "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR",
+ 1000060009: "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR",
+ 1000060010: "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR",
+ 1000060011: "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR",
+ 1000060012: "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR",
+ 1000061000: "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT",
+ 1000062000: "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN",
+ 1000066000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT",
+ 1000067000: "VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT",
+ 1000067001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT",
+ 1000073000: "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR",
+ 1000073001: "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR",
+ 1000073002: "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR",
+ 1000073003: "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR",
+ 1000074000: "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR",
+ 1000074001: "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR",
+ 1000074002: "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR",
+ 1000075000: "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR",
+ 1000078000: "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR",
+ 1000078001: "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR",
+ 1000078002: "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR",
+ 1000078003: "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR",
+ 1000079000: "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR",
+ 1000079001: "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR",
+ 1000080000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR",
+ 1000081000: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT",
+ 1000081001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT",
+ 1000081002: "VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT",
+ 1000084000: "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR",
+ 1000087000: "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV",
+ 1000090000: "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT",
+ 1000091000: "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT",
+ 1000091001: "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT",
+ 1000091002: "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT",
+ 1000091003: "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT",
+ 1000092000: "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE",
+ 1000097000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX",
+ 1000098000: "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV",
+ 1000099000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT",
+ 1000099001: "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT",
+ 1000101000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT",
+ 1000101001: "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT",
+ 1000102000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT",
+ 1000102001: "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT",
+ 1000105000: "VK_STRUCTURE_TYPE_HDR_METADATA_EXT",
+ 1000111000: "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR",
+ 1000114000: "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR",
+ 1000114001: "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR",
+ 1000114002: "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR",
+ 1000115000: "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR",
+ 1000115001: "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR",
+ 1000116000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR",
+ 1000116001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR",
+ 1000116002: "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR",
+ 1000116003: "VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR",
+ 1000116004: "VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR",
+ 1000116005: "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR",
+ 1000116006: "VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR",
+ 1000119000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR",
+ 1000119001: "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR",
+ 1000119002: "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR",
+ 1000121000: "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR",
+ 1000121001: "VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR",
+ 1000121002: "VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR",
+ 1000121003: "VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR",
+ 1000121004: "VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR",
+ 1000122000: "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK",
+ 1000123000: "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK",
+ 1000128000: "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT",
+ 1000128001: "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT",
+ 1000128002: "VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT",
+ 1000128003: "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT",
+ 1000128004: "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT",
+ 1000129000: "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID",
+ 1000129001: "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID",
+ 1000129002: "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID",
+ 1000129003: "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID",
+ 1000129004: "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID",
+ 1000129005: "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID",
+ 1000129006: "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID",
+ 1000138000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT",
+ 1000138001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT",
+ 1000138002: "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT",
+ 1000138003: "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT",
+ 1000143000: "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT",
+ 1000143001: "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT",
+ 1000143002: "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT",
+ 1000143003: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT",
+ 1000143004: "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT",
+ 1000148000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT",
+ 1000148001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT",
+ 1000148002: "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT",
+ 1000149000: "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV",
+ 1000150007: "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR",
+ 1000150000: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR",
+ 1000150002: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR",
+ 1000150003: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR",
+ 1000150004: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR",
+ 1000150005: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR",
+ 1000150006: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR",
+ 1000150009: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR",
+ 1000150010: "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR",
+ 1000150011: "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR",
+ 1000150012: "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR",
+ 1000150013: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR",
+ 1000150014: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR",
+ 1000150017: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR",
+ 1000150020: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR",
+ 1000347000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR",
+ 1000347001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR",
+ 1000150015: "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR",
+ 1000150016: "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR",
+ 1000150018: "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR",
+ 1000348013: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR",
+ 1000152000: "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV",
+ 1000154000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV",
+ 1000154001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV",
+ 1000158000: "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT",
+ 1000158002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT",
+ 1000158003: "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT",
+ 1000158004: "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT",
+ 1000158005: "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT",
+ 1000158006: "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT",
+ 1000160000: "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT",
+ 1000160001: "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT",
+ 1000163000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR",
+ 1000163001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR",
+ 1000164000: "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV",
+ 1000164001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV",
+ 1000164002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV",
+ 1000164005: "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV",
+ 1000165000: "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV",
+ 1000165001: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV",
+ 1000165003: "VK_STRUCTURE_TYPE_GEOMETRY_NV",
+ 1000165004: "VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV",
+ 1000165005: "VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV",
+ 1000165006: "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV",
+ 1000165007: "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV",
+ 1000165008: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV",
+ 1000165009: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV",
+ 1000165011: "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV",
+ 1000165012: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV",
+ 1000166000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV",
+ 1000166001: "VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV",
+ 1000170000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT",
+ 1000170001: "VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT",
+ 1000174000: "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT",
+ 1000178000: "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT",
+ 1000178001: "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT",
+ 1000178002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT",
+ 1000181000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR",
+ 1000183000: "VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD",
+ 1000184000: "VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT",
+ 1000185000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD",
+ 1000187000: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT",
+ 1000187001: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT",
+ 1000187002: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT",
+ 1000187003: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT",
+ 1000187004: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT",
+ 1000187005: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT",
+ 1000187006: "VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT",
+ 1000189000: "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD",
+ 1000190000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT",
+ 1000190001: "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT",
+ 1000190002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT",
+ 1000191000: "VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP",
+ 1000192000: "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT",
+ 1000201000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV",
+ 1000202000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV",
+ 1000202001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV",
+ 1000203000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV",
+ 1000204000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV",
+ 1000205000: "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV",
+ 1000205002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV",
+ 1000206000: "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV",
+ 1000206001: "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV",
+ 1000209000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL",
+ 1000210000: "VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL",
+ 1000210001: "VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL",
+ 1000210002: "VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL",
+ 1000210003: "VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL",
+ 1000210004: "VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL",
+ 1000210005: "VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL",
+ 1000212000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT",
+ 1000213000: "VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD",
+ 1000213001: "VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD",
+ 1000214000: "VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA",
+ 1000215000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR",
+ 1000217000: "VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT",
+ 1000218000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT",
+ 1000218001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT",
+ 1000218002: "VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT",
+ 1000225000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT",
+ 1000225001: "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT",
+ 1000225002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT",
+ 1000226000: "VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR",
+ 1000226001: "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR",
+ 1000226002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR",
+ 1000226003: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR",
+ 1000226004: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR",
+ 1000227000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD",
+ 1000229000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD",
+ 1000234000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT",
+ 1000237000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT",
+ 1000238000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT",
+ 1000238001: "VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT",
+ 1000239000: "VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR",
+ 1000240000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV",
+ 1000244000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT",
+ 1000244002: "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT",
+ 1000245000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT",
+ 1000247000: "VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT",
+ 1000248000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR",
+ 1000249000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV",
+ 1000249001: "VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV",
+ 1000249002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV",
+ 1000250000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV",
+ 1000250001: "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV",
+ 1000250002: "VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV",
+ 1000251000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT",
+ 1000252000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT",
+ 1000254000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_FEATURES_EXT",
+ 1000254001: "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_PROVOKING_VERTEX_STATE_CREATE_INFO_EXT",
+ 1000254002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT",
+ 1000255000: "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT",
+ 1000255002: "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT",
+ 1000255001: "VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT",
+ 1000256000: "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT",
+ 1000259000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT",
+ 1000259001: "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT",
+ 1000259002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT",
+ 1000260000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT",
+ 1000265000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT",
+ 1000267000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT",
+ 1000269000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR",
+ 1000269001: "VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR",
+ 1000269002: "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR",
+ 1000269003: "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR",
+ 1000269004: "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR",
+ 1000269005: "VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR",
+ 1000273000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT",
+ 1000276000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT",
+ 1000277000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV",
+ 1000277001: "VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV",
+ 1000277002: "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV",
+ 1000277003: "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV",
+ 1000277004: "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV",
+ 1000277005: "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV",
+ 1000277006: "VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV",
+ 1000277007: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV",
+ 1000278000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV",
+ 1000278001: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV",
+ 1000280000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR",
+ 1000280001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR",
+ 1000281000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT",
+ 1000281001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT",
+ 1000282000: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM",
+ 1000282001: "VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM",
+ 1000284000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT",
+ 1000284001: "VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT",
+ 1000284002: "VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT",
+ 1000286000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT",
+ 1000286001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT",
+ 1000287000: "VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT",
+ 1000287001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT",
+ 1000287002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT",
+ 1000290000: "VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR",
+ 1000294000: "VK_STRUCTURE_TYPE_PRESENT_ID_KHR",
+ 1000294001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR",
+ 1000295000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT",
+ 1000295001: "VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT",
+ 1000295002: "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT",
+ 1000297000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT",
+ 1000299000: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR",
+ 1000299001: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR",
+ 1000300000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV",
+ 1000300001: "VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV",
+ 1000309000: "VK_STRUCTURE_TYPE_RESERVED_QCOM",
+ 1000314000: "VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR",
+ 1000314001: "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR",
+ 1000314002: "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR",
+ 1000314003: "VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR",
+ 1000314004: "VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR",
+ 1000314005: "VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR",
+ 1000314006: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR",
+ 1000314007: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR",
+ 1000314008: "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV",
+ 1000314009: "VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV",
+ 1000323000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR",
+ 1000325000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR",
+ 1000326000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV",
+ 1000326001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV",
+ 1000326002: "VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV",
+ 1000327000: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_MOTION_TRIANGLES_DATA_NV",
+ 1000327001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV",
+ 1000327002: "VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MOTION_INFO_NV",
+ 1000330000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT",
+ 1000332000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT",
+ 1000332001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT",
+ 1000333000: "VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM",
+ 1000335000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT",
+ 1000336000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR",
+ 1000337000: "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR",
+ 1000337001: "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR",
+ 1000337002: "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR",
+ 1000337003: "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR",
+ 1000337004: "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR",
+ 1000337005: "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR",
+ 1000337006: "VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR",
+ 1000337007: "VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR",
+ 1000337008: "VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR",
+ 1000337009: "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR",
+ 1000337010: "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR",
+ 1000340000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT",
+ 1000344000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT",
+ 1000346000: "VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT",
+ 1000351000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE",
+ 1000351002: "VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE",
+ 1000352000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT",
+ 1000352001: "VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT",
+ 1000352002: "VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT",
+ 1000353000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT",
+ 1000356000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT",
+ 1000360000: "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR",
+ 1000364000: "VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA",
+ 1000364001: "VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA",
+ 1000364002: "VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA",
+ 1000365000: "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA",
+ 1000365001: "VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA",
+ 1000366000: "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA",
+ 1000366001: "VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA",
+ 1000366002: "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA",
+ 1000366003: "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA",
+ 1000366004: "VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA",
+ 1000366005: "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA",
+ 1000366006: "VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA",
+ 1000366007: "VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA",
+ 1000366008: "VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA",
+ 1000366009: "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA",
+ 1000369000: "VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI",
+ 1000369001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI",
+ 1000369002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI",
+ 1000370000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI",
+ 1000371000: "VK_STRUCTURE_TYPE_MEMORY_GET_REMOTE_ADDRESS_INFO_NV",
+ 1000371001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_RDMA_FEATURES_NV",
+ 1000377000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT",
+ 1000378000: "VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX",
+ 1000381000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT",
+ 1000381001: "VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT",
+ 1000388000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT",
+ 1000388001: "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT",
+ 1000392000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT",
+ 1000392001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT",
+ 1000411000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT",
+ 1000411001: "VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT",
+ 1000412000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT",
+ 1000413000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR",
+ 1000413001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR",
+ 1000413002: "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR",
+ 1000413003: "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR",
+ 1000385000: "VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE",
+ 1000385001: "VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE",
+ 1000385002: "VK_STRUCTURE_TYPE_IMPORT_BUFFER_HANDLE_GOOGLE",
+}
+
+VkSubpassContents = {
+ 0: "VK_SUBPASS_CONTENTS_INLINE",
+ 1: "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS",
+}
+
+VkVertexInputRate = {
+ 0: "VK_VERTEX_INPUT_RATE_VERTEX",
+ 1: "VK_VERTEX_INPUT_RATE_INSTANCE",
+}
+