Adding script to auto-generate decoding logic for graphic API commands logged in minidumps.

Test: manual testing for now, but I will add tests.

BUG=223858461

Change-Id: I4e467ff23a445198e2188a873f36a3ffc5ed30c6
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..c4c119f
--- /dev/null
+++ b/registry/vulkan/scripts/cereal/api_log_decoder.py
@@ -0,0 +1,277 @@
+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 = [
+        "vkCmdBeginRenderPass",
+        "vkCmdBindPipeline",
+        "vkCmdCopyBufferToImage",
+        "vkCmdPipelineBarrier",
+    ]
+
+    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/vulkantypes.py b/registry/vulkan/scripts/cereal/common/vulkantypes.py
index 160d291..f91dddb 100644
--- a/registry/vulkan/scripts/cereal/common/vulkantypes.py
+++ b/registry/vulkan/scripts/cereal/common/vulkantypes.py
@@ -340,6 +340,15 @@
     def isNextPointer(self):
         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):
         return self.typeName in DISPATCHABLE_HANDLE_TYPES
@@ -876,6 +885,7 @@
             "int64_t": 8,
             "size_t": 8,
             "ssize_t": 8,
+            "VkBool32": 4,
         }
 
         if name in baseEncodingSizes:
diff --git a/registry/vulkan/scripts/cerealgenerator.py b/registry/vulkan/scripts/cerealgenerator.py
index 4629f29..ec8292b 100644
--- a/registry/vulkan/scripts/cerealgenerator.py
+++ b/registry/vulkan/scripts/cerealgenerator.py
@@ -486,6 +486,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")
@@ -507,6 +513,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 = ""
@@ -540,23 +547,26 @@
                        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):
         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 % \
@@ -619,7 +629,7 @@
 
         if suppressEnabled:
             def enableSuppression(m):
-                m.suppress = True;
+                m.suppress = True
             self.forEachModule(enableSuppression)
             self.modules[suppressExceptModule].suppress = False
 
diff --git a/scripts/print_gfx_logs/command_printer.py b/scripts/print_gfx_logs/command_printer.py
index 0f051ea..3c6320a 100644
--- a/scripts/print_gfx_logs/command_printer.py
+++ b/scripts/print_gfx_logs/command_printer.py
@@ -1,7 +1,9 @@
 import io
 import textwrap
-from typing import Dict
+from typing import Dict, Optional
 import vulkan_printer
+import opcodes
+import struct
 
 
 class CommandPrinter:
@@ -21,7 +23,11 @@
         """
 
         # Print out the command name
-        print("\n{}.{} - {}: ({} bytes)".format(self.stream_idx, self.cmd_idx, self.cmd_name(), self.original_size - 8))
+        print("\n{}.{} - {}: ({} bytes)".format(self.stream_idx, self.cmd_idx, self.cmd_name(),
+                                                self.original_size - 8))
+
+        if len(self.data.getbuffer()) == 0:
+            return
 
         pretty_printer = getattr(vulkan_printer, self.cmd_name(), None)
         if not pretty_printer:
@@ -33,7 +39,7 @@
             # Check that we processed all the bytes, otherwise there's probably a bug in the pretty printing logic
             if self.data.tell() != len(self.data.getbuffer()):
                 raise BufferError(
-                    "Not all data was decoded. Decoded {} bytes but expected {}".format(
+                    "Not all data was decoded. Decoded {} bytes but command had {}".format(
                         self.data.tell(), len(self.data.getbuffer())))
         except Exception as ex:
             print("Error while processing {}: {}".format(self.cmd_name(), repr(ex)))
@@ -43,7 +49,7 @@
 
     def cmd_name(self) -> str:
         """Returns the command name (e.g.: "OP_vkBeginCommandBuffer", or the opcode as a string if unknown"""
-        return vulkan_printer.opcodes.get(self.opcode, str(self.opcode))
+        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"""
@@ -52,16 +58,26 @@
         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)
+        lines = textwrap.wrap(hex, width=16 * 3 + indent, initial_indent=' ' * indent,
+                              subsequent_indent=' ' * indent)
         for l in lines:
             print(l)
 
-    def read_int(self, num_bytes: int, signed: bool = False) -> int:
-        assert num_bytes == 4 or num_bytes == 8
-        buf = self.data.read(num_bytes)
-        if len(buf) != num_bytes:
-            raise EOFError("Unexpectly reached the end of the buffer")
-        return int.from_bytes(buf, byteorder='little', signed=signed)
+    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"""
@@ -71,53 +87,118 @@
 
     def write_int(self,
                   field_name: str,
-                  num_bytes: int,
+                  size: int,
                   indent: int,
                   signed: bool = False,
-                  value: int = None):
-        """Reads the next 32 or 64 bytes integer from the data stream and prints it"""
-        if value is None:
-            value = self.read_int(num_bytes, signed)
-        self.write("{}: {}\n".format(field_name, value), indent)
+                  big_endian: bool = False,
+                  optional: bool = False,
+                  count: Optional[int] = None) -> Optional[int]:
+        """
+        Reads and prints integers from the data stream.
 
-    def write_enum(self, field_name: str, enum: Dict[int, str], indent: int, value: int = None):
-        """Reads the next 32-byte int from the data stream and prints it as an enum"""
-        if value is None:
-            value = self.read_int(4)
+        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)"""
+        flags = self.read_int(4)
+        flags_list = []
+        if flags != 0xffffffff:  # When the value is set to all flags, don't bother listing them all
+            for (value, flag) in enum.items():
+                if value & flags:
+                    flags_list.append(flag)
+        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.read_int(4)
-        self.write_enum("sType", vulkan_printer.VkStructureType, indent, value=stype)
-        if vulkan_printer.VkStructureType.get(stype) != expected_stype:
-            raise ValueError("Wrong sType while decoding data. Expected: " + expected_stype)
+        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.read_int(4)
-        self.write_int("pNextSize", 4, indent, value=pnext_size)
+        pnext_size = self.write_int("pNext_size", 4, indent, big_endian=True)
         if pnext_size != 0:
-            raise NotImplementedError("Decoding structs with pNextSize > 0 not supported")
+            self.write_enum("ext type", vulkan_printer.VkStructureType, indent + 1)
+            raise NotImplementedError("Decoding structs with extensions is not supported")
 
-    def write_struct(self, field_name: str, struct_fn, indent: int):
-        """Reads and prints a struct, calling `struct_fn` to pretty-print it"""
-        self.write("{}:\n".format(field_name), indent)
-        struct_fn(self, indent + 1)
+    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_repeated(self,
-                       count_name: str,
-                       field_name: str,
-                       struct_fn,
-                       indent: int,
-                       pointer_name: str = None):
+    def write_struct(self, field_name: str, struct_fn, optional: bool, count: Optional[int],
+                     indent: int):
         """
-        Reads and prints repeated structs, with a 32-byte count field followed by the struct data.
-        If pointer_name is not None, reads an additional 64-bit pointer within the repeated block
-        before reading repeated data.
+        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.
         """
-        count = self.read_int(4)
-        if pointer_name is not None:
-            self.write_int(pointer_name, 8, indent)
-        assert count < 1000, "count too large: {}".format(count)  # Sanity check that we haven't read garbage data
-        self.write_int(count_name, 4, indent, value=count)
-        for i in range(0, count):
-            self.write_struct("{} #{}".format(field_name, i), struct_fn, indent)
+        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 = b''
+        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 += 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
index 273863b..76854e6 100644
--- a/scripts/print_gfx_logs/print_gfx_logs.py
+++ b/scripts/print_gfx_logs/print_gfx_logs.py
@@ -144,6 +144,8 @@
 
     streams.sort(key=lambda s: s.timestamp)
 
+    total_commands = 0
+    num_errors = 0
     for stream_idx, stream in enumerate(streams):
         print(textwrap.dedent("""
                   ======================================================= 
@@ -160,11 +162,13 @@
 
         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)
 
@@ -178,6 +182,12 @@
                 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__':
diff --git a/scripts/print_gfx_logs/vulkan_printer.py b/scripts/print_gfx_logs/vulkan_printer.py
index bbddce8..5cab810 100644
--- a/scripts/print_gfx_logs/vulkan_printer.py
+++ b/scripts/print_gfx_logs/vulkan_printer.py
@@ -1,109 +1,123 @@
 #####################################################################################################
 # Pretty-printer functions for Vulkan data structures
 # THIS FILE IS AUTO-GENERATED - DO NOT EDIT
-# Actually right now it is written by hand - TODO(gregschlom): auto-generate this
+#
+# To re-generate this file, run generate-vulkan-sources.sh
 #####################################################################################################
 
 def OP_vkCmdBeginRenderPass(printer, indent: int):
-    printer.write_struct("pRenderPassBegin", struct_VkRenderPassBeginInfo, indent)
+    printer.write_struct("pRenderPassBegin", struct_VkRenderPassBeginInfo, False, None, indent)
     printer.write_enum("contents", VkSubpassContents, indent)
+    return
 
 def OP_vkCmdBindPipeline(printer, indent: int):
     printer.write_enum("pipelineBindPoint", VkPipelineBindPoint, indent)
-    printer.write_int("pipeline", 8, indent)
+    pipeline = printer.write_int("pipeline", 8, indent, signed=False, big_endian=False)
+    return
 
 def OP_vkCmdCopyBufferToImage(printer, indent: int):
-    printer.write_int("srcBuffer", 8, indent)
-    printer.write_int("dstImage", 8, indent)
+    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)
-    printer.write_repeated("regionCount", "pRegions", struct_VkBufferImageCopy, 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_vkCmdPipelineBarrier(printer, indent: int):
-    printer.write_int("srcStageMask", 4, indent)
-    printer.write_int("dstStageMask", 4, indent)
-    printer.write_int("dependencyFlags", 4, indent)
-    printer.write_repeated("memoryBarrierCount", "pMemoryBarriers", struct_VkMemoryBarrier, indent)
-    printer.write_repeated("bufferMemoryBarrierCount", "pBufferMemoryBarriers", struct_VkBufferMemoryBarrier, indent)
-    printer.write_repeated("imageMemoryBarrierCount", "pImageMemoryBarriers", struct_VkImageMemoryBarrier, indent)
-
+    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 struct_VkBufferImageCopy(printer, indent: int):
-    printer.write_int("bufferOffset", 8, indent)
-    printer.write_int("bufferRowLength", 4, indent)
-    printer.write_int("bufferImageHeight", 4, indent)
-    printer.write_struct("imageSubresource", struct_VkImageSubresourceLayers, indent)
-    printer.write_struct("imageOffset", struct_VkOffset3D, indent)
-    printer.write_struct("imageExtent", struct_VkOffset3D, indent)
-
+    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)
-    printer.write_int("srcAccessMask", 4, indent)
-    printer.write_int("dstAccessMask", 4, indent)
-    printer.write_int("srcQueueFamilyIndex", 4, indent)
-    printer.write_int("dstQueueFamilyIndex", 4, indent)
-    printer.write_int("buffer", 8, indent)
-    printer.write_int("offset", 8, indent)
-    printer.write_int("size", 8, indent)
-
-def struct_VkClearValue(printer, indent: int):
-    printer.write_struct("color", struct_VkClearColorValue, 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_VkClearColorValue(printer, indent: int):
-    printer.write("0x{:04X}, 0x{:04X}, 0x{:04X}, 0x{:04X}\n".format(
-        printer.read_int(4), printer.read_int(4), printer.read_int(4), printer.read_int(4)), indent)
+    printer.write_float("float32", indent, count=4)
+
+def struct_VkClearValue(printer, indent: int):
+    printer.write_struct("color", struct_VkClearColorValue, False, None, 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_VkImageMemoryBarrier(printer, indent: int):
     printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", indent)
-    printer.write_int("srcAccessMask", 4, indent)
-    printer.write_int("dstAccessMask", 4, 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)
-    printer.write_int("srcQueueFamilyIndex", 4, indent)
-    printer.write_int("dstQueueFamilyIndex", 4, indent)
-    printer.write_int("image", 8, indent)
-    printer.write_struct("subresourceRange", struct_VkImageSubresourceRange, indent)
-
-def struct_VkExtent2D(printer, indent: int):
-    printer.write_int("width", 4, indent)
-    printer.write_int("height", 4, 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):
-    printer.write_int("aspectMask", 4, indent)
-    printer.write_int("mipLevel", 4, indent)
-    printer.write_int("baseArrayLayer", 4, indent)
-    printer.write_int("layerCount", 4, indent)
+    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):
-    printer.write_int("aspectMask", 4, indent)
-    printer.write_int("baseMipLevel", 4, indent)
-    printer.write_int("levelCount", 4, indent)
-    printer.write_int("baseArrayLayer", 4, indent)
-    printer.write_int("layerCount", 4, indent)
+    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_VkMemoryBarrier(printer, indent: int):
     printer.write_stype_and_pnext("VK_STRUCTURE_TYPE_MEMORY_BARRIER", indent)
-    printer.write_int("srcAccessMask", 4, indent)
-    printer.write_int("dstAccessMask", 4, 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_VkOffset2D(printer, indent: int):
-    printer.write_int("x", 4, indent, signed=True)
-    printer.write_int("y", 4, indent, signed=True)
+    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):
-    printer.write("x: {}, y: {}, z: {}\n".format(printer.read_int(4), printer.read_int(4), printer.read_int(4)), indent)
+    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_VkRect2D(printer, indent: int):
-    printer.write_struct("offset", struct_VkOffset2D, indent)
-    printer.write_struct("extent", struct_VkExtent2D, indent)
+    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)
-    printer.write_int("renderPass", 8, indent)
-    printer.write_int("framebuffer", 8, indent)
-    printer.write_struct("renderArea", struct_VkRect2D, indent)
-    printer.write_repeated("clearValueCount", "pClearValues", struct_VkClearValue, indent,
-                           "pClearValuesPtr")
+    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)
+
 VkImageLayout = {
     0: "VK_IMAGE_LAYOUT_UNDEFINED",
     1: "VK_IMAGE_LAYOUT_GENERAL",
@@ -120,8 +134,6 @@
     1000241001: "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL",
     1000241002: "VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL",
     1000241003: "VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL",
-    1000314000: "VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL",
-    1000314001: "VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL",
     1000001002: "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR",
     1000024000: "VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR",
     1000024001: "VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR",
@@ -132,6 +144,8 @@
     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",
 }
 
 VkPipelineBindPoint = {
@@ -306,58 +320,6 @@
     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",
-    53: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES",
-    54: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES",
-    1000192000: "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO",
-    1000215000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES",
-    1000245000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES",
-    1000276000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES",
-    1000295000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES",
-    1000295001: "VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO",
-    1000295002: "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO",
-    1000297000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES",
-    1000314000: "VK_STRUCTURE_TYPE_MEMORY_BARRIER_2",
-    1000314001: "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2",
-    1000314002: "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2",
-    1000314003: "VK_STRUCTURE_TYPE_DEPENDENCY_INFO",
-    1000314004: "VK_STRUCTURE_TYPE_SUBMIT_INFO_2",
-    1000314005: "VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO",
-    1000314006: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO",
-    1000314007: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES",
-    1000325000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES",
-    1000335000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES",
-    1000337000: "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2",
-    1000337001: "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2",
-    1000337002: "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2",
-    1000337003: "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2",
-    1000337004: "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2",
-    1000337005: "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2",
-    1000337006: "VK_STRUCTURE_TYPE_BUFFER_COPY_2",
-    1000337007: "VK_STRUCTURE_TYPE_IMAGE_COPY_2",
-    1000337008: "VK_STRUCTURE_TYPE_IMAGE_BLIT_2",
-    1000337009: "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2",
-    1000337010: "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2",
-    1000225000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES",
-    1000225001: "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO",
-    1000225002: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES",
-    1000138000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES",
-    1000138001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES",
-    1000138002: "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK",
-    1000138003: "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO",
-    1000066000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES",
-    1000044000: "VK_STRUCTURE_TYPE_RENDERING_INFO",
-    1000044001: "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO",
-    1000044002: "VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO",
-    1000044003: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES",
-    1000044004: "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO",
-    1000280000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES",
-    1000280001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES",
-    1000281001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES",
-    1000360000: "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3",
-    1000413000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES",
-    1000413001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES",
-    1000413002: "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS",
-    1000413003: "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS",
     1000001000: "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR",
     1000001001: "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR",
     1000060007: "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR",
@@ -374,6 +336,7 @@
     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",
@@ -395,9 +358,7 @@
     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",
-    1000023016: "VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR",
     1000024000: "VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR",
-    1000024001: "VK_STRUCTURE_TYPE_VIDEO_DECODE_CAPABILITIES_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",
@@ -418,21 +379,16 @@
     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",
-    1000038009: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT",
-    1000038010: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT",
-    1000038011: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_REFERENCE_LISTS_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_SEGMENT_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",
-    1000039010: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT",
-    1000039011: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_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",
@@ -442,6 +398,11 @@
     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",
@@ -453,8 +414,15 @@
     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",
@@ -527,6 +495,10 @@
     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",
@@ -589,6 +561,7 @@
     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",
@@ -603,14 +576,12 @@
     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",
-    1000174000: "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR",
-    1000388000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR",
-    1000388001: "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR",
     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",
@@ -631,10 +602,14 @@
     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",
@@ -650,6 +625,7 @@
     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",
@@ -680,6 +656,7 @@
     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",
@@ -690,7 +667,10 @@
     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",
@@ -704,15 +684,27 @@
     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",
-    1000299002: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR",
-    1000299003: "VK_STRUCTURE_TYPE_VIDEO_ENCODE_CAPABILITIES_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",
@@ -723,9 +715,20 @@
     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",
-    1000342000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM",
     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",
@@ -734,9 +737,8 @@
     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",
-    1000355000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT",
-    1000355001: "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_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",
@@ -762,20 +764,20 @@
     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",
-    1000391000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT",
-    1000391001: "VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_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",
-    1000420000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE",
-    1000420001: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE",
-    1000420002: "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE",
-    1000425000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM",
-    1000425001: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM",
-    1000425002: "VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM",
-    1000430000: "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV",
+    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 = {
@@ -783,1271 +785,3 @@
     1: "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS",
 }
 
-opcodes = {
-    # From 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",
-
-    # From 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",
-
-    # From 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",
-
-    # From https://source.corp.google.com/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",
-}