Преглед изворни кода

Use re-spirv in the Vulkan driver to optimize shaders.

Includes contributions by Rémi to unify usage of SPIR-V Headers across the dependencies.

Co-authored-by: Rémi Verschelde <[email protected]>
Dario пре 1 година
родитељ
комит
cf00643565

+ 2 - 0
drivers/metal/SCsub

@@ -9,6 +9,7 @@ env_metal = env.Clone()
 
 thirdparty_obj = []
 
+thirdparty_spirv_headers_dir = "#thirdparty/spirv-headers/"
 thirdparty_dir = "#thirdparty/spirv-cross/"
 thirdparty_sources = [
     "spirv_cfg.cpp",
@@ -22,6 +23,7 @@ thirdparty_sources = [
 thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
 
 env_metal.Prepend(CPPPATH=[thirdparty_dir, thirdparty_dir + "/include"])
+env_metal.Prepend(CPPPATH=[thirdparty_spirv_headers_dir + "include/spirv/unified1"])
 
 # Must enable exceptions for SPIRV-Cross; otherwise, it will abort the process on errors.
 if "-fno-exceptions" in env_metal["CXXFLAGS"]:

+ 8 - 0
drivers/vulkan/SCsub

@@ -6,6 +6,8 @@ Import("env")
 thirdparty_obj = []
 thirdparty_dir = "#thirdparty/vulkan"
 thirdparty_volk_dir = "#thirdparty/volk"
+thirdparty_spirv_headers_dir = "#thirdparty/spirv-headers"
+thirdparty_respirv_dir = "#thirdparty/re-spirv"
 
 # Use bundled Vulkan headers
 env.Prepend(CPPPATH=[thirdparty_dir, thirdparty_dir + "/include"])
@@ -50,6 +52,12 @@ elif env["platform"] == "macos" or env["platform"] == "ios":
 
 env_thirdparty_vma.add_source_files(thirdparty_obj, thirdparty_sources_vma)
 
+# Build re-spirv
+env_thirdparty_respirv = env.Clone()
+env_thirdparty_respirv.Prepend(CPPPATH=[thirdparty_spirv_headers_dir + "/include"])
+env_thirdparty_respirv.disable_warnings()
+thirdparty_sources_respirv = [thirdparty_respirv_dir + "/re-spirv.cpp"]
+env_thirdparty_respirv.add_source_files(thirdparty_obj, thirdparty_sources_respirv)
 
 env.drivers_sources += thirdparty_obj
 

+ 190 - 16
drivers/vulkan/rendering_device_driver_vulkan.cpp

@@ -50,6 +50,27 @@
 
 #define PRINT_NATIVE_COMMANDS 0
 
+// Enable the use of re-spirv for optimizing shaders after applying specialization constants.
+#define RESPV_ENABLED 1
+
+// Only enable function inlining for re-spirv when dealing with a shader that uses specialization constants.
+#define RESPV_ONLY_INLINE_SHADERS_WITH_SPEC_CONSTANTS 1
+
+// Print additional information about every shader optimized with re-spirv.
+#define RESPV_VERBOSE 0
+
+// Disable dead code elimination when using re-spirv.
+#define RESPV_DONT_REMOVE_DEAD_CODE 0
+
+// Record numerous statistics about pipeline creation such as time and shader sizes. When combined with enabling
+// and disabling re-spirv, this can be used to measure its effects.
+#define RECORD_PIPELINE_STATISTICS 0
+
+#if RECORD_PIPELINE_STATISTICS
+#include "core/io/file_access.h"
+#define RECORD_PIPELINE_STATISTICS_PATH "./pipelines.csv"
+#endif
+
 /*****************/
 /**** GENERIC ****/
 /*****************/
@@ -1637,6 +1658,14 @@ Error RenderingDeviceDriverVulkan::initialize(uint32_t p_device_index, uint32_t
 
 	shader_container_format.set_debug_info_enabled(Engine::get_singleton()->is_generate_spirv_debug_info_enabled());
 
+#if RECORD_PIPELINE_STATISTICS
+	pipeline_statistics.file_access = FileAccess::open(RECORD_PIPELINE_STATISTICS_PATH, FileAccess::WRITE);
+	ERR_FAIL_NULL_V_MSG(pipeline_statistics.file_access, ERR_CANT_CREATE, "Unable to write pipeline statistics file.");
+
+	pipeline_statistics.file_access->store_csv_line({ "name", "hash", "stage", "spec", "glslang", "re-spirv", "time" });
+	pipeline_statistics.file_access->flush();
+#endif
+
 	return OK;
 }
 
@@ -3760,6 +3789,8 @@ static VkShaderStageFlagBits RD_STAGE_TO_VK_SHADER_STAGE_BITS[RDD::SHADER_STAGE_
 RDD::ShaderID RenderingDeviceDriverVulkan::shader_create_from_container(const Ref<RenderingShaderContainer> &p_shader_container, const Vector<ImmutableSampler> &p_immutable_samplers) {
 	ShaderReflection shader_refl = p_shader_container->get_shader_reflection();
 	ShaderInfo shader_info;
+	shader_info.name = p_shader_container->shader_name.get_data();
+
 	for (uint32_t i = 0; i < SHADER_STAGE_MAX; i++) {
 		if (shader_refl.push_constant_stages.has_flag((ShaderStage)(1 << i))) {
 			shader_info.vk_push_constant_stages |= RD_STAGE_TO_VK_SHADER_STAGE_BITS[i];
@@ -3846,9 +3877,20 @@ RDD::ShaderID RenderingDeviceDriverVulkan::shader_create_from_container(const Re
 	VkResult res;
 	String error_text;
 	Vector<uint8_t> decompressed_code;
-	Vector<uint8_t> decoded_spirv;
 	VkShaderModule vk_module;
-	for (int i = 0; i < shader_refl.stages_vector.size(); i++) {
+	PackedByteArray decoded_spirv;
+	const bool use_respv = RESPV_ENABLED && !shader_container_format.get_debug_info_enabled();
+	const bool store_respv = use_respv && !shader_refl.specialization_constants.is_empty();
+	const int64_t stage_count = shader_refl.stages_vector.size();
+	shader_info.vk_stages_create_info.reserve(stage_count);
+	shader_info.spirv_stage_bytes.reserve(stage_count);
+	shader_info.original_stage_size.reserve(stage_count);
+
+	if (store_respv) {
+		shader_info.respv_stage_shaders.reserve(stage_count);
+	}
+
+	for (int i = 0; i < stage_count; i++) {
 		const RenderingShaderContainer::Shader &shader = p_shader_container->shaders[i];
 		bool requires_decompression = (shader.code_decompressed_size > 0);
 		if (requires_decompression) {
@@ -3878,6 +3920,31 @@ RDD::ShaderID RenderingDeviceDriverVulkan::shader_create_from_container(const Re
 			memcpy(decoded_spirv.ptrw(), smolv_input, decoded_spirv.size());
 		}
 
+		shader_info.original_stage_size.push_back(decoded_spirv.size());
+
+		if (use_respv) {
+			const bool inline_data = store_respv || !RESPV_ONLY_INLINE_SHADERS_WITH_SPEC_CONSTANTS;
+			respv::Shader respv_shader(decoded_spirv.ptr(), decoded_spirv.size(), inline_data);
+			if (store_respv) {
+				shader_info.respv_stage_shaders.push_back(respv_shader);
+			} else {
+				std::vector<uint8_t> respv_optimized_data;
+				if (respv::Optimizer::run(respv_shader, nullptr, 0, respv_optimized_data)) {
+#if RESPV_VERBOSE
+					print_line(vformat("re-spirv transformed the shader from %d bytes to %d bytes.", decoded_spirv.size(), respv_optimized_data.size()));
+#endif
+					decoded_spirv.resize(respv_optimized_data.size());
+					memcpy(decoded_spirv.ptrw(), respv_optimized_data.data(), respv_optimized_data.size());
+				} else {
+#if RESPV_VERBOSE
+					print_line("re-spirv failed to optimize the shader.");
+#endif
+				}
+			}
+		}
+
+		shader_info.spirv_stage_bytes.push_back(decoded_spirv);
+
 		VkShaderModuleCreateInfo shader_module_create_info = {};
 		shader_module_create_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
 		shader_module_create_info.codeSize = decoded_spirv.size();
@@ -5508,26 +5575,104 @@ RDD::PipelineID RenderingDeviceDriverVulkan::render_pipeline_create(
 			"Cannot create pipeline without shader module, please make sure shader modules are destroyed only after all associated pipelines are created.");
 	VkPipelineShaderStageCreateInfo *vk_pipeline_stages = ALLOCA_ARRAY(VkPipelineShaderStageCreateInfo, shader_info->vk_stages_create_info.size());
 
+	thread_local std::vector<uint8_t> respv_optimized_data;
+	thread_local LocalVector<respv::SpecConstant> respv_spec_constants;
+	thread_local LocalVector<VkShaderModule> respv_shader_modules;
+	thread_local LocalVector<VkSpecializationMapEntry> specialization_entries;
+
+#if RECORD_PIPELINE_STATISTICS
+	thread_local LocalVector<uint64_t> respv_run_time;
+	thread_local LocalVector<uint64_t> respv_size;
+	uint32_t stage_count = shader_info->vk_stages_create_info.size();
+	respv_run_time.clear();
+	respv_size.clear();
+	respv_run_time.resize_initialized(stage_count);
+	respv_size.resize_initialized(stage_count);
+#endif
+
+	respv_shader_modules.clear();
+	specialization_entries.clear();
+
 	for (uint32_t i = 0; i < shader_info->vk_stages_create_info.size(); i++) {
 		vk_pipeline_stages[i] = shader_info->vk_stages_create_info[i];
 
 		if (p_specialization_constants.size()) {
-			VkSpecializationMapEntry *specialization_map_entries = ALLOCA_ARRAY(VkSpecializationMapEntry, p_specialization_constants.size());
-			for (uint32_t j = 0; j < p_specialization_constants.size(); j++) {
-				specialization_map_entries[j] = {};
-				specialization_map_entries[j].constantID = p_specialization_constants[j].constant_id;
-				specialization_map_entries[j].offset = (const char *)&p_specialization_constants[j].int_value - (const char *)p_specialization_constants.ptr();
-				specialization_map_entries[j].size = sizeof(uint32_t);
+			bool use_pipeline_spec_constants = true;
+			if ((i < shader_info->respv_stage_shaders.size()) && !shader_info->respv_stage_shaders[i].empty()) {
+#if RECORD_PIPELINE_STATISTICS
+				uint64_t respv_start_time = OS::get_singleton()->get_ticks_usec();
+#endif
+				// Attempt to optimize the shader using re-spirv before relying on the driver.
+				respv_spec_constants.resize(p_specialization_constants.size());
+				for (uint32_t j = 0; j < p_specialization_constants.size(); j++) {
+					respv_spec_constants[j].specId = p_specialization_constants[j].constant_id;
+					respv_spec_constants[j].values.resize(1);
+					respv_spec_constants[j].values[0] = p_specialization_constants[j].int_value;
+				}
+
+				respv::Options respv_options;
+#if RESPV_DONT_REMOVE_DEAD_CODE
+				respv_options.removeDeadCode = false;
+#endif
+				if (respv::Optimizer::run(shader_info->respv_stage_shaders[i], respv_spec_constants.ptr(), respv_spec_constants.size(), respv_optimized_data, respv_options)) {
+#if RESPV_VERBOSE
+					String spec_constants;
+					for (uint32_t j = 0; j < p_specialization_constants.size(); j++) {
+						spec_constants += vformat("%d: %d", p_specialization_constants[j].constant_id, p_specialization_constants[j].int_value);
+						if (j < p_specialization_constants.size() - 1) {
+							spec_constants += ", ";
+						}
+					}
+
+					print_line(vformat("re-spirv transformed the shader from %d bytes to %d bytes with constants %s (%d).", shader_info->spirv_stage_bytes[i].size(), respv_optimized_data.size(), spec_constants, p_shader.id));
+#endif
+
+					// Create the shader module with the optimized output.
+					VkShaderModule shader_module = VK_NULL_HANDLE;
+					VkShaderModuleCreateInfo shader_module_create_info = {};
+					shader_module_create_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
+					shader_module_create_info.pCode = (const uint32_t *)(respv_optimized_data.data());
+					shader_module_create_info.codeSize = respv_optimized_data.size();
+					VkResult err = vkCreateShaderModule(vk_device, &shader_module_create_info, VKC::get_allocation_callbacks(VK_OBJECT_TYPE_SHADER_MODULE), &shader_module);
+					if (err == VK_SUCCESS) {
+						// Replace the module used in the creation info.
+						vk_pipeline_stages[i].module = shader_module;
+						respv_shader_modules.push_back(shader_module);
+						use_pipeline_spec_constants = false;
+					}
+
+#if RECORD_PIPELINE_STATISTICS
+					respv_run_time[i] = OS::get_singleton()->get_ticks_usec() - respv_start_time;
+					respv_size[i] = respv_optimized_data.size();
+#endif
+				} else {
+#if RESPV_VERBOSE
+					print_line("re-spirv failed to optimize the shader.");
+#endif
+				}
 			}
 
-			VkSpecializationInfo *specialization_info = ALLOCA_SINGLE(VkSpecializationInfo);
-			*specialization_info = {};
-			specialization_info->dataSize = p_specialization_constants.size() * sizeof(PipelineSpecializationConstant);
-			specialization_info->pData = p_specialization_constants.ptr();
-			specialization_info->mapEntryCount = p_specialization_constants.size();
-			specialization_info->pMapEntries = specialization_map_entries;
+			if (use_pipeline_spec_constants) {
+				// Use specialization constants through the driver.
+				if (specialization_entries.is_empty()) {
+					specialization_entries.resize(p_specialization_constants.size());
+					for (uint32_t j = 0; j < p_specialization_constants.size(); j++) {
+						specialization_entries[j] = {};
+						specialization_entries[j].constantID = p_specialization_constants[j].constant_id;
+						specialization_entries[j].offset = (const char *)&p_specialization_constants[j].int_value - (const char *)p_specialization_constants.ptr();
+						specialization_entries[j].size = sizeof(uint32_t);
+					}
+				}
 
-			vk_pipeline_stages[i].pSpecializationInfo = specialization_info;
+				VkSpecializationInfo *specialization_info = ALLOCA_SINGLE(VkSpecializationInfo);
+				*specialization_info = {};
+				specialization_info->dataSize = p_specialization_constants.size() * sizeof(PipelineSpecializationConstant);
+				specialization_info->pData = p_specialization_constants.ptr();
+				specialization_info->mapEntryCount = specialization_entries.size();
+				specialization_info->pMapEntries = specialization_entries.ptr();
+
+				vk_pipeline_stages[i].pSpecializationInfo = specialization_info;
+			}
 		}
 	}
 
@@ -5546,12 +5691,41 @@ RDD::PipelineID RenderingDeviceDriverVulkan::render_pipeline_create(
 	pipeline_create_info.renderPass = render_pass->vk_render_pass;
 	pipeline_create_info.subpass = p_render_subpass;
 
-	// ---
+#if RECORD_PIPELINE_STATISTICS
+	uint64_t pipeline_start_time = OS::get_singleton()->get_ticks_usec();
+#endif
 
 	VkPipeline vk_pipeline = VK_NULL_HANDLE;
 	VkResult err = vkCreateGraphicsPipelines(vk_device, pipelines_cache.vk_cache, 1, &pipeline_create_info, VKC::get_allocation_callbacks(VK_OBJECT_TYPE_PIPELINE), &vk_pipeline);
 	ERR_FAIL_COND_V_MSG(err, PipelineID(), "vkCreateGraphicsPipelines failed with error " + itos(err) + ".");
 
+#if RECORD_PIPELINE_STATISTICS
+	{
+		MutexLock lock(pipeline_statistics.file_access_mutex);
+		uint64_t pipeline_creation_time = OS::get_singleton()->get_ticks_usec() - pipeline_start_time;
+		for (uint32_t i = 0; i < shader_info->vk_stages_create_info.size(); i++) {
+			PackedStringArray csv_array = {
+				shader_info->name,
+				String::num_uint64(hash_murmur3_buffer(shader_info->spirv_stage_bytes[i].ptr(), shader_info->spirv_stage_bytes[i].size())),
+				String::num_uint64(i),
+				String::num_uint64(respv_size[i] > 0),
+				String::num_uint64(shader_info->original_stage_size[i]),
+				String::num_uint64(respv_size[i] > 0 ? respv_size[i] : shader_info->spirv_stage_bytes[i].size()),
+				String::num_uint64(respv_run_time[i] + pipeline_creation_time)
+			};
+
+			pipeline_statistics.file_access->store_csv_line(csv_array);
+		}
+
+		pipeline_statistics.file_access->flush();
+	}
+#endif
+
+	// Destroy any modules created temporarily by re-spirv.
+	for (VkShaderModule vk_module : respv_shader_modules) {
+		vkDestroyShaderModule(vk_device, vk_module, VKC::get_allocation_callbacks(VK_OBJECT_TYPE_SHADER_MODULE));
+	}
+
 	return PipelineID(vk_pipeline);
 }
 

+ 12 - 0
drivers/vulkan/rendering_device_driver_vulkan.h

@@ -41,6 +41,7 @@
 #define _DEBUG
 #endif
 #endif
+#include "thirdparty/re-spirv/re-spirv.h"
 #include "thirdparty/vulkan/vk_mem_alloc.h"
 
 #include "drivers/vulkan/godot_vulkan.h"
@@ -156,6 +157,13 @@ class RenderingDeviceDriverVulkan : public RenderingDeviceDriver {
 
 	PendingFlushes pending_flushes;
 
+	struct PipelineStatistics {
+		Ref<FileAccess> file_access;
+		Mutex file_access_mutex;
+	};
+
+	PipelineStatistics pipeline_statistics;
+
 	void _register_requested_device_extension(const CharString &p_extension_name, bool p_required);
 	Error _initialize_device_extensions();
 	Error _check_device_features();
@@ -437,9 +445,13 @@ public:
 	/****************/
 private:
 	struct ShaderInfo {
+		String name;
 		VkShaderStageFlags vk_push_constant_stages = 0;
 		TightLocalVector<VkPipelineShaderStageCreateInfo> vk_stages_create_info;
 		TightLocalVector<VkDescriptorSetLayout> vk_descriptor_set_layouts;
+		TightLocalVector<respv::Shader> respv_stage_shaders;
+		TightLocalVector<Vector<uint8_t>> spirv_stage_bytes;
+		TightLocalVector<uint64_t> original_stage_size;
 		VkPipelineLayout vk_pipeline_layout = VK_NULL_HANDLE;
 	};
 

+ 4 - 0
drivers/vulkan/rendering_shader_container_vulkan.cpp

@@ -108,6 +108,10 @@ void RenderingShaderContainerFormatVulkan::set_debug_info_enabled(bool p_debug_i
 	debug_info_enabled = p_debug_info_enabled;
 }
 
+bool RenderingShaderContainerFormatVulkan::get_debug_info_enabled() const {
+	return debug_info_enabled;
+}
+
 RenderingShaderContainerFormatVulkan::RenderingShaderContainerFormatVulkan() {}
 
 RenderingShaderContainerFormatVulkan::~RenderingShaderContainerFormatVulkan() {}

+ 1 - 0
drivers/vulkan/rendering_shader_container_vulkan.h

@@ -62,6 +62,7 @@ public:
 	virtual ShaderLanguageVersion get_shader_language_version() const override;
 	virtual ShaderSpirvVersion get_shader_spirv_version() const override;
 	void set_debug_info_enabled(bool p_debug_info_enabled);
+	bool get_debug_info_enabled() const;
 	RenderingShaderContainerFormatVulkan();
 	virtual ~RenderingShaderContainerFormatVulkan();
 };

+ 2 - 0
modules/glslang/SCsub

@@ -12,6 +12,7 @@ thirdparty_obj = []
 
 if env["builtin_glslang"]:
     thirdparty_dir = "#thirdparty/glslang/"
+    thirdparty_spirv_headers_dir = "#thirdparty/spirv-headers/"
     thirdparty_sources = [
         "glslang/GenericCodeGen/CodeGen.cpp",
         "glslang/GenericCodeGen/Link.cpp",
@@ -63,6 +64,7 @@ if env["builtin_glslang"]:
     thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
 
     env_glslang.Prepend(CPPPATH=[thirdparty_dir, "#thirdparty"])
+    env_glslang.Prepend(CPPPATH=[thirdparty_spirv_headers_dir + "include/spirv/unified1"])
 
     env_glslang.Append(CPPDEFINES=[("ENABLE_OPT", 0)])
 

+ 24 - 1
thirdparty/README.md

@@ -920,6 +920,19 @@ Files extracted from upstream source:
 - `License.txt`
 
 
+## re-spirv
+
+- Upstream: https://github.com/renderbag/re-spirv
+- Version: git (2f9be81bca5882ada1b6377d2ef8c0f7d8665171, 2025)
+- License: MIT
+
+Files extracted from upstream source:
+
+- `re-spirv.cpp`
+- `re-spirv.h`
+- `LICENSE`
+
+
 ## rvo2
 
 For 2D in `rvo2_2d` folder
@@ -997,6 +1010,16 @@ Versions of this SDK do not have to match the `vulkan` section, as this SDK is r
 to generate Metal source from Vulkan SPIR-V.
 
 
+## spirv-headers
+
+- Upstream: https://github.com/KhronosGroup/SPIRV-Headers
+- Version: vulkan-sdk-1.4.328.1 (01e0577914a75a2569c846778c2f93aa8e6feddd, 2025)
+
+Files extracted from upstream source:
+- `include/spirv/unified1` folder with only `spirv.h` and `spirv.hpp`
+- `LICENSE`
+
+
 ## spirv-reflect
 
 - Upstream: https://github.com/KhronosGroup/SPIRV-Reflect
@@ -1016,7 +1039,7 @@ Patches:
 
 - `0001-specialization-constants.patch` (GH-50325)
 - `0002-zero-size-for-sc-sized-arrays.patch` (GH-94985)
-
+- `0003-spirv-headers.patch` (GH-111452)
 
 ## swappy-frame-pacing
 

+ 0 - 2815
thirdparty/glslang/SPIRV/spirv.hpp

@@ -1,2815 +0,0 @@
-// Copyright (c) 2014-2024 The Khronos Group Inc.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and/or associated documentation files (the "Materials"),
-// to deal in the Materials without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Materials, and to permit persons to whom the
-// Materials are furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Materials.
-//
-// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
-// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
-//
-// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
-// IN THE MATERIALS.
-
-// This header is automatically generated by the same tool that creates
-// the Binary Section of the SPIR-V specification.
-
-// Enumeration tokens for SPIR-V, in various styles:
-//   C, C++, C++11, JSON, Lua, Python, C#, D, Beef
-//
-// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
-// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
-// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
-// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
-// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
-// - C# will use enum classes in the Specification class located in the "Spv" namespace,
-//     e.g.: Spv.Specification.SourceLanguage.GLSL
-// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL
-// - Beef will use enum classes in the Specification class located in the "Spv" namespace,
-//     e.g.: Spv.Specification.SourceLanguage.GLSL
-//
-// Some tokens act like mask values, which can be OR'd together,
-// while others are mutually exclusive.  The mask-like ones have
-// "Mask" in their name, and a parallel enum that has the shift
-// amount (1 << x) for each corresponding enumerant.
-
-#ifndef spirv_HPP
-#define spirv_HPP
-
-namespace spv {
-
-typedef unsigned int Id;
-
-#define SPV_VERSION 0x10600
-#define SPV_REVISION 1
-
-static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010600;
-static const unsigned int Revision = 1;
-static const unsigned int OpCodeMask = 0xffff;
-static const unsigned int WordCountShift = 16;
-
-enum SourceLanguage {
-    SourceLanguageUnknown = 0,
-    SourceLanguageESSL = 1,
-    SourceLanguageGLSL = 2,
-    SourceLanguageOpenCL_C = 3,
-    SourceLanguageOpenCL_CPP = 4,
-    SourceLanguageHLSL = 5,
-    SourceLanguageCPP_for_OpenCL = 6,
-    SourceLanguageSYCL = 7,
-    SourceLanguageMax = 0x7fffffff,
-};
-
-enum ExecutionModel {
-    ExecutionModelVertex = 0,
-    ExecutionModelTessellationControl = 1,
-    ExecutionModelTessellationEvaluation = 2,
-    ExecutionModelGeometry = 3,
-    ExecutionModelFragment = 4,
-    ExecutionModelGLCompute = 5,
-    ExecutionModelKernel = 6,
-    ExecutionModelTaskNV = 5267,
-    ExecutionModelMeshNV = 5268,
-    ExecutionModelRayGenerationKHR = 5313,
-    ExecutionModelRayGenerationNV = 5313,
-    ExecutionModelIntersectionKHR = 5314,
-    ExecutionModelIntersectionNV = 5314,
-    ExecutionModelAnyHitKHR = 5315,
-    ExecutionModelAnyHitNV = 5315,
-    ExecutionModelClosestHitKHR = 5316,
-    ExecutionModelClosestHitNV = 5316,
-    ExecutionModelMissKHR = 5317,
-    ExecutionModelMissNV = 5317,
-    ExecutionModelCallableKHR = 5318,
-    ExecutionModelCallableNV = 5318,
-    ExecutionModelTaskEXT = 5364,
-    ExecutionModelMeshEXT = 5365,
-    ExecutionModelMax = 0x7fffffff,
-};
-
-enum AddressingModel {
-    AddressingModelLogical = 0,
-    AddressingModelPhysical32 = 1,
-    AddressingModelPhysical64 = 2,
-    AddressingModelPhysicalStorageBuffer64 = 5348,
-    AddressingModelPhysicalStorageBuffer64EXT = 5348,
-    AddressingModelMax = 0x7fffffff,
-};
-
-enum MemoryModel {
-    MemoryModelSimple = 0,
-    MemoryModelGLSL450 = 1,
-    MemoryModelOpenCL = 2,
-    MemoryModelVulkan = 3,
-    MemoryModelVulkanKHR = 3,
-    MemoryModelMax = 0x7fffffff,
-};
-
-enum ExecutionMode {
-    ExecutionModeInvocations = 0,
-    ExecutionModeSpacingEqual = 1,
-    ExecutionModeSpacingFractionalEven = 2,
-    ExecutionModeSpacingFractionalOdd = 3,
-    ExecutionModeVertexOrderCw = 4,
-    ExecutionModeVertexOrderCcw = 5,
-    ExecutionModePixelCenterInteger = 6,
-    ExecutionModeOriginUpperLeft = 7,
-    ExecutionModeOriginLowerLeft = 8,
-    ExecutionModeEarlyFragmentTests = 9,
-    ExecutionModePointMode = 10,
-    ExecutionModeXfb = 11,
-    ExecutionModeDepthReplacing = 12,
-    ExecutionModeDepthGreater = 14,
-    ExecutionModeDepthLess = 15,
-    ExecutionModeDepthUnchanged = 16,
-    ExecutionModeLocalSize = 17,
-    ExecutionModeLocalSizeHint = 18,
-    ExecutionModeInputPoints = 19,
-    ExecutionModeInputLines = 20,
-    ExecutionModeInputLinesAdjacency = 21,
-    ExecutionModeTriangles = 22,
-    ExecutionModeInputTrianglesAdjacency = 23,
-    ExecutionModeQuads = 24,
-    ExecutionModeIsolines = 25,
-    ExecutionModeOutputVertices = 26,
-    ExecutionModeOutputPoints = 27,
-    ExecutionModeOutputLineStrip = 28,
-    ExecutionModeOutputTriangleStrip = 29,
-    ExecutionModeVecTypeHint = 30,
-    ExecutionModeContractionOff = 31,
-    ExecutionModeInitializer = 33,
-    ExecutionModeFinalizer = 34,
-    ExecutionModeSubgroupSize = 35,
-    ExecutionModeSubgroupsPerWorkgroup = 36,
-    ExecutionModeSubgroupsPerWorkgroupId = 37,
-    ExecutionModeLocalSizeId = 38,
-    ExecutionModeLocalSizeHintId = 39,
-    ExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
-    ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
-    ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
-    ExecutionModeSubgroupUniformControlFlowKHR = 4421,
-    ExecutionModePostDepthCoverage = 4446,
-    ExecutionModeDenormPreserve = 4459,
-    ExecutionModeDenormFlushToZero = 4460,
-    ExecutionModeSignedZeroInfNanPreserve = 4461,
-    ExecutionModeRoundingModeRTE = 4462,
-    ExecutionModeRoundingModeRTZ = 4463,
-    ExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
-    ExecutionModeStencilRefReplacingEXT = 5027,
-    ExecutionModeStencilRefUnchangedFrontAMD = 5079,
-    ExecutionModeStencilRefGreaterFrontAMD = 5080,
-    ExecutionModeStencilRefLessFrontAMD = 5081,
-    ExecutionModeStencilRefUnchangedBackAMD = 5082,
-    ExecutionModeStencilRefGreaterBackAMD = 5083,
-    ExecutionModeStencilRefLessBackAMD = 5084,
-    ExecutionModeQuadDerivativesKHR = 5088,
-    ExecutionModeRequireFullQuadsKHR = 5089,
-    ExecutionModeOutputLinesEXT = 5269,
-    ExecutionModeOutputLinesNV = 5269,
-    ExecutionModeOutputPrimitivesEXT = 5270,
-    ExecutionModeOutputPrimitivesNV = 5270,
-    ExecutionModeDerivativeGroupQuadsNV = 5289,
-    ExecutionModeDerivativeGroupLinearNV = 5290,
-    ExecutionModeOutputTrianglesEXT = 5298,
-    ExecutionModeOutputTrianglesNV = 5298,
-    ExecutionModePixelInterlockOrderedEXT = 5366,
-    ExecutionModePixelInterlockUnorderedEXT = 5367,
-    ExecutionModeSampleInterlockOrderedEXT = 5368,
-    ExecutionModeSampleInterlockUnorderedEXT = 5369,
-    ExecutionModeShadingRateInterlockOrderedEXT = 5370,
-    ExecutionModeShadingRateInterlockUnorderedEXT = 5371,
-    ExecutionModeSharedLocalMemorySizeINTEL = 5618,
-    ExecutionModeRoundingModeRTPINTEL = 5620,
-    ExecutionModeRoundingModeRTNINTEL = 5621,
-    ExecutionModeFloatingPointModeALTINTEL = 5622,
-    ExecutionModeFloatingPointModeIEEEINTEL = 5623,
-    ExecutionModeMaxWorkgroupSizeINTEL = 5893,
-    ExecutionModeMaxWorkDimINTEL = 5894,
-    ExecutionModeNoGlobalOffsetINTEL = 5895,
-    ExecutionModeNumSIMDWorkitemsINTEL = 5896,
-    ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
-    ExecutionModeMaximallyReconvergesKHR = 6023,
-    ExecutionModeStreamingInterfaceINTEL = 6154,
-    ExecutionModeNamedBarrierCountINTEL = 6417,
-    ExecutionModeMax = 0x7fffffff,
-};
-
-enum StorageClass {
-    StorageClassUniformConstant = 0,
-    StorageClassInput = 1,
-    StorageClassUniform = 2,
-    StorageClassOutput = 3,
-    StorageClassWorkgroup = 4,
-    StorageClassCrossWorkgroup = 5,
-    StorageClassPrivate = 6,
-    StorageClassFunction = 7,
-    StorageClassGeneric = 8,
-    StorageClassPushConstant = 9,
-    StorageClassAtomicCounter = 10,
-    StorageClassImage = 11,
-    StorageClassStorageBuffer = 12,
-    StorageClassTileImageEXT = 4172,
-    StorageClassCallableDataKHR = 5328,
-    StorageClassCallableDataNV = 5328,
-    StorageClassIncomingCallableDataKHR = 5329,
-    StorageClassIncomingCallableDataNV = 5329,
-    StorageClassRayPayloadKHR = 5338,
-    StorageClassRayPayloadNV = 5338,
-    StorageClassHitAttributeKHR = 5339,
-    StorageClassHitAttributeNV = 5339,
-    StorageClassIncomingRayPayloadKHR = 5342,
-    StorageClassIncomingRayPayloadNV = 5342,
-    StorageClassShaderRecordBufferKHR = 5343,
-    StorageClassShaderRecordBufferNV = 5343,
-    StorageClassPhysicalStorageBuffer = 5349,
-    StorageClassPhysicalStorageBufferEXT = 5349,
-    StorageClassHitObjectAttributeNV = 5385,
-    StorageClassTaskPayloadWorkgroupEXT = 5402,
-    StorageClassCodeSectionINTEL = 5605,
-    StorageClassDeviceOnlyINTEL = 5936,
-    StorageClassHostOnlyINTEL = 5937,
-    StorageClassMax = 0x7fffffff,
-};
-
-enum Dim {
-    Dim1D = 0,
-    Dim2D = 1,
-    Dim3D = 2,
-    DimCube = 3,
-    DimRect = 4,
-    DimBuffer = 5,
-    DimSubpassData = 6,
-    DimTileImageDataEXT = 4173,
-    DimMax = 0x7fffffff,
-};
-
-enum SamplerAddressingMode {
-    SamplerAddressingModeNone = 0,
-    SamplerAddressingModeClampToEdge = 1,
-    SamplerAddressingModeClamp = 2,
-    SamplerAddressingModeRepeat = 3,
-    SamplerAddressingModeRepeatMirrored = 4,
-    SamplerAddressingModeMax = 0x7fffffff,
-};
-
-enum SamplerFilterMode {
-    SamplerFilterModeNearest = 0,
-    SamplerFilterModeLinear = 1,
-    SamplerFilterModeMax = 0x7fffffff,
-};
-
-enum ImageFormat {
-    ImageFormatUnknown = 0,
-    ImageFormatRgba32f = 1,
-    ImageFormatRgba16f = 2,
-    ImageFormatR32f = 3,
-    ImageFormatRgba8 = 4,
-    ImageFormatRgba8Snorm = 5,
-    ImageFormatRg32f = 6,
-    ImageFormatRg16f = 7,
-    ImageFormatR11fG11fB10f = 8,
-    ImageFormatR16f = 9,
-    ImageFormatRgba16 = 10,
-    ImageFormatRgb10A2 = 11,
-    ImageFormatRg16 = 12,
-    ImageFormatRg8 = 13,
-    ImageFormatR16 = 14,
-    ImageFormatR8 = 15,
-    ImageFormatRgba16Snorm = 16,
-    ImageFormatRg16Snorm = 17,
-    ImageFormatRg8Snorm = 18,
-    ImageFormatR16Snorm = 19,
-    ImageFormatR8Snorm = 20,
-    ImageFormatRgba32i = 21,
-    ImageFormatRgba16i = 22,
-    ImageFormatRgba8i = 23,
-    ImageFormatR32i = 24,
-    ImageFormatRg32i = 25,
-    ImageFormatRg16i = 26,
-    ImageFormatRg8i = 27,
-    ImageFormatR16i = 28,
-    ImageFormatR8i = 29,
-    ImageFormatRgba32ui = 30,
-    ImageFormatRgba16ui = 31,
-    ImageFormatRgba8ui = 32,
-    ImageFormatR32ui = 33,
-    ImageFormatRgb10a2ui = 34,
-    ImageFormatRg32ui = 35,
-    ImageFormatRg16ui = 36,
-    ImageFormatRg8ui = 37,
-    ImageFormatR16ui = 38,
-    ImageFormatR8ui = 39,
-    ImageFormatR64ui = 40,
-    ImageFormatR64i = 41,
-    ImageFormatMax = 0x7fffffff,
-};
-
-enum ImageChannelOrder {
-    ImageChannelOrderR = 0,
-    ImageChannelOrderA = 1,
-    ImageChannelOrderRG = 2,
-    ImageChannelOrderRA = 3,
-    ImageChannelOrderRGB = 4,
-    ImageChannelOrderRGBA = 5,
-    ImageChannelOrderBGRA = 6,
-    ImageChannelOrderARGB = 7,
-    ImageChannelOrderIntensity = 8,
-    ImageChannelOrderLuminance = 9,
-    ImageChannelOrderRx = 10,
-    ImageChannelOrderRGx = 11,
-    ImageChannelOrderRGBx = 12,
-    ImageChannelOrderDepth = 13,
-    ImageChannelOrderDepthStencil = 14,
-    ImageChannelOrdersRGB = 15,
-    ImageChannelOrdersRGBx = 16,
-    ImageChannelOrdersRGBA = 17,
-    ImageChannelOrdersBGRA = 18,
-    ImageChannelOrderABGR = 19,
-    ImageChannelOrderMax = 0x7fffffff,
-};
-
-enum ImageChannelDataType {
-    ImageChannelDataTypeSnormInt8 = 0,
-    ImageChannelDataTypeSnormInt16 = 1,
-    ImageChannelDataTypeUnormInt8 = 2,
-    ImageChannelDataTypeUnormInt16 = 3,
-    ImageChannelDataTypeUnormShort565 = 4,
-    ImageChannelDataTypeUnormShort555 = 5,
-    ImageChannelDataTypeUnormInt101010 = 6,
-    ImageChannelDataTypeSignedInt8 = 7,
-    ImageChannelDataTypeSignedInt16 = 8,
-    ImageChannelDataTypeSignedInt32 = 9,
-    ImageChannelDataTypeUnsignedInt8 = 10,
-    ImageChannelDataTypeUnsignedInt16 = 11,
-    ImageChannelDataTypeUnsignedInt32 = 12,
-    ImageChannelDataTypeHalfFloat = 13,
-    ImageChannelDataTypeFloat = 14,
-    ImageChannelDataTypeUnormInt24 = 15,
-    ImageChannelDataTypeUnormInt101010_2 = 16,
-    ImageChannelDataTypeMax = 0x7fffffff,
-};
-
-enum ImageOperandsShift {
-    ImageOperandsBiasShift = 0,
-    ImageOperandsLodShift = 1,
-    ImageOperandsGradShift = 2,
-    ImageOperandsConstOffsetShift = 3,
-    ImageOperandsOffsetShift = 4,
-    ImageOperandsConstOffsetsShift = 5,
-    ImageOperandsSampleShift = 6,
-    ImageOperandsMinLodShift = 7,
-    ImageOperandsMakeTexelAvailableShift = 8,
-    ImageOperandsMakeTexelAvailableKHRShift = 8,
-    ImageOperandsMakeTexelVisibleShift = 9,
-    ImageOperandsMakeTexelVisibleKHRShift = 9,
-    ImageOperandsNonPrivateTexelShift = 10,
-    ImageOperandsNonPrivateTexelKHRShift = 10,
-    ImageOperandsVolatileTexelShift = 11,
-    ImageOperandsVolatileTexelKHRShift = 11,
-    ImageOperandsSignExtendShift = 12,
-    ImageOperandsZeroExtendShift = 13,
-    ImageOperandsNontemporalShift = 14,
-    ImageOperandsOffsetsShift = 16,
-    ImageOperandsMax = 0x7fffffff,
-};
-
-enum ImageOperandsMask {
-    ImageOperandsMaskNone = 0,
-    ImageOperandsBiasMask = 0x00000001,
-    ImageOperandsLodMask = 0x00000002,
-    ImageOperandsGradMask = 0x00000004,
-    ImageOperandsConstOffsetMask = 0x00000008,
-    ImageOperandsOffsetMask = 0x00000010,
-    ImageOperandsConstOffsetsMask = 0x00000020,
-    ImageOperandsSampleMask = 0x00000040,
-    ImageOperandsMinLodMask = 0x00000080,
-    ImageOperandsMakeTexelAvailableMask = 0x00000100,
-    ImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
-    ImageOperandsMakeTexelVisibleMask = 0x00000200,
-    ImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
-    ImageOperandsNonPrivateTexelMask = 0x00000400,
-    ImageOperandsNonPrivateTexelKHRMask = 0x00000400,
-    ImageOperandsVolatileTexelMask = 0x00000800,
-    ImageOperandsVolatileTexelKHRMask = 0x00000800,
-    ImageOperandsSignExtendMask = 0x00001000,
-    ImageOperandsZeroExtendMask = 0x00002000,
-    ImageOperandsNontemporalMask = 0x00004000,
-    ImageOperandsOffsetsMask = 0x00010000,
-};
-
-enum FPFastMathModeShift {
-    FPFastMathModeNotNaNShift = 0,
-    FPFastMathModeNotInfShift = 1,
-    FPFastMathModeNSZShift = 2,
-    FPFastMathModeAllowRecipShift = 3,
-    FPFastMathModeFastShift = 4,
-    FPFastMathModeAllowContractFastINTELShift = 16,
-    FPFastMathModeAllowReassocINTELShift = 17,
-    FPFastMathModeMax = 0x7fffffff,
-};
-
-enum FPFastMathModeMask {
-    FPFastMathModeMaskNone = 0,
-    FPFastMathModeNotNaNMask = 0x00000001,
-    FPFastMathModeNotInfMask = 0x00000002,
-    FPFastMathModeNSZMask = 0x00000004,
-    FPFastMathModeAllowRecipMask = 0x00000008,
-    FPFastMathModeFastMask = 0x00000010,
-    FPFastMathModeAllowContractFastINTELMask = 0x00010000,
-    FPFastMathModeAllowReassocINTELMask = 0x00020000,
-};
-
-enum FPRoundingMode {
-    FPRoundingModeRTE = 0,
-    FPRoundingModeRTZ = 1,
-    FPRoundingModeRTP = 2,
-    FPRoundingModeRTN = 3,
-    FPRoundingModeMax = 0x7fffffff,
-};
-
-enum LinkageType {
-    LinkageTypeExport = 0,
-    LinkageTypeImport = 1,
-    LinkageTypeLinkOnceODR = 2,
-    LinkageTypeMax = 0x7fffffff,
-};
-
-enum AccessQualifier {
-    AccessQualifierReadOnly = 0,
-    AccessQualifierWriteOnly = 1,
-    AccessQualifierReadWrite = 2,
-    AccessQualifierMax = 0x7fffffff,
-};
-
-enum FunctionParameterAttribute {
-    FunctionParameterAttributeZext = 0,
-    FunctionParameterAttributeSext = 1,
-    FunctionParameterAttributeByVal = 2,
-    FunctionParameterAttributeSret = 3,
-    FunctionParameterAttributeNoAlias = 4,
-    FunctionParameterAttributeNoCapture = 5,
-    FunctionParameterAttributeNoWrite = 6,
-    FunctionParameterAttributeNoReadWrite = 7,
-    FunctionParameterAttributeRuntimeAlignedINTEL = 5940,
-    FunctionParameterAttributeMax = 0x7fffffff,
-};
-
-enum Decoration {
-    DecorationRelaxedPrecision = 0,
-    DecorationSpecId = 1,
-    DecorationBlock = 2,
-    DecorationBufferBlock = 3,
-    DecorationRowMajor = 4,
-    DecorationColMajor = 5,
-    DecorationArrayStride = 6,
-    DecorationMatrixStride = 7,
-    DecorationGLSLShared = 8,
-    DecorationGLSLPacked = 9,
-    DecorationCPacked = 10,
-    DecorationBuiltIn = 11,
-    DecorationNoPerspective = 13,
-    DecorationFlat = 14,
-    DecorationPatch = 15,
-    DecorationCentroid = 16,
-    DecorationSample = 17,
-    DecorationInvariant = 18,
-    DecorationRestrict = 19,
-    DecorationAliased = 20,
-    DecorationVolatile = 21,
-    DecorationConstant = 22,
-    DecorationCoherent = 23,
-    DecorationNonWritable = 24,
-    DecorationNonReadable = 25,
-    DecorationUniform = 26,
-    DecorationUniformId = 27,
-    DecorationSaturatedConversion = 28,
-    DecorationStream = 29,
-    DecorationLocation = 30,
-    DecorationComponent = 31,
-    DecorationIndex = 32,
-    DecorationBinding = 33,
-    DecorationDescriptorSet = 34,
-    DecorationOffset = 35,
-    DecorationXfbBuffer = 36,
-    DecorationXfbStride = 37,
-    DecorationFuncParamAttr = 38,
-    DecorationFPRoundingMode = 39,
-    DecorationFPFastMathMode = 40,
-    DecorationLinkageAttributes = 41,
-    DecorationNoContraction = 42,
-    DecorationInputAttachmentIndex = 43,
-    DecorationAlignment = 44,
-    DecorationMaxByteOffset = 45,
-    DecorationAlignmentId = 46,
-    DecorationMaxByteOffsetId = 47,
-    DecorationNoSignedWrap = 4469,
-    DecorationNoUnsignedWrap = 4470,
-    DecorationWeightTextureQCOM = 4487,
-    DecorationBlockMatchTextureQCOM = 4488,
-    DecorationBlockMatchSamplerQCOM = 4499,
-    DecorationExplicitInterpAMD = 4999,
-    DecorationOverrideCoverageNV = 5248,
-    DecorationPassthroughNV = 5250,
-    DecorationViewportRelativeNV = 5252,
-    DecorationSecondaryViewportRelativeNV = 5256,
-    DecorationPerPrimitiveEXT = 5271,
-    DecorationPerPrimitiveNV = 5271,
-    DecorationPerViewNV = 5272,
-    DecorationPerTaskNV = 5273,
-    DecorationPerVertexKHR = 5285,
-    DecorationPerVertexNV = 5285,
-    DecorationNonUniform = 5300,
-    DecorationNonUniformEXT = 5300,
-    DecorationRestrictPointer = 5355,
-    DecorationRestrictPointerEXT = 5355,
-    DecorationAliasedPointer = 5356,
-    DecorationAliasedPointerEXT = 5356,
-    DecorationHitObjectShaderRecordBufferNV = 5386,
-    DecorationBindlessSamplerNV = 5398,
-    DecorationBindlessImageNV = 5399,
-    DecorationBoundSamplerNV = 5400,
-    DecorationBoundImageNV = 5401,
-    DecorationSIMTCallINTEL = 5599,
-    DecorationReferencedIndirectlyINTEL = 5602,
-    DecorationClobberINTEL = 5607,
-    DecorationSideEffectsINTEL = 5608,
-    DecorationVectorComputeVariableINTEL = 5624,
-    DecorationFuncParamIOKindINTEL = 5625,
-    DecorationVectorComputeFunctionINTEL = 5626,
-    DecorationStackCallINTEL = 5627,
-    DecorationGlobalVariableOffsetINTEL = 5628,
-    DecorationCounterBuffer = 5634,
-    DecorationHlslCounterBufferGOOGLE = 5634,
-    DecorationHlslSemanticGOOGLE = 5635,
-    DecorationUserSemantic = 5635,
-    DecorationUserTypeGOOGLE = 5636,
-    DecorationFunctionRoundingModeINTEL = 5822,
-    DecorationFunctionDenormModeINTEL = 5823,
-    DecorationRegisterINTEL = 5825,
-    DecorationMemoryINTEL = 5826,
-    DecorationNumbanksINTEL = 5827,
-    DecorationBankwidthINTEL = 5828,
-    DecorationMaxPrivateCopiesINTEL = 5829,
-    DecorationSinglepumpINTEL = 5830,
-    DecorationDoublepumpINTEL = 5831,
-    DecorationMaxReplicatesINTEL = 5832,
-    DecorationSimpleDualPortINTEL = 5833,
-    DecorationMergeINTEL = 5834,
-    DecorationBankBitsINTEL = 5835,
-    DecorationForcePow2DepthINTEL = 5836,
-    DecorationBurstCoalesceINTEL = 5899,
-    DecorationCacheSizeINTEL = 5900,
-    DecorationDontStaticallyCoalesceINTEL = 5901,
-    DecorationPrefetchINTEL = 5902,
-    DecorationStallEnableINTEL = 5905,
-    DecorationFuseLoopsInFunctionINTEL = 5907,
-    DecorationMathOpDSPModeINTEL = 5909,
-    DecorationAliasScopeINTEL = 5914,
-    DecorationNoAliasINTEL = 5915,
-    DecorationInitiationIntervalINTEL = 5917,
-    DecorationMaxConcurrencyINTEL = 5918,
-    DecorationPipelineEnableINTEL = 5919,
-    DecorationBufferLocationINTEL = 5921,
-    DecorationIOPipeStorageINTEL = 5944,
-    DecorationFunctionFloatingPointModeINTEL = 6080,
-    DecorationSingleElementVectorINTEL = 6085,
-    DecorationVectorComputeCallableFunctionINTEL = 6087,
-    DecorationMediaBlockIOINTEL = 6140,
-    DecorationConduitKernelArgumentINTEL = 6175,
-    DecorationRegisterMapKernelArgumentINTEL = 6176,
-    DecorationMMHostInterfaceAddressWidthINTEL = 6177,
-    DecorationMMHostInterfaceDataWidthINTEL = 6178,
-    DecorationMMHostInterfaceLatencyINTEL = 6179,
-    DecorationMMHostInterfaceReadWriteModeINTEL = 6180,
-    DecorationMMHostInterfaceMaxBurstINTEL = 6181,
-    DecorationMMHostInterfaceWaitRequestINTEL = 6182,
-    DecorationStableKernelArgumentINTEL = 6183,
-    DecorationMax = 0x7fffffff,
-};
-
-enum BuiltIn {
-    BuiltInPosition = 0,
-    BuiltInPointSize = 1,
-    BuiltInClipDistance = 3,
-    BuiltInCullDistance = 4,
-    BuiltInVertexId = 5,
-    BuiltInInstanceId = 6,
-    BuiltInPrimitiveId = 7,
-    BuiltInInvocationId = 8,
-    BuiltInLayer = 9,
-    BuiltInViewportIndex = 10,
-    BuiltInTessLevelOuter = 11,
-    BuiltInTessLevelInner = 12,
-    BuiltInTessCoord = 13,
-    BuiltInPatchVertices = 14,
-    BuiltInFragCoord = 15,
-    BuiltInPointCoord = 16,
-    BuiltInFrontFacing = 17,
-    BuiltInSampleId = 18,
-    BuiltInSamplePosition = 19,
-    BuiltInSampleMask = 20,
-    BuiltInFragDepth = 22,
-    BuiltInHelperInvocation = 23,
-    BuiltInNumWorkgroups = 24,
-    BuiltInWorkgroupSize = 25,
-    BuiltInWorkgroupId = 26,
-    BuiltInLocalInvocationId = 27,
-    BuiltInGlobalInvocationId = 28,
-    BuiltInLocalInvocationIndex = 29,
-    BuiltInWorkDim = 30,
-    BuiltInGlobalSize = 31,
-    BuiltInEnqueuedWorkgroupSize = 32,
-    BuiltInGlobalOffset = 33,
-    BuiltInGlobalLinearId = 34,
-    BuiltInSubgroupSize = 36,
-    BuiltInSubgroupMaxSize = 37,
-    BuiltInNumSubgroups = 38,
-    BuiltInNumEnqueuedSubgroups = 39,
-    BuiltInSubgroupId = 40,
-    BuiltInSubgroupLocalInvocationId = 41,
-    BuiltInVertexIndex = 42,
-    BuiltInInstanceIndex = 43,
-    BuiltInCoreIDARM = 4160,
-    BuiltInCoreCountARM = 4161,
-    BuiltInCoreMaxIDARM = 4162,
-    BuiltInWarpIDARM = 4163,
-    BuiltInWarpMaxIDARM = 4164,
-    BuiltInSubgroupEqMask = 4416,
-    BuiltInSubgroupEqMaskKHR = 4416,
-    BuiltInSubgroupGeMask = 4417,
-    BuiltInSubgroupGeMaskKHR = 4417,
-    BuiltInSubgroupGtMask = 4418,
-    BuiltInSubgroupGtMaskKHR = 4418,
-    BuiltInSubgroupLeMask = 4419,
-    BuiltInSubgroupLeMaskKHR = 4419,
-    BuiltInSubgroupLtMask = 4420,
-    BuiltInSubgroupLtMaskKHR = 4420,
-    BuiltInBaseVertex = 4424,
-    BuiltInBaseInstance = 4425,
-    BuiltInDrawIndex = 4426,
-    BuiltInPrimitiveShadingRateKHR = 4432,
-    BuiltInDeviceIndex = 4438,
-    BuiltInViewIndex = 4440,
-    BuiltInShadingRateKHR = 4444,
-    BuiltInBaryCoordNoPerspAMD = 4992,
-    BuiltInBaryCoordNoPerspCentroidAMD = 4993,
-    BuiltInBaryCoordNoPerspSampleAMD = 4994,
-    BuiltInBaryCoordSmoothAMD = 4995,
-    BuiltInBaryCoordSmoothCentroidAMD = 4996,
-    BuiltInBaryCoordSmoothSampleAMD = 4997,
-    BuiltInBaryCoordPullModelAMD = 4998,
-    BuiltInFragStencilRefEXT = 5014,
-    BuiltInViewportMaskNV = 5253,
-    BuiltInSecondaryPositionNV = 5257,
-    BuiltInSecondaryViewportMaskNV = 5258,
-    BuiltInPositionPerViewNV = 5261,
-    BuiltInViewportMaskPerViewNV = 5262,
-    BuiltInFullyCoveredEXT = 5264,
-    BuiltInTaskCountNV = 5274,
-    BuiltInPrimitiveCountNV = 5275,
-    BuiltInPrimitiveIndicesNV = 5276,
-    BuiltInClipDistancePerViewNV = 5277,
-    BuiltInCullDistancePerViewNV = 5278,
-    BuiltInLayerPerViewNV = 5279,
-    BuiltInMeshViewCountNV = 5280,
-    BuiltInMeshViewIndicesNV = 5281,
-    BuiltInBaryCoordKHR = 5286,
-    BuiltInBaryCoordNV = 5286,
-    BuiltInBaryCoordNoPerspKHR = 5287,
-    BuiltInBaryCoordNoPerspNV = 5287,
-    BuiltInFragSizeEXT = 5292,
-    BuiltInFragmentSizeNV = 5292,
-    BuiltInFragInvocationCountEXT = 5293,
-    BuiltInInvocationsPerPixelNV = 5293,
-    BuiltInPrimitivePointIndicesEXT = 5294,
-    BuiltInPrimitiveLineIndicesEXT = 5295,
-    BuiltInPrimitiveTriangleIndicesEXT = 5296,
-    BuiltInCullPrimitiveEXT = 5299,
-    BuiltInLaunchIdKHR = 5319,
-    BuiltInLaunchIdNV = 5319,
-    BuiltInLaunchSizeKHR = 5320,
-    BuiltInLaunchSizeNV = 5320,
-    BuiltInWorldRayOriginKHR = 5321,
-    BuiltInWorldRayOriginNV = 5321,
-    BuiltInWorldRayDirectionKHR = 5322,
-    BuiltInWorldRayDirectionNV = 5322,
-    BuiltInObjectRayOriginKHR = 5323,
-    BuiltInObjectRayOriginNV = 5323,
-    BuiltInObjectRayDirectionKHR = 5324,
-    BuiltInObjectRayDirectionNV = 5324,
-    BuiltInRayTminKHR = 5325,
-    BuiltInRayTminNV = 5325,
-    BuiltInRayTmaxKHR = 5326,
-    BuiltInRayTmaxNV = 5326,
-    BuiltInInstanceCustomIndexKHR = 5327,
-    BuiltInInstanceCustomIndexNV = 5327,
-    BuiltInObjectToWorldKHR = 5330,
-    BuiltInObjectToWorldNV = 5330,
-    BuiltInWorldToObjectKHR = 5331,
-    BuiltInWorldToObjectNV = 5331,
-    BuiltInHitTNV = 5332,
-    BuiltInHitKindKHR = 5333,
-    BuiltInHitKindNV = 5333,
-    BuiltInCurrentRayTimeNV = 5334,
-    BuiltInHitTriangleVertexPositionsKHR = 5335,
-    BuiltInHitMicroTriangleVertexPositionsNV = 5337,
-    BuiltInHitMicroTriangleVertexBarycentricsNV = 5344,
-    BuiltInIncomingRayFlagsKHR = 5351,
-    BuiltInIncomingRayFlagsNV = 5351,
-    BuiltInRayGeometryIndexKHR = 5352,
-    BuiltInWarpsPerSMNV = 5374,
-    BuiltInSMCountNV = 5375,
-    BuiltInWarpIDNV = 5376,
-    BuiltInSMIDNV = 5377,
-    BuiltInHitKindFrontFacingMicroTriangleNV = 5405,
-    BuiltInHitKindBackFacingMicroTriangleNV = 5406,
-    BuiltInCullMaskKHR = 6021,
-    BuiltInMax = 0x7fffffff,
-};
-
-enum SelectionControlShift {
-    SelectionControlFlattenShift = 0,
-    SelectionControlDontFlattenShift = 1,
-    SelectionControlMax = 0x7fffffff,
-};
-
-enum SelectionControlMask {
-    SelectionControlMaskNone = 0,
-    SelectionControlFlattenMask = 0x00000001,
-    SelectionControlDontFlattenMask = 0x00000002,
-};
-
-enum LoopControlShift {
-    LoopControlUnrollShift = 0,
-    LoopControlDontUnrollShift = 1,
-    LoopControlDependencyInfiniteShift = 2,
-    LoopControlDependencyLengthShift = 3,
-    LoopControlMinIterationsShift = 4,
-    LoopControlMaxIterationsShift = 5,
-    LoopControlIterationMultipleShift = 6,
-    LoopControlPeelCountShift = 7,
-    LoopControlPartialCountShift = 8,
-    LoopControlInitiationIntervalINTELShift = 16,
-    LoopControlMaxConcurrencyINTELShift = 17,
-    LoopControlDependencyArrayINTELShift = 18,
-    LoopControlPipelineEnableINTELShift = 19,
-    LoopControlLoopCoalesceINTELShift = 20,
-    LoopControlMaxInterleavingINTELShift = 21,
-    LoopControlSpeculatedIterationsINTELShift = 22,
-    LoopControlNoFusionINTELShift = 23,
-    LoopControlLoopCountINTELShift = 24,
-    LoopControlMaxReinvocationDelayINTELShift = 25,
-    LoopControlMax = 0x7fffffff,
-};
-
-enum LoopControlMask {
-    LoopControlMaskNone = 0,
-    LoopControlUnrollMask = 0x00000001,
-    LoopControlDontUnrollMask = 0x00000002,
-    LoopControlDependencyInfiniteMask = 0x00000004,
-    LoopControlDependencyLengthMask = 0x00000008,
-    LoopControlMinIterationsMask = 0x00000010,
-    LoopControlMaxIterationsMask = 0x00000020,
-    LoopControlIterationMultipleMask = 0x00000040,
-    LoopControlPeelCountMask = 0x00000080,
-    LoopControlPartialCountMask = 0x00000100,
-    LoopControlInitiationIntervalINTELMask = 0x00010000,
-    LoopControlMaxConcurrencyINTELMask = 0x00020000,
-    LoopControlDependencyArrayINTELMask = 0x00040000,
-    LoopControlPipelineEnableINTELMask = 0x00080000,
-    LoopControlLoopCoalesceINTELMask = 0x00100000,
-    LoopControlMaxInterleavingINTELMask = 0x00200000,
-    LoopControlSpeculatedIterationsINTELMask = 0x00400000,
-    LoopControlNoFusionINTELMask = 0x00800000,
-    LoopControlLoopCountINTELMask = 0x01000000,
-    LoopControlMaxReinvocationDelayINTELMask = 0x02000000,
-};
-
-enum FunctionControlShift {
-    FunctionControlInlineShift = 0,
-    FunctionControlDontInlineShift = 1,
-    FunctionControlPureShift = 2,
-    FunctionControlConstShift = 3,
-    FunctionControlOptNoneINTELShift = 16,
-    FunctionControlMax = 0x7fffffff,
-};
-
-enum FunctionControlMask {
-    FunctionControlMaskNone = 0,
-    FunctionControlInlineMask = 0x00000001,
-    FunctionControlDontInlineMask = 0x00000002,
-    FunctionControlPureMask = 0x00000004,
-    FunctionControlConstMask = 0x00000008,
-    FunctionControlOptNoneINTELMask = 0x00010000,
-};
-
-enum MemorySemanticsShift {
-    MemorySemanticsAcquireShift = 1,
-    MemorySemanticsReleaseShift = 2,
-    MemorySemanticsAcquireReleaseShift = 3,
-    MemorySemanticsSequentiallyConsistentShift = 4,
-    MemorySemanticsUniformMemoryShift = 6,
-    MemorySemanticsSubgroupMemoryShift = 7,
-    MemorySemanticsWorkgroupMemoryShift = 8,
-    MemorySemanticsCrossWorkgroupMemoryShift = 9,
-    MemorySemanticsAtomicCounterMemoryShift = 10,
-    MemorySemanticsImageMemoryShift = 11,
-    MemorySemanticsOutputMemoryShift = 12,
-    MemorySemanticsOutputMemoryKHRShift = 12,
-    MemorySemanticsMakeAvailableShift = 13,
-    MemorySemanticsMakeAvailableKHRShift = 13,
-    MemorySemanticsMakeVisibleShift = 14,
-    MemorySemanticsMakeVisibleKHRShift = 14,
-    MemorySemanticsVolatileShift = 15,
-    MemorySemanticsMax = 0x7fffffff,
-};
-
-enum MemorySemanticsMask {
-    MemorySemanticsMaskNone = 0,
-    MemorySemanticsAcquireMask = 0x00000002,
-    MemorySemanticsReleaseMask = 0x00000004,
-    MemorySemanticsAcquireReleaseMask = 0x00000008,
-    MemorySemanticsSequentiallyConsistentMask = 0x00000010,
-    MemorySemanticsUniformMemoryMask = 0x00000040,
-    MemorySemanticsSubgroupMemoryMask = 0x00000080,
-    MemorySemanticsWorkgroupMemoryMask = 0x00000100,
-    MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
-    MemorySemanticsAtomicCounterMemoryMask = 0x00000400,
-    MemorySemanticsImageMemoryMask = 0x00000800,
-    MemorySemanticsOutputMemoryMask = 0x00001000,
-    MemorySemanticsOutputMemoryKHRMask = 0x00001000,
-    MemorySemanticsMakeAvailableMask = 0x00002000,
-    MemorySemanticsMakeAvailableKHRMask = 0x00002000,
-    MemorySemanticsMakeVisibleMask = 0x00004000,
-    MemorySemanticsMakeVisibleKHRMask = 0x00004000,
-    MemorySemanticsVolatileMask = 0x00008000,
-};
-
-enum MemoryAccessShift {
-    MemoryAccessVolatileShift = 0,
-    MemoryAccessAlignedShift = 1,
-    MemoryAccessNontemporalShift = 2,
-    MemoryAccessMakePointerAvailableShift = 3,
-    MemoryAccessMakePointerAvailableKHRShift = 3,
-    MemoryAccessMakePointerVisibleShift = 4,
-    MemoryAccessMakePointerVisibleKHRShift = 4,
-    MemoryAccessNonPrivatePointerShift = 5,
-    MemoryAccessNonPrivatePointerKHRShift = 5,
-    MemoryAccessAliasScopeINTELMaskShift = 16,
-    MemoryAccessNoAliasINTELMaskShift = 17,
-    MemoryAccessMax = 0x7fffffff,
-};
-
-enum MemoryAccessMask {
-    MemoryAccessMaskNone = 0,
-    MemoryAccessVolatileMask = 0x00000001,
-    MemoryAccessAlignedMask = 0x00000002,
-    MemoryAccessNontemporalMask = 0x00000004,
-    MemoryAccessMakePointerAvailableMask = 0x00000008,
-    MemoryAccessMakePointerAvailableKHRMask = 0x00000008,
-    MemoryAccessMakePointerVisibleMask = 0x00000010,
-    MemoryAccessMakePointerVisibleKHRMask = 0x00000010,
-    MemoryAccessNonPrivatePointerMask = 0x00000020,
-    MemoryAccessNonPrivatePointerKHRMask = 0x00000020,
-    MemoryAccessAliasScopeINTELMaskMask = 0x00010000,
-    MemoryAccessNoAliasINTELMaskMask = 0x00020000,
-};
-
-enum Scope {
-    ScopeCrossDevice = 0,
-    ScopeDevice = 1,
-    ScopeWorkgroup = 2,
-    ScopeSubgroup = 3,
-    ScopeInvocation = 4,
-    ScopeQueueFamily = 5,
-    ScopeQueueFamilyKHR = 5,
-    ScopeShaderCallKHR = 6,
-    ScopeMax = 0x7fffffff,
-};
-
-enum GroupOperation {
-    GroupOperationReduce = 0,
-    GroupOperationInclusiveScan = 1,
-    GroupOperationExclusiveScan = 2,
-    GroupOperationClusteredReduce = 3,
-    GroupOperationPartitionedReduceNV = 6,
-    GroupOperationPartitionedInclusiveScanNV = 7,
-    GroupOperationPartitionedExclusiveScanNV = 8,
-    GroupOperationMax = 0x7fffffff,
-};
-
-enum KernelEnqueueFlags {
-    KernelEnqueueFlagsNoWait = 0,
-    KernelEnqueueFlagsWaitKernel = 1,
-    KernelEnqueueFlagsWaitWorkGroup = 2,
-    KernelEnqueueFlagsMax = 0x7fffffff,
-};
-
-enum KernelProfilingInfoShift {
-    KernelProfilingInfoCmdExecTimeShift = 0,
-    KernelProfilingInfoMax = 0x7fffffff,
-};
-
-enum KernelProfilingInfoMask {
-    KernelProfilingInfoMaskNone = 0,
-    KernelProfilingInfoCmdExecTimeMask = 0x00000001,
-};
-
-enum Capability {
-    CapabilityMatrix = 0,
-    CapabilityShader = 1,
-    CapabilityGeometry = 2,
-    CapabilityTessellation = 3,
-    CapabilityAddresses = 4,
-    CapabilityLinkage = 5,
-    CapabilityKernel = 6,
-    CapabilityVector16 = 7,
-    CapabilityFloat16Buffer = 8,
-    CapabilityFloat16 = 9,
-    CapabilityFloat64 = 10,
-    CapabilityInt64 = 11,
-    CapabilityInt64Atomics = 12,
-    CapabilityImageBasic = 13,
-    CapabilityImageReadWrite = 14,
-    CapabilityImageMipmap = 15,
-    CapabilityPipes = 17,
-    CapabilityGroups = 18,
-    CapabilityDeviceEnqueue = 19,
-    CapabilityLiteralSampler = 20,
-    CapabilityAtomicStorage = 21,
-    CapabilityInt16 = 22,
-    CapabilityTessellationPointSize = 23,
-    CapabilityGeometryPointSize = 24,
-    CapabilityImageGatherExtended = 25,
-    CapabilityStorageImageMultisample = 27,
-    CapabilityUniformBufferArrayDynamicIndexing = 28,
-    CapabilitySampledImageArrayDynamicIndexing = 29,
-    CapabilityStorageBufferArrayDynamicIndexing = 30,
-    CapabilityStorageImageArrayDynamicIndexing = 31,
-    CapabilityClipDistance = 32,
-    CapabilityCullDistance = 33,
-    CapabilityImageCubeArray = 34,
-    CapabilitySampleRateShading = 35,
-    CapabilityImageRect = 36,
-    CapabilitySampledRect = 37,
-    CapabilityGenericPointer = 38,
-    CapabilityInt8 = 39,
-    CapabilityInputAttachment = 40,
-    CapabilitySparseResidency = 41,
-    CapabilityMinLod = 42,
-    CapabilitySampled1D = 43,
-    CapabilityImage1D = 44,
-    CapabilitySampledCubeArray = 45,
-    CapabilitySampledBuffer = 46,
-    CapabilityImageBuffer = 47,
-    CapabilityImageMSArray = 48,
-    CapabilityStorageImageExtendedFormats = 49,
-    CapabilityImageQuery = 50,
-    CapabilityDerivativeControl = 51,
-    CapabilityInterpolationFunction = 52,
-    CapabilityTransformFeedback = 53,
-    CapabilityGeometryStreams = 54,
-    CapabilityStorageImageReadWithoutFormat = 55,
-    CapabilityStorageImageWriteWithoutFormat = 56,
-    CapabilityMultiViewport = 57,
-    CapabilitySubgroupDispatch = 58,
-    CapabilityNamedBarrier = 59,
-    CapabilityPipeStorage = 60,
-    CapabilityGroupNonUniform = 61,
-    CapabilityGroupNonUniformVote = 62,
-    CapabilityGroupNonUniformArithmetic = 63,
-    CapabilityGroupNonUniformBallot = 64,
-    CapabilityGroupNonUniformShuffle = 65,
-    CapabilityGroupNonUniformShuffleRelative = 66,
-    CapabilityGroupNonUniformClustered = 67,
-    CapabilityGroupNonUniformQuad = 68,
-    CapabilityShaderLayer = 69,
-    CapabilityShaderViewportIndex = 70,
-    CapabilityUniformDecoration = 71,
-    CapabilityCoreBuiltinsARM = 4165,
-    CapabilityTileImageColorReadAccessEXT = 4166,
-    CapabilityTileImageDepthReadAccessEXT = 4167,
-    CapabilityTileImageStencilReadAccessEXT = 4168,
-    CapabilityFragmentShadingRateKHR = 4422,
-    CapabilitySubgroupBallotKHR = 4423,
-    CapabilityDrawParameters = 4427,
-    CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
-    CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
-    CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
-    CapabilitySubgroupVoteKHR = 4431,
-    CapabilityStorageBuffer16BitAccess = 4433,
-    CapabilityStorageUniformBufferBlock16 = 4433,
-    CapabilityStorageUniform16 = 4434,
-    CapabilityUniformAndStorageBuffer16BitAccess = 4434,
-    CapabilityStoragePushConstant16 = 4435,
-    CapabilityStorageInputOutput16 = 4436,
-    CapabilityDeviceGroup = 4437,
-    CapabilityMultiView = 4439,
-    CapabilityVariablePointersStorageBuffer = 4441,
-    CapabilityVariablePointers = 4442,
-    CapabilityAtomicStorageOps = 4445,
-    CapabilitySampleMaskPostDepthCoverage = 4447,
-    CapabilityStorageBuffer8BitAccess = 4448,
-    CapabilityUniformAndStorageBuffer8BitAccess = 4449,
-    CapabilityStoragePushConstant8 = 4450,
-    CapabilityDenormPreserve = 4464,
-    CapabilityDenormFlushToZero = 4465,
-    CapabilitySignedZeroInfNanPreserve = 4466,
-    CapabilityRoundingModeRTE = 4467,
-    CapabilityRoundingModeRTZ = 4468,
-    CapabilityRayQueryProvisionalKHR = 4471,
-    CapabilityRayQueryKHR = 4472,
-    CapabilityRayTraversalPrimitiveCullingKHR = 4478,
-    CapabilityRayTracingKHR = 4479,
-    CapabilityTextureSampleWeightedQCOM = 4484,
-    CapabilityTextureBoxFilterQCOM = 4485,
-    CapabilityTextureBlockMatchQCOM = 4486,
-    CapabilityTextureBlockMatch2QCOM = 4498,
-    CapabilityFloat16ImageAMD = 5008,
-    CapabilityImageGatherBiasLodAMD = 5009,
-    CapabilityFragmentMaskAMD = 5010,
-    CapabilityStencilExportEXT = 5013,
-    CapabilityImageReadWriteLodAMD = 5015,
-    CapabilityInt64ImageEXT = 5016,
-    CapabilityShaderClockKHR = 5055,
-    CapabilityQuadControlKHR = 5087,
-    CapabilitySampleMaskOverrideCoverageNV = 5249,
-    CapabilityGeometryShaderPassthroughNV = 5251,
-    CapabilityShaderViewportIndexLayerEXT = 5254,
-    CapabilityShaderViewportIndexLayerNV = 5254,
-    CapabilityShaderViewportMaskNV = 5255,
-    CapabilityShaderStereoViewNV = 5259,
-    CapabilityPerViewAttributesNV = 5260,
-    CapabilityFragmentFullyCoveredEXT = 5265,
-    CapabilityMeshShadingNV = 5266,
-    CapabilityImageFootprintNV = 5282,
-    CapabilityMeshShadingEXT = 5283,
-    CapabilityFragmentBarycentricKHR = 5284,
-    CapabilityFragmentBarycentricNV = 5284,
-    CapabilityComputeDerivativeGroupQuadsNV = 5288,
-    CapabilityFragmentDensityEXT = 5291,
-    CapabilityShadingRateNV = 5291,
-    CapabilityGroupNonUniformPartitionedNV = 5297,
-    CapabilityShaderNonUniform = 5301,
-    CapabilityShaderNonUniformEXT = 5301,
-    CapabilityRuntimeDescriptorArray = 5302,
-    CapabilityRuntimeDescriptorArrayEXT = 5302,
-    CapabilityInputAttachmentArrayDynamicIndexing = 5303,
-    CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
-    CapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
-    CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
-    CapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
-    CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
-    CapabilityUniformBufferArrayNonUniformIndexing = 5306,
-    CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
-    CapabilitySampledImageArrayNonUniformIndexing = 5307,
-    CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
-    CapabilityStorageBufferArrayNonUniformIndexing = 5308,
-    CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
-    CapabilityStorageImageArrayNonUniformIndexing = 5309,
-    CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
-    CapabilityInputAttachmentArrayNonUniformIndexing = 5310,
-    CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
-    CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
-    CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
-    CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
-    CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
-    CapabilityRayTracingPositionFetchKHR = 5336,
-    CapabilityRayTracingNV = 5340,
-    CapabilityRayTracingMotionBlurNV = 5341,
-    CapabilityVulkanMemoryModel = 5345,
-    CapabilityVulkanMemoryModelKHR = 5345,
-    CapabilityVulkanMemoryModelDeviceScope = 5346,
-    CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
-    CapabilityPhysicalStorageBufferAddresses = 5347,
-    CapabilityPhysicalStorageBufferAddressesEXT = 5347,
-    CapabilityComputeDerivativeGroupLinearNV = 5350,
-    CapabilityRayTracingProvisionalKHR = 5353,
-    CapabilityCooperativeMatrixNV = 5357,
-    CapabilityFragmentShaderSampleInterlockEXT = 5363,
-    CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
-    CapabilityShaderSMBuiltinsNV = 5373,
-    CapabilityFragmentShaderPixelInterlockEXT = 5378,
-    CapabilityDemoteToHelperInvocation = 5379,
-    CapabilityDemoteToHelperInvocationEXT = 5379,
-    CapabilityDisplacementMicromapNV = 5380,
-    CapabilityRayTracingOpacityMicromapEXT = 5381,
-    CapabilityShaderInvocationReorderNV = 5383,
-    CapabilityBindlessTextureNV = 5390,
-    CapabilityRayQueryPositionFetchKHR = 5391,
-    CapabilityAtomicFloat16VectorNV = 5404,
-    CapabilityRayTracingDisplacementMicromapNV = 5409,
-    CapabilitySubgroupShuffleINTEL = 5568,
-    CapabilitySubgroupBufferBlockIOINTEL = 5569,
-    CapabilitySubgroupImageBlockIOINTEL = 5570,
-    CapabilitySubgroupImageMediaBlockIOINTEL = 5579,
-    CapabilityRoundToInfinityINTEL = 5582,
-    CapabilityFloatingPointModeINTEL = 5583,
-    CapabilityIntegerFunctions2INTEL = 5584,
-    CapabilityFunctionPointersINTEL = 5603,
-    CapabilityIndirectReferencesINTEL = 5604,
-    CapabilityAsmINTEL = 5606,
-    CapabilityAtomicFloat32MinMaxEXT = 5612,
-    CapabilityAtomicFloat64MinMaxEXT = 5613,
-    CapabilityAtomicFloat16MinMaxEXT = 5616,
-    CapabilityVectorComputeINTEL = 5617,
-    CapabilityVectorAnyINTEL = 5619,
-    CapabilityExpectAssumeKHR = 5629,
-    CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
-    CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
-    CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
-    CapabilityVariableLengthArrayINTEL = 5817,
-    CapabilityFunctionFloatControlINTEL = 5821,
-    CapabilityFPGAMemoryAttributesINTEL = 5824,
-    CapabilityFPFastMathModeINTEL = 5837,
-    CapabilityArbitraryPrecisionIntegersINTEL = 5844,
-    CapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
-    CapabilityUnstructuredLoopControlsINTEL = 5886,
-    CapabilityFPGALoopControlsINTEL = 5888,
-    CapabilityKernelAttributesINTEL = 5892,
-    CapabilityFPGAKernelAttributesINTEL = 5897,
-    CapabilityFPGAMemoryAccessesINTEL = 5898,
-    CapabilityFPGAClusterAttributesINTEL = 5904,
-    CapabilityLoopFuseINTEL = 5906,
-    CapabilityFPGADSPControlINTEL = 5908,
-    CapabilityMemoryAccessAliasingINTEL = 5910,
-    CapabilityFPGAInvocationPipeliningAttributesINTEL = 5916,
-    CapabilityFPGABufferLocationINTEL = 5920,
-    CapabilityArbitraryPrecisionFixedPointINTEL = 5922,
-    CapabilityUSMStorageClassesINTEL = 5935,
-    CapabilityRuntimeAlignedAttributeINTEL = 5939,
-    CapabilityIOPipesINTEL = 5943,
-    CapabilityBlockingPipesINTEL = 5945,
-    CapabilityFPGARegINTEL = 5948,
-    CapabilityDotProductInputAll = 6016,
-    CapabilityDotProductInputAllKHR = 6016,
-    CapabilityDotProductInput4x8Bit = 6017,
-    CapabilityDotProductInput4x8BitKHR = 6017,
-    CapabilityDotProductInput4x8BitPacked = 6018,
-    CapabilityDotProductInput4x8BitPackedKHR = 6018,
-    CapabilityDotProduct = 6019,
-    CapabilityDotProductKHR = 6019,
-    CapabilityRayCullMaskKHR = 6020,
-    CapabilityCooperativeMatrixKHR = 6022,
-    CapabilityBitInstructions = 6025,
-    CapabilityGroupNonUniformRotateKHR = 6026,
-    CapabilityAtomicFloat32AddEXT = 6033,
-    CapabilityAtomicFloat64AddEXT = 6034,
-    CapabilityLongConstantCompositeINTEL = 6089,
-    CapabilityOptNoneINTEL = 6094,
-    CapabilityAtomicFloat16AddEXT = 6095,
-    CapabilityDebugInfoModuleINTEL = 6114,
-    CapabilitySplitBarrierINTEL = 6141,
-    CapabilityFPGAArgumentInterfacesINTEL = 6174,
-    CapabilityGroupUniformArithmeticKHR = 6400,
-    CapabilityMax = 0x7fffffff,
-};
-
-enum RayFlagsShift {
-    RayFlagsOpaqueKHRShift = 0,
-    RayFlagsNoOpaqueKHRShift = 1,
-    RayFlagsTerminateOnFirstHitKHRShift = 2,
-    RayFlagsSkipClosestHitShaderKHRShift = 3,
-    RayFlagsCullBackFacingTrianglesKHRShift = 4,
-    RayFlagsCullFrontFacingTrianglesKHRShift = 5,
-    RayFlagsCullOpaqueKHRShift = 6,
-    RayFlagsCullNoOpaqueKHRShift = 7,
-    RayFlagsSkipTrianglesKHRShift = 8,
-    RayFlagsSkipAABBsKHRShift = 9,
-    RayFlagsForceOpacityMicromap2StateEXTShift = 10,
-    RayFlagsMax = 0x7fffffff,
-};
-
-enum RayFlagsMask {
-    RayFlagsMaskNone = 0,
-    RayFlagsOpaqueKHRMask = 0x00000001,
-    RayFlagsNoOpaqueKHRMask = 0x00000002,
-    RayFlagsTerminateOnFirstHitKHRMask = 0x00000004,
-    RayFlagsSkipClosestHitShaderKHRMask = 0x00000008,
-    RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,
-    RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,
-    RayFlagsCullOpaqueKHRMask = 0x00000040,
-    RayFlagsCullNoOpaqueKHRMask = 0x00000080,
-    RayFlagsSkipTrianglesKHRMask = 0x00000100,
-    RayFlagsSkipAABBsKHRMask = 0x00000200,
-    RayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400,
-};
-
-enum RayQueryIntersection {
-    RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,
-    RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,
-    RayQueryIntersectionMax = 0x7fffffff,
-};
-
-enum RayQueryCommittedIntersectionType {
-    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,
-    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1,
-    RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2,
-    RayQueryCommittedIntersectionTypeMax = 0x7fffffff,
-};
-
-enum RayQueryCandidateIntersectionType {
-    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0,
-    RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,
-    RayQueryCandidateIntersectionTypeMax = 0x7fffffff,
-};
-
-enum FragmentShadingRateShift {
-    FragmentShadingRateVertical2PixelsShift = 0,
-    FragmentShadingRateVertical4PixelsShift = 1,
-    FragmentShadingRateHorizontal2PixelsShift = 2,
-    FragmentShadingRateHorizontal4PixelsShift = 3,
-    FragmentShadingRateMax = 0x7fffffff,
-};
-
-enum FragmentShadingRateMask {
-    FragmentShadingRateMaskNone = 0,
-    FragmentShadingRateVertical2PixelsMask = 0x00000001,
-    FragmentShadingRateVertical4PixelsMask = 0x00000002,
-    FragmentShadingRateHorizontal2PixelsMask = 0x00000004,
-    FragmentShadingRateHorizontal4PixelsMask = 0x00000008,
-};
-
-enum FPDenormMode {
-    FPDenormModePreserve = 0,
-    FPDenormModeFlushToZero = 1,
-    FPDenormModeMax = 0x7fffffff,
-};
-
-enum FPOperationMode {
-    FPOperationModeIEEE = 0,
-    FPOperationModeALT = 1,
-    FPOperationModeMax = 0x7fffffff,
-};
-
-enum QuantizationModes {
-    QuantizationModesTRN = 0,
-    QuantizationModesTRN_ZERO = 1,
-    QuantizationModesRND = 2,
-    QuantizationModesRND_ZERO = 3,
-    QuantizationModesRND_INF = 4,
-    QuantizationModesRND_MIN_INF = 5,
-    QuantizationModesRND_CONV = 6,
-    QuantizationModesRND_CONV_ODD = 7,
-    QuantizationModesMax = 0x7fffffff,
-};
-
-enum OverflowModes {
-    OverflowModesWRAP = 0,
-    OverflowModesSAT = 1,
-    OverflowModesSAT_ZERO = 2,
-    OverflowModesSAT_SYM = 3,
-    OverflowModesMax = 0x7fffffff,
-};
-
-enum PackedVectorFormat {
-    PackedVectorFormatPackedVectorFormat4x8Bit = 0,
-    PackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
-    PackedVectorFormatMax = 0x7fffffff,
-};
-
-enum CooperativeMatrixOperandsShift {
-    CooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0,
-    CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1,
-    CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2,
-    CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3,
-    CooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4,
-    CooperativeMatrixOperandsMax = 0x7fffffff,
-};
-
-enum CooperativeMatrixOperandsMask {
-    CooperativeMatrixOperandsMaskNone = 0,
-    CooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001,
-    CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002,
-    CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004,
-    CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008,
-    CooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010,
-};
-
-enum CooperativeMatrixLayout {
-    CooperativeMatrixLayoutRowMajorKHR = 0,
-    CooperativeMatrixLayoutColumnMajorKHR = 1,
-    CooperativeMatrixLayoutMax = 0x7fffffff,
-};
-
-enum CooperativeMatrixUse {
-    CooperativeMatrixUseMatrixAKHR = 0,
-    CooperativeMatrixUseMatrixBKHR = 1,
-    CooperativeMatrixUseMatrixAccumulatorKHR = 2,
-    CooperativeMatrixUseMax = 0x7fffffff,
-};
-
-enum Op {
-    OpNop = 0,
-    OpUndef = 1,
-    OpSourceContinued = 2,
-    OpSource = 3,
-    OpSourceExtension = 4,
-    OpName = 5,
-    OpMemberName = 6,
-    OpString = 7,
-    OpLine = 8,
-    OpExtension = 10,
-    OpExtInstImport = 11,
-    OpExtInst = 12,
-    OpMemoryModel = 14,
-    OpEntryPoint = 15,
-    OpExecutionMode = 16,
-    OpCapability = 17,
-    OpTypeVoid = 19,
-    OpTypeBool = 20,
-    OpTypeInt = 21,
-    OpTypeFloat = 22,
-    OpTypeVector = 23,
-    OpTypeMatrix = 24,
-    OpTypeImage = 25,
-    OpTypeSampler = 26,
-    OpTypeSampledImage = 27,
-    OpTypeArray = 28,
-    OpTypeRuntimeArray = 29,
-    OpTypeStruct = 30,
-    OpTypeOpaque = 31,
-    OpTypePointer = 32,
-    OpTypeFunction = 33,
-    OpTypeEvent = 34,
-    OpTypeDeviceEvent = 35,
-    OpTypeReserveId = 36,
-    OpTypeQueue = 37,
-    OpTypePipe = 38,
-    OpTypeForwardPointer = 39,
-    OpConstantTrue = 41,
-    OpConstantFalse = 42,
-    OpConstant = 43,
-    OpConstantComposite = 44,
-    OpConstantSampler = 45,
-    OpConstantNull = 46,
-    OpSpecConstantTrue = 48,
-    OpSpecConstantFalse = 49,
-    OpSpecConstant = 50,
-    OpSpecConstantComposite = 51,
-    OpSpecConstantOp = 52,
-    OpFunction = 54,
-    OpFunctionParameter = 55,
-    OpFunctionEnd = 56,
-    OpFunctionCall = 57,
-    OpVariable = 59,
-    OpImageTexelPointer = 60,
-    OpLoad = 61,
-    OpStore = 62,
-    OpCopyMemory = 63,
-    OpCopyMemorySized = 64,
-    OpAccessChain = 65,
-    OpInBoundsAccessChain = 66,
-    OpPtrAccessChain = 67,
-    OpArrayLength = 68,
-    OpGenericPtrMemSemantics = 69,
-    OpInBoundsPtrAccessChain = 70,
-    OpDecorate = 71,
-    OpMemberDecorate = 72,
-    OpDecorationGroup = 73,
-    OpGroupDecorate = 74,
-    OpGroupMemberDecorate = 75,
-    OpVectorExtractDynamic = 77,
-    OpVectorInsertDynamic = 78,
-    OpVectorShuffle = 79,
-    OpCompositeConstruct = 80,
-    OpCompositeExtract = 81,
-    OpCompositeInsert = 82,
-    OpCopyObject = 83,
-    OpTranspose = 84,
-    OpSampledImage = 86,
-    OpImageSampleImplicitLod = 87,
-    OpImageSampleExplicitLod = 88,
-    OpImageSampleDrefImplicitLod = 89,
-    OpImageSampleDrefExplicitLod = 90,
-    OpImageSampleProjImplicitLod = 91,
-    OpImageSampleProjExplicitLod = 92,
-    OpImageSampleProjDrefImplicitLod = 93,
-    OpImageSampleProjDrefExplicitLod = 94,
-    OpImageFetch = 95,
-    OpImageGather = 96,
-    OpImageDrefGather = 97,
-    OpImageRead = 98,
-    OpImageWrite = 99,
-    OpImage = 100,
-    OpImageQueryFormat = 101,
-    OpImageQueryOrder = 102,
-    OpImageQuerySizeLod = 103,
-    OpImageQuerySize = 104,
-    OpImageQueryLod = 105,
-    OpImageQueryLevels = 106,
-    OpImageQuerySamples = 107,
-    OpConvertFToU = 109,
-    OpConvertFToS = 110,
-    OpConvertSToF = 111,
-    OpConvertUToF = 112,
-    OpUConvert = 113,
-    OpSConvert = 114,
-    OpFConvert = 115,
-    OpQuantizeToF16 = 116,
-    OpConvertPtrToU = 117,
-    OpSatConvertSToU = 118,
-    OpSatConvertUToS = 119,
-    OpConvertUToPtr = 120,
-    OpPtrCastToGeneric = 121,
-    OpGenericCastToPtr = 122,
-    OpGenericCastToPtrExplicit = 123,
-    OpBitcast = 124,
-    OpSNegate = 126,
-    OpFNegate = 127,
-    OpIAdd = 128,
-    OpFAdd = 129,
-    OpISub = 130,
-    OpFSub = 131,
-    OpIMul = 132,
-    OpFMul = 133,
-    OpUDiv = 134,
-    OpSDiv = 135,
-    OpFDiv = 136,
-    OpUMod = 137,
-    OpSRem = 138,
-    OpSMod = 139,
-    OpFRem = 140,
-    OpFMod = 141,
-    OpVectorTimesScalar = 142,
-    OpMatrixTimesScalar = 143,
-    OpVectorTimesMatrix = 144,
-    OpMatrixTimesVector = 145,
-    OpMatrixTimesMatrix = 146,
-    OpOuterProduct = 147,
-    OpDot = 148,
-    OpIAddCarry = 149,
-    OpISubBorrow = 150,
-    OpUMulExtended = 151,
-    OpSMulExtended = 152,
-    OpAny = 154,
-    OpAll = 155,
-    OpIsNan = 156,
-    OpIsInf = 157,
-    OpIsFinite = 158,
-    OpIsNormal = 159,
-    OpSignBitSet = 160,
-    OpLessOrGreater = 161,
-    OpOrdered = 162,
-    OpUnordered = 163,
-    OpLogicalEqual = 164,
-    OpLogicalNotEqual = 165,
-    OpLogicalOr = 166,
-    OpLogicalAnd = 167,
-    OpLogicalNot = 168,
-    OpSelect = 169,
-    OpIEqual = 170,
-    OpINotEqual = 171,
-    OpUGreaterThan = 172,
-    OpSGreaterThan = 173,
-    OpUGreaterThanEqual = 174,
-    OpSGreaterThanEqual = 175,
-    OpULessThan = 176,
-    OpSLessThan = 177,
-    OpULessThanEqual = 178,
-    OpSLessThanEqual = 179,
-    OpFOrdEqual = 180,
-    OpFUnordEqual = 181,
-    OpFOrdNotEqual = 182,
-    OpFUnordNotEqual = 183,
-    OpFOrdLessThan = 184,
-    OpFUnordLessThan = 185,
-    OpFOrdGreaterThan = 186,
-    OpFUnordGreaterThan = 187,
-    OpFOrdLessThanEqual = 188,
-    OpFUnordLessThanEqual = 189,
-    OpFOrdGreaterThanEqual = 190,
-    OpFUnordGreaterThanEqual = 191,
-    OpShiftRightLogical = 194,
-    OpShiftRightArithmetic = 195,
-    OpShiftLeftLogical = 196,
-    OpBitwiseOr = 197,
-    OpBitwiseXor = 198,
-    OpBitwiseAnd = 199,
-    OpNot = 200,
-    OpBitFieldInsert = 201,
-    OpBitFieldSExtract = 202,
-    OpBitFieldUExtract = 203,
-    OpBitReverse = 204,
-    OpBitCount = 205,
-    OpDPdx = 207,
-    OpDPdy = 208,
-    OpFwidth = 209,
-    OpDPdxFine = 210,
-    OpDPdyFine = 211,
-    OpFwidthFine = 212,
-    OpDPdxCoarse = 213,
-    OpDPdyCoarse = 214,
-    OpFwidthCoarse = 215,
-    OpEmitVertex = 218,
-    OpEndPrimitive = 219,
-    OpEmitStreamVertex = 220,
-    OpEndStreamPrimitive = 221,
-    OpControlBarrier = 224,
-    OpMemoryBarrier = 225,
-    OpAtomicLoad = 227,
-    OpAtomicStore = 228,
-    OpAtomicExchange = 229,
-    OpAtomicCompareExchange = 230,
-    OpAtomicCompareExchangeWeak = 231,
-    OpAtomicIIncrement = 232,
-    OpAtomicIDecrement = 233,
-    OpAtomicIAdd = 234,
-    OpAtomicISub = 235,
-    OpAtomicSMin = 236,
-    OpAtomicUMin = 237,
-    OpAtomicSMax = 238,
-    OpAtomicUMax = 239,
-    OpAtomicAnd = 240,
-    OpAtomicOr = 241,
-    OpAtomicXor = 242,
-    OpPhi = 245,
-    OpLoopMerge = 246,
-    OpSelectionMerge = 247,
-    OpLabel = 248,
-    OpBranch = 249,
-    OpBranchConditional = 250,
-    OpSwitch = 251,
-    OpKill = 252,
-    OpReturn = 253,
-    OpReturnValue = 254,
-    OpUnreachable = 255,
-    OpLifetimeStart = 256,
-    OpLifetimeStop = 257,
-    OpGroupAsyncCopy = 259,
-    OpGroupWaitEvents = 260,
-    OpGroupAll = 261,
-    OpGroupAny = 262,
-    OpGroupBroadcast = 263,
-    OpGroupIAdd = 264,
-    OpGroupFAdd = 265,
-    OpGroupFMin = 266,
-    OpGroupUMin = 267,
-    OpGroupSMin = 268,
-    OpGroupFMax = 269,
-    OpGroupUMax = 270,
-    OpGroupSMax = 271,
-    OpReadPipe = 274,
-    OpWritePipe = 275,
-    OpReservedReadPipe = 276,
-    OpReservedWritePipe = 277,
-    OpReserveReadPipePackets = 278,
-    OpReserveWritePipePackets = 279,
-    OpCommitReadPipe = 280,
-    OpCommitWritePipe = 281,
-    OpIsValidReserveId = 282,
-    OpGetNumPipePackets = 283,
-    OpGetMaxPipePackets = 284,
-    OpGroupReserveReadPipePackets = 285,
-    OpGroupReserveWritePipePackets = 286,
-    OpGroupCommitReadPipe = 287,
-    OpGroupCommitWritePipe = 288,
-    OpEnqueueMarker = 291,
-    OpEnqueueKernel = 292,
-    OpGetKernelNDrangeSubGroupCount = 293,
-    OpGetKernelNDrangeMaxSubGroupSize = 294,
-    OpGetKernelWorkGroupSize = 295,
-    OpGetKernelPreferredWorkGroupSizeMultiple = 296,
-    OpRetainEvent = 297,
-    OpReleaseEvent = 298,
-    OpCreateUserEvent = 299,
-    OpIsValidEvent = 300,
-    OpSetUserEventStatus = 301,
-    OpCaptureEventProfilingInfo = 302,
-    OpGetDefaultQueue = 303,
-    OpBuildNDRange = 304,
-    OpImageSparseSampleImplicitLod = 305,
-    OpImageSparseSampleExplicitLod = 306,
-    OpImageSparseSampleDrefImplicitLod = 307,
-    OpImageSparseSampleDrefExplicitLod = 308,
-    OpImageSparseSampleProjImplicitLod = 309,
-    OpImageSparseSampleProjExplicitLod = 310,
-    OpImageSparseSampleProjDrefImplicitLod = 311,
-    OpImageSparseSampleProjDrefExplicitLod = 312,
-    OpImageSparseFetch = 313,
-    OpImageSparseGather = 314,
-    OpImageSparseDrefGather = 315,
-    OpImageSparseTexelsResident = 316,
-    OpNoLine = 317,
-    OpAtomicFlagTestAndSet = 318,
-    OpAtomicFlagClear = 319,
-    OpImageSparseRead = 320,
-    OpSizeOf = 321,
-    OpTypePipeStorage = 322,
-    OpConstantPipeStorage = 323,
-    OpCreatePipeFromPipeStorage = 324,
-    OpGetKernelLocalSizeForSubgroupCount = 325,
-    OpGetKernelMaxNumSubgroups = 326,
-    OpTypeNamedBarrier = 327,
-    OpNamedBarrierInitialize = 328,
-    OpMemoryNamedBarrier = 329,
-    OpModuleProcessed = 330,
-    OpExecutionModeId = 331,
-    OpDecorateId = 332,
-    OpGroupNonUniformElect = 333,
-    OpGroupNonUniformAll = 334,
-    OpGroupNonUniformAny = 335,
-    OpGroupNonUniformAllEqual = 336,
-    OpGroupNonUniformBroadcast = 337,
-    OpGroupNonUniformBroadcastFirst = 338,
-    OpGroupNonUniformBallot = 339,
-    OpGroupNonUniformInverseBallot = 340,
-    OpGroupNonUniformBallotBitExtract = 341,
-    OpGroupNonUniformBallotBitCount = 342,
-    OpGroupNonUniformBallotFindLSB = 343,
-    OpGroupNonUniformBallotFindMSB = 344,
-    OpGroupNonUniformShuffle = 345,
-    OpGroupNonUniformShuffleXor = 346,
-    OpGroupNonUniformShuffleUp = 347,
-    OpGroupNonUniformShuffleDown = 348,
-    OpGroupNonUniformIAdd = 349,
-    OpGroupNonUniformFAdd = 350,
-    OpGroupNonUniformIMul = 351,
-    OpGroupNonUniformFMul = 352,
-    OpGroupNonUniformSMin = 353,
-    OpGroupNonUniformUMin = 354,
-    OpGroupNonUniformFMin = 355,
-    OpGroupNonUniformSMax = 356,
-    OpGroupNonUniformUMax = 357,
-    OpGroupNonUniformFMax = 358,
-    OpGroupNonUniformBitwiseAnd = 359,
-    OpGroupNonUniformBitwiseOr = 360,
-    OpGroupNonUniformBitwiseXor = 361,
-    OpGroupNonUniformLogicalAnd = 362,
-    OpGroupNonUniformLogicalOr = 363,
-    OpGroupNonUniformLogicalXor = 364,
-    OpGroupNonUniformQuadBroadcast = 365,
-    OpGroupNonUniformQuadSwap = 366,
-    OpCopyLogical = 400,
-    OpPtrEqual = 401,
-    OpPtrNotEqual = 402,
-    OpPtrDiff = 403,
-    OpColorAttachmentReadEXT = 4160,
-    OpDepthAttachmentReadEXT = 4161,
-    OpStencilAttachmentReadEXT = 4162,
-    OpTerminateInvocation = 4416,
-    OpSubgroupBallotKHR = 4421,
-    OpSubgroupFirstInvocationKHR = 4422,
-    OpSubgroupAllKHR = 4428,
-    OpSubgroupAnyKHR = 4429,
-    OpSubgroupAllEqualKHR = 4430,
-    OpGroupNonUniformRotateKHR = 4431,
-    OpSubgroupReadInvocationKHR = 4432,
-    OpTraceRayKHR = 4445,
-    OpExecuteCallableKHR = 4446,
-    OpConvertUToAccelerationStructureKHR = 4447,
-    OpIgnoreIntersectionKHR = 4448,
-    OpTerminateRayKHR = 4449,
-    OpSDot = 4450,
-    OpSDotKHR = 4450,
-    OpUDot = 4451,
-    OpUDotKHR = 4451,
-    OpSUDot = 4452,
-    OpSUDotKHR = 4452,
-    OpSDotAccSat = 4453,
-    OpSDotAccSatKHR = 4453,
-    OpUDotAccSat = 4454,
-    OpUDotAccSatKHR = 4454,
-    OpSUDotAccSat = 4455,
-    OpSUDotAccSatKHR = 4455,
-    OpTypeCooperativeMatrixKHR = 4456,
-    OpCooperativeMatrixLoadKHR = 4457,
-    OpCooperativeMatrixStoreKHR = 4458,
-    OpCooperativeMatrixMulAddKHR = 4459,
-    OpCooperativeMatrixLengthKHR = 4460,
-    OpTypeRayQueryKHR = 4472,
-    OpRayQueryInitializeKHR = 4473,
-    OpRayQueryTerminateKHR = 4474,
-    OpRayQueryGenerateIntersectionKHR = 4475,
-    OpRayQueryConfirmIntersectionKHR = 4476,
-    OpRayQueryProceedKHR = 4477,
-    OpRayQueryGetIntersectionTypeKHR = 4479,
-    OpImageSampleWeightedQCOM = 4480,
-    OpImageBoxFilterQCOM = 4481,
-    OpImageBlockMatchSSDQCOM = 4482,
-    OpImageBlockMatchSADQCOM = 4483,
-    OpImageBlockMatchWindowSSDQCOM = 4500,
-    OpImageBlockMatchWindowSADQCOM = 4501,
-    OpImageBlockMatchGatherSSDQCOM = 4502,
-    OpImageBlockMatchGatherSADQCOM = 4503,
-    OpGroupIAddNonUniformAMD = 5000,
-    OpGroupFAddNonUniformAMD = 5001,
-    OpGroupFMinNonUniformAMD = 5002,
-    OpGroupUMinNonUniformAMD = 5003,
-    OpGroupSMinNonUniformAMD = 5004,
-    OpGroupFMaxNonUniformAMD = 5005,
-    OpGroupUMaxNonUniformAMD = 5006,
-    OpGroupSMaxNonUniformAMD = 5007,
-    OpFragmentMaskFetchAMD = 5011,
-    OpFragmentFetchAMD = 5012,
-    OpReadClockKHR = 5056,
-    OpGroupNonUniformQuadAllKHR = 5110,
-    OpGroupNonUniformQuadAnyKHR = 5111,
-    OpHitObjectRecordHitMotionNV = 5249,
-    OpHitObjectRecordHitWithIndexMotionNV = 5250,
-    OpHitObjectRecordMissMotionNV = 5251,
-    OpHitObjectGetWorldToObjectNV = 5252,
-    OpHitObjectGetObjectToWorldNV = 5253,
-    OpHitObjectGetObjectRayDirectionNV = 5254,
-    OpHitObjectGetObjectRayOriginNV = 5255,
-    OpHitObjectTraceRayMotionNV = 5256,
-    OpHitObjectGetShaderRecordBufferHandleNV = 5257,
-    OpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
-    OpHitObjectRecordEmptyNV = 5259,
-    OpHitObjectTraceRayNV = 5260,
-    OpHitObjectRecordHitNV = 5261,
-    OpHitObjectRecordHitWithIndexNV = 5262,
-    OpHitObjectRecordMissNV = 5263,
-    OpHitObjectExecuteShaderNV = 5264,
-    OpHitObjectGetCurrentTimeNV = 5265,
-    OpHitObjectGetAttributesNV = 5266,
-    OpHitObjectGetHitKindNV = 5267,
-    OpHitObjectGetPrimitiveIndexNV = 5268,
-    OpHitObjectGetGeometryIndexNV = 5269,
-    OpHitObjectGetInstanceIdNV = 5270,
-    OpHitObjectGetInstanceCustomIndexNV = 5271,
-    OpHitObjectGetWorldRayDirectionNV = 5272,
-    OpHitObjectGetWorldRayOriginNV = 5273,
-    OpHitObjectGetRayTMaxNV = 5274,
-    OpHitObjectGetRayTMinNV = 5275,
-    OpHitObjectIsEmptyNV = 5276,
-    OpHitObjectIsHitNV = 5277,
-    OpHitObjectIsMissNV = 5278,
-    OpReorderThreadWithHitObjectNV = 5279,
-    OpReorderThreadWithHintNV = 5280,
-    OpTypeHitObjectNV = 5281,
-    OpImageSampleFootprintNV = 5283,
-    OpEmitMeshTasksEXT = 5294,
-    OpSetMeshOutputsEXT = 5295,
-    OpGroupNonUniformPartitionNV = 5296,
-    OpWritePackedPrimitiveIndices4x8NV = 5299,
-    OpFetchMicroTriangleVertexPositionNV = 5300,
-    OpFetchMicroTriangleVertexBarycentricNV = 5301,
-    OpReportIntersectionKHR = 5334,
-    OpReportIntersectionNV = 5334,
-    OpIgnoreIntersectionNV = 5335,
-    OpTerminateRayNV = 5336,
-    OpTraceNV = 5337,
-    OpTraceMotionNV = 5338,
-    OpTraceRayMotionNV = 5339,
-    OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
-    OpTypeAccelerationStructureKHR = 5341,
-    OpTypeAccelerationStructureNV = 5341,
-    OpExecuteCallableNV = 5344,
-    OpTypeCooperativeMatrixNV = 5358,
-    OpCooperativeMatrixLoadNV = 5359,
-    OpCooperativeMatrixStoreNV = 5360,
-    OpCooperativeMatrixMulAddNV = 5361,
-    OpCooperativeMatrixLengthNV = 5362,
-    OpBeginInvocationInterlockEXT = 5364,
-    OpEndInvocationInterlockEXT = 5365,
-    OpDemoteToHelperInvocation = 5380,
-    OpDemoteToHelperInvocationEXT = 5380,
-    OpIsHelperInvocationEXT = 5381,
-    OpConvertUToImageNV = 5391,
-    OpConvertUToSamplerNV = 5392,
-    OpConvertImageToUNV = 5393,
-    OpConvertSamplerToUNV = 5394,
-    OpConvertUToSampledImageNV = 5395,
-    OpConvertSampledImageToUNV = 5396,
-    OpSamplerImageAddressingModeNV = 5397,
-    OpSubgroupShuffleINTEL = 5571,
-    OpSubgroupShuffleDownINTEL = 5572,
-    OpSubgroupShuffleUpINTEL = 5573,
-    OpSubgroupShuffleXorINTEL = 5574,
-    OpSubgroupBlockReadINTEL = 5575,
-    OpSubgroupBlockWriteINTEL = 5576,
-    OpSubgroupImageBlockReadINTEL = 5577,
-    OpSubgroupImageBlockWriteINTEL = 5578,
-    OpSubgroupImageMediaBlockReadINTEL = 5580,
-    OpSubgroupImageMediaBlockWriteINTEL = 5581,
-    OpUCountLeadingZerosINTEL = 5585,
-    OpUCountTrailingZerosINTEL = 5586,
-    OpAbsISubINTEL = 5587,
-    OpAbsUSubINTEL = 5588,
-    OpIAddSatINTEL = 5589,
-    OpUAddSatINTEL = 5590,
-    OpIAverageINTEL = 5591,
-    OpUAverageINTEL = 5592,
-    OpIAverageRoundedINTEL = 5593,
-    OpUAverageRoundedINTEL = 5594,
-    OpISubSatINTEL = 5595,
-    OpUSubSatINTEL = 5596,
-    OpIMul32x16INTEL = 5597,
-    OpUMul32x16INTEL = 5598,
-    OpConstantFunctionPointerINTEL = 5600,
-    OpFunctionPointerCallINTEL = 5601,
-    OpAsmTargetINTEL = 5609,
-    OpAsmINTEL = 5610,
-    OpAsmCallINTEL = 5611,
-    OpAtomicFMinEXT = 5614,
-    OpAtomicFMaxEXT = 5615,
-    OpAssumeTrueKHR = 5630,
-    OpExpectKHR = 5631,
-    OpDecorateString = 5632,
-    OpDecorateStringGOOGLE = 5632,
-    OpMemberDecorateString = 5633,
-    OpMemberDecorateStringGOOGLE = 5633,
-    OpVmeImageINTEL = 5699,
-    OpTypeVmeImageINTEL = 5700,
-    OpTypeAvcImePayloadINTEL = 5701,
-    OpTypeAvcRefPayloadINTEL = 5702,
-    OpTypeAvcSicPayloadINTEL = 5703,
-    OpTypeAvcMcePayloadINTEL = 5704,
-    OpTypeAvcMceResultINTEL = 5705,
-    OpTypeAvcImeResultINTEL = 5706,
-    OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
-    OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
-    OpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
-    OpTypeAvcImeDualReferenceStreaminINTEL = 5710,
-    OpTypeAvcRefResultINTEL = 5711,
-    OpTypeAvcSicResultINTEL = 5712,
-    OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
-    OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
-    OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
-    OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
-    OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
-    OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
-    OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
-    OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
-    OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
-    OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
-    OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
-    OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
-    OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
-    OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
-    OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
-    OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
-    OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
-    OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
-    OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
-    OpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
-    OpSubgroupAvcMceConvertToImeResultINTEL = 5733,
-    OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
-    OpSubgroupAvcMceConvertToRefResultINTEL = 5735,
-    OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
-    OpSubgroupAvcMceConvertToSicResultINTEL = 5737,
-    OpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
-    OpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
-    OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
-    OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
-    OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
-    OpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
-    OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
-    OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
-    OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
-    OpSubgroupAvcImeInitializeINTEL = 5747,
-    OpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
-    OpSubgroupAvcImeSetDualReferenceINTEL = 5749,
-    OpSubgroupAvcImeRefWindowSizeINTEL = 5750,
-    OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
-    OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
-    OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
-    OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
-    OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
-    OpSubgroupAvcImeSetWeightedSadINTEL = 5756,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
-    OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
-    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
-    OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
-    OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
-    OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
-    OpSubgroupAvcImeConvertToMceResultINTEL = 5765,
-    OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
-    OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
-    OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
-    OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
-    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
-    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
-    OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
-    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
-    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
-    OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
-    OpSubgroupAvcImeGetBorderReachedINTEL = 5776,
-    OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
-    OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
-    OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
-    OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
-    OpSubgroupAvcFmeInitializeINTEL = 5781,
-    OpSubgroupAvcBmeInitializeINTEL = 5782,
-    OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
-    OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
-    OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
-    OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
-    OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
-    OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
-    OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
-    OpSubgroupAvcRefConvertToMceResultINTEL = 5790,
-    OpSubgroupAvcSicInitializeINTEL = 5791,
-    OpSubgroupAvcSicConfigureSkcINTEL = 5792,
-    OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
-    OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
-    OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
-    OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
-    OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
-    OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
-    OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
-    OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
-    OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
-    OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
-    OpSubgroupAvcSicEvaluateIpeINTEL = 5803,
-    OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
-    OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
-    OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
-    OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
-    OpSubgroupAvcSicConvertToMceResultINTEL = 5808,
-    OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
-    OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
-    OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
-    OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
-    OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
-    OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
-    OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
-    OpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
-    OpVariableLengthArrayINTEL = 5818,
-    OpSaveMemoryINTEL = 5819,
-    OpRestoreMemoryINTEL = 5820,
-    OpArbitraryFloatSinCosPiINTEL = 5840,
-    OpArbitraryFloatCastINTEL = 5841,
-    OpArbitraryFloatCastFromIntINTEL = 5842,
-    OpArbitraryFloatCastToIntINTEL = 5843,
-    OpArbitraryFloatAddINTEL = 5846,
-    OpArbitraryFloatSubINTEL = 5847,
-    OpArbitraryFloatMulINTEL = 5848,
-    OpArbitraryFloatDivINTEL = 5849,
-    OpArbitraryFloatGTINTEL = 5850,
-    OpArbitraryFloatGEINTEL = 5851,
-    OpArbitraryFloatLTINTEL = 5852,
-    OpArbitraryFloatLEINTEL = 5853,
-    OpArbitraryFloatEQINTEL = 5854,
-    OpArbitraryFloatRecipINTEL = 5855,
-    OpArbitraryFloatRSqrtINTEL = 5856,
-    OpArbitraryFloatCbrtINTEL = 5857,
-    OpArbitraryFloatHypotINTEL = 5858,
-    OpArbitraryFloatSqrtINTEL = 5859,
-    OpArbitraryFloatLogINTEL = 5860,
-    OpArbitraryFloatLog2INTEL = 5861,
-    OpArbitraryFloatLog10INTEL = 5862,
-    OpArbitraryFloatLog1pINTEL = 5863,
-    OpArbitraryFloatExpINTEL = 5864,
-    OpArbitraryFloatExp2INTEL = 5865,
-    OpArbitraryFloatExp10INTEL = 5866,
-    OpArbitraryFloatExpm1INTEL = 5867,
-    OpArbitraryFloatSinINTEL = 5868,
-    OpArbitraryFloatCosINTEL = 5869,
-    OpArbitraryFloatSinCosINTEL = 5870,
-    OpArbitraryFloatSinPiINTEL = 5871,
-    OpArbitraryFloatCosPiINTEL = 5872,
-    OpArbitraryFloatASinINTEL = 5873,
-    OpArbitraryFloatASinPiINTEL = 5874,
-    OpArbitraryFloatACosINTEL = 5875,
-    OpArbitraryFloatACosPiINTEL = 5876,
-    OpArbitraryFloatATanINTEL = 5877,
-    OpArbitraryFloatATanPiINTEL = 5878,
-    OpArbitraryFloatATan2INTEL = 5879,
-    OpArbitraryFloatPowINTEL = 5880,
-    OpArbitraryFloatPowRINTEL = 5881,
-    OpArbitraryFloatPowNINTEL = 5882,
-    OpLoopControlINTEL = 5887,
-    OpAliasDomainDeclINTEL = 5911,
-    OpAliasScopeDeclINTEL = 5912,
-    OpAliasScopeListDeclINTEL = 5913,
-    OpFixedSqrtINTEL = 5923,
-    OpFixedRecipINTEL = 5924,
-    OpFixedRsqrtINTEL = 5925,
-    OpFixedSinINTEL = 5926,
-    OpFixedCosINTEL = 5927,
-    OpFixedSinCosINTEL = 5928,
-    OpFixedSinPiINTEL = 5929,
-    OpFixedCosPiINTEL = 5930,
-    OpFixedSinCosPiINTEL = 5931,
-    OpFixedLogINTEL = 5932,
-    OpFixedExpINTEL = 5933,
-    OpPtrCastToCrossWorkgroupINTEL = 5934,
-    OpCrossWorkgroupCastToPtrINTEL = 5938,
-    OpReadPipeBlockingINTEL = 5946,
-    OpWritePipeBlockingINTEL = 5947,
-    OpFPGARegINTEL = 5949,
-    OpRayQueryGetRayTMinKHR = 6016,
-    OpRayQueryGetRayFlagsKHR = 6017,
-    OpRayQueryGetIntersectionTKHR = 6018,
-    OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
-    OpRayQueryGetIntersectionInstanceIdKHR = 6020,
-    OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
-    OpRayQueryGetIntersectionGeometryIndexKHR = 6022,
-    OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
-    OpRayQueryGetIntersectionBarycentricsKHR = 6024,
-    OpRayQueryGetIntersectionFrontFaceKHR = 6025,
-    OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
-    OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
-    OpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
-    OpRayQueryGetWorldRayDirectionKHR = 6029,
-    OpRayQueryGetWorldRayOriginKHR = 6030,
-    OpRayQueryGetIntersectionObjectToWorldKHR = 6031,
-    OpRayQueryGetIntersectionWorldToObjectKHR = 6032,
-    OpAtomicFAddEXT = 6035,
-    OpTypeBufferSurfaceINTEL = 6086,
-    OpTypeStructContinuedINTEL = 6090,
-    OpConstantCompositeContinuedINTEL = 6091,
-    OpSpecConstantCompositeContinuedINTEL = 6092,
-    OpControlBarrierArriveINTEL = 6142,
-    OpControlBarrierWaitINTEL = 6143,
-    OpGroupIMulKHR = 6401,
-    OpGroupFMulKHR = 6402,
-    OpGroupBitwiseAndKHR = 6403,
-    OpGroupBitwiseOrKHR = 6404,
-    OpGroupBitwiseXorKHR = 6405,
-    OpGroupLogicalAndKHR = 6406,
-    OpGroupLogicalOrKHR = 6407,
-    OpGroupLogicalXorKHR = 6408,
-    OpMax = 0x7fffffff,
-};
-
-#ifdef SPV_ENABLE_UTILITY_CODE
-#ifndef __cplusplus
-#include <stdbool.h>
-#endif
-inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
-    *hasResult = *hasResultType = false;
-    switch (opcode) {
-    default: /* unknown opcode */ break;
-    case OpNop: *hasResult = false; *hasResultType = false; break;
-    case OpUndef: *hasResult = true; *hasResultType = true; break;
-    case OpSourceContinued: *hasResult = false; *hasResultType = false; break;
-    case OpSource: *hasResult = false; *hasResultType = false; break;
-    case OpSourceExtension: *hasResult = false; *hasResultType = false; break;
-    case OpName: *hasResult = false; *hasResultType = false; break;
-    case OpMemberName: *hasResult = false; *hasResultType = false; break;
-    case OpString: *hasResult = true; *hasResultType = false; break;
-    case OpLine: *hasResult = false; *hasResultType = false; break;
-    case OpExtension: *hasResult = false; *hasResultType = false; break;
-    case OpExtInstImport: *hasResult = true; *hasResultType = false; break;
-    case OpExtInst: *hasResult = true; *hasResultType = true; break;
-    case OpMemoryModel: *hasResult = false; *hasResultType = false; break;
-    case OpEntryPoint: *hasResult = false; *hasResultType = false; break;
-    case OpExecutionMode: *hasResult = false; *hasResultType = false; break;
-    case OpCapability: *hasResult = false; *hasResultType = false; break;
-    case OpTypeVoid: *hasResult = true; *hasResultType = false; break;
-    case OpTypeBool: *hasResult = true; *hasResultType = false; break;
-    case OpTypeInt: *hasResult = true; *hasResultType = false; break;
-    case OpTypeFloat: *hasResult = true; *hasResultType = false; break;
-    case OpTypeVector: *hasResult = true; *hasResultType = false; break;
-    case OpTypeMatrix: *hasResult = true; *hasResultType = false; break;
-    case OpTypeImage: *hasResult = true; *hasResultType = false; break;
-    case OpTypeSampler: *hasResult = true; *hasResultType = false; break;
-    case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
-    case OpTypeArray: *hasResult = true; *hasResultType = false; break;
-    case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
-    case OpTypeStruct: *hasResult = true; *hasResultType = false; break;
-    case OpTypeOpaque: *hasResult = true; *hasResultType = false; break;
-    case OpTypePointer: *hasResult = true; *hasResultType = false; break;
-    case OpTypeFunction: *hasResult = true; *hasResultType = false; break;
-    case OpTypeEvent: *hasResult = true; *hasResultType = false; break;
-    case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
-    case OpTypeReserveId: *hasResult = true; *hasResultType = false; break;
-    case OpTypeQueue: *hasResult = true; *hasResultType = false; break;
-    case OpTypePipe: *hasResult = true; *hasResultType = false; break;
-    case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
-    case OpConstantTrue: *hasResult = true; *hasResultType = true; break;
-    case OpConstantFalse: *hasResult = true; *hasResultType = true; break;
-    case OpConstant: *hasResult = true; *hasResultType = true; break;
-    case OpConstantComposite: *hasResult = true; *hasResultType = true; break;
-    case OpConstantSampler: *hasResult = true; *hasResultType = true; break;
-    case OpConstantNull: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstant: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
-    case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
-    case OpFunction: *hasResult = true; *hasResultType = true; break;
-    case OpFunctionParameter: *hasResult = true; *hasResultType = true; break;
-    case OpFunctionEnd: *hasResult = false; *hasResultType = false; break;
-    case OpFunctionCall: *hasResult = true; *hasResultType = true; break;
-    case OpVariable: *hasResult = true; *hasResultType = true; break;
-    case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
-    case OpLoad: *hasResult = true; *hasResultType = true; break;
-    case OpStore: *hasResult = false; *hasResultType = false; break;
-    case OpCopyMemory: *hasResult = false; *hasResultType = false; break;
-    case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
-    case OpAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpArrayLength: *hasResult = true; *hasResultType = true; break;
-    case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
-    case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
-    case OpDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpMemberDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpDecorationGroup: *hasResult = true; *hasResultType = false; break;
-    case OpGroupDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
-    case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
-    case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
-    case OpVectorShuffle: *hasResult = true; *hasResultType = true; break;
-    case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
-    case OpCompositeExtract: *hasResult = true; *hasResultType = true; break;
-    case OpCompositeInsert: *hasResult = true; *hasResultType = true; break;
-    case OpCopyObject: *hasResult = true; *hasResultType = true; break;
-    case OpTranspose: *hasResult = true; *hasResultType = true; break;
-    case OpSampledImage: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageFetch: *hasResult = true; *hasResultType = true; break;
-    case OpImageGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageDrefGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageRead: *hasResult = true; *hasResultType = true; break;
-    case OpImageWrite: *hasResult = false; *hasResultType = false; break;
-    case OpImage: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
-    case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageQuerySize: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
-    case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
-    case OpConvertFToU: *hasResult = true; *hasResultType = true; break;
-    case OpConvertFToS: *hasResult = true; *hasResultType = true; break;
-    case OpConvertSToF: *hasResult = true; *hasResultType = true; break;
-    case OpConvertUToF: *hasResult = true; *hasResultType = true; break;
-    case OpUConvert: *hasResult = true; *hasResultType = true; break;
-    case OpSConvert: *hasResult = true; *hasResultType = true; break;
-    case OpFConvert: *hasResult = true; *hasResultType = true; break;
-    case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
-    case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
-    case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
-    case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
-    case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
-    case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
-    case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
-    case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
-    case OpBitcast: *hasResult = true; *hasResultType = true; break;
-    case OpSNegate: *hasResult = true; *hasResultType = true; break;
-    case OpFNegate: *hasResult = true; *hasResultType = true; break;
-    case OpIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpFAdd: *hasResult = true; *hasResultType = true; break;
-    case OpISub: *hasResult = true; *hasResultType = true; break;
-    case OpFSub: *hasResult = true; *hasResultType = true; break;
-    case OpIMul: *hasResult = true; *hasResultType = true; break;
-    case OpFMul: *hasResult = true; *hasResultType = true; break;
-    case OpUDiv: *hasResult = true; *hasResultType = true; break;
-    case OpSDiv: *hasResult = true; *hasResultType = true; break;
-    case OpFDiv: *hasResult = true; *hasResultType = true; break;
-    case OpUMod: *hasResult = true; *hasResultType = true; break;
-    case OpSRem: *hasResult = true; *hasResultType = true; break;
-    case OpSMod: *hasResult = true; *hasResultType = true; break;
-    case OpFRem: *hasResult = true; *hasResultType = true; break;
-    case OpFMod: *hasResult = true; *hasResultType = true; break;
-    case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
-    case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
-    case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
-    case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
-    case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
-    case OpOuterProduct: *hasResult = true; *hasResultType = true; break;
-    case OpDot: *hasResult = true; *hasResultType = true; break;
-    case OpIAddCarry: *hasResult = true; *hasResultType = true; break;
-    case OpISubBorrow: *hasResult = true; *hasResultType = true; break;
-    case OpUMulExtended: *hasResult = true; *hasResultType = true; break;
-    case OpSMulExtended: *hasResult = true; *hasResultType = true; break;
-    case OpAny: *hasResult = true; *hasResultType = true; break;
-    case OpAll: *hasResult = true; *hasResultType = true; break;
-    case OpIsNan: *hasResult = true; *hasResultType = true; break;
-    case OpIsInf: *hasResult = true; *hasResultType = true; break;
-    case OpIsFinite: *hasResult = true; *hasResultType = true; break;
-    case OpIsNormal: *hasResult = true; *hasResultType = true; break;
-    case OpSignBitSet: *hasResult = true; *hasResultType = true; break;
-    case OpLessOrGreater: *hasResult = true; *hasResultType = true; break;
-    case OpOrdered: *hasResult = true; *hasResultType = true; break;
-    case OpUnordered: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalEqual: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalOr: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalAnd: *hasResult = true; *hasResultType = true; break;
-    case OpLogicalNot: *hasResult = true; *hasResultType = true; break;
-    case OpSelect: *hasResult = true; *hasResultType = true; break;
-    case OpIEqual: *hasResult = true; *hasResultType = true; break;
-    case OpINotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpUGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpSGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpULessThan: *hasResult = true; *hasResultType = true; break;
-    case OpSLessThan: *hasResult = true; *hasResultType = true; break;
-    case OpULessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
-    case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
-    case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
-    case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
-    case OpBitwiseOr: *hasResult = true; *hasResultType = true; break;
-    case OpBitwiseXor: *hasResult = true; *hasResultType = true; break;
-    case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
-    case OpNot: *hasResult = true; *hasResultType = true; break;
-    case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
-    case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
-    case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
-    case OpBitReverse: *hasResult = true; *hasResultType = true; break;
-    case OpBitCount: *hasResult = true; *hasResultType = true; break;
-    case OpDPdx: *hasResult = true; *hasResultType = true; break;
-    case OpDPdy: *hasResult = true; *hasResultType = true; break;
-    case OpFwidth: *hasResult = true; *hasResultType = true; break;
-    case OpDPdxFine: *hasResult = true; *hasResultType = true; break;
-    case OpDPdyFine: *hasResult = true; *hasResultType = true; break;
-    case OpFwidthFine: *hasResult = true; *hasResultType = true; break;
-    case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
-    case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
-    case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
-    case OpEmitVertex: *hasResult = false; *hasResultType = false; break;
-    case OpEndPrimitive: *hasResult = false; *hasResultType = false; break;
-    case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
-    case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
-    case OpControlBarrier: *hasResult = false; *hasResultType = false; break;
-    case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
-    case OpAtomicLoad: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicStore: *hasResult = false; *hasResultType = false; break;
-    case OpAtomicExchange: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicISub: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicSMin: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicUMin: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicSMax: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicUMax: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicAnd: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicOr: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicXor: *hasResult = true; *hasResultType = true; break;
-    case OpPhi: *hasResult = true; *hasResultType = true; break;
-    case OpLoopMerge: *hasResult = false; *hasResultType = false; break;
-    case OpSelectionMerge: *hasResult = false; *hasResultType = false; break;
-    case OpLabel: *hasResult = true; *hasResultType = false; break;
-    case OpBranch: *hasResult = false; *hasResultType = false; break;
-    case OpBranchConditional: *hasResult = false; *hasResultType = false; break;
-    case OpSwitch: *hasResult = false; *hasResultType = false; break;
-    case OpKill: *hasResult = false; *hasResultType = false; break;
-    case OpReturn: *hasResult = false; *hasResultType = false; break;
-    case OpReturnValue: *hasResult = false; *hasResultType = false; break;
-    case OpUnreachable: *hasResult = false; *hasResultType = false; break;
-    case OpLifetimeStart: *hasResult = false; *hasResultType = false; break;
-    case OpLifetimeStop: *hasResult = false; *hasResultType = false; break;
-    case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
-    case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
-    case OpGroupAll: *hasResult = true; *hasResultType = true; break;
-    case OpGroupAny: *hasResult = true; *hasResultType = true; break;
-    case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
-    case OpGroupIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupUMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupUMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMax: *hasResult = true; *hasResultType = true; break;
-    case OpReadPipe: *hasResult = true; *hasResultType = true; break;
-    case OpWritePipe: *hasResult = true; *hasResultType = true; break;
-    case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
-    case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
-    case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
-    case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
-    case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
-    case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
-    case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
-    case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
-    case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
-    case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
-    case OpRetainEvent: *hasResult = false; *hasResultType = false; break;
-    case OpReleaseEvent: *hasResult = false; *hasResultType = false; break;
-    case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
-    case OpIsValidEvent: *hasResult = true; *hasResultType = true; break;
-    case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
-    case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
-    case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
-    case OpBuildNDRange: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
-    case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
-    case OpNoLine: *hasResult = false; *hasResultType = false; break;
-    case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
-    case OpImageSparseRead: *hasResult = true; *hasResultType = true; break;
-    case OpSizeOf: *hasResult = true; *hasResultType = true; break;
-    case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
-    case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
-    case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
-    case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
-    case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
-    case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
-    case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
-    case OpModuleProcessed: *hasResult = false; *hasResultType = false; break;
-    case OpExecutionModeId: *hasResult = false; *hasResultType = false; break;
-    case OpDecorateId: *hasResult = false; *hasResultType = false; break;
-    case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
-    case OpCopyLogical: *hasResult = true; *hasResultType = true; break;
-    case OpPtrEqual: *hasResult = true; *hasResultType = true; break;
-    case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
-    case OpPtrDiff: *hasResult = true; *hasResultType = true; break;
-    case OpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
-    case OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
-    case OpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
-    case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
-    case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
-    case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
-    case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
-    case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
-    case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
-    case OpSDot: *hasResult = true; *hasResultType = true; break;
-    case OpUDot: *hasResult = true; *hasResultType = true; break;
-    case OpSUDot: *hasResult = true; *hasResultType = true; break;
-    case OpSDotAccSat: *hasResult = true; *hasResultType = true; break;
-    case OpUDotAccSat: *hasResult = true; *hasResultType = true; break;
-    case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
-    case OpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break;
-    case OpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break;
-    case OpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break;
-    case OpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break;
-    case OpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break;
-    case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
-    case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break;
-    case OpImageSampleWeightedQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break;
-    case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
-    case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
-    case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
-    case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break;
-    case OpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break;
-    case OpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break;
-    case OpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break;
-    case OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break;
-    case OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break;
-    case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
-    case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;
-    case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;
-    case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
-    case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
-    case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
-    case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
-    case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
-    case OpTraceNV: *hasResult = false; *hasResultType = false; break;
-    case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
-    case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break;
-    case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
-    case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
-    case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
-    case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
-    case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
-    case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
-    case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
-    case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
-    case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
-    case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
-    case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
-    case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
-    case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
-    case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
-    case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;
-    case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
-    case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
-    case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
-    case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAsmINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;
-    case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;
-    case OpExpectKHR: *hasResult = true; *hasResultType = true; break;
-    case OpDecorateString: *hasResult = false; *hasResultType = false; break;
-    case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
-    case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
-    case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
-    case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
-    case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
-    case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break;
-    case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break;
-    case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break;
-    }
-}
-#endif /* SPV_ENABLE_UTILITY_CODE */
-
-// Overload bitwise operators for mask bit combining
-
-inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); }
-inline ImageOperandsMask operator&(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) & unsigned(b)); }
-inline ImageOperandsMask operator^(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) ^ unsigned(b)); }
-inline ImageOperandsMask operator~(ImageOperandsMask a) { return ImageOperandsMask(~unsigned(a)); }
-inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); }
-inline FPFastMathModeMask operator&(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) & unsigned(b)); }
-inline FPFastMathModeMask operator^(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) ^ unsigned(b)); }
-inline FPFastMathModeMask operator~(FPFastMathModeMask a) { return FPFastMathModeMask(~unsigned(a)); }
-inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); }
-inline SelectionControlMask operator&(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) & unsigned(b)); }
-inline SelectionControlMask operator^(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) ^ unsigned(b)); }
-inline SelectionControlMask operator~(SelectionControlMask a) { return SelectionControlMask(~unsigned(a)); }
-inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); }
-inline LoopControlMask operator&(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) & unsigned(b)); }
-inline LoopControlMask operator^(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) ^ unsigned(b)); }
-inline LoopControlMask operator~(LoopControlMask a) { return LoopControlMask(~unsigned(a)); }
-inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); }
-inline FunctionControlMask operator&(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) & unsigned(b)); }
-inline FunctionControlMask operator^(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) ^ unsigned(b)); }
-inline FunctionControlMask operator~(FunctionControlMask a) { return FunctionControlMask(~unsigned(a)); }
-inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); }
-inline MemorySemanticsMask operator&(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) & unsigned(b)); }
-inline MemorySemanticsMask operator^(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) ^ unsigned(b)); }
-inline MemorySemanticsMask operator~(MemorySemanticsMask a) { return MemorySemanticsMask(~unsigned(a)); }
-inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); }
-inline MemoryAccessMask operator&(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) & unsigned(b)); }
-inline MemoryAccessMask operator^(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) ^ unsigned(b)); }
-inline MemoryAccessMask operator~(MemoryAccessMask a) { return MemoryAccessMask(~unsigned(a)); }
-inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); }
-inline KernelProfilingInfoMask operator&(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) & unsigned(b)); }
-inline KernelProfilingInfoMask operator^(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) ^ unsigned(b)); }
-inline KernelProfilingInfoMask operator~(KernelProfilingInfoMask a) { return KernelProfilingInfoMask(~unsigned(a)); }
-inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); }
-inline RayFlagsMask operator&(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) & unsigned(b)); }
-inline RayFlagsMask operator^(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) ^ unsigned(b)); }
-inline RayFlagsMask operator~(RayFlagsMask a) { return RayFlagsMask(~unsigned(a)); }
-inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); }
-inline FragmentShadingRateMask operator&(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) & unsigned(b)); }
-inline FragmentShadingRateMask operator^(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) ^ unsigned(b)); }
-inline FragmentShadingRateMask operator~(FragmentShadingRateMask a) { return FragmentShadingRateMask(~unsigned(a)); }
-inline CooperativeMatrixOperandsMask operator|(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) | unsigned(b)); }
-inline CooperativeMatrixOperandsMask operator&(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) & unsigned(b)); }
-inline CooperativeMatrixOperandsMask operator^(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) ^ unsigned(b)); }
-inline CooperativeMatrixOperandsMask operator~(CooperativeMatrixOperandsMask a) { return CooperativeMatrixOperandsMask(~unsigned(a)); }
-
-}  // end namespace spv
-
-#endif  // #ifndef spirv_HPP
-

+ 21 - 0
thirdparty/re-spirv/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 renderbag and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 3183 - 0
thirdparty/re-spirv/re-spirv.cpp

@@ -0,0 +1,3183 @@
+//
+// re-spirv
+//
+// Copyright (c) 2024 renderbag and contributors. All rights reserved.
+// Licensed under the MIT license. See LICENSE file for details.
+//
+
+#include "re-spirv.h"
+
+#include <algorithm>
+#include <cassert>
+#include <cstdio>
+#include <cstring>
+#include <unordered_map>
+
+#define SPV_ENABLE_UTILITY_CODE
+
+#include "spirv/unified1/spirv.h"
+
+// Enables more extensive output on errors.
+#define RESPV_VERBOSE_ERRORS 0
+
+namespace respv {
+    // Common.
+    
+    static bool SpvIsSupported(SpvOp pOpCode) {
+        switch (pOpCode) {
+        case SpvOpUndef:
+        case SpvOpSource:
+        case SpvOpName:
+        case SpvOpMemberName:
+        case SpvOpExtension:
+        case SpvOpExtInstImport:
+        case SpvOpExtInst:
+        case SpvOpMemoryModel:
+        case SpvOpEntryPoint:
+        case SpvOpExecutionMode:
+        case SpvOpCapability:
+        case SpvOpTypeVoid:
+        case SpvOpTypeBool:
+        case SpvOpTypeInt:
+        case SpvOpTypeFloat:
+        case SpvOpTypeVector:
+        case SpvOpTypeMatrix:
+        case SpvOpTypeImage:
+        case SpvOpTypeSampler:
+        case SpvOpTypeSampledImage:
+        case SpvOpTypeArray:
+        case SpvOpTypeRuntimeArray:
+        case SpvOpTypeStruct:
+        case SpvOpTypePointer:
+        case SpvOpTypeFunction:
+        case SpvOpConstantTrue:
+        case SpvOpConstantFalse:
+        case SpvOpConstant:
+        case SpvOpConstantComposite:
+        case SpvOpConstantNull:
+        case SpvOpSpecConstantTrue:
+        case SpvOpSpecConstantFalse:
+        case SpvOpSpecConstant:
+        case SpvOpSpecConstantOp: 
+        case SpvOpFunction:
+        case SpvOpFunctionParameter:
+        case SpvOpFunctionEnd:
+        case SpvOpFunctionCall:
+        case SpvOpVariable:
+        case SpvOpImageTexelPointer:
+        case SpvOpLoad:
+        case SpvOpStore:
+        case SpvOpAccessChain:
+        case SpvOpDecorate:
+        case SpvOpMemberDecorate:
+        case SpvOpVectorShuffle:
+        case SpvOpCompositeConstruct:
+        case SpvOpCompositeExtract:
+        case SpvOpCompositeInsert:
+        case SpvOpCopyObject:
+        case SpvOpTranspose:
+        case SpvOpSampledImage:
+        case SpvOpImageSampleImplicitLod:
+        case SpvOpImageSampleExplicitLod:
+        case SpvOpImageSampleDrefImplicitLod:
+        case SpvOpImageSampleDrefExplicitLod:
+        case SpvOpImageSampleProjImplicitLod:
+        case SpvOpImageSampleProjExplicitLod:
+        case SpvOpImageSampleProjDrefImplicitLod:
+        case SpvOpImageSampleProjDrefExplicitLod:
+        case SpvOpImageFetch:
+        case SpvOpImageGather:
+        case SpvOpImageDrefGather:
+        case SpvOpImageRead:
+        case SpvOpImageWrite:
+        case SpvOpImage:
+        case SpvOpImageQuerySizeLod:
+        case SpvOpImageQueryLevels:
+        case SpvOpConvertFToU:
+        case SpvOpConvertFToS:
+        case SpvOpConvertSToF:
+        case SpvOpConvertUToF:
+        case SpvOpUConvert:
+        case SpvOpSConvert:
+        case SpvOpFConvert:
+        case SpvOpBitcast:
+        case SpvOpSNegate:
+        case SpvOpFNegate:
+        case SpvOpIAdd:
+        case SpvOpFAdd:
+        case SpvOpISub:
+        case SpvOpFSub:
+        case SpvOpIMul:
+        case SpvOpFMul:
+        case SpvOpUDiv:
+        case SpvOpSDiv:
+        case SpvOpFDiv:
+        case SpvOpUMod:
+        case SpvOpSRem:
+        case SpvOpSMod:
+        case SpvOpFRem:
+        case SpvOpFMod:
+        case SpvOpVectorTimesScalar:
+        case SpvOpMatrixTimesScalar:
+        case SpvOpVectorTimesMatrix:
+        case SpvOpMatrixTimesVector:
+        case SpvOpMatrixTimesMatrix:
+        case SpvOpOuterProduct:
+        case SpvOpDot:
+        case SpvOpIAddCarry:
+        case SpvOpISubBorrow:
+        case SpvOpUMulExtended:
+        case SpvOpSMulExtended:
+        case SpvOpAny:
+        case SpvOpAll:
+        case SpvOpIsNan:
+        case SpvOpIsInf:
+        case SpvOpIsFinite:
+        case SpvOpIsNormal:
+        case SpvOpLogicalEqual:
+        case SpvOpLogicalNotEqual:
+        case SpvOpLogicalOr:
+        case SpvOpLogicalAnd:
+        case SpvOpLogicalNot:
+        case SpvOpSelect:
+        case SpvOpIEqual:
+        case SpvOpINotEqual:
+        case SpvOpUGreaterThan:
+        case SpvOpSGreaterThan:
+        case SpvOpUGreaterThanEqual:
+        case SpvOpSGreaterThanEqual:
+        case SpvOpULessThan:
+        case SpvOpSLessThan:
+        case SpvOpULessThanEqual:
+        case SpvOpSLessThanEqual:
+        case SpvOpFOrdEqual:
+        case SpvOpFUnordEqual:
+        case SpvOpFOrdNotEqual:
+        case SpvOpFUnordNotEqual:
+        case SpvOpFOrdLessThan:
+        case SpvOpFUnordLessThan:
+        case SpvOpFOrdGreaterThan:
+        case SpvOpFUnordGreaterThan:
+        case SpvOpFOrdLessThanEqual:
+        case SpvOpFUnordLessThanEqual:
+        case SpvOpFOrdGreaterThanEqual:
+        case SpvOpFUnordGreaterThanEqual:
+        case SpvOpShiftRightLogical:
+        case SpvOpShiftRightArithmetic:
+        case SpvOpShiftLeftLogical:
+        case SpvOpBitwiseOr:
+        case SpvOpBitwiseXor:
+        case SpvOpBitwiseAnd:
+        case SpvOpNot:
+        case SpvOpBitFieldInsert:
+        case SpvOpBitFieldSExtract:
+        case SpvOpBitFieldUExtract:
+        case SpvOpBitReverse:
+        case SpvOpBitCount:
+        case SpvOpDPdx:
+        case SpvOpDPdy:
+        case SpvOpFwidth:
+        case SpvOpControlBarrier:
+        case SpvOpMemoryBarrier:
+        case SpvOpAtomicLoad:
+        case SpvOpAtomicStore:
+        case SpvOpAtomicExchange:
+        case SpvOpAtomicCompareExchange:
+        case SpvOpAtomicCompareExchangeWeak:
+        case SpvOpAtomicIIncrement:
+        case SpvOpAtomicIDecrement:
+        case SpvOpAtomicIAdd:
+        case SpvOpAtomicISub:
+        case SpvOpAtomicSMin:
+        case SpvOpAtomicUMin:
+        case SpvOpAtomicSMax:
+        case SpvOpAtomicUMax:
+        case SpvOpAtomicAnd:
+        case SpvOpAtomicOr:
+        case SpvOpAtomicXor:
+        case SpvOpPhi:
+        case SpvOpLoopMerge:
+        case SpvOpSelectionMerge:
+        case SpvOpLabel:
+        case SpvOpBranch:
+        case SpvOpBranchConditional:
+        case SpvOpSwitch:
+        case SpvOpKill:
+        case SpvOpReturn:
+        case SpvOpReturnValue:
+        case SpvOpUnreachable:
+        case SpvOpGroupNonUniformElect:
+        case SpvOpGroupNonUniformAll:
+        case SpvOpGroupNonUniformAny:
+        case SpvOpGroupNonUniformAllEqual:
+        case SpvOpGroupNonUniformBroadcast:
+        case SpvOpGroupNonUniformBroadcastFirst:
+        case SpvOpGroupNonUniformBallot:
+        case SpvOpGroupNonUniformInverseBallot:
+        case SpvOpGroupNonUniformBallotBitExtract:
+        case SpvOpGroupNonUniformBallotBitCount:
+        case SpvOpGroupNonUniformBallotFindLSB:
+        case SpvOpGroupNonUniformBallotFindMSB:
+        case SpvOpGroupNonUniformShuffle:
+        case SpvOpGroupNonUniformShuffleXor:
+        case SpvOpGroupNonUniformShuffleUp:
+        case SpvOpGroupNonUniformShuffleDown:
+        case SpvOpGroupNonUniformIAdd:
+        case SpvOpGroupNonUniformFAdd:
+        case SpvOpGroupNonUniformIMul:
+        case SpvOpGroupNonUniformFMul:
+        case SpvOpGroupNonUniformSMin:
+        case SpvOpGroupNonUniformUMin:
+        case SpvOpGroupNonUniformFMin:
+        case SpvOpGroupNonUniformSMax:
+        case SpvOpGroupNonUniformUMax:
+        case SpvOpGroupNonUniformFMax:
+        case SpvOpGroupNonUniformBitwiseAnd:
+        case SpvOpGroupNonUniformBitwiseOr:
+        case SpvOpGroupNonUniformBitwiseXor:
+        case SpvOpGroupNonUniformLogicalAnd:
+        case SpvOpGroupNonUniformLogicalOr:
+        case SpvOpGroupNonUniformLogicalXor:
+        case SpvOpGroupNonUniformQuadBroadcast:
+        case SpvOpGroupNonUniformQuadSwap:
+        case SpvOpCopyLogical:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    static bool SpvIsIgnored(SpvOp pOpCode) {
+        switch (pOpCode) {
+        case SpvOpSource:
+        case SpvOpName:
+        case SpvOpMemberName:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    static bool SpvHasOperands(SpvOp pOpCode, uint32_t &rOperandWordStart, uint32_t &rOperandWordCount, uint32_t &rOperandWordStride, uint32_t &rOperandWordSkip, bool &rOperandWordSkipString, bool pIncludePhi) {
+        switch (pOpCode) {
+        case SpvOpExecutionMode:
+        case SpvOpBranchConditional:
+        case SpvOpSwitch:
+        case SpvOpReturnValue:
+        case SpvOpDecorate:
+        case SpvOpMemberDecorate:
+            rOperandWordStart = 1;
+            rOperandWordCount = 1;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpStore:
+        case SpvOpMemoryBarrier:
+            rOperandWordStart = 1;
+            rOperandWordCount = 2;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpControlBarrier:
+            rOperandWordStart = 1;
+            rOperandWordCount = 3;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpTypeVector:
+        case SpvOpTypeMatrix:
+        case SpvOpTypeImage:
+        case SpvOpTypeSampledImage:
+        case SpvOpTypeRuntimeArray:
+            rOperandWordStart = 2;
+            rOperandWordCount = 1;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpTypeArray:
+            rOperandWordStart = 2;
+            rOperandWordCount = 2;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpTypeStruct:
+        case SpvOpTypeFunction:
+            rOperandWordStart = 2;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpEntryPoint:
+            rOperandWordStart = 2;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = 1;
+            rOperandWordSkipString = true;
+            return true;
+        case SpvOpTypePointer:
+        case SpvOpLoad:
+        case SpvOpCompositeExtract:
+        case SpvOpCopyObject:
+        case SpvOpTranspose:
+        case SpvOpImage:
+        case SpvOpImageQueryLevels:
+        case SpvOpConvertFToU:
+        case SpvOpConvertFToS:
+        case SpvOpConvertSToF:
+        case SpvOpConvertUToF:
+        case SpvOpUConvert:
+        case SpvOpSConvert:
+        case SpvOpFConvert:
+        case SpvOpBitcast:
+        case SpvOpSNegate:
+        case SpvOpFNegate:
+        case SpvOpAny:
+        case SpvOpAll:
+        case SpvOpIsNan:
+        case SpvOpIsInf:
+        case SpvOpIsFinite:
+        case SpvOpIsNormal:
+        case SpvOpLogicalNot:
+        case SpvOpNot:
+        case SpvOpBitReverse:
+        case SpvOpBitCount:
+        case SpvOpDPdx:
+        case SpvOpDPdy:
+        case SpvOpFwidth:
+        case SpvOpGroupNonUniformElect:
+        case SpvOpCopyLogical:
+            rOperandWordStart = 3;
+            rOperandWordCount = 1;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpVectorShuffle:
+        case SpvOpCompositeInsert:
+        case SpvOpSampledImage:
+        case SpvOpImageQuerySizeLod:
+        case SpvOpIAdd:
+        case SpvOpFAdd:
+        case SpvOpISub:
+        case SpvOpFSub:
+        case SpvOpIMul:
+        case SpvOpFMul:
+        case SpvOpUDiv:
+        case SpvOpSDiv:
+        case SpvOpFDiv:
+        case SpvOpUMod:
+        case SpvOpSRem:
+        case SpvOpSMod:
+        case SpvOpFRem:
+        case SpvOpFMod:
+        case SpvOpVectorTimesScalar:
+        case SpvOpMatrixTimesScalar:
+        case SpvOpVectorTimesMatrix:
+        case SpvOpMatrixTimesVector:
+        case SpvOpMatrixTimesMatrix:
+        case SpvOpOuterProduct:
+        case SpvOpDot:
+        case SpvOpIAddCarry:
+        case SpvOpISubBorrow:
+        case SpvOpUMulExtended:
+        case SpvOpSMulExtended:
+        case SpvOpLogicalEqual:
+        case SpvOpLogicalNotEqual:
+        case SpvOpLogicalOr:
+        case SpvOpLogicalAnd:
+        case SpvOpIEqual:
+        case SpvOpINotEqual:
+        case SpvOpUGreaterThan:
+        case SpvOpSGreaterThan:
+        case SpvOpUGreaterThanEqual:
+        case SpvOpSGreaterThanEqual:
+        case SpvOpULessThan:
+        case SpvOpSLessThan:
+        case SpvOpULessThanEqual:
+        case SpvOpSLessThanEqual:
+        case SpvOpFOrdEqual:
+        case SpvOpFUnordEqual:
+        case SpvOpFOrdNotEqual:
+        case SpvOpFUnordNotEqual:
+        case SpvOpFOrdLessThan:
+        case SpvOpFUnordLessThan:
+        case SpvOpFOrdGreaterThan:
+        case SpvOpFUnordGreaterThan:
+        case SpvOpFOrdLessThanEqual:
+        case SpvOpFUnordLessThanEqual:
+        case SpvOpFOrdGreaterThanEqual:
+        case SpvOpFUnordGreaterThanEqual:
+        case SpvOpShiftRightLogical:
+        case SpvOpShiftRightArithmetic:
+        case SpvOpShiftLeftLogical:
+        case SpvOpBitwiseOr:
+        case SpvOpBitwiseAnd:
+        case SpvOpBitwiseXor:
+        case SpvOpGroupNonUniformAll:
+        case SpvOpGroupNonUniformAny:
+        case SpvOpGroupNonUniformAllEqual:
+        case SpvOpGroupNonUniformBroadcastFirst:
+        case SpvOpGroupNonUniformBallot:
+        case SpvOpGroupNonUniformInverseBallot:
+        case SpvOpGroupNonUniformBallotFindLSB:
+        case SpvOpGroupNonUniformBallotFindMSB:
+            rOperandWordStart = 3;
+            rOperandWordCount = 2;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpImageTexelPointer:
+        case SpvOpSelect:
+        case SpvOpBitFieldSExtract:
+        case SpvOpBitFieldUExtract:
+        case SpvOpAtomicLoad:
+        case SpvOpAtomicIIncrement:
+        case SpvOpAtomicIDecrement:
+        case SpvOpGroupNonUniformBroadcast:
+        case SpvOpGroupNonUniformBallotBitExtract:
+        case SpvOpGroupNonUniformShuffle:
+        case SpvOpGroupNonUniformShuffleXor:
+        case SpvOpGroupNonUniformShuffleUp:
+        case SpvOpGroupNonUniformShuffleDown:
+        case SpvOpGroupNonUniformQuadBroadcast:
+        case SpvOpGroupNonUniformQuadSwap:
+            rOperandWordStart = 3;
+            rOperandWordCount = 3;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpGroupNonUniformBallotBitCount:
+            rOperandWordStart = 3;
+            rOperandWordCount = 3;
+            rOperandWordStride = 1;
+            rOperandWordSkip = 1;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpAtomicStore:
+            rOperandWordStart = 1;
+            rOperandWordCount = 4;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpBitFieldInsert:
+        case SpvOpAtomicExchange:
+        case SpvOpAtomicIAdd:
+        case SpvOpAtomicISub:
+        case SpvOpAtomicSMin:
+        case SpvOpAtomicUMin:
+        case SpvOpAtomicSMax:
+        case SpvOpAtomicUMax:
+        case SpvOpAtomicAnd:
+        case SpvOpAtomicOr:
+        case SpvOpAtomicXor:
+            rOperandWordStart = 3;
+            rOperandWordCount = 4;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpAtomicCompareExchange:
+        case SpvOpAtomicCompareExchangeWeak:
+            rOperandWordStart = 3;
+            rOperandWordCount = 6;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpConstantComposite:
+        case SpvOpFunctionCall:
+        case SpvOpAccessChain:
+        case SpvOpCompositeConstruct:
+            rOperandWordStart = 3;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpSpecConstantOp:
+            rOperandWordStart = 3;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = 0;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpExtInst:
+        case SpvOpGroupNonUniformIAdd:
+        case SpvOpGroupNonUniformFAdd:
+        case SpvOpGroupNonUniformIMul:
+        case SpvOpGroupNonUniformFMul:
+        case SpvOpGroupNonUniformSMin:
+        case SpvOpGroupNonUniformUMin:
+        case SpvOpGroupNonUniformFMin:
+        case SpvOpGroupNonUniformSMax:
+        case SpvOpGroupNonUniformUMax:
+        case SpvOpGroupNonUniformFMax:
+        case SpvOpGroupNonUniformBitwiseAnd:
+        case SpvOpGroupNonUniformBitwiseOr:
+        case SpvOpGroupNonUniformBitwiseXor:
+        case SpvOpGroupNonUniformLogicalAnd:
+        case SpvOpGroupNonUniformLogicalOr:
+        case SpvOpGroupNonUniformLogicalXor:
+            rOperandWordStart = 3;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = 1;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpImageWrite:
+            rOperandWordStart = 1;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = 3;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpImageSampleImplicitLod:
+        case SpvOpImageSampleExplicitLod:
+        case SpvOpImageSampleProjImplicitLod:
+        case SpvOpImageSampleProjExplicitLod:
+        case SpvOpImageFetch:
+        case SpvOpImageRead:
+            rOperandWordStart = 3;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = 2;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpImageSampleDrefImplicitLod:
+        case SpvOpImageSampleDrefExplicitLod:
+        case SpvOpImageSampleProjDrefImplicitLod:
+        case SpvOpImageSampleProjDrefExplicitLod:
+        case SpvOpImageGather:
+        case SpvOpImageDrefGather:
+            rOperandWordStart = 3;
+            rOperandWordCount = UINT32_MAX;
+            rOperandWordStride = 1;
+            rOperandWordSkip = 3;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpPhi:
+            if (pIncludePhi) {
+                rOperandWordStart = 3;
+                rOperandWordCount = UINT32_MAX;
+                rOperandWordStride = 2;
+                rOperandWordSkip = UINT32_MAX;
+                rOperandWordSkipString = false;
+                return true;
+            }
+            else {
+                rOperandWordStart = 0;
+                rOperandWordCount = 0;
+                rOperandWordStride = 0;
+                rOperandWordSkip = 0;
+                rOperandWordSkipString = false;
+                return true;
+            }
+        case SpvOpFunction:
+        case SpvOpVariable:
+            rOperandWordStart = 4;
+            rOperandWordCount = 1;
+            rOperandWordStride = 1;
+            rOperandWordSkip = UINT32_MAX;
+            rOperandWordSkipString = false;
+            return true;
+        case SpvOpLabel:
+        case SpvOpBranch:
+        case SpvOpConstantTrue:
+        case SpvOpConstantFalse:
+        case SpvOpConstant:
+        case SpvOpConstantSampler:
+        case SpvOpConstantNull:
+        case SpvOpSpecConstantTrue:
+        case SpvOpSpecConstantFalse:
+        case SpvOpSpecConstant:
+        case SpvOpCapability:
+        case SpvOpExtInstImport:
+        case SpvOpMemoryModel:
+        case SpvOpTypeVoid:
+        case SpvOpTypeBool:
+        case SpvOpTypeInt:
+        case SpvOpTypeFloat:
+        case SpvOpTypeSampler:
+        case SpvOpLoopMerge:
+        case SpvOpSelectionMerge:
+        case SpvOpKill:
+        case SpvOpReturn:
+        case SpvOpUnreachable:
+        case SpvOpFunctionParameter:
+        case SpvOpFunctionEnd:
+        case SpvOpExtension:
+        case SpvOpUndef:
+            rOperandWordStart = 0;
+            rOperandWordCount = 0;
+            rOperandWordStride = 0;
+            rOperandWordSkip = 0;
+            rOperandWordSkipString = false;
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    static bool SpvHasLabels(SpvOp pOpCode, uint32_t &rLabelWordStart, uint32_t &rLabelWordCount, uint32_t &rLabelWordStride, bool pIncludePhi) {
+        switch (pOpCode) {
+        case SpvOpSelectionMerge:
+        case SpvOpBranch:
+            rLabelWordStart = 1;
+            rLabelWordCount = 1;
+            rLabelWordStride = 1;
+            return true;
+        case SpvOpLoopMerge:
+            rLabelWordStart = 1;
+            rLabelWordCount = 2;
+            rLabelWordStride = 1;
+            return true;
+        case SpvOpBranchConditional:
+            rLabelWordStart = 2;
+            rLabelWordCount = 2;
+            rLabelWordStride = 1;
+            return true;
+        case SpvOpSwitch:
+            rLabelWordStart = 2;
+            rLabelWordCount = UINT32_MAX;
+            rLabelWordStride = 2;
+            return true;
+        case SpvOpPhi:
+            if (pIncludePhi) {
+                rLabelWordStart = 4;
+                rLabelWordCount = UINT32_MAX;
+                rLabelWordStride = 2;
+                return true;
+            }
+            else {
+                return false;
+            }
+        default:
+            return false;
+        }
+    }
+
+    // Used to indicate which operations have side effects and can't be discarded if their result is not used.
+    static bool SpvHasSideEffects(SpvOp pOpCode) {
+        switch (pOpCode) {
+        case SpvOpFunctionCall:
+        case SpvOpAtomicExchange:
+        case SpvOpAtomicCompareExchange:
+        case SpvOpAtomicCompareExchangeWeak:
+        case SpvOpAtomicIIncrement:
+        case SpvOpAtomicIDecrement:
+        case SpvOpAtomicIAdd:
+        case SpvOpAtomicISub:
+        case SpvOpAtomicSMin:
+        case SpvOpAtomicUMin:
+        case SpvOpAtomicSMax:
+        case SpvOpAtomicUMax:
+        case SpvOpAtomicAnd:
+        case SpvOpAtomicOr:
+        case SpvOpAtomicXor:
+        case SpvOpAtomicFlagTestAndSet:
+        case SpvOpAtomicFlagClear:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    static bool SpvOpIsTerminator(SpvOp pOpCode) {
+        switch (pOpCode) {
+        case SpvOpBranch:
+        case SpvOpBranchConditional:
+        case SpvOpSwitch:
+        case SpvOpReturn:
+        case SpvOpReturnValue:
+        case SpvOpKill:
+        case SpvOpUnreachable:
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    static bool checkOperandWordSkip(uint32_t pWordIndex, const uint32_t *pSpirvWords, uint32_t pRelativeWordIndex, uint32_t pOperandWordSkip, bool pOperandWordSkipString, uint32_t &rOperandWordIndex) {
+        if (pRelativeWordIndex == pOperandWordSkip) {
+            if (pOperandWordSkipString) {
+                const char *operandString = reinterpret_cast<const char *>(&pSpirvWords[pWordIndex + rOperandWordIndex]);
+                uint32_t stringLengthInWords = (strlen(operandString) + sizeof(uint32_t)) / sizeof(uint32_t);
+                rOperandWordIndex += stringLengthInWords;
+            }
+            else {
+                rOperandWordIndex++;
+            }
+
+            return true;
+        }
+        else {
+            return false;
+        }
+    }
+
+    static uint32_t addToList(uint32_t pInstructionIndex, uint32_t pListIndex, std::vector<ListNode> &rListNodes) {
+        rListNodes.emplace_back(pInstructionIndex, pListIndex);
+        return uint32_t(rListNodes.size() - 1);
+    }
+
+    // Shader
+
+    Shader::Shader() {
+        // Empty.
+    }
+
+    Shader::Shader(const void *pData, size_t pSize, bool pInlineFunctions) {
+        parse(pData, pSize, pInlineFunctions);
+    }
+
+    void Shader::clear() {
+        extSpirvWords = nullptr;
+        extSpirvWordCount = 0;
+        inlinedSpirvWords.clear();
+        instructions.clear();
+        instructionAdjacentListIndices.clear();
+        instructionInDegrees.clear();
+        instructionOutDegrees.clear();
+        instructionOrder.clear();
+        blocks.clear();
+        blockPreOrderIndices.clear();
+        blockPostOrderIndices.clear();
+        functions.clear();
+        variableOrder.clear();
+        results.clear();
+        specializations.clear();
+        decorations.clear();
+        phis.clear();
+        loopHeaders.clear();
+        listNodes.clear();
+    }
+
+    constexpr uint32_t SpvStartWordIndex = 5;
+
+    bool Shader::checkData(const void *pData, size_t pSize) {
+        const uint32_t *words = reinterpret_cast<const uint32_t *>(pData);
+        const size_t wordCount = pSize / sizeof(uint32_t);
+        if (wordCount < SpvStartWordIndex) {
+            fprintf(stderr, "Not enough words in SPIR-V.\n");
+            return false;
+        }
+
+        if (words[0] != SpvMagicNumber) {
+            fprintf(stderr, "Invalid SPIR-V Magic Number on header.\n");
+            return false;
+        }
+
+        if (words[1] > SpvVersion) {
+            fprintf(stderr, "SPIR-V Version is too new for the library. Max version for the library is 0x%X.\n", SpvVersion);
+            return false;
+        }
+
+        return true;
+    }
+
+    bool Shader::inlineData(const void *pData, size_t pSize) {
+        assert(pData != nullptr);
+        assert(pSize > 0);
+
+        struct CallItem {
+            uint32_t wordIndex = 0;
+            uint32_t functionId = UINT32_MAX;
+            uint32_t blockId = UINT32_MAX;
+            uint32_t startBlockId = UINT32_MAX;
+            uint32_t loopBlockId = UINT32_MAX;
+            uint32_t continueBlockId = UINT32_MAX;
+            uint32_t returnBlockId = UINT32_MAX;
+            uint32_t resultType = UINT32_MAX;
+            uint32_t resultId = UINT32_MAX;
+            uint32_t parameterIndex = 0;
+            std::vector<uint32_t> remapsPending;
+            std::vector<uint32_t> returnParameters;
+            std::vector<uint32_t> sameBlockOperations;
+            bool startBlockIdAssigned = false;
+            bool functionInlined = false;
+
+            CallItem(uint32_t wordIndex, uint32_t functionId = UINT32_MAX, bool functionInlined = false, uint32_t startBlockId = UINT32_MAX, uint32_t loopBlockId = UINT32_MAX, uint32_t continueBlockId = UINT32_MAX, uint32_t returnBlockId = UINT32_MAX, uint32_t resultType = UINT32_MAX, uint32_t resultId = UINT32_MAX)
+                : wordIndex(wordIndex), functionId(functionId), functionInlined(functionInlined), startBlockId(startBlockId), loopBlockId(loopBlockId), continueBlockId(continueBlockId), returnBlockId(returnBlockId), resultType(resultType), resultId(resultId)
+            {
+                // Regular constructor.
+            }
+        };
+
+        struct FunctionDefinition {
+            uint32_t wordIndex = 0;
+            uint32_t wordCount = 0;
+            uint32_t resultId = UINT32_MAX;
+            uint32_t functionWordCount = 0;
+            uint32_t codeWordCount = 0;
+            uint32_t variableWordCount = 0;
+            uint32_t inlineWordCount = 0;
+            uint32_t returnValueCount = 0;
+            uint32_t callIndex = 0;
+            uint32_t callCount = 0;
+            uint32_t parameterIndex = 0;
+            uint32_t parameterCount = 0;
+            uint32_t inlinedVariableWordCount = 0;
+            bool canInline = true;
+            
+            FunctionDefinition() {
+                // Default empty constructor.
+            }
+
+            FunctionDefinition(uint32_t resultId) : resultId(resultId) {
+                // Constructor for sorting.
+            }
+
+            bool operator<(const FunctionDefinition &other) const {
+                return resultId < other.resultId;
+            }
+        };
+
+        struct FunctionParameter {
+            uint32_t resultId = 0;
+
+            FunctionParameter(uint32_t resultId) : resultId(resultId) {
+                // Regular constructor.
+            }
+        };
+
+        struct FunctionCall {
+            uint32_t wordIndex = 0;
+            uint32_t functionId = 0;
+            uint32_t sameBlockWordCount = 0;
+
+            FunctionCall(uint32_t wordIndex, uint32_t functionId, uint32_t sameBlockWordCount) : wordIndex(wordIndex), functionId(functionId), sameBlockWordCount(sameBlockWordCount) {
+                // Regular constructor.
+            }
+        };
+        
+        // Parse all instructions in the shader first.
+        const uint32_t *dataWords = reinterpret_cast<const uint32_t *>(pData);
+        const size_t dataWordCount = pSize / sizeof(uint32_t);
+        const uint32_t dataIdBound = dataWords[3];
+        std::vector<uint32_t> loopMergeIdStack;
+        std::vector<bool> localVariableMap;
+        localVariableMap.resize(dataIdBound, false);
+
+        std::vector<FunctionDefinition> functionDefinitions;
+        std::vector<FunctionParameter> functionParameters;
+        std::vector<FunctionCall> functionCalls;
+        FunctionDefinition currentFunction;
+        uint32_t parseWordIndex = SpvStartWordIndex;
+        uint32_t entryPointFunctionId = UINT32_MAX;
+        uint32_t globalWordCount = 0;
+        uint32_t sameBlockWordCount = 0;
+        while (parseWordIndex < dataWordCount) {
+            SpvOp opCode = SpvOp(dataWords[parseWordIndex] & 0xFFFFU);
+            uint32_t wordCount = (dataWords[parseWordIndex] >> 16U) & 0xFFFFU;
+            if (wordCount == 0) {
+                fprintf(stderr, "Invalid word count found at %d.\n", parseWordIndex);
+                return false;
+            }
+
+            switch (opCode) {
+            case SpvOpFunction:
+                if (currentFunction.resultId != UINT32_MAX) {
+                    fprintf(stderr, "Found function start without the previous function ending.\n");
+                    return false;
+                }
+
+                currentFunction.resultId = dataWords[parseWordIndex + 2];
+                currentFunction.wordIndex = parseWordIndex;
+                currentFunction.functionWordCount = wordCount;
+                break;
+            case SpvOpFunctionEnd:
+                if (currentFunction.resultId == UINT32_MAX) {
+                    fprintf(stderr, "Found function end without a function start.\n");
+                    return false;
+                }
+
+                currentFunction.wordCount = parseWordIndex + wordCount - currentFunction.wordIndex;
+                currentFunction.functionWordCount += wordCount;
+                functionDefinitions.emplace_back(currentFunction);
+
+                // Reset the current function to being empty again.
+                currentFunction = FunctionDefinition();
+                break;
+            case SpvOpFunctionParameter:
+                if (currentFunction.resultId == UINT32_MAX) {
+                    fprintf(stderr, "Found function parameter without a function start.\n");
+                    return false;
+                }
+
+                currentFunction.functionWordCount += wordCount;
+
+                if (currentFunction.parameterCount == 0) {
+                    currentFunction.parameterIndex = uint32_t(functionParameters.size());
+                }
+
+                functionParameters.emplace_back(dataWords[parseWordIndex + 2]);
+                currentFunction.parameterCount++;
+                break;
+            case SpvOpFunctionCall:
+                if (currentFunction.resultId == UINT32_MAX) {
+                    fprintf(stderr, "Found function call without a function start.\n");
+                    return false;
+                }
+                
+                currentFunction.codeWordCount += wordCount;
+
+                if (currentFunction.callCount == 0) {
+                    currentFunction.callIndex = uint32_t(functionCalls.size());
+                }
+
+                functionCalls.emplace_back(parseWordIndex, dataWords[parseWordIndex + 3], sameBlockWordCount);
+                currentFunction.callCount++;
+                break;
+            case SpvOpVariable:
+                if (currentFunction.resultId != UINT32_MAX) {
+                    // Identify the variable as a local function variable.
+                    uint32_t resultId = dataWords[parseWordIndex + 2];
+                    localVariableMap[resultId] = true;
+                    currentFunction.variableWordCount += wordCount;
+                }
+                else {
+                    globalWordCount += wordCount;
+                }
+
+                break;
+            case SpvOpReturn:
+                // Functions that use early returns while on a loop can't be inlined.
+                if (!loopMergeIdStack.empty()) {
+                    currentFunction.canInline = false;
+                }
+
+                // If inlined, an OpBranch is required to replace the return.
+                currentFunction.inlineWordCount += 2;
+                currentFunction.functionWordCount += wordCount;
+                break;
+            case SpvOpReturnValue:
+                // Functions that use early returns while on a loop can't be inlined.
+                if (!loopMergeIdStack.empty()) {
+                    currentFunction.canInline = false;
+                }
+
+                // If inlined, an OpPhi with at least one argument is required to handle return values.
+                if (currentFunction.returnValueCount == 1) {
+                    currentFunction.inlineWordCount += 5;
+                }
+
+                currentFunction.returnValueCount++;
+
+                // An OpBranch is required to replace the return.
+                currentFunction.inlineWordCount += 2;
+
+                // An argument in OpPhi is required if there's more than one return value.
+                if (currentFunction.returnValueCount > 1) {
+                    currentFunction.inlineWordCount += 2;
+                }
+
+                currentFunction.functionWordCount += wordCount;
+                break;
+            case SpvOpEntryPoint:
+                if (entryPointFunctionId != UINT32_MAX) {
+                    fprintf(stderr, "Found more than one entry point, which is not yet supported.\n");
+                    return false;
+                }
+
+                entryPointFunctionId = dataWords[parseWordIndex + 2];
+                globalWordCount += wordCount;
+                break;
+            case SpvOpStore: {
+                if (currentFunction.resultId == UINT32_MAX) {
+                    fprintf(stderr, "Found store outside of a function.\n");
+                    return false;
+                }
+
+                currentFunction.codeWordCount += wordCount;
+                break;
+            }
+            case SpvOpLabel: {
+                if (currentFunction.resultId == UINT32_MAX) {
+                    fprintf(stderr, "Found label outside of a function.\n");
+                    return false;
+                }
+
+                uint32_t labelId = dataWords[parseWordIndex + 1];
+                if (!loopMergeIdStack.empty() && (loopMergeIdStack.back() == labelId)) {
+                    loopMergeIdStack.pop_back();
+                }
+
+                currentFunction.codeWordCount += wordCount;
+                sameBlockWordCount = 0;
+                break;
+            }
+            case SpvOpLoopMerge: {
+                if (currentFunction.resultId == UINT32_MAX) {
+                    fprintf(stderr, "Found loop outside of a function.\n");
+                    return false;
+                }
+
+                uint32_t mergeId = dataWords[parseWordIndex + 1];
+                loopMergeIdStack.emplace_back(mergeId);
+                currentFunction.codeWordCount += wordCount;
+                break;
+            }
+            case SpvOpImage:
+            case SpvOpSampledImage: {
+                if (currentFunction.resultId == UINT32_MAX) {
+                    fprintf(stderr, "Found loop outside of a function.\n");
+                    return false;
+                }
+
+                sameBlockWordCount += wordCount;
+                currentFunction.codeWordCount += wordCount;
+                break;
+            }
+            default:
+                if (currentFunction.resultId != UINT32_MAX) {
+                    currentFunction.codeWordCount += wordCount;
+                }
+                else {
+                    globalWordCount += wordCount;
+                }
+
+                break;
+            }
+
+            parseWordIndex += wordCount;
+        }
+
+        if (entryPointFunctionId == UINT32_MAX) {
+            fprintf(stderr, "Unable to find function entry point.\n");
+            return false;
+        }
+
+        // Make sure function array is sorted to make lower bound searches possible.
+        std::sort(functionDefinitions.begin(), functionDefinitions.end());
+
+        // Find the entry point function and mark that it shouldn't be inlined.
+        typedef std::vector<FunctionDefinition>::iterator FunctionDefinitionIterator;
+        FunctionDefinitionIterator entryFunctionIt = std::lower_bound(functionDefinitions.begin(), functionDefinitions.end(), entryPointFunctionId);
+        if (entryFunctionIt == functionDefinitions.end()) {
+            fprintf(stderr, "Unable to find entry point function %d.\n", entryPointFunctionId);
+            return false;
+        }
+
+        entryFunctionIt->canInline = false;
+
+        // Do a first iteration pass with the functions that can't be inlined as the starting points of the stack.
+        // This pass will figure out the total size required for the final inlined shader.
+        struct FunctionItem {
+            FunctionDefinitionIterator function = {};
+            FunctionDefinitionIterator rootFunction = {};
+            uint32_t callIndex = 0;
+
+            FunctionItem(FunctionDefinitionIterator function, FunctionDefinitionIterator rootFunction, uint32_t callIndex) : function(function), rootFunction(rootFunction), callIndex(callIndex) {
+                // Regular constructor.
+            }
+        };
+
+        std::vector<FunctionItem> functionStack;
+        FunctionDefinitionIterator startFunctionIt = functionDefinitions.begin();
+        while (startFunctionIt != functionDefinitions.end()) {
+            if (!startFunctionIt->canInline) {
+                functionStack.emplace_back(startFunctionIt, startFunctionIt, 0);
+            }
+
+            startFunctionIt++;
+        }
+        
+        uint32_t codeWordCount = 0;
+        while (!functionStack.empty()) {
+            FunctionItem &functionItem = functionStack.back();
+            if (functionItem.callIndex == functionItem.function->callCount) {
+                // Add this function's code and variables.
+                codeWordCount += functionItem.function->codeWordCount;
+                codeWordCount += functionItem.function->variableWordCount;
+
+                // This function will be inlined so its variables should be reserved on the parent function instead.
+                if (functionItem.function->canInline) {
+                    codeWordCount += functionItem.function->inlineWordCount;
+                    functionItem.rootFunction->inlinedVariableWordCount += functionItem.function->variableWordCount;
+                }
+                // Only add the function's word counts if can't be inlined.
+                else {
+                    codeWordCount += functionItem.function->functionWordCount;
+                }
+
+                functionStack.pop_back();
+            }
+            else {
+                // Traverse the function calls to be inlined
+                const FunctionCall &functionCall = functionCalls[functionItem.function->callIndex + functionItem.callIndex];
+                functionItem.callIndex++;
+
+                uint32_t callFunctionId = dataWords[functionCall.wordIndex + 3];
+                FunctionDefinitionIterator callFunctionIt = std::lower_bound(functionDefinitions.begin(), functionDefinitions.end(), callFunctionId);
+                if (callFunctionIt == functionDefinitions.end()) {
+                    fprintf(stderr, "Unable to find function %d.\n", callFunctionId);
+                    return false;
+                }
+                
+                if (callFunctionIt->canInline) {
+                    // Function call will be replaced by one OpLoopMerge, three OpLabel and three OpBranch.
+                    // All words required for preserving same block operations will also be added.
+                    // Substract the word count for the function call as it'll not be copied.
+                    uint32_t callWordCount = (dataWords[functionCall.wordIndex] >> 16U) & 0xFFFFU;
+                    codeWordCount += 4 + 2 * 3 + 2 * 3;
+                    codeWordCount += functionCall.sameBlockWordCount;
+                    codeWordCount -= callWordCount;
+                    functionStack.emplace_back(callFunctionIt, functionItem.rootFunction, 0);
+                }
+            }
+        }
+
+        // Figure out the total size of the shader and copy the header.
+        size_t totalWordCount = SpvStartWordIndex + globalWordCount + codeWordCount;
+        inlinedSpirvWords.resize(totalWordCount);
+        memcpy(inlinedSpirvWords.data(), pData, SpvStartWordIndex * sizeof(uint32_t));
+
+        // To avoid reallocation of these unless the shader really warrants it, we reserve some memory for these vectors.
+        uint32_t &inlinedIdBound = inlinedSpirvWords[3];
+        uint32_t dstWordIndex = SpvStartWordIndex;
+        std::vector<CallItem> callStack;
+        std::vector<uint32_t> shaderResultMap;
+        std::vector<uint32_t> storeMap;
+        std::vector<uint32_t> storeMapChanges;
+        std::vector<uint32_t> loadMap;
+        std::vector<uint32_t> loadMapChanges;
+        std::vector<uint32_t> phiMap;
+        std::vector<uint32_t> opPhis;
+        constexpr size_t ReservationForRecursionDepth = 8;
+        callStack.reserve(ReservationForRecursionDepth);
+        shaderResultMap.resize(dataIdBound, UINT32_MAX);
+        storeMap.resize(dataIdBound, UINT32_MAX);
+        loadMap.resize(dataIdBound, UINT32_MAX);
+        phiMap.resize(dataIdBound, UINT32_MAX);
+
+        auto copyInstruction = [&](uint32_t dataWordIndex, bool renameResult, uint32_t &copyWordIndex) {
+            SpvOp opCode = SpvOp(dataWords[dataWordIndex] & 0xFFFFU);
+            uint32_t wordCount = (dataWords[dataWordIndex] >> 16U) & 0xFFFFU;
+            for (uint32_t i = 0; i < wordCount; i++) {
+                inlinedSpirvWords[copyWordIndex + i] = dataWords[dataWordIndex + i];
+            }
+
+            // Any inlined functions must remap all their results and operands.
+            if (renameResult) {
+                bool hasResult, hasType;
+                SpvHasResultAndType(opCode, &hasResult, &hasType);
+
+                if (hasResult) {
+                    // First labels in a function will be replaced by the assigned label if present.
+                    uint32_t &resultId = inlinedSpirvWords[copyWordIndex + (hasType ? 2 : 1)];
+                    uint32_t newResultId;
+                    if ((opCode == SpvOpLabel) && (callStack.back().startBlockId != UINT32_MAX) && !callStack.back().startBlockIdAssigned) {
+                        newResultId = callStack.back().startBlockId;
+                        callStack.back().startBlockIdAssigned = true;
+                    }
+                    else {
+                        newResultId = inlinedIdBound++;
+                    }
+
+                    // Remap and replace the result ID in the instruction.
+                    shaderResultMap[resultId] = newResultId;
+                    resultId = newResultId;
+
+                    // Store the current block's remapped label.
+                    if (opCode == SpvOpLabel) {
+                        callStack.back().blockId = resultId;
+                    }
+                }
+            }
+
+            // Remap any operands or labels present in the instructions.
+            uint32_t operandWordStart, operandWordCount, operandWordStride, operandWordSkip;
+            bool operandWordSkipString;
+            if (SpvHasOperands(opCode, operandWordStart, operandWordCount, operandWordStride, operandWordSkip, operandWordSkipString, true)) {
+                uint32_t operandWordIndex = operandWordStart;
+                for (uint32_t j = 0; j < operandWordCount; j++) {
+                    if (checkOperandWordSkip(callStack.back().wordIndex, dataWords, j, operandWordSkip, operandWordSkipString, operandWordIndex)) {
+                        continue;
+                    }
+
+                    if (operandWordIndex >= wordCount) {
+                        break;
+                    }
+
+                    uint32_t shaderWordIndex = copyWordIndex + operandWordIndex;
+                    uint32_t &operandId = inlinedSpirvWords[shaderWordIndex];
+
+                    // Discard any known stores for variables that are used in operations that the effect is not explicitly considered yet.
+                    if ((opCode != SpvOpStore) && (opCode != SpvOpLoad)) {
+                        storeMap[operandId] = dataIdBound;
+                    }
+                    
+                    // Rename the operand if it originates from a load.
+                    if (loadMap[operandId] < dataIdBound) {
+                        operandId = loadMap[operandId];
+                    }
+
+                    // Apply the result remapping.
+                    if (shaderResultMap[operandId] != UINT32_MAX) {
+                        operandId = shaderResultMap[operandId];
+                    }
+
+                    operandWordIndex += operandWordStride;
+                }
+            }
+
+            uint32_t labelWordStart, labelWordCount, labelWordStride;
+            if (SpvHasLabels(opCode, labelWordStart, labelWordCount, labelWordStride, true)) {
+                for (uint32_t j = 0; (j < labelWordCount) && ((labelWordStart + j * labelWordStride) < wordCount); j++) {
+                    uint32_t labelWordIndex = labelWordStart + j * labelWordStride;
+                    callStack.back().remapsPending.emplace_back(copyWordIndex + labelWordIndex);
+                }
+            }
+
+            copyWordIndex += wordCount;
+        };
+
+        // Perform the final pass for inlining all functions.
+        uint32_t dstInlinedVariableWordIndex = UINT32_MAX;
+        uint32_t dstInlinedVariableWordIndexMax = UINT32_MAX;
+        callStack.emplace_back(SpvStartWordIndex);
+        while (!callStack.empty()) {
+            uint32_t callWordIndex = callStack.back().wordIndex;
+            if (callWordIndex >= dataWordCount) {
+                break;
+            }
+
+            bool copyWords = true;
+            bool copyWordsToVariables = false;
+            SpvOp opCode = SpvOp(dataWords[callWordIndex] & 0xFFFFU);
+            uint32_t wordCount = (dataWords[callWordIndex] >> 16U) & 0xFFFFU;
+            if (wordCount == 0) {
+                fprintf(stderr, "Function iteration landed in an invalid instruction due to an implementation error.\n");
+                return false;
+            }
+
+            switch (opCode) {
+            case SpvOpLabel:
+                while (!storeMapChanges.empty()) {
+                    storeMap[storeMapChanges.back()] = UINT32_MAX;
+                    storeMapChanges.pop_back();
+                }
+
+                while (!loadMapChanges.empty()) {
+                    loadMap[loadMapChanges.back()] = UINT32_MAX;
+                    loadMapChanges.pop_back();
+                }
+
+                callStack.back().sameBlockOperations.clear();
+                callStack.back().blockId = dataWords[callWordIndex + 1];
+                break;
+            case SpvOpFunction: {
+                uint32_t functionId = dataWords[callWordIndex + 2];
+                FunctionDefinitionIterator functionIt = std::lower_bound(functionDefinitions.begin(), functionDefinitions.end(), functionId);
+                if (functionIt == functionDefinitions.end()) {
+                    fprintf(stderr, "Unable to find function %d.\n", functionId);
+                    return false;
+                }
+                
+                // If we're iterating on the top of the shader, we skip over the function.
+                // Only copy the function's words if it's not inlined and we're iterating on it.
+                if (callStack.back().functionId == UINT32_MAX) {
+                    // Skip parsing the entire function on this stack level.
+                    callStack.back().wordIndex += functionIt->wordCount;
+
+                    // Insert a new stack level if we found function that isn't inlined.
+                    if (!functionIt->canInline) {
+                        callStack.emplace_back(callWordIndex - wordCount, functionId);
+                    }
+                    else {
+                        callStack.back().wordIndex -= wordCount;
+                    }
+
+                    copyWords = false;
+                }
+                else {
+                    copyWords = !functionIt->canInline;
+                }
+
+                break;
+            }
+            case SpvOpFunctionParameter:
+                // Only copy the function's parameters if it's not inlined.
+                copyWords = !callStack.back().functionInlined;
+                break;
+            case SpvOpFunctionEnd: {
+                // Apply any pending remappings from instructions with labels.
+                for (uint32_t remapPending : callStack.back().remapsPending) {
+                    uint32_t &resultId = inlinedSpirvWords[remapPending];
+                    if (shaderResultMap[resultId] != UINT32_MAX) {
+                        resultId = shaderResultMap[resultId];
+                    }
+                }
+
+                // Only copy the function's end if it's not inlined.
+                if (!callStack.back().functionInlined) {
+                    copyWords = true;
+
+                    if (dstInlinedVariableWordIndex != dstInlinedVariableWordIndexMax) {
+                        fprintf(stderr, "Failed to fill all available variable space due to an implementation error.\n");
+                        return false;
+                    }
+
+                    dstInlinedVariableWordIndex = UINT32_MAX;
+                    dstInlinedVariableWordIndexMax = UINT32_MAX;
+                }
+                else {
+                    // Insert a label for the continue block that connects back to the start along with a branch.
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpLabel | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = callStack.back().continueBlockId;
+
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpBranch | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = callStack.back().loopBlockId;
+
+                    // Insert a label for the return block.
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpLabel | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = callStack.back().returnBlockId;
+
+                    // If the function only returns one possible value, the caller instead will just remap the result to this one.
+                    if (callStack.back().returnParameters.size() == 2) {
+                        uint32_t functionResultId = callStack.back().resultId;
+                        shaderResultMap[functionResultId] = callStack.back().returnParameters[0];
+                    }
+                    // Insert an OpPhi for selecting the result from a function call that called a function that returns multiple values.
+                    else if (callStack.back().returnParameters.size() > 2) {
+                        // Remap the function result if necessary.
+                        const CallItem &previousCallStack = callStack[callStack.size() - 2];
+                        uint32_t functionResultId = callStack.back().resultId;
+                        if ((previousCallStack.functionId != UINT32_MAX) && previousCallStack.functionInlined) {
+                            uint32_t newFunctionResultId = inlinedIdBound++;
+                            shaderResultMap[functionResultId] = newFunctionResultId;
+                            functionResultId = newFunctionResultId;
+                        }
+
+                        opPhis.emplace_back(dstWordIndex);
+                        inlinedSpirvWords[dstWordIndex++] = SpvOpPhi | ((3 + callStack.back().returnParameters.size()) << 16U);
+                        inlinedSpirvWords[dstWordIndex++] = callStack.back().resultType;
+                        inlinedSpirvWords[dstWordIndex++] = functionResultId;
+
+                        // Copy the OpPhi arguments directly.
+                        for (size_t i = 0; i < callStack.back().returnParameters.size(); i++) {
+                            inlinedSpirvWords[dstWordIndex++] = callStack.back().returnParameters[i];
+                        }
+                    }
+
+                    copyWords = false;
+                }
+
+                // Pop this stack level and return to iterating on the previous one.
+                callStack.pop_back();
+
+                if (!callStack.empty()) {
+                    // Copy the same block operations and rename the results even if the function wasn't inlined.
+                    for (uint32_t sameBlockWordIndex : callStack.back().sameBlockOperations) {
+                        copyInstruction(sameBlockWordIndex, true, dstWordIndex);
+                    }
+
+                    callStack.back().wordIndex -= wordCount;
+                }
+
+                break;
+            }
+            case SpvOpFunctionCall: {
+                // Inline the function by inserting two labels and a branch.
+                uint32_t functionId = dataWords[callWordIndex + 3];
+                FunctionDefinitionIterator functionIt = std::lower_bound(functionDefinitions.begin(), functionDefinitions.end(), functionId);
+                if (functionIt == functionDefinitions.end()) {
+                    fprintf(stderr, "Unable to find function %d.\n", functionId);
+                    return false;
+                }
+
+                if (functionIt->canInline) {
+                    // Generate the ID that will be used to indicate the function's start and the return block.
+                    uint32_t loopLabelId = inlinedIdBound++;
+                    uint32_t startLabelId = inlinedIdBound++;
+                    uint32_t continueLabelId = inlinedIdBound++;
+                    uint32_t returnLabelId = inlinedIdBound++;
+
+                    // In any future Phi operations, rename the current label to the return label.
+                    if (callStack.back().blockId >= phiMap.size()) {
+                        phiMap.resize(callStack.back().blockId + 1, UINT32_MAX);
+                    }
+
+                    phiMap[callStack.back().blockId] = returnLabelId;
+
+                    // Branch into a new block. The new block will contain a single iteration loop.
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpBranch | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = loopLabelId;
+
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpLabel | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = loopLabelId;
+
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpLoopMerge | (4 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = returnLabelId;
+                    inlinedSpirvWords[dstWordIndex++] = continueLabelId;
+                    inlinedSpirvWords[dstWordIndex++] = SpvLoopControlMaskNone;
+
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpBranch | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = startLabelId;
+
+                    // Pass the result Id unmodified. The function evaluation will determine how it should be remapped.
+                    uint32_t functionResultId = dataWords[callWordIndex + 2];
+                    callStack.back().wordIndex += wordCount;
+
+                    // Word count should be substracted as the loop's end will add it.
+                    callStack.emplace_back(functionIt->wordIndex - wordCount, functionIt->resultId, true, startLabelId, loopLabelId, continueLabelId, returnLabelId, dataWords[callWordIndex + 1], functionResultId);
+
+                    for (uint32_t i = 0; i < functionIt->parameterCount; i++) {
+                        if (wordCount <= (4 + i)) {
+                            fprintf(stderr, "Not enough words for argument %d in function call.\n", i);
+                            return false;
+                        }
+
+                        uint32_t functionParameterId = functionParameters[functionIt->parameterIndex + i].resultId;
+                        uint32_t localParameterId = dataWords[callWordIndex + 4 + i];
+                        if (shaderResultMap[localParameterId] != UINT32_MAX) {
+                            localParameterId = shaderResultMap[localParameterId];
+                        }
+
+                        shaderResultMap[functionParameterId] = localParameterId;
+                    }
+
+                    copyWords = false;
+                }
+                else {
+                    copyWords = true;
+                }
+
+                break;
+            }
+            case SpvOpVariable:
+                if ((callStack.back().functionId < UINT32_MAX) && !callStack.back().functionInlined) {
+                    // As soon as we find a variable local to the function, reserve the space to insert all
+                    // inlined function variables that we encounter.
+                    if (dstInlinedVariableWordIndex == UINT32_MAX) {
+                        FunctionDefinitionIterator functionIt = std::lower_bound(functionDefinitions.begin(), functionDefinitions.end(), callStack.back().functionId);
+                        if (functionIt == functionDefinitions.end()) {
+                            fprintf(stderr, "Unable to find function %d.\n", callStack.back().functionId);
+                            return false;
+                        }
+
+                        dstInlinedVariableWordIndex = dstWordIndex;
+                        dstWordIndex += functionIt->inlinedVariableWordCount;
+                        dstInlinedVariableWordIndexMax = dstWordIndex;
+                    }
+                }
+                else {
+                    // Copy the variables into the entry point function's variables.
+                    copyWordsToVariables = (callStack.back().functionId != UINT32_MAX);
+                }
+
+                copyWords = true;
+                break;
+            case SpvOpReturn:
+                if (callStack.back().functionInlined) {
+                    // Replace return with a branch to the return label.
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpBranch | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = callStack.back().returnBlockId;
+                    copyWords = false;
+                }
+                else {
+                    // Copy as is.
+                }
+
+                break;
+            case SpvOpReturnValue: {
+                if (callStack.back().functionInlined) {
+                    // Replace return with a branch to the return label.
+                    inlinedSpirvWords[dstWordIndex++] = SpvOpBranch | (2 << 16U);
+                    inlinedSpirvWords[dstWordIndex++] = callStack.back().returnBlockId;
+                    copyWords = false;
+
+                    // Store parameters for Phi operator.
+                    uint32_t operandId = dataWords[callStack.back().wordIndex + 1];
+                    if (shaderResultMap[operandId] != UINT32_MAX) {
+                        operandId = shaderResultMap[operandId];
+                    }
+
+                    callStack.back().returnParameters.emplace_back(operandId);
+                    callStack.back().returnParameters.emplace_back(callStack.back().blockId);
+                }
+                else {
+                    // Copy as is.
+                }
+
+                break;
+            }
+            case SpvOpLoad: {
+                // If the pointer being loaded was modified this block, store its result to rename the
+                // operands that use the result of this load operation. This load operation will go
+                // unused and be deleted in the optimization pass.
+                // Ignore load operations with memory operands.
+                if (wordCount == 4) {
+                    uint32_t pointerId = dataWords[callStack.back().wordIndex + 3];
+                    if (localVariableMap[pointerId] && (storeMap[pointerId] < dataIdBound)) {
+                        uint32_t resultId = dataWords[callStack.back().wordIndex + 2];
+                        if (loadMap[resultId] != storeMap[pointerId]) {
+                            loadMap[resultId] = storeMap[pointerId];
+                            loadMapChanges.emplace_back(resultId);
+                        }
+                    }
+                }
+
+                break;
+            }
+            case SpvOpStore: {
+                // Keep track of the result last stored to the pointer on this block.
+                // Ignore store operations with memory operands.
+                if (wordCount == 3) {
+                    uint32_t pointerId = dataWords[callStack.back().wordIndex + 1];
+                    uint32_t resultId = dataWords[callStack.back().wordIndex + 2];
+                    if (storeMap[pointerId] != resultId) {
+                        storeMap[pointerId] = resultId;
+                        storeMapChanges.emplace_back(pointerId);
+                    }
+                }
+
+                break;
+            }
+            case SpvOpPhi:
+                opPhis.emplace_back(dstWordIndex);
+                break;
+            case SpvOpImage:
+            case SpvOpSampledImage: {
+                callStack.back().sameBlockOperations.emplace_back(callStack.back().wordIndex);
+                break;
+            }
+            default:
+                break;
+            }
+
+            if (copyWords) {
+                uint32_t &copyWordIndex = copyWordsToVariables ? dstInlinedVariableWordIndex : dstWordIndex;
+                copyInstruction(callWordIndex, callStack.back().functionInlined, copyWordIndex);
+
+                // Make sure enough space was reserved for variables.
+                assert(!copyWordsToVariables || copyWordIndex <= dstInlinedVariableWordIndexMax);
+            }
+
+            if (!callStack.empty()) {
+                callStack.back().wordIndex += wordCount;
+            }
+        }
+
+        if (dstWordIndex != totalWordCount) {
+            fprintf(stderr, "Failed to fill all shader data due to an implementation error.\n");
+            return false;
+        }
+
+        // Fix any OpPhi operators with the labels for the blocks that were split.
+        for (uint32_t wordIndex : opPhis) {
+            uint32_t wordCount = (inlinedSpirvWords[wordIndex] >> 16U) & 0xFFFFU;
+            for (uint32_t j = 3; j < wordCount; j += 2) {
+                uint32_t &labelId = inlinedSpirvWords[wordIndex + j + 1];
+                while ((phiMap.size() > labelId) && (phiMap[labelId] != UINT32_MAX)) {
+                    labelId = phiMap[labelId];
+                }
+            }
+        }
+
+        return true;
+    }
+
+    bool Shader::parseData(const void *pData, size_t pSize) {
+        assert(pData != nullptr);
+        assert(pSize > 0);
+
+        const uint32_t *dataWords = reinterpret_cast<const uint32_t *>(pData);
+        const size_t dataWordCount = pSize / sizeof(uint32_t);
+        const uint32_t idBound = dataWords[3];
+        instructions.reserve(idBound);
+        results.resize(idBound, Result());
+        results.shrink_to_fit();
+
+        // Parse all instructions.
+        uint32_t blockIndex = UINT32_MAX;
+        uint32_t functionInstructionIndex = UINT32_MAX;
+        uint32_t functionLabelIndex = UINT32_MAX;
+        uint32_t blockInstructionIndex = UINT32_MAX;
+        uint32_t wordIndex = SpvStartWordIndex;
+        while (wordIndex < dataWordCount) {
+            SpvOp opCode = SpvOp(dataWords[wordIndex] & 0xFFFFU);
+            uint32_t wordCount = (dataWords[wordIndex] >> 16U) & 0xFFFFU;
+            if (wordCount == 0) {
+                fprintf(stderr, "SPIR-V Parsing error. Invalid instruction word count at word %d.\n", wordIndex);
+                return false;
+            }
+
+            bool hasResult, hasType;
+            SpvHasResultAndType(opCode, &hasResult, &hasType);
+
+            uint32_t instructionIndex = uint32_t(instructions.size());
+            if (hasResult) {
+                uint32_t resultId = dataWords[wordIndex + (hasType ? 2 : 1)];
+                if (resultId >= idBound) {
+                    fprintf(stderr, "SPIR-V Parsing error. Invalid Result ID: %u.\n", resultId);
+                    return false;
+                }
+
+                results[resultId].instructionIndex = instructionIndex;
+            }
+
+            // Handle specific instructions.
+            switch (opCode) {
+            case SpvOpFunction:
+                functionInstructionIndex = instructionIndex;
+                break;
+            case SpvOpFunctionEnd:
+                functions.emplace_back(functionInstructionIndex, functionLabelIndex);
+                functionInstructionIndex = functionLabelIndex = UINT32_MAX;
+                break;
+            case SpvOpDecorate:
+            case SpvOpMemberDecorate:
+                decorations.emplace_back(instructionIndex);
+                break;
+            case SpvOpPhi:
+                phis.emplace_back(instructionIndex);
+                break;
+            case SpvOpLoopMerge:
+                loopHeaders.emplace_back(instructionIndex, blockInstructionIndex);
+                break;
+            case SpvOpLabel:
+                blockIndex = uint32_t(blocks.size());
+                blockInstructionIndex = instructionIndex;
+
+                if (functionLabelIndex == UINT32_MAX) {
+                    functionLabelIndex = blockInstructionIndex;
+                }
+
+                break;
+            default:
+                break;
+            }
+
+            instructions.emplace_back(wordIndex, blockIndex);
+
+            if (SpvOpIsTerminator(opCode)) {
+                blocks.emplace_back(blockInstructionIndex, instructionIndex);
+                blockIndex = UINT32_MAX;
+                blockInstructionIndex = UINT32_MAX;
+            }
+
+            wordIndex += wordCount;
+        }
+
+        // Initialize all adjacent indices for the lists.
+        instructionAdjacentListIndices.resize(instructions.size(), UINT32_MAX);
+
+        return true;
+    }
+
+    bool Shader::process(const void *pData, size_t pSize) {
+        // Greatly decreases the costs of adding nodes to the linked list.
+        listNodes.reserve(instructions.size() * 2);
+
+        bool foundOpSwitch = false;
+        const uint32_t *dataWords = reinterpret_cast<const uint32_t *>(pData);
+        const size_t dataWordCount = pSize / sizeof(uint32_t);
+        std::vector<uint32_t> loopMergeBlockStack;
+        std::vector<uint32_t> loopMergeInstructionStack;
+        uint32_t currentBlockId = 0;
+        uint32_t currentLoopHeaderIndex = 0;
+        for (uint32_t i = 0; i < uint32_t(instructions.size()); i++) {
+            uint32_t wordIndex = instructions[i].wordIndex;
+            SpvOp opCode = SpvOp(dataWords[wordIndex] & 0xFFFFU);
+            uint32_t wordCount = (dataWords[wordIndex] >> 16U) & 0xFFFFU;
+            if (!SpvIsSupported(opCode)) {
+                fprintf(stderr, "%s is not supported yet.\n", SpvOpToString(opCode));
+                return false;
+            }
+
+            bool hasResult, hasType;
+            SpvHasResultAndType(opCode, &hasResult, &hasType);
+
+            if (hasType) {
+                uint32_t typeId = dataWords[wordIndex + 1];
+                if (typeId >= results.size()) {
+                    fprintf(stderr, "SPIR-V Parsing error. Invalid Type ID: %u.\n", typeId);
+                    return false;
+                }
+
+                if (results[typeId].instructionIndex == UINT32_MAX) {
+                    fprintf(stderr, "SPIR-V Parsing error. Result %u is not valid.\n", typeId);
+                    return false;
+                }
+
+                uint32_t typeInstructionIndex = results[typeId].instructionIndex;
+                instructionAdjacentListIndices[typeInstructionIndex] = addToList(i, instructionAdjacentListIndices[typeInstructionIndex], listNodes);
+
+                // Check if it's an OpConstant of Int type so it can be reused on switches.
+                if ((opCode == SpvOpConstant) && (defaultSwitchOpConstantInt == UINT32_MAX)) {
+                    uint32_t typeWordIndex = instructions[typeInstructionIndex].wordIndex;
+                    SpvOp typeOpCode = SpvOp(dataWords[typeWordIndex] & 0xFFFFU);
+                    if (typeOpCode == SpvOpTypeInt) {
+                        defaultSwitchOpConstantInt = dataWords[wordIndex + 2];
+                    }
+                }
+            }
+            
+            // Every operand should be adjacent to this instruction.
+            uint32_t operandWordStart, operandWordCount, operandWordStride, operandWordSkip;
+            bool operandWordSkipString;
+            if (SpvHasOperands(opCode, operandWordStart, operandWordCount, operandWordStride, operandWordSkip, operandWordSkipString, false)) {
+                uint32_t operandWordIndex = operandWordStart;
+                for (uint32_t j = 0; j < operandWordCount; j++) {
+                    if (checkOperandWordSkip(wordIndex, dataWords, j, operandWordSkip, operandWordSkipString, operandWordIndex)) {
+                        continue;
+                    }
+
+                    if (operandWordIndex >= wordCount) {
+                        break;
+                    }
+
+                    uint32_t operandId = dataWords[wordIndex + operandWordIndex];
+                    if (operandId >= results.size()) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Operand ID: %u.\n", operandId);
+                        return false;
+                    }
+
+                    if (results[operandId].instructionIndex == UINT32_MAX) {
+                        fprintf(stderr, "SPIR-V Parsing error. Result %u is not valid.\n", operandId);
+                        return false;
+                    }
+
+                    uint32_t resultIndex = results[operandId].instructionIndex;
+                    instructionAdjacentListIndices[resultIndex] = addToList(i, instructionAdjacentListIndices[resultIndex], listNodes);
+                    operandWordIndex += operandWordStride;
+                }
+            }
+            else {
+                fprintf(stderr, "SPIR-V Parsing error. Operands for %s are not implemented yet.\n", SpvOpToString(opCode));
+                return false;
+            }
+
+            // This instruction should be adjacent to every label referenced.
+            uint32_t labelWordStart, labelWordCount, labelWordStride;
+            if (SpvHasLabels(opCode, labelWordStart, labelWordCount, labelWordStride, false)) {
+                for (uint32_t j = 0; (j < labelWordCount) && ((labelWordStart + j * labelWordStride) < wordCount); j++) {
+                    uint32_t labelId = dataWords[wordIndex + labelWordStart + j * labelWordStride];
+                    if (labelId >= results.size()) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Operand ID: %u.\n", labelId);
+                        return false;
+                    }
+
+                    if (results[labelId].instructionIndex == UINT32_MAX) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Operand ID: %u.\n", labelId);
+                        return false;
+                    }
+
+                    // Make sure this label not pointing back to the loop header while on a loop merge.
+                    if (!loopMergeBlockStack.empty() && (labelId == loopMergeBlockStack.back())) {
+                        continue;
+                    }
+
+                    uint32_t labelIndex = results[labelId].instructionIndex;
+                    instructionAdjacentListIndices[i] = addToList(labelIndex, instructionAdjacentListIndices[i], listNodes);
+                }
+            }
+
+            // Parse parented blocks of OpPhi to indicate the dependency.
+            if (opCode == SpvOpPhi) {
+                uint32_t continueLabelId = UINT32_MAX;
+                if (!loopMergeInstructionStack.empty()) {
+                    uint32_t loopMergeWordIndex = instructions[loopMergeInstructionStack.back()].wordIndex;
+                    continueLabelId = dataWords[loopMergeWordIndex + 2];
+                }
+
+                for (uint32_t j = 3; j < wordCount; j += 2) {
+                    uint32_t labelId = dataWords[wordIndex + j + 1];
+                    if (labelId >= results.size()) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Parent ID: %u.\n", labelId);
+                        return false;
+                    }
+
+                    if (results[labelId].instructionIndex == UINT32_MAX) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Parent ID: %u.\n", labelId);
+                        return false;
+                    }
+                    
+                    // Make sure this label doesn't come from the loop continue.
+                    if (labelId == continueLabelId) {
+                        continue;
+                    }
+
+                    uint32_t operandId = dataWords[wordIndex + j];
+                    if (operandId >= results.size()) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Operand ID: %u.\n", operandId);
+                        return false;
+                    }
+
+                    if (results[operandId].instructionIndex == UINT32_MAX) {
+                        fprintf(stderr, "SPIR-V Parsing error. Result %u is not valid.\n", operandId);
+                        return false;
+                    }
+
+                    uint32_t labelIndex = results[labelId].instructionIndex;
+                    uint32_t resultIndex = results[operandId].instructionIndex;
+                    instructionAdjacentListIndices[labelIndex] = addToList(i, instructionAdjacentListIndices[labelIndex], listNodes);
+                    instructionAdjacentListIndices[resultIndex] = addToList(i, instructionAdjacentListIndices[resultIndex], listNodes);
+                }
+            }
+            // Parse decorations.
+            else if (opCode == SpvOpDecorate) {
+                uint32_t decoration = dataWords[wordIndex + 2];
+                if (decoration == SpvDecorationSpecId) {
+                    uint32_t resultId = dataWords[wordIndex + 1];
+                    uint32_t constantId = dataWords[wordIndex + 3];
+                    if (resultId >= results.size()) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Operand ID: %u.\n", resultId);
+                        return false;
+                    }
+
+                    uint32_t resultInstructionIndex = results[resultId].instructionIndex;
+                    if (resultInstructionIndex == UINT32_MAX) {
+                        fprintf(stderr, "SPIR-V Parsing error. Invalid Operand ID: %u.\n", resultId);
+                        return false;
+                    }
+
+                    specializations.resize(std::max(specializations.size(), size_t(constantId + 1)));
+                    specializations[constantId].constantInstructionIndex = resultInstructionIndex;
+                    specializations[constantId].decorationInstructionIndex = i;
+                }
+            }
+            // Check if a switch is used in the shader.
+            else if (opCode == SpvOpSwitch) {
+                foundOpSwitch = true;
+            }
+            // If a loop merge stack is active, pop it if it corresponds to the merge block.
+            else if (opCode == SpvOpLabel) {
+                currentBlockId = dataWords[wordIndex + 1];
+
+                if ((currentLoopHeaderIndex < loopHeaders.size()) && (i == loopHeaders[currentLoopHeaderIndex].blockInstructionIndex)) {
+                    loopMergeBlockStack.emplace_back(currentBlockId);
+                    loopMergeInstructionStack.emplace_back(loopHeaders[currentLoopHeaderIndex].instructionIndex);
+                    currentLoopHeaderIndex++;
+                }
+
+                if (!loopMergeBlockStack.empty() && !loopMergeInstructionStack.empty()) {
+                    uint32_t loopMergeWordIndex = instructions[loopMergeInstructionStack.back()].wordIndex;
+                    uint32_t mergeBlockId = dataWords[loopMergeWordIndex + 1];
+                    if (currentBlockId == mergeBlockId) {
+                        loopMergeBlockStack.pop_back();
+                        loopMergeInstructionStack.pop_back();
+                    }
+                }
+            }
+        }
+        
+        // Do a pre-order and post-order traversal of the tree starting from each function. These indices are
+        // later used to figure out whether instructions dominate other instructions when doing optimizations.
+        std::vector<bool> preOrderVisitedBlocks;
+        std::vector<bool> postOrderVisitedBlocks;
+        uint32_t preOrderIndex = 0;
+        uint32_t postOrderIndex = 0;
+        blockPreOrderIndices.resize(blocks.size(), 0);
+        blockPostOrderIndices.resize(blocks.size(), 0);
+        preOrderVisitedBlocks.resize(blocks.size(), false);
+        postOrderVisitedBlocks.resize(blocks.size(), false);
+        for (uint32_t i = 0; i < uint32_t(functions.size()); i++) {
+            const Function &function = functions[i];
+            const Instruction &functionLabelInstruction = instructions[function.labelInstructionIndex];
+            std::vector<uint32_t> blockIndexStack;
+            std::vector<uint32_t> blockAdjacentStack;
+            blockIndexStack.emplace_back(functionLabelInstruction.blockIndex);
+            blockAdjacentStack.emplace_back(UINT32_MAX);
+            while (!blockIndexStack.empty()) {
+                uint32_t blockIndex = blockIndexStack.back();
+                uint32_t blockAdjacentIndex = blockAdjacentStack.back();
+                blockIndexStack.pop_back();
+                blockAdjacentStack.pop_back();
+
+                uint32_t terminatorInstructorIndex = blocks[blockIndex].terminatorInstructionIndex;
+                if (!preOrderVisitedBlocks[blockIndex]) {
+                    blockPreOrderIndices[blockIndex] = preOrderIndex++;
+                    blockAdjacentIndex = instructionAdjacentListIndices[terminatorInstructorIndex];
+                    preOrderVisitedBlocks[blockIndex] = true;
+                }
+
+                if ((blockAdjacentIndex == UINT32_MAX) && !postOrderVisitedBlocks[blockIndex]) {
+                    blockPostOrderIndices[blockIndex] = postOrderIndex++;
+                    postOrderVisitedBlocks[blockIndex] = true;
+                }
+                
+                while (blockAdjacentIndex != UINT32_MAX) {
+                    const ListNode &adjacentListNode = listNodes[blockAdjacentIndex];
+                    const Instruction &adjacentInstruction = instructions[adjacentListNode.instructionIndex];
+                    SpvOp adjacentOpCode = SpvOp(dataWords[adjacentInstruction.wordIndex] & 0xFFFFU);
+                    if (adjacentOpCode == SpvOpLabel) {
+                        blockIndexStack.emplace_back(blockIndex);
+                        blockAdjacentStack.emplace_back(adjacentListNode.nextListIndex);
+                        blockIndexStack.emplace_back(adjacentInstruction.blockIndex);
+                        blockAdjacentStack.emplace_back(UINT32_MAX);
+                        blockAdjacentIndex = UINT32_MAX;
+                    }
+                    else {
+                        blockAdjacentIndex = adjacentListNode.nextListIndex;
+                    }
+                }
+            }
+        }
+
+        if (foundOpSwitch && (defaultSwitchOpConstantInt == UINT32_MAX)) {
+            fprintf(stderr, "Unable to find an OpConstantInt to use as replacement for switches. Adding this instruction automatically is not supported yet.\n");
+            return false;
+        }
+
+        return true;
+    }
+
+    struct InstructionSort {
+        union {
+            struct {
+                uint64_t instructionIndex : 32;
+                uint64_t instructionLevel : 32;
+            };
+
+            uint64_t instructionValue = 0;
+        };
+
+        InstructionSort() {
+            // Empty.
+        }
+
+        bool operator<(const InstructionSort &i) const {
+            return instructionValue < i.instructionValue;
+        }
+    };
+
+    bool Shader::sort(const void *pData, size_t pSize) {
+        const uint32_t *dataWords = reinterpret_cast<const uint32_t *>(pData);
+        const size_t dataWordCount = pSize / sizeof(uint32_t);
+
+        // Count the in and out degrees for all instructions.
+        instructionInDegrees.clear();
+        instructionOutDegrees.clear();
+        instructionInDegrees.resize(instructions.size(), 0);
+        instructionOutDegrees.resize(instructions.size(), 0);
+        for (uint32_t i = 0; i < uint32_t(instructions.size()); i++) {
+            uint32_t listIndex = instructionAdjacentListIndices[i];
+            while (listIndex != UINT32_MAX) {
+                const ListNode &listNode = listNodes[listIndex];
+                instructionInDegrees[listNode.instructionIndex]++;
+                instructionOutDegrees[i]++;
+                listIndex = listNode.nextListIndex;
+            }
+        }
+
+        // Make a copy of the degrees as they'll be used to perform a topological sort.
+        std::vector<uint32_t> sortDegrees;
+        sortDegrees.resize(instructionInDegrees.size());
+        memcpy(sortDegrees.data(), instructionInDegrees.data(), sizeof(uint32_t) * sortDegrees.size());
+
+        // The first nodes to be processed should be the ones with no incoming connections.
+        std::vector<uint32_t> instructionStack;
+        instructionStack.clear();
+        for (uint32_t i = 0; i < uint32_t(instructions.size()); i++) {
+            if (sortDegrees[i] == 0) {
+                instructionStack.emplace_back(i);
+            }
+        }
+
+        instructionOrder.reserve(instructions.size());
+        instructionOrder.clear();
+        while (!instructionStack.empty()) {
+            uint32_t i = instructionStack.back();
+            instructionStack.pop_back();
+            instructionOrder.emplace_back(i);
+
+            // Look for the adjacents and reduce their degree. Push it to the stack if their degree reaches zero.
+            uint32_t listIndex = instructionAdjacentListIndices[i];
+            while (listIndex != UINT32_MAX) {
+                const ListNode &listNode = listNodes[listIndex];
+                uint32_t &sortDegree = sortDegrees[listNode.instructionIndex];
+                assert(sortDegree > 0);
+                sortDegree--;
+                if (sortDegree == 0) {
+                    instructionStack.emplace_back(listNode.instructionIndex);
+                }
+
+                listIndex = listNode.nextListIndex;
+            }
+        }
+        
+        if (instructionOrder.size() < instructions.size()) {
+            fprintf(stderr, "Sorting shader failed. Not all instructions could be reached.\n");
+#if RESPV_VERBOSE_ERRORS
+            for (uint32_t i = 0; i < uint32_t(instructions.size()); i++) {
+                if (sortDegrees[i] != 0) {
+                    fprintf(stderr, "[%d] Remaining Degrees %d\n", i, sortDegrees[i]);
+                }
+            }
+#endif
+            return false;
+        }
+
+        std::vector<InstructionSort> instructionSortVector;
+        instructionSortVector.clear();
+        instructionSortVector.resize(instructionOrder.size(), InstructionSort());
+        for (uint32_t instructionIndex : instructionOrder) {
+            uint64_t nextLevel = instructionSortVector[instructionIndex].instructionLevel + 1;
+            uint32_t listIndex = instructionAdjacentListIndices[instructionIndex];
+            while (listIndex != UINT32_MAX) {
+                const ListNode &listNode = listNodes[listIndex];
+                instructionSortVector[listNode.instructionIndex].instructionLevel = std::max(instructionSortVector[listNode.instructionIndex].instructionLevel, nextLevel);
+                listIndex = listNode.nextListIndex;
+            }
+
+            instructionSortVector[instructionIndex].instructionIndex = instructionIndex;
+        }
+
+        std::sort(instructionSortVector.begin(), instructionSortVector.end());
+        
+        // Rebuild the instruction order vector with the sorted indices. If any of the instructions are pointers, store 
+        // them in a separate vector that will be used for another optimization pass.
+        instructionOrder.clear();
+        variableOrder.clear();
+        for (InstructionSort &instructionSort : instructionSortVector) {
+            instructionOrder.emplace_back(uint32_t(instructionSort.instructionIndex));
+
+            uint32_t wordIndex = instructions[instructionSort.instructionIndex].wordIndex;
+            SpvOp opCode = SpvOp(dataWords[wordIndex] & 0xFFFFU);
+            if (opCode == SpvOpVariable) {
+                variableOrder.emplace_back(uint32_t(instructionSort.instructionIndex));
+            }
+        }
+
+        return true;
+    }
+
+    bool Shader::parse(const void *pData, size_t pSize, bool pInlineFunctions) {
+        assert(pData != nullptr);
+        assert((pSize % sizeof(uint32_t) == 0) && "Size of data must be aligned to the word size.");
+
+        clear();
+
+        if (!checkData(pData, pSize)) {
+            return false;
+        }
+
+        extSpirvWords = reinterpret_cast<const uint32_t *>(pData);
+        extSpirvWordCount = pSize / sizeof(uint32_t);
+
+        if (pInlineFunctions && !inlineData(pData, pSize)) {
+            return false;
+        }
+
+        const void *data = pInlineFunctions ? inlinedSpirvWords.data() : pData;
+        const size_t size = pInlineFunctions ? (inlinedSpirvWords.size() * sizeof(uint32_t)) : pSize;
+        if (!parseData(data, size)) {
+            return false;
+        }
+
+        if (!process(data, size)) {
+            return false;
+        }
+
+        if (!sort(data, size)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    bool Shader::empty() const {
+        return false;
+    }
+
+    // Optimizer
+
+    struct Resolution {
+        enum Type {
+            Unknown,
+            Constant,
+            Variable
+        };
+
+        Type type = Type::Unknown;
+
+        struct {
+            union {
+                int32_t i32;
+                uint32_t u32;
+            };
+        } value = {};
+
+        static Resolution fromBool(bool pValue) {
+            Resolution r;
+            r.type = Type::Constant;
+            r.value.u32 = pValue ? 1 : 0;
+            return r;
+        }
+
+        static Resolution fromInt32(int32_t pValue) {
+            Resolution r;
+            r.type = Type::Constant;
+            r.value.i32 = pValue;
+            return r;
+        }
+
+        static Resolution fromUint32(uint32_t pValue) {
+            Resolution r;
+            r.type = Type::Constant;
+            r.value.u32 = pValue;
+            return r;
+        }
+    };
+
+    struct OptimizerContext {
+        const Shader &shader;
+        std::vector<uint32_t> &instructionAdjacentListIndices;
+        std::vector<uint32_t> &instructionInDegrees;
+        std::vector<uint32_t> &instructionOutDegrees;
+        std::vector<ListNode> &listNodes;
+        std::vector<Resolution> &resolutions;
+        std::vector<uint8_t> &optimizedData;
+        Options options;
+
+        OptimizerContext() = delete;
+    };
+
+    static void optimizerEliminateInstruction(uint32_t pInstructionIndex, OptimizerContext &rContext) {
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        uint32_t wordIndex = rContext.shader.instructions[pInstructionIndex].wordIndex;
+        uint32_t wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+        for (uint32_t j = 0; j < wordCount; j++) {
+            optimizedWords[wordIndex + j] = UINT32_MAX;
+        }
+    }
+
+    static void optimizerReduceResultDegrees(OptimizerContext &rContext, std::vector<uint32_t> &rResultStack) {
+        const uint32_t *optimizedWords = reinterpret_cast<const uint32_t *>(rContext.optimizedData.data());
+        auto optimizerCheckOperands = [&](SpvOp opCode, uint32_t wordIndex, uint32_t wordCount) {
+            uint32_t operandWordStart, operandWordCount, operandWordStride, operandWordSkip;
+            bool operandWordSkipString;
+            if (SpvHasOperands(opCode, operandWordStart, operandWordCount, operandWordStride, operandWordSkip, operandWordSkipString, true)) {
+                uint32_t operandWordIndex = operandWordStart;
+                for (uint32_t j = 0; j < operandWordCount; j++) {
+                    if (checkOperandWordSkip(wordIndex, optimizedWords, j, operandWordSkip, operandWordSkipString, operandWordIndex)) {
+                        continue;
+                    }
+
+                    if (operandWordIndex >= wordCount) {
+                        break;
+                    }
+
+                    uint32_t operandId = optimizedWords[wordIndex + operandWordIndex];
+                    rResultStack.emplace_back(operandId);
+                    operandWordIndex += operandWordStride;
+                }
+            }
+        };
+
+        while (!rResultStack.empty()) {
+            uint32_t resultId = rResultStack.back();
+            rResultStack.pop_back();
+
+            uint32_t instructionIndex = rContext.shader.results[resultId].instructionIndex;
+            uint32_t wordIndex = rContext.shader.instructions[instructionIndex].wordIndex;
+
+            // Instruction's been deleted.
+            if (optimizedWords[wordIndex] == UINT32_MAX) {
+                continue;
+            }
+
+            // Consider it's possible for a result to have no outgoing connections on an unoptimized shader.
+            if (rContext.instructionOutDegrees[instructionIndex] > 0) {
+                rContext.instructionOutDegrees[instructionIndex]--;
+            }
+
+            // When nothing uses the result from this instruction anymore, we can delete it. Push any operands it uses into the stack as well to reduce their out degrees.
+            // Function calls are excluded from this as it's not easy to evaluate whether the function has side effects or not.
+            SpvOp opCode = SpvOp(optimizedWords[wordIndex] & 0xFFFFU);
+            if ((rContext.instructionOutDegrees[instructionIndex] == 0) && !SpvHasSideEffects(opCode)) {
+                uint32_t wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+                optimizerCheckOperands(opCode, wordIndex, wordCount);
+
+                // Function parameters are excluded from being deleted as they'd break the function type definitions.
+                // For being able to delete them, the original function type would have to be modified and only as long as no other functions are reusing the same type definition.
+                if (opCode != SpvOpFunctionParameter) {
+                    optimizerEliminateInstruction(instructionIndex, rContext);
+                }
+
+                // When a function is deleted, we just delete any instructions we can find until finding the function end.
+                if (opCode == SpvOpFunction) {
+                    bool foundFunctionEnd = false;
+                    uint32_t instructionCount = rContext.shader.instructions.size();
+                    for (uint32_t i = instructionIndex; (i < instructionCount) && !foundFunctionEnd; i++) {
+                        wordIndex = rContext.shader.instructions[i].wordIndex;
+                        if (optimizedWords[wordIndex] == UINT32_MAX) {
+                            continue;
+                        }
+
+                        opCode = SpvOp(optimizedWords[wordIndex] & 0xFFFFU);
+                        wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+                        foundFunctionEnd = opCode == SpvOpFunctionEnd;
+
+                        optimizerCheckOperands(opCode, wordIndex, wordCount);
+                        optimizerEliminateInstruction(i, rContext);
+                    }
+                }
+            }
+        }
+    }
+
+    static bool optimizerPrepareData(OptimizerContext &rContext) {
+        OptimizerContext &c = rContext;
+        c.resolutions.clear();
+        c.resolutions.resize(c.shader.results.size(), Resolution());
+        c.instructionAdjacentListIndices.resize(c.shader.instructionAdjacentListIndices.size());
+        c.instructionInDegrees.resize(c.shader.instructionInDegrees.size());
+        c.instructionOutDegrees.resize(c.shader.instructionOutDegrees.size());
+        c.listNodes.resize(c.shader.listNodes.size());
+        memcpy(c.instructionAdjacentListIndices.data(), c.shader.instructionAdjacentListIndices.data(), sizeof(uint32_t) * c.shader.instructionAdjacentListIndices.size());
+        memcpy(c.instructionInDegrees.data(), c.shader.instructionInDegrees.data(), sizeof(uint32_t) * c.shader.instructionInDegrees.size());
+        memcpy(c.instructionOutDegrees.data(), c.shader.instructionOutDegrees.data(), sizeof(uint32_t) * c.shader.instructionOutDegrees.size());
+        memcpy(c.listNodes.data(), c.shader.listNodes.data(), sizeof(ListNode) * c.shader.listNodes.size());
+
+        if (c.shader.inlinedSpirvWords.empty()) {
+            c.optimizedData.resize(c.shader.extSpirvWordCount * sizeof(uint32_t));
+            memcpy(c.optimizedData.data(), c.shader.extSpirvWords, c.optimizedData.size());
+        }
+        else {
+            c.optimizedData.resize(c.shader.inlinedSpirvWords.size() * sizeof(uint32_t));
+            memcpy(c.optimizedData.data(), c.shader.inlinedSpirvWords.data(), c.optimizedData.size());
+        }
+
+        return true;
+    }
+
+    static bool optimizerPatchSpecializationConstants(const SpecConstant *pNewSpecConstants, uint32_t pNewSpecConstantCount, OptimizerContext &rContext) {
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        for (uint32_t i = 0; i < pNewSpecConstantCount; i++) {
+            const SpecConstant &newSpecConstant = pNewSpecConstants[i];
+            if (newSpecConstant.specId >= rContext.shader.specializations.size()) {
+                continue;
+            }
+
+            const Specialization &specialization = rContext.shader.specializations[newSpecConstant.specId];
+            if (specialization.constantInstructionIndex == UINT32_MAX) {
+                continue;
+            }
+
+            uint32_t constantWordIndex = rContext.shader.instructions[specialization.constantInstructionIndex].wordIndex;
+            SpvOp constantOpCode = SpvOp(optimizedWords[constantWordIndex] & 0xFFFFU);
+            uint32_t constantWordCount = (optimizedWords[constantWordIndex] >> 16U) & 0xFFFFU;
+            switch (constantOpCode) {
+            case SpvOpSpecConstantTrue:
+            case SpvOpSpecConstantFalse:
+                optimizedWords[constantWordIndex] = (newSpecConstant.values[0] ? SpvOpConstantTrue : SpvOpConstantFalse) | (constantWordCount << 16U);
+                break;
+            case SpvOpSpecConstant:
+                if (constantWordCount <= 3) {
+                    fprintf(stderr, "Optimization error. Specialization constant has less words than expected.\n");
+                    return false;
+                }
+
+                if (newSpecConstant.values.size() != (constantWordCount - 3)) {
+                    fprintf(stderr, "Optimization error. Value count for specialization constant %u differs from the expected size.\n", newSpecConstant.specId);
+                    return false;
+                }
+
+                optimizedWords[constantWordIndex] = SpvOpConstant | (constantWordCount << 16U);
+                memcpy(&optimizedWords[constantWordIndex + 3], newSpecConstant.values.data(), sizeof(uint32_t) * (constantWordCount - 3));
+                break;
+            default:
+                fprintf(stderr, "Optimization error. Can't patch opCode %u.\n", constantOpCode);
+                return false;
+            }
+
+            // Eliminate the decorator instruction as well.
+            optimizerEliminateInstruction(specialization.decorationInstructionIndex, rContext);
+        }
+
+        return true;
+    }
+
+    static void optimizerEvaluateResult(uint32_t pResultId, OptimizerContext &rContext) {
+        const uint32_t *optimizedWords = reinterpret_cast<const uint32_t *>(rContext.optimizedData.data());
+        const Result &result = rContext.shader.results[pResultId];
+        Resolution &resolution = rContext.resolutions[pResultId];
+        uint32_t resultWordIndex = rContext.shader.instructions[result.instructionIndex].wordIndex;
+        SpvOp opCode = SpvOp(optimizedWords[resultWordIndex] & 0xFFFFU);
+        uint32_t wordCount = (optimizedWords[resultWordIndex] >> 16U) & 0xFFFFU;
+        switch (opCode) {
+        case SpvOpConstant: {
+            // Parse the known type of constants. Any other types will be considered as variable.
+            const Result &typeResult = rContext.shader.results[optimizedWords[resultWordIndex + 1]];
+            uint32_t typeWordIndex = rContext.shader.instructions[typeResult.instructionIndex].wordIndex;
+            SpvOp typeOpCode = SpvOp(optimizedWords[typeWordIndex] & 0xFFFFU);
+            uint32_t typeWidthInBits = optimizedWords[typeWordIndex + 2];
+            uint32_t typeSigned = optimizedWords[typeWordIndex + 3];
+            if ((typeOpCode == SpvOpTypeInt) && (typeWidthInBits == 32)) {
+                if (typeSigned) {
+                    resolution = Resolution::fromInt32(int32_t(optimizedWords[resultWordIndex + 3]));
+                }
+                else {
+                    resolution = Resolution::fromUint32(optimizedWords[resultWordIndex + 3]);
+                }
+            }
+            else {
+                resolution.type = Resolution::Type::Variable;
+            }
+
+            break;
+        }
+        case SpvOpConstantTrue:
+            resolution = Resolution::fromBool(true);
+            break;
+        case SpvOpConstantFalse:
+            resolution = Resolution::fromBool(false);
+            break;
+        case SpvOpBitcast: {
+            const Resolution &operandResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            resolution = Resolution::fromUint32(operandResolution.value.u32);
+            break;
+        }
+        case SpvOpIAdd: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.u32 + secondResolution.value.u32);
+            break;
+        }
+        case SpvOpISub: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.u32 - secondResolution.value.u32);
+            break;
+        }
+        case SpvOpIMul: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.u32 * secondResolution.value.u32);
+            break;
+        }
+        case SpvOpUDiv: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.u32 / secondResolution.value.u32);
+            break;
+        }
+        case SpvOpSDiv: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.i32 / secondResolution.value.i32);
+            break;
+        }
+        case SpvOpLogicalEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool((firstResolution.value.u32 != 0) == (secondResolution.value.u32 != 0));
+            break;
+        }
+        case SpvOpLogicalNotEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool((firstResolution.value.u32 != 0) != (secondResolution.value.u32 != 0));
+            break;
+        }
+        case SpvOpLogicalOr: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool((firstResolution.value.u32 != 0) || (secondResolution.value.u32 != 0));
+            break;
+        }
+        case SpvOpLogicalAnd: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool((firstResolution.value.u32 != 0) && (secondResolution.value.u32 != 0));
+            break;
+        }
+        case SpvOpLogicalNot: {
+            const Resolution &operandResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            resolution = Resolution::fromBool(operandResolution.value.u32 == 0);
+            break;
+        }
+        case SpvOpSelect: {
+            const Resolution &conditionResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 5]];
+            resolution = (conditionResolution.value.u32 != 0) ? firstResolution : secondResolution;
+            break;
+        }
+        case SpvOpIEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.u32 == secondResolution.value.u32);
+            break;
+        }
+        case SpvOpINotEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.u32 != secondResolution.value.u32);
+            break;
+        }
+        case SpvOpUGreaterThan: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.u32 > secondResolution.value.u32);
+            break;
+        }
+        case SpvOpSGreaterThan: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.i32 > secondResolution.value.i32);
+            break;
+        }
+        case SpvOpUGreaterThanEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.u32 >= secondResolution.value.u32);
+            break;
+        }
+        case SpvOpSGreaterThanEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.i32 >= secondResolution.value.i32);
+            break;
+        }
+        case SpvOpULessThan: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.u32 < secondResolution.value.u32);
+            break;
+        }
+        case SpvOpSLessThan: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.i32 < secondResolution.value.i32);
+            break;
+        }
+        case SpvOpULessThanEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.u32 <= secondResolution.value.u32);
+            break;
+        }
+        case SpvOpSLessThanEqual: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromBool(firstResolution.value.i32 <= secondResolution.value.i32);
+            break;
+        }
+        case SpvOpShiftRightLogical: {
+            const Resolution &baseResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &shiftResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(baseResolution.value.u32 >> shiftResolution.value.u32);
+            break;
+        }
+        case SpvOpShiftRightArithmetic: {
+            const Resolution &baseResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &shiftResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromInt32(baseResolution.value.i32 >> shiftResolution.value.i32);
+            break;
+        }
+        case SpvOpShiftLeftLogical: {
+            const Resolution &baseResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &shiftResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(baseResolution.value.u32 << shiftResolution.value.u32);
+            break;
+        }
+        case SpvOpBitwiseOr: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.u32 | secondResolution.value.u32);
+            break;
+        }
+        case SpvOpBitwiseAnd: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.u32 & secondResolution.value.u32);
+            break;
+        }
+        case SpvOpBitwiseXor: {
+            const Resolution &firstResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            const Resolution &secondResolution = rContext.resolutions[optimizedWords[resultWordIndex + 4]];
+            resolution = Resolution::fromUint32(firstResolution.value.u32 ^ secondResolution.value.u32);
+            break;
+        }
+        case SpvOpNot: {
+            const Resolution &operandResolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            resolution = Resolution::fromUint32(~operandResolution.value.u32);
+            break;
+        }
+        case SpvOpPhi: {
+            // Resolve as constant if Phi operator was compacted to only one option.
+            if (wordCount == 5) {
+                resolution = rContext.resolutions[optimizedWords[resultWordIndex + 3]];
+            }
+            else {
+                resolution.type = Resolution::Type::Variable;
+            }
+
+            break;
+        }
+        default:
+            // It's not known how to evaluate the instruction, consider the result a variable.
+            resolution.type = Resolution::Type::Variable;
+            break;
+        }
+    }
+
+    static void optimizerReduceLabelDegree(uint32_t pFirstLabelId, OptimizerContext &rContext) {
+        thread_local std::vector<uint32_t> labelStack;
+        thread_local std::vector<uint32_t> resultStack;
+        thread_local std::vector<uint32_t> degreeReductions;
+        labelStack.emplace_back(pFirstLabelId);
+        resultStack.clear();
+        degreeReductions.clear();
+
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        while (!labelStack.empty()) {
+            uint32_t labelId = labelStack.back();
+            labelStack.pop_back();
+
+            uint32_t instructionIndex = rContext.shader.results[labelId].instructionIndex;
+            if (rContext.instructionInDegrees[instructionIndex] == 0) {
+                continue;
+            }
+
+            rContext.instructionInDegrees[instructionIndex]--;
+
+            // If a label's degree becomes 0, eliminate all the instructions of the block.
+            // Eliminate as many instructions as possible until finding the terminator of the block.
+            // When finding the terminator, look at the labels it has and push them to the stack to
+            // reduce their degrees as well.
+            if (rContext.instructionInDegrees[instructionIndex] == 0) {
+                bool foundTerminator = false;
+                uint32_t instructionCount = rContext.shader.instructions.size();
+                for (uint32_t i = instructionIndex; (i < instructionCount) && !foundTerminator; i++) {
+                    uint32_t wordIndex = rContext.shader.instructions[i].wordIndex;
+                    if (optimizedWords[wordIndex] == UINT32_MAX) {
+                        continue;
+                    }
+
+                    // If the instruction has labels it can reference, we push the labels to reduce their degrees as well.
+                    SpvOp opCode = SpvOp(optimizedWords[wordIndex] & 0xFFFFU);
+                    uint32_t wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+                    uint32_t labelWordStart, labelWordCount, labelWordStride;
+                    if (SpvHasLabels(opCode, labelWordStart, labelWordCount, labelWordStride, false)) {
+                        for (uint32_t j = 0; (j < labelWordCount) && ((labelWordStart + j * labelWordStride) < wordCount); j++) {
+                            uint32_t terminatorLabelId = optimizedWords[wordIndex + labelWordStart + j * labelWordStride];
+                            labelStack.emplace_back(terminatorLabelId);
+                        }
+                    }
+
+                    // If the instruction has operands, decrease their degree.
+                    uint32_t operandWordStart, operandWordCount, operandWordStride, operandWordSkip;
+                    bool operandWordSkipString;
+                    if (SpvHasOperands(opCode, operandWordStart, operandWordCount, operandWordStride, operandWordSkip, operandWordSkipString, true)) {
+                        uint32_t operandWordIndex = operandWordStart;
+                        for (uint32_t j = 0; j < operandWordCount; j++) {
+                            if (checkOperandWordSkip(wordIndex, optimizedWords, j, operandWordSkip, operandWordSkipString, operandWordIndex)) {
+                                continue;
+                            }
+
+                            if (operandWordIndex >= wordCount) {
+                                break;
+                            }
+
+                            uint32_t operandId = optimizedWords[wordIndex + operandWordIndex];
+                            resultStack.emplace_back(operandId);
+                            operandWordIndex += operandWordStride;
+                        }
+                    }
+
+                    foundTerminator = SpvOpIsTerminator(opCode);
+                    optimizerEliminateInstruction(i, rContext);
+                }
+            }
+        }
+
+        optimizerReduceResultDegrees(rContext, resultStack);
+    }
+
+    static void optimizerEvaluateTerminator(uint32_t pInstructionIndex, OptimizerContext &rContext) {
+        // For each type of supported terminator, check if the operands can be resolved into constants.
+        // If they can be resolved, eliminate any other branches that don't pass the condition.
+        uint32_t wordIndex = rContext.shader.instructions[pInstructionIndex].wordIndex;
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        SpvOp opCode = SpvOp(optimizedWords[wordIndex] & 0xFFFFU);
+        uint32_t wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+        uint32_t defaultLabelId = UINT32_MAX;
+
+        // Both instructions share that the second word is the operator they must use to resolve the condition.
+        // Operator can't be anything but a constant to be able to resolve a terminator.
+        const uint32_t operatorId = optimizedWords[wordIndex + 1];
+        const Resolution &operatorResolution = rContext.resolutions[operatorId];
+        if (operatorResolution.type != Resolution::Type::Constant) {
+            return;
+        }
+        
+        if (opCode == SpvOpBranchConditional) {
+            // Branch conditional only needs to choose either label depending on whether the result is true or false.
+            if (operatorResolution.value.u32) {
+                defaultLabelId = optimizedWords[wordIndex + 2];
+                optimizerReduceLabelDegree(optimizedWords[wordIndex + 3], rContext);
+            }
+            else {
+                defaultLabelId = optimizedWords[wordIndex + 3];
+                optimizerReduceLabelDegree(optimizedWords[wordIndex + 2], rContext);
+            }
+
+            // If there's a selection merge before this branch, we place the unconditional branch in its place.
+            const uint32_t mergeWordCount = 3;
+            uint32_t mergeWordIndex = wordIndex - mergeWordCount;
+            SpvOp mergeOpCode = SpvOp(optimizedWords[mergeWordIndex] & 0xFFFFU);
+
+            uint32_t patchWordIndex;
+            if (mergeOpCode == SpvOpSelectionMerge) {
+                optimizerReduceLabelDegree(optimizedWords[mergeWordIndex + 1], rContext);
+                patchWordIndex = mergeWordIndex;
+            }
+            else {
+                patchWordIndex = wordIndex;
+            }
+
+            // Make the final label the new default case and reduce the word count.
+            optimizedWords[patchWordIndex] = SpvOpBranch | (2U << 16U);
+            optimizedWords[patchWordIndex + 1] = defaultLabelId;
+
+            // Eliminate any remaining words on the block.
+            for (uint32_t i = patchWordIndex + 2; i < (wordIndex + wordCount); i++) {
+                optimizedWords[i] = UINT32_MAX;
+            }
+        }
+        else if (opCode == SpvOpSwitch) {
+            // Switch must compare the integer result of the operator to all the possible labels.
+            // If the label is not as possible result, then reduce its block's degree.
+            for (uint32_t i = 3; i < wordCount; i += 2) {
+                if (operatorResolution.value.u32 == optimizedWords[wordIndex + i]) {
+                    defaultLabelId = optimizedWords[wordIndex + i + 1];
+                }
+                else {
+                    optimizerReduceLabelDegree(optimizedWords[wordIndex + i + 1], rContext);
+                }
+            }
+
+            // If none are chosen, the default label is selected. Otherwise, reduce the block's degree
+            // for the default label.
+            if (defaultLabelId == UINT32_MAX) {
+                defaultLabelId = optimizedWords[wordIndex + 2];
+            }
+            else {
+                optimizerReduceLabelDegree(optimizedWords[wordIndex + 2], rContext);
+            }
+
+            // Make the final label the new default case and reduce the word count.
+            optimizedWords[wordIndex] = SpvOpSwitch | (3U << 16U);
+            optimizedWords[wordIndex + 1] = rContext.shader.defaultSwitchOpConstantInt;
+            optimizedWords[wordIndex + 2] = defaultLabelId;
+
+            // Increase the degree of the default constant that was chosen so it's not considered as dead code.
+            uint32_t defaultConstantInstructionIndex = rContext.shader.results[rContext.shader.defaultSwitchOpConstantInt].instructionIndex;
+            rContext.instructionOutDegrees[defaultConstantInstructionIndex]++;
+
+            // Eliminate any remaining words on the block.
+            for (uint32_t i = wordIndex + 3; i < (wordIndex + wordCount); i++) {
+                optimizedWords[i] = UINT32_MAX;
+            }
+        }
+
+        // The condition operator can be discarded.
+        thread_local std::vector<uint32_t> resultStack;
+        resultStack.clear();
+        resultStack.emplace_back(operatorId);
+        optimizerReduceResultDegrees(rContext, resultStack);
+    }
+
+    static bool optimizerCompactPhi(uint32_t pInstructionIndex, OptimizerContext &rContext) {
+        // Do a backwards search first to find out what label this instruction belongs to.
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        uint32_t searchInstructionIndex = pInstructionIndex;
+        uint32_t instructionLabelId = UINT32_MAX;
+        while (searchInstructionIndex > 0) {
+            uint32_t searchWordIndex = rContext.shader.instructions[searchInstructionIndex].wordIndex;
+            SpvOp searchOpCode = SpvOp(optimizedWords[searchWordIndex] & 0xFFFFU);
+            if (searchOpCode == SpvOpLabel) {
+                instructionLabelId = optimizedWords[searchWordIndex + 1];
+                break;
+            }
+
+            searchInstructionIndex--;
+        }
+
+        if (instructionLabelId == UINT32_MAX) {
+            fprintf(stderr, "Unable to find a label before OpPhi.\n");
+            return false;
+        }
+
+        thread_local std::vector<uint32_t> resultStack;
+        resultStack.clear();
+
+        uint32_t wordIndex = rContext.shader.instructions[pInstructionIndex].wordIndex;
+        uint32_t wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+        uint32_t newWordCount = 3;
+        uint32_t instructionCount = rContext.shader.instructions.size();
+        for (uint32_t i = 3; i < wordCount; i += 2) {
+            uint32_t labelId = optimizedWords[wordIndex + i + 1];
+            uint32_t labelInstructionIndex = rContext.shader.results[labelId].instructionIndex;
+            uint32_t labelWordIndex = rContext.shader.instructions[labelInstructionIndex].wordIndex;
+
+            // Label's been eliminated. Skip it.
+            if (optimizedWords[labelWordIndex] == UINT32_MAX) {
+                resultStack.emplace_back(optimizedWords[wordIndex + i]);
+                continue;
+            }
+
+            // While the label may not have been eliminated, verify its terminator is still pointing to this block.
+            bool foundBranchToThisBlock = false;
+            for (uint32_t j = labelInstructionIndex; j < instructionCount; j++) {
+                uint32_t searchWordIndex = rContext.shader.instructions[j].wordIndex;
+                SpvOp searchOpCode = SpvOp(optimizedWords[searchWordIndex] & 0xFFFFU);
+                uint32_t searchWordCount = (optimizedWords[searchWordIndex] >> 16U) & 0xFFFFU;
+                if (SpvOpIsTerminator(searchOpCode)) {
+                    uint32_t labelWordStart, labelWordCount, labelWordStride;
+                    if (SpvHasLabels(searchOpCode, labelWordStart, labelWordCount, labelWordStride, false)) {
+                        for (uint32_t j = 0; (j < labelWordCount) && ((labelWordStart + j * labelWordStride) < searchWordCount); j++) {
+                            uint32_t searchLabelId = optimizedWords[searchWordIndex + labelWordStart + j * labelWordStride];
+                            if (searchLabelId == instructionLabelId) {
+                                foundBranchToThisBlock = true;
+                                break;
+                            }
+                        }
+                    }
+
+                    break;
+                }
+            }
+
+            // The preceding block did not have any reference to this block. Skip it.
+            if (!foundBranchToThisBlock) {
+                resultStack.emplace_back(optimizedWords[wordIndex + i]);
+                continue;
+            }
+
+            // Copy the words.
+            optimizedWords[wordIndex + newWordCount + 0] = optimizedWords[wordIndex + i + 0];
+            optimizedWords[wordIndex + newWordCount + 1] = optimizedWords[wordIndex + i + 1];
+            newWordCount += 2;
+        }
+
+        // Patch in the new word count.
+        assert((optimizedWords[wordIndex] != UINT32_MAX) && "The instruction shouldn't be getting deleted from reducing the degree of the operands.");
+        optimizedWords[wordIndex] = SpvOpPhi | (newWordCount << 16U);
+
+        // Delete any of the remaining words.
+        for (uint32_t i = newWordCount; i < wordCount; i++) {
+            optimizedWords[wordIndex + i] = UINT32_MAX;
+        }
+
+        optimizerReduceResultDegrees(rContext, resultStack);
+
+        return true;
+    }
+
+    static bool optimizerRunEvaluationPass(OptimizerContext &rContext) {
+        if (!rContext.options.removeDeadCode) {
+            return true;
+        }
+
+        thread_local std::vector<uint32_t> resultStack;
+        resultStack.clear();
+
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        uint32_t orderCount = uint32_t(rContext.shader.instructionOrder.size());
+        for (uint32_t i = 0; i < orderCount; i++) {
+            uint32_t instructionIndex = rContext.shader.instructionOrder[i];
+            uint32_t wordIndex = rContext.shader.instructions[instructionIndex].wordIndex;
+
+            // Instruction has been deleted.
+            if (optimizedWords[wordIndex] == UINT32_MAX) {
+                continue;
+            }
+
+            SpvOp opCode = SpvOp(optimizedWords[wordIndex] & 0xFFFFU);
+            uint32_t wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+            uint32_t patchedWordCount = wordCount;
+            bool hasResult, hasType;
+            SpvHasResultAndType(opCode, &hasResult, &hasType);
+
+            if (hasResult) {
+                const uint32_t resultId = optimizedWords[wordIndex + (hasType ? 2 : 1)];
+                if ((opCode != SpvOpLabel) && (opCode != SpvOpFunctionCall) && (rContext.instructionOutDegrees[instructionIndex] == 0)) {
+                    resultStack.emplace_back(resultId);
+                }
+                else {
+                    if (opCode == SpvOpPhi) {
+                        if (optimizerCompactPhi(instructionIndex, rContext)) {
+                            patchedWordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+                        }
+                        else {
+                            return false;
+                        }
+                    }
+
+                    // Check if any of the operands isn't a constant.
+                    bool allOperandsAreConstant = true;
+                    uint32_t operandWordStart, operandWordCount, operandWordStride, operandWordSkip;
+                    bool operandWordSkipString;
+                    if (SpvHasOperands(opCode, operandWordStart, operandWordCount, operandWordStride, operandWordSkip, operandWordSkipString, true)) {
+                        uint32_t operandWordIndex = operandWordStart;
+                        for (uint32_t j = 0; j < operandWordCount; j++) {
+                            if (checkOperandWordSkip(wordIndex, optimizedWords, j, operandWordSkip, operandWordSkipString, operandWordIndex)) {
+                                continue;
+                            }
+
+                            if (operandWordIndex >= patchedWordCount) {
+                                break;
+                            }
+
+                            uint32_t operandId = optimizedWords[wordIndex + operandWordIndex];
+                            assert((operandId != UINT32_MAX) && "An operand that's been deleted shouldn't be getting evaluated.");
+
+                            // It shouldn't be possible for an operand to not be solved, but OpPhi can do so because previous blocks might've been deleted.
+                            if ((opCode != SpvOpPhi) && (rContext.resolutions[operandId].type == Resolution::Type::Unknown)) {
+                                fprintf(stderr, "Error in resolution of the operations. Operand %u was not solved.\n", operandId);
+                                return false;
+                            }
+
+                            if (rContext.resolutions[operandId].type == Resolution::Type::Variable) {
+                                allOperandsAreConstant = false;
+                                break;
+                            }
+
+                            operandWordIndex += operandWordStride;
+                        }
+                    }
+
+                    // The result can only be evaluated if all operands are constant.
+                    if (allOperandsAreConstant) {
+                        optimizerEvaluateResult(resultId, rContext);
+                    }
+                    else {
+                        rContext.resolutions[resultId].type = Resolution::Type::Variable;
+                    }
+                }
+            }
+            else if ((opCode == SpvOpBranchConditional) || (opCode == SpvOpSwitch)) {
+                optimizerEvaluateTerminator(instructionIndex, rContext);
+            }
+        }
+
+        optimizerReduceResultDegrees(rContext, resultStack);
+
+        return true;
+    }
+
+    static bool optimizerDoesInstructionDominate(const Shader &pShader, const Instruction &pInstructionA, const Instruction &pInstructionB) {
+        // If on the same block, the instruction will only dominate the other one if it precedes it.
+        if (pInstructionA.blockIndex == pInstructionB.blockIndex) {
+            return pInstructionA.wordIndex < pInstructionB.wordIndex;
+        }
+        // If the blocks are different, compare the indices of the pre-order and post-order traversal
+        // to determine whether it dominates the other block.
+        else {
+            const uint32_t aPreIndex = pShader.blockPreOrderIndices[pInstructionA.blockIndex];
+            const uint32_t bPreIndex = pShader.blockPreOrderIndices[pInstructionB.blockIndex];
+            const uint32_t aPostIndex = pShader.blockPostOrderIndices[pInstructionA.blockIndex];
+            const uint32_t bPostIndex = pShader.blockPostOrderIndices[pInstructionB.blockIndex];
+            return (aPreIndex < bPreIndex) && (aPostIndex > bPostIndex);
+        }
+    }
+
+    static bool optimizerRemoveUnusedVariables(OptimizerContext &rContext) {
+        if (!rContext.options.removeDeadCode) {
+            return true;
+        }
+
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        int32_t orderCount = int32_t(rContext.shader.variableOrder.size());
+        for (int32_t i = orderCount - 1; i >= 0; i--) {
+            uint32_t instructionIndex = rContext.shader.variableOrder[i];
+            const Instruction &instruction = rContext.shader.instructions[instructionIndex];
+            uint32_t resultId = optimizedWords[instruction.wordIndex + 2];
+            if (resultId == UINT32_MAX) {
+                // This variable has already been deleted.
+                continue;
+            }
+            
+            SpvStorageClass storageClass = SpvStorageClass(optimizedWords[instruction.wordIndex + 3]);
+            if (storageClass != SpvStorageClassFunction) {
+                // Only evaluate variables local to the function.
+                continue;
+            }
+
+            thread_local std::vector<uint32_t> resultStack;
+            thread_local std::vector<uint32_t> accessStack;
+            thread_local std::vector<uint32_t> storeInstructionIndices;
+            thread_local std::vector<uint32_t> partialLoadInstructionIndices;
+            thread_local std::vector<uint32_t> fullLoadInstructionIndices;
+            bool storeIsFull = true;
+            resultStack.clear();
+            accessStack.clear();
+            storeInstructionIndices.clear();
+            partialLoadInstructionIndices.clear();
+            fullLoadInstructionIndices.clear();
+            accessStack.emplace_back(instructionIndex);
+            while (!accessStack.empty()) {
+                uint32_t accessInstructionIndex = accessStack.back();
+                const Instruction &accessInstruction = rContext.shader.instructions[accessInstructionIndex];
+                accessStack.pop_back();
+
+                if (rContext.instructionOutDegrees[accessInstructionIndex] > 0) {
+                    uint32_t listIndex = rContext.instructionAdjacentListIndices[accessInstructionIndex];
+                    while (listIndex != UINT32_MAX) {
+                        uint32_t adjacentInstructionIndex = rContext.listNodes[listIndex].instructionIndex;
+                        uint32_t adjacentWordIndex = rContext.shader.instructions[adjacentInstructionIndex].wordIndex;
+                        listIndex = rContext.listNodes[listIndex].nextListIndex;
+
+                        // Only check the instruction if it hasn't been deleted yet.
+                        if (optimizedWords[adjacentWordIndex] != UINT32_MAX) {
+                            SpvOp opCode = SpvOp(optimizedWords[adjacentWordIndex] & 0xFFFFU);
+                            if (opCode == SpvOpAccessChain) {
+                                accessStack.emplace_back(adjacentInstructionIndex);
+                            }
+                            else if (opCode == SpvOpStore) {
+                                storeInstructionIndices.emplace_back(adjacentInstructionIndex);
+                                storeIsFull = storeIsFull && (optimizedWords[adjacentWordIndex + 1] == resultId);
+                            }
+                            else if (opCode == SpvOpLoad) {
+                                if (optimizedWords[adjacentWordIndex + 3] == resultId) {
+                                    fullLoadInstructionIndices.emplace_back(adjacentInstructionIndex);
+                                }
+                                else {
+                                    partialLoadInstructionIndices.emplace_back(adjacentInstructionIndex);
+                                }
+                            }
+                            else {
+                                // The whole search process is stopped if anything in the access chain is not recognized.
+                                accessStack.clear();
+                                storeInstructionIndices.clear();
+                                fullLoadInstructionIndices.clear();
+                                partialLoadInstructionIndices.clear();
+                                listIndex = UINT32_MAX;
+                            }
+                        }
+                    }
+                }
+                else {
+                    resultStack.emplace_back(resultId);
+                }
+            }
+
+            // Single store load elimination. Any variables that are only stored to once can eliminate any loads
+            // and remap the results of the adjacent instructions. However, a strict requirement is that the block
+            // that holds the store must dominate the block that holds the load as per SPIR-V rules.
+            size_t fullLoadInstructionsEliminated = 0;
+            if (!fullLoadInstructionIndices.empty() && (storeInstructionIndices.size() == 1) && storeIsFull) {
+                uint32_t storeInstructionIndex = storeInstructionIndices.front();
+                const Instruction &storeInstruction = rContext.shader.instructions[storeInstructionIndex];
+                if (optimizedWords[storeInstruction.wordIndex] != UINT32_MAX) {
+                    uint32_t storeResultId = optimizedWords[storeInstruction.wordIndex + 2];
+                    uint32_t storeResultInstructionIndex = rContext.shader.results[storeResultId].instructionIndex;
+                    for (uint32_t loadInstructionIndex : fullLoadInstructionIndices) {
+                        const Instruction &loadInstruction = rContext.shader.instructions[loadInstructionIndex];
+                        uint32_t loadWordIndex = loadInstruction.wordIndex;
+                        if (optimizedWords[loadWordIndex] == UINT32_MAX) {
+                            // Instruction has been deleted already.
+                            continue;
+                        }
+
+                        if (!optimizerDoesInstructionDominate(rContext.shader, storeInstruction, loadInstruction)) {
+                            // Store's block must dominate the load's block for the elimination to be possible.
+                            continue;
+                        }
+
+                        uint32_t loadResultId = optimizedWords[loadWordIndex + 2];
+                        uint32_t listIndex = rContext.instructionAdjacentListIndices[loadInstructionIndex];
+                        while (listIndex != UINT32_MAX) {
+                            uint32_t adjacentInstructionIndex = rContext.listNodes[listIndex].instructionIndex;
+                            uint32_t adjacentWordIndex = rContext.shader.instructions[adjacentInstructionIndex].wordIndex;
+                            if (optimizedWords[adjacentWordIndex] != UINT32_MAX) {
+                                SpvOp adjacentOpCode = SpvOp(optimizedWords[adjacentWordIndex] & 0xFFFFU);
+                                uint32_t adjancentWordCount = (optimizedWords[adjacentWordIndex] >> 16U) & 0xFFFFU;
+                                uint32_t operandWordStart, operandWordCount, operandWordStride, operandWordSkip;
+                                bool operandWordSkipString;
+                                if (SpvHasOperands(adjacentOpCode, operandWordStart, operandWordCount, operandWordStride, operandWordSkip, operandWordSkipString, true)) {
+                                    uint32_t operandWordIndex = operandWordStart;
+                                    for (uint32_t j = 0; j < operandWordCount; j++) {
+                                        if (checkOperandWordSkip(adjacentWordIndex, optimizedWords, j, operandWordSkip, operandWordSkipString, operandWordIndex)) {
+                                            continue;
+                                        }
+
+                                        if (operandWordIndex >= adjancentWordCount) {
+                                            break;
+                                        }
+
+                                        uint32_t shaderWordIndex = adjacentWordIndex + operandWordIndex;
+                                        uint32_t &operandId = optimizedWords[shaderWordIndex];
+                                        if (operandId == loadResultId) {
+                                            operandId = storeResultId;
+                                            resultStack.emplace_back(loadResultId);
+                                            rContext.instructionAdjacentListIndices[storeResultInstructionIndex] = addToList(adjacentInstructionIndex, rContext.instructionAdjacentListIndices[storeResultInstructionIndex], rContext.listNodes);
+                                            rContext.instructionOutDegrees[storeResultInstructionIndex]++;
+                                        }
+
+                                        operandWordIndex += operandWordStride;
+                                    }
+                                }
+                            }
+
+                            listIndex = rContext.listNodes[listIndex].nextListIndex;
+                        }
+
+                        fullLoadInstructionsEliminated++;
+                    }
+                }
+            }
+            
+            if ((fullLoadInstructionIndices.size() == fullLoadInstructionsEliminated) && partialLoadInstructionIndices.empty()) {
+                // Unused store elimination. Any variables which have no loads but have stores can be eliminated.
+                for (uint32_t storeInstructionIndex : storeInstructionIndices) {
+                    uint32_t storeWordIndex = rContext.shader.instructions[storeInstructionIndex].wordIndex;
+                    if (optimizedWords[storeWordIndex] == UINT32_MAX) {
+                        // Instruction has been deleted already.
+                        continue;
+                    }
+
+                    resultStack.emplace_back(optimizedWords[storeWordIndex + 1]);
+                    resultStack.emplace_back(optimizedWords[storeWordIndex + 2]);
+                    optimizerEliminateInstruction(storeInstructionIndex, rContext);
+                }
+            }
+
+            optimizerReduceResultDegrees(rContext, resultStack);
+        }
+
+        return true;
+    }
+
+    static bool optimizerRemoveUnusedDecorations(OptimizerContext &rContext) {
+        if (!rContext.options.removeDeadCode) {
+            return true;
+        }
+
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        for (Decoration decoration : rContext.shader.decorations) {
+            uint32_t wordIndex = rContext.shader.instructions[decoration.instructionIndex].wordIndex;
+            uint32_t resultId = optimizedWords[wordIndex + 1];
+            if (resultId == UINT32_MAX) {
+                // This decoration has already been deleted.
+                continue;
+            }
+
+            uint32_t resultInstructionIndex = rContext.shader.results[resultId].instructionIndex;
+            uint32_t resultWordIndex = rContext.shader.instructions[resultInstructionIndex].wordIndex;
+
+            // The result has been deleted, so we delete the decoration as well.
+            if (optimizedWords[resultWordIndex] == UINT32_MAX) {
+                optimizerEliminateInstruction(decoration.instructionIndex, rContext);
+            }
+        }
+
+        return true;
+    }
+
+    static bool optimizerCompactPhis(OptimizerContext &rContext) {
+        if (!rContext.options.removeDeadCode) {
+            return true;
+        }
+
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        for (Phi phi : rContext.shader.phis) {
+            uint32_t wordIndex = rContext.shader.instructions[phi.instructionIndex].wordIndex;
+            if (optimizedWords[wordIndex] == UINT32_MAX) {
+                // This operation has already been deleted.
+                continue;
+            }
+
+            if (!optimizerCompactPhi(phi.instructionIndex, rContext)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    static bool optimizerCompactData(OptimizerContext &rContext) {
+        uint32_t *optimizedWords = reinterpret_cast<uint32_t *>(rContext.optimizedData.data());
+        uint32_t optimizedWordCount = 0;
+        uint32_t instructionCount = rContext.shader.instructions.size();
+
+        // Copy the header.
+        const uint32_t startingWordIndex = 5;
+        for (uint32_t i = 0; i < startingWordIndex; i++) {
+            optimizedWords[optimizedWordCount++] = optimizedWords[i];
+        }
+
+        // Write out all the words for all the instructions and skip any that were marked as deleted.
+        for (uint32_t i = 0; i < instructionCount; i++) {
+            uint32_t wordIndex = rContext.shader.instructions[i].wordIndex;
+
+            // Instruction has been deleted.
+            if (optimizedWords[wordIndex] == UINT32_MAX) {
+                continue;
+            }
+
+            // Check if the instruction should be ignored.
+            SpvOp opCode = SpvOp(optimizedWords[wordIndex] & 0xFFFFU);
+            if (rContext.options.removeDeadCode && SpvIsIgnored(opCode)) {
+                continue;
+            }
+
+            // Copy all the words of the instruction.
+            uint32_t wordCount = (optimizedWords[wordIndex] >> 16U) & 0xFFFFU;
+            for (uint32_t j = 0; j < wordCount; j++) {
+                optimizedWords[optimizedWordCount++] = optimizedWords[wordIndex + j];
+            }
+        }
+
+        rContext.optimizedData.resize(optimizedWordCount * sizeof(uint32_t));
+
+        return true;
+    }
+
+    bool Optimizer::run(const Shader &pShader, const SpecConstant *pNewSpecConstants, uint32_t pNewSpecConstantCount, std::vector<uint8_t> &pOptimizedData, Options pOptions) {
+        thread_local std::vector<uint32_t> instructionAdjacentListIndices;
+        thread_local std::vector<uint32_t> instructionInDegrees;
+        thread_local std::vector<uint32_t> instructionOutDegrees;
+        thread_local std::vector<ListNode> listNodes;
+        thread_local std::vector<Resolution> resolutions;
+        OptimizerContext context = { pShader, instructionAdjacentListIndices, instructionInDegrees, instructionOutDegrees, listNodes, resolutions, pOptimizedData, pOptions };
+        if (!optimizerPrepareData(context)) {
+            return false;
+        }
+
+        if (!optimizerPatchSpecializationConstants(pNewSpecConstants, pNewSpecConstantCount, context)) {
+            return false;
+        }
+
+        if (!optimizerRunEvaluationPass(context)) {
+            return false;
+        }
+
+        if (!optimizerRemoveUnusedVariables(context)) {
+            return false;
+        }
+
+        if (!optimizerRemoveUnusedDecorations(context)) {
+            return false;
+        }
+
+        // FIXME: For some reason, it seems that based on the order of the resolution, OpPhis can be compacted
+        // before all their preceding blocks have been evaluated in time whether they should be deleted or not.
+        // This pass merely re-runs the compaction step as a safeguard to remove any stale references. There's
+        // potential for further optimization if this is fixed properly.
+        if (!optimizerCompactPhis(context)) {
+            return false;
+        }
+
+        if (!optimizerCompactData(context)) {
+            return false;
+        }
+
+        return true;
+    }
+    }; //namespace respv

+ 213 - 0
thirdparty/re-spirv/re-spirv.h

@@ -0,0 +1,213 @@
+//
+// re-spirv
+//
+// Copyright (c) 2024 renderbag and contributors. All rights reserved.
+// Licensed under the MIT license. See LICENSE file for details.
+//
+
+#pragma once
+
+#include <cstdint>
+#include <memory>
+#include <vector>
+
+namespace respv {
+    struct SpecConstant {
+        uint32_t specId = 0;
+        std::vector<uint32_t> values;
+
+        SpecConstant() {
+            // Empty constructor.
+        }
+
+        SpecConstant(uint32_t pSpecId, const std::vector<uint32_t> &pValues) {
+            specId = pSpecId;
+            values = pValues;
+        }
+    };
+
+    struct Instruction {
+        uint32_t wordIndex = UINT32_MAX;
+        uint32_t blockIndex = UINT32_MAX;
+
+        Instruction(uint32_t pWordIndex, uint32_t pBlockIndex) {
+            wordIndex = pWordIndex;
+            blockIndex = pBlockIndex;
+        }
+    };
+
+    struct Block {
+        uint32_t labelInstructionIndex = UINT32_MAX;
+        uint32_t terminatorInstructionIndex = UINT32_MAX;
+
+        Block() {
+            // Empty.
+        }
+
+        Block(uint32_t pLabelInstructionIndex, uint32_t pTerminatorInstructionIndex) {
+            labelInstructionIndex = pLabelInstructionIndex;
+            terminatorInstructionIndex = pTerminatorInstructionIndex;
+        }
+    };
+
+    struct Function {
+        uint32_t instructionIndex = UINT32_MAX;
+        uint32_t labelInstructionIndex = UINT32_MAX;
+
+        Function() {
+            // Empty.
+        }
+
+        Function(uint32_t pInstructionIndex, uint32_t pLabelInstructionIndex) {
+            instructionIndex = pInstructionIndex;
+            labelInstructionIndex = pLabelInstructionIndex;
+        }
+    };
+
+    struct Result {
+        uint32_t instructionIndex = UINT32_MAX;
+
+        Result() {
+            // Empty.
+        }
+
+        Result(uint32_t pInstructionIndex) {
+            instructionIndex = pInstructionIndex;
+        }
+    };
+
+    struct Specialization {
+        uint32_t constantInstructionIndex = UINT32_MAX;
+        uint32_t decorationInstructionIndex = UINT32_MAX;
+
+        Specialization() {
+            // Empty.
+        }
+
+        Specialization(uint32_t pConstantInstructionIndex, uint32_t pDecorationInstructionIndex) {
+            constantInstructionIndex = pConstantInstructionIndex;
+            decorationInstructionIndex = pDecorationInstructionIndex;
+        }
+    };
+
+    struct Decoration {
+        uint32_t instructionIndex = UINT32_MAX;
+
+        Decoration() {
+            // Empty.
+        }
+
+        Decoration(uint32_t pInstructionIndex) {
+            instructionIndex = pInstructionIndex;
+        }
+    };
+
+    struct Variable {
+        uint32_t instructionIndex = UINT32_MAX;
+
+        Variable() {
+            // Empty.
+        }
+
+        Variable(uint32_t pInstructionIndex) {
+            instructionIndex = pInstructionIndex;
+        }
+    };
+
+    struct AccessChain {
+        uint32_t instructionIndex = UINT32_MAX;
+
+        AccessChain() {
+            // Empty.
+        }
+
+        AccessChain(uint32_t pInstructionIndex) {
+            instructionIndex = pInstructionIndex;
+        }
+    };
+
+    struct Phi {
+        uint32_t instructionIndex = UINT32_MAX;
+
+        Phi() {
+            // Empty.
+        }
+
+        Phi(uint32_t pInstructionIndex) {
+            instructionIndex = pInstructionIndex;
+        }
+    };
+
+    struct LoopHeader {
+        uint32_t instructionIndex = UINT32_MAX;
+        uint32_t blockInstructionIndex = UINT32_MAX;
+
+        LoopHeader() {
+            // Empty.
+        }
+
+        LoopHeader(uint32_t pInstructionIndex, uint32_t pBlockInstructionIndex) {
+            instructionIndex = pInstructionIndex;
+            blockInstructionIndex = pBlockInstructionIndex;
+        }
+    };
+
+    struct ListNode {
+        uint32_t instructionIndex = UINT32_MAX;
+        uint32_t nextListIndex = UINT32_MAX;
+
+        ListNode() {
+            // Empty.
+        }
+
+        ListNode(uint32_t pInstructionIndex, uint32_t pNextListIndex) {
+            instructionIndex = pInstructionIndex;
+            nextListIndex = pNextListIndex;
+        }
+    };
+
+    struct Shader {
+        const uint32_t *extSpirvWords = nullptr;
+        size_t extSpirvWordCount = 0;
+        std::vector<uint32_t> inlinedSpirvWords;
+        std::vector<Instruction> instructions;
+        std::vector<uint32_t> instructionAdjacentListIndices;
+        std::vector<uint32_t> instructionInDegrees;
+        std::vector<uint32_t> instructionOutDegrees;
+        std::vector<uint32_t> instructionOrder;
+        std::vector<Block> blocks;
+        std::vector<uint32_t> blockPreOrderIndices;
+        std::vector<uint32_t> blockPostOrderIndices;
+        std::vector<Function> functions;
+        std::vector<uint32_t> variableOrder;
+        std::vector<Result> results;
+        std::vector<Specialization> specializations;
+        std::vector<Decoration> decorations;
+        std::vector<Phi> phis;
+        std::vector<LoopHeader> loopHeaders;
+        std::vector<ListNode> listNodes;
+        uint32_t defaultSwitchOpConstantInt = UINT32_MAX;
+
+        Shader();
+        
+        // Data is only copied if pInlineFunctions is true. An extra processing pass is required if inlining is enabled.
+        // This step is usually not required unless the shader compiler has disabled optimizations.
+        Shader(const void *pData, size_t pSize, bool pInlineFunctions);
+        void clear();
+        bool checkData(const void *pData, size_t pSize);
+        bool inlineData(const void *pData, size_t pSize);
+        bool parseData(const void *pData, size_t pSize);
+        bool parse(const void *pData, size_t pSize, bool pInlineFunctions);
+        bool process(const void *pData, size_t pSize);
+        bool sort(const void *pData, size_t pSize);
+        bool empty() const;
+    };
+
+    struct Options {
+        bool removeDeadCode = true;
+    };
+
+    struct Optimizer {
+        static bool run(const Shader &pShader, const SpecConstant *pNewSpecConstants, uint32_t pNewSpecConstantCount, std::vector<uint8_t> &pOptimizedData, Options pOptions = Options());
+    };
+};

+ 26 - 0
thirdparty/spirv-headers/LICENSE

@@ -0,0 +1,26 @@
+Files: All files except for those called out below.
+Copyright (c) 2015-2024 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+   https://www.khronos.org/registry/
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.

+ 5272 - 0
thirdparty/spirv-headers/include/spirv/unified1/spirv.h

@@ -0,0 +1,5272 @@
+/*
+** Copyright: 2014-2024 The Khronos Group Inc.
+** License: MIT
+** 
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS
+** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS
+** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT
+** https://www.khronos.org/registry/
+*/
+
+/*
+** This header is automatically generated by the same tool that creates
+** the Binary Section of the SPIR-V specification.
+*/
+
+/*
+** Enumeration tokens for SPIR-V, in various styles:
+**   C, C++, C++11, JSON, Lua, Python, C#, D, Beef
+** 
+** - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
+** - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
+** - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
+** - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
+** - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
+** - C# will use enum classes in the Specification class located in the "Spv" namespace,
+**     e.g.: Spv.Specification.SourceLanguage.GLSL
+** - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL
+** - Beef will use enum classes in the Specification class located in the "Spv" namespace,
+**     e.g.: Spv.Specification.SourceLanguage.GLSL
+** 
+** Some tokens act like mask values, which can be OR'd together,
+** while others are mutually exclusive.  The mask-like ones have
+** "Mask" in their name, and a parallel enum that has the shift
+** amount (1 << x) for each corresponding enumerant.
+*/
+
+#ifndef spirv_H
+#define spirv_H
+
+typedef unsigned int SpvId;
+
+#define SPV_VERSION 0x10600
+#define SPV_REVISION 1
+
+static const unsigned int SpvMagicNumber = 0x07230203;
+static const unsigned int SpvVersion = 0x00010600;
+static const unsigned int SpvRevision = 1;
+static const unsigned int SpvOpCodeMask = 0xffff;
+static const unsigned int SpvWordCountShift = 16;
+
+typedef enum SpvSourceLanguage_ {
+    SpvSourceLanguageUnknown = 0,
+    SpvSourceLanguageESSL = 1,
+    SpvSourceLanguageGLSL = 2,
+    SpvSourceLanguageOpenCL_C = 3,
+    SpvSourceLanguageOpenCL_CPP = 4,
+    SpvSourceLanguageHLSL = 5,
+    SpvSourceLanguageCPP_for_OpenCL = 6,
+    SpvSourceLanguageSYCL = 7,
+    SpvSourceLanguageHERO_C = 8,
+    SpvSourceLanguageNZSL = 9,
+    SpvSourceLanguageWGSL = 10,
+    SpvSourceLanguageSlang = 11,
+    SpvSourceLanguageZig = 12,
+    SpvSourceLanguageRust = 13,
+    SpvSourceLanguageMax = 0x7fffffff,
+} SpvSourceLanguage;
+
+typedef enum SpvExecutionModel_ {
+    SpvExecutionModelVertex = 0,
+    SpvExecutionModelTessellationControl = 1,
+    SpvExecutionModelTessellationEvaluation = 2,
+    SpvExecutionModelGeometry = 3,
+    SpvExecutionModelFragment = 4,
+    SpvExecutionModelGLCompute = 5,
+    SpvExecutionModelKernel = 6,
+    SpvExecutionModelTaskNV = 5267,
+    SpvExecutionModelMeshNV = 5268,
+    SpvExecutionModelRayGenerationKHR = 5313,
+    SpvExecutionModelRayGenerationNV = 5313,
+    SpvExecutionModelIntersectionKHR = 5314,
+    SpvExecutionModelIntersectionNV = 5314,
+    SpvExecutionModelAnyHitKHR = 5315,
+    SpvExecutionModelAnyHitNV = 5315,
+    SpvExecutionModelClosestHitKHR = 5316,
+    SpvExecutionModelClosestHitNV = 5316,
+    SpvExecutionModelMissKHR = 5317,
+    SpvExecutionModelMissNV = 5317,
+    SpvExecutionModelCallableKHR = 5318,
+    SpvExecutionModelCallableNV = 5318,
+    SpvExecutionModelTaskEXT = 5364,
+    SpvExecutionModelMeshEXT = 5365,
+    SpvExecutionModelMax = 0x7fffffff,
+} SpvExecutionModel;
+
+typedef enum SpvAddressingModel_ {
+    SpvAddressingModelLogical = 0,
+    SpvAddressingModelPhysical32 = 1,
+    SpvAddressingModelPhysical64 = 2,
+    SpvAddressingModelPhysicalStorageBuffer64 = 5348,
+    SpvAddressingModelPhysicalStorageBuffer64EXT = 5348,
+    SpvAddressingModelMax = 0x7fffffff,
+} SpvAddressingModel;
+
+typedef enum SpvMemoryModel_ {
+    SpvMemoryModelSimple = 0,
+    SpvMemoryModelGLSL450 = 1,
+    SpvMemoryModelOpenCL = 2,
+    SpvMemoryModelVulkan = 3,
+    SpvMemoryModelVulkanKHR = 3,
+    SpvMemoryModelMax = 0x7fffffff,
+} SpvMemoryModel;
+
+typedef enum SpvExecutionMode_ {
+    SpvExecutionModeInvocations = 0,
+    SpvExecutionModeSpacingEqual = 1,
+    SpvExecutionModeSpacingFractionalEven = 2,
+    SpvExecutionModeSpacingFractionalOdd = 3,
+    SpvExecutionModeVertexOrderCw = 4,
+    SpvExecutionModeVertexOrderCcw = 5,
+    SpvExecutionModePixelCenterInteger = 6,
+    SpvExecutionModeOriginUpperLeft = 7,
+    SpvExecutionModeOriginLowerLeft = 8,
+    SpvExecutionModeEarlyFragmentTests = 9,
+    SpvExecutionModePointMode = 10,
+    SpvExecutionModeXfb = 11,
+    SpvExecutionModeDepthReplacing = 12,
+    SpvExecutionModeDepthGreater = 14,
+    SpvExecutionModeDepthLess = 15,
+    SpvExecutionModeDepthUnchanged = 16,
+    SpvExecutionModeLocalSize = 17,
+    SpvExecutionModeLocalSizeHint = 18,
+    SpvExecutionModeInputPoints = 19,
+    SpvExecutionModeInputLines = 20,
+    SpvExecutionModeInputLinesAdjacency = 21,
+    SpvExecutionModeTriangles = 22,
+    SpvExecutionModeInputTrianglesAdjacency = 23,
+    SpvExecutionModeQuads = 24,
+    SpvExecutionModeIsolines = 25,
+    SpvExecutionModeOutputVertices = 26,
+    SpvExecutionModeOutputPoints = 27,
+    SpvExecutionModeOutputLineStrip = 28,
+    SpvExecutionModeOutputTriangleStrip = 29,
+    SpvExecutionModeVecTypeHint = 30,
+    SpvExecutionModeContractionOff = 31,
+    SpvExecutionModeInitializer = 33,
+    SpvExecutionModeFinalizer = 34,
+    SpvExecutionModeSubgroupSize = 35,
+    SpvExecutionModeSubgroupsPerWorkgroup = 36,
+    SpvExecutionModeSubgroupsPerWorkgroupId = 37,
+    SpvExecutionModeLocalSizeId = 38,
+    SpvExecutionModeLocalSizeHintId = 39,
+    SpvExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
+    SpvExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
+    SpvExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
+    SpvExecutionModeSubgroupUniformControlFlowKHR = 4421,
+    SpvExecutionModePostDepthCoverage = 4446,
+    SpvExecutionModeDenormPreserve = 4459,
+    SpvExecutionModeDenormFlushToZero = 4460,
+    SpvExecutionModeSignedZeroInfNanPreserve = 4461,
+    SpvExecutionModeRoundingModeRTE = 4462,
+    SpvExecutionModeRoundingModeRTZ = 4463,
+    SpvExecutionModeNonCoherentTileAttachmentReadQCOM = 4489,
+    SpvExecutionModeTileShadingRateQCOM = 4490,
+    SpvExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
+    SpvExecutionModeStencilRefReplacingEXT = 5027,
+    SpvExecutionModeCoalescingAMDX = 5069,
+    SpvExecutionModeIsApiEntryAMDX = 5070,
+    SpvExecutionModeMaxNodeRecursionAMDX = 5071,
+    SpvExecutionModeStaticNumWorkgroupsAMDX = 5072,
+    SpvExecutionModeShaderIndexAMDX = 5073,
+    SpvExecutionModeMaxNumWorkgroupsAMDX = 5077,
+    SpvExecutionModeStencilRefUnchangedFrontAMD = 5079,
+    SpvExecutionModeStencilRefGreaterFrontAMD = 5080,
+    SpvExecutionModeStencilRefLessFrontAMD = 5081,
+    SpvExecutionModeStencilRefUnchangedBackAMD = 5082,
+    SpvExecutionModeStencilRefGreaterBackAMD = 5083,
+    SpvExecutionModeStencilRefLessBackAMD = 5084,
+    SpvExecutionModeQuadDerivativesKHR = 5088,
+    SpvExecutionModeRequireFullQuadsKHR = 5089,
+    SpvExecutionModeSharesInputWithAMDX = 5102,
+    SpvExecutionModeOutputLinesEXT = 5269,
+    SpvExecutionModeOutputLinesNV = 5269,
+    SpvExecutionModeOutputPrimitivesEXT = 5270,
+    SpvExecutionModeOutputPrimitivesNV = 5270,
+    SpvExecutionModeDerivativeGroupQuadsKHR = 5289,
+    SpvExecutionModeDerivativeGroupQuadsNV = 5289,
+    SpvExecutionModeDerivativeGroupLinearKHR = 5290,
+    SpvExecutionModeDerivativeGroupLinearNV = 5290,
+    SpvExecutionModeOutputTrianglesEXT = 5298,
+    SpvExecutionModeOutputTrianglesNV = 5298,
+    SpvExecutionModePixelInterlockOrderedEXT = 5366,
+    SpvExecutionModePixelInterlockUnorderedEXT = 5367,
+    SpvExecutionModeSampleInterlockOrderedEXT = 5368,
+    SpvExecutionModeSampleInterlockUnorderedEXT = 5369,
+    SpvExecutionModeShadingRateInterlockOrderedEXT = 5370,
+    SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371,
+    SpvExecutionModeSharedLocalMemorySizeINTEL = 5618,
+    SpvExecutionModeRoundingModeRTPINTEL = 5620,
+    SpvExecutionModeRoundingModeRTNINTEL = 5621,
+    SpvExecutionModeFloatingPointModeALTINTEL = 5622,
+    SpvExecutionModeFloatingPointModeIEEEINTEL = 5623,
+    SpvExecutionModeMaxWorkgroupSizeINTEL = 5893,
+    SpvExecutionModeMaxWorkDimINTEL = 5894,
+    SpvExecutionModeNoGlobalOffsetINTEL = 5895,
+    SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
+    SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
+    SpvExecutionModeMaximallyReconvergesKHR = 6023,
+    SpvExecutionModeFPFastMathDefault = 6028,
+    SpvExecutionModeStreamingInterfaceINTEL = 6154,
+    SpvExecutionModeRegisterMapInterfaceINTEL = 6160,
+    SpvExecutionModeNamedBarrierCountINTEL = 6417,
+    SpvExecutionModeMaximumRegistersINTEL = 6461,
+    SpvExecutionModeMaximumRegistersIdINTEL = 6462,
+    SpvExecutionModeNamedMaximumRegistersINTEL = 6463,
+    SpvExecutionModeMax = 0x7fffffff,
+} SpvExecutionMode;
+
+typedef enum SpvStorageClass_ {
+    SpvStorageClassUniformConstant = 0,
+    SpvStorageClassInput = 1,
+    SpvStorageClassUniform = 2,
+    SpvStorageClassOutput = 3,
+    SpvStorageClassWorkgroup = 4,
+    SpvStorageClassCrossWorkgroup = 5,
+    SpvStorageClassPrivate = 6,
+    SpvStorageClassFunction = 7,
+    SpvStorageClassGeneric = 8,
+    SpvStorageClassPushConstant = 9,
+    SpvStorageClassAtomicCounter = 10,
+    SpvStorageClassImage = 11,
+    SpvStorageClassStorageBuffer = 12,
+    SpvStorageClassTileImageEXT = 4172,
+    SpvStorageClassTileAttachmentQCOM = 4491,
+    SpvStorageClassNodePayloadAMDX = 5068,
+    SpvStorageClassCallableDataKHR = 5328,
+    SpvStorageClassCallableDataNV = 5328,
+    SpvStorageClassIncomingCallableDataKHR = 5329,
+    SpvStorageClassIncomingCallableDataNV = 5329,
+    SpvStorageClassRayPayloadKHR = 5338,
+    SpvStorageClassRayPayloadNV = 5338,
+    SpvStorageClassHitAttributeKHR = 5339,
+    SpvStorageClassHitAttributeNV = 5339,
+    SpvStorageClassIncomingRayPayloadKHR = 5342,
+    SpvStorageClassIncomingRayPayloadNV = 5342,
+    SpvStorageClassShaderRecordBufferKHR = 5343,
+    SpvStorageClassShaderRecordBufferNV = 5343,
+    SpvStorageClassPhysicalStorageBuffer = 5349,
+    SpvStorageClassPhysicalStorageBufferEXT = 5349,
+    SpvStorageClassHitObjectAttributeNV = 5385,
+    SpvStorageClassTaskPayloadWorkgroupEXT = 5402,
+    SpvStorageClassCodeSectionINTEL = 5605,
+    SpvStorageClassDeviceOnlyINTEL = 5936,
+    SpvStorageClassHostOnlyINTEL = 5937,
+    SpvStorageClassMax = 0x7fffffff,
+} SpvStorageClass;
+
+typedef enum SpvDim_ {
+    SpvDim1D = 0,
+    SpvDim2D = 1,
+    SpvDim3D = 2,
+    SpvDimCube = 3,
+    SpvDimRect = 4,
+    SpvDimBuffer = 5,
+    SpvDimSubpassData = 6,
+    SpvDimTileImageDataEXT = 4173,
+    SpvDimMax = 0x7fffffff,
+} SpvDim;
+
+typedef enum SpvSamplerAddressingMode_ {
+    SpvSamplerAddressingModeNone = 0,
+    SpvSamplerAddressingModeClampToEdge = 1,
+    SpvSamplerAddressingModeClamp = 2,
+    SpvSamplerAddressingModeRepeat = 3,
+    SpvSamplerAddressingModeRepeatMirrored = 4,
+    SpvSamplerAddressingModeMax = 0x7fffffff,
+} SpvSamplerAddressingMode;
+
+typedef enum SpvSamplerFilterMode_ {
+    SpvSamplerFilterModeNearest = 0,
+    SpvSamplerFilterModeLinear = 1,
+    SpvSamplerFilterModeMax = 0x7fffffff,
+} SpvSamplerFilterMode;
+
+typedef enum SpvImageFormat_ {
+    SpvImageFormatUnknown = 0,
+    SpvImageFormatRgba32f = 1,
+    SpvImageFormatRgba16f = 2,
+    SpvImageFormatR32f = 3,
+    SpvImageFormatRgba8 = 4,
+    SpvImageFormatRgba8Snorm = 5,
+    SpvImageFormatRg32f = 6,
+    SpvImageFormatRg16f = 7,
+    SpvImageFormatR11fG11fB10f = 8,
+    SpvImageFormatR16f = 9,
+    SpvImageFormatRgba16 = 10,
+    SpvImageFormatRgb10A2 = 11,
+    SpvImageFormatRg16 = 12,
+    SpvImageFormatRg8 = 13,
+    SpvImageFormatR16 = 14,
+    SpvImageFormatR8 = 15,
+    SpvImageFormatRgba16Snorm = 16,
+    SpvImageFormatRg16Snorm = 17,
+    SpvImageFormatRg8Snorm = 18,
+    SpvImageFormatR16Snorm = 19,
+    SpvImageFormatR8Snorm = 20,
+    SpvImageFormatRgba32i = 21,
+    SpvImageFormatRgba16i = 22,
+    SpvImageFormatRgba8i = 23,
+    SpvImageFormatR32i = 24,
+    SpvImageFormatRg32i = 25,
+    SpvImageFormatRg16i = 26,
+    SpvImageFormatRg8i = 27,
+    SpvImageFormatR16i = 28,
+    SpvImageFormatR8i = 29,
+    SpvImageFormatRgba32ui = 30,
+    SpvImageFormatRgba16ui = 31,
+    SpvImageFormatRgba8ui = 32,
+    SpvImageFormatR32ui = 33,
+    SpvImageFormatRgb10a2ui = 34,
+    SpvImageFormatRg32ui = 35,
+    SpvImageFormatRg16ui = 36,
+    SpvImageFormatRg8ui = 37,
+    SpvImageFormatR16ui = 38,
+    SpvImageFormatR8ui = 39,
+    SpvImageFormatR64ui = 40,
+    SpvImageFormatR64i = 41,
+    SpvImageFormatMax = 0x7fffffff,
+} SpvImageFormat;
+
+typedef enum SpvImageChannelOrder_ {
+    SpvImageChannelOrderR = 0,
+    SpvImageChannelOrderA = 1,
+    SpvImageChannelOrderRG = 2,
+    SpvImageChannelOrderRA = 3,
+    SpvImageChannelOrderRGB = 4,
+    SpvImageChannelOrderRGBA = 5,
+    SpvImageChannelOrderBGRA = 6,
+    SpvImageChannelOrderARGB = 7,
+    SpvImageChannelOrderIntensity = 8,
+    SpvImageChannelOrderLuminance = 9,
+    SpvImageChannelOrderRx = 10,
+    SpvImageChannelOrderRGx = 11,
+    SpvImageChannelOrderRGBx = 12,
+    SpvImageChannelOrderDepth = 13,
+    SpvImageChannelOrderDepthStencil = 14,
+    SpvImageChannelOrdersRGB = 15,
+    SpvImageChannelOrdersRGBx = 16,
+    SpvImageChannelOrdersRGBA = 17,
+    SpvImageChannelOrdersBGRA = 18,
+    SpvImageChannelOrderABGR = 19,
+    SpvImageChannelOrderMax = 0x7fffffff,
+} SpvImageChannelOrder;
+
+typedef enum SpvImageChannelDataType_ {
+    SpvImageChannelDataTypeSnormInt8 = 0,
+    SpvImageChannelDataTypeSnormInt16 = 1,
+    SpvImageChannelDataTypeUnormInt8 = 2,
+    SpvImageChannelDataTypeUnormInt16 = 3,
+    SpvImageChannelDataTypeUnormShort565 = 4,
+    SpvImageChannelDataTypeUnormShort555 = 5,
+    SpvImageChannelDataTypeUnormInt101010 = 6,
+    SpvImageChannelDataTypeSignedInt8 = 7,
+    SpvImageChannelDataTypeSignedInt16 = 8,
+    SpvImageChannelDataTypeSignedInt32 = 9,
+    SpvImageChannelDataTypeUnsignedInt8 = 10,
+    SpvImageChannelDataTypeUnsignedInt16 = 11,
+    SpvImageChannelDataTypeUnsignedInt32 = 12,
+    SpvImageChannelDataTypeHalfFloat = 13,
+    SpvImageChannelDataTypeFloat = 14,
+    SpvImageChannelDataTypeUnormInt24 = 15,
+    SpvImageChannelDataTypeUnormInt101010_2 = 16,
+    SpvImageChannelDataTypeUnormInt10X6EXT = 17,
+    SpvImageChannelDataTypeUnsignedIntRaw10EXT = 19,
+    SpvImageChannelDataTypeUnsignedIntRaw12EXT = 20,
+    SpvImageChannelDataTypeUnormInt2_101010EXT = 21,
+    SpvImageChannelDataTypeUnsignedInt10X6EXT = 22,
+    SpvImageChannelDataTypeUnsignedInt12X4EXT = 23,
+    SpvImageChannelDataTypeUnsignedInt14X2EXT = 24,
+    SpvImageChannelDataTypeUnormInt12X4EXT = 25,
+    SpvImageChannelDataTypeUnormInt14X2EXT = 26,
+    SpvImageChannelDataTypeMax = 0x7fffffff,
+} SpvImageChannelDataType;
+
+typedef enum SpvImageOperandsShift_ {
+    SpvImageOperandsBiasShift = 0,
+    SpvImageOperandsLodShift = 1,
+    SpvImageOperandsGradShift = 2,
+    SpvImageOperandsConstOffsetShift = 3,
+    SpvImageOperandsOffsetShift = 4,
+    SpvImageOperandsConstOffsetsShift = 5,
+    SpvImageOperandsSampleShift = 6,
+    SpvImageOperandsMinLodShift = 7,
+    SpvImageOperandsMakeTexelAvailableShift = 8,
+    SpvImageOperandsMakeTexelAvailableKHRShift = 8,
+    SpvImageOperandsMakeTexelVisibleShift = 9,
+    SpvImageOperandsMakeTexelVisibleKHRShift = 9,
+    SpvImageOperandsNonPrivateTexelShift = 10,
+    SpvImageOperandsNonPrivateTexelKHRShift = 10,
+    SpvImageOperandsVolatileTexelShift = 11,
+    SpvImageOperandsVolatileTexelKHRShift = 11,
+    SpvImageOperandsSignExtendShift = 12,
+    SpvImageOperandsZeroExtendShift = 13,
+    SpvImageOperandsNontemporalShift = 14,
+    SpvImageOperandsOffsetsShift = 16,
+    SpvImageOperandsMax = 0x7fffffff,
+} SpvImageOperandsShift;
+
+typedef enum SpvImageOperandsMask_ {
+    SpvImageOperandsMaskNone = 0,
+    SpvImageOperandsBiasMask = 0x00000001,
+    SpvImageOperandsLodMask = 0x00000002,
+    SpvImageOperandsGradMask = 0x00000004,
+    SpvImageOperandsConstOffsetMask = 0x00000008,
+    SpvImageOperandsOffsetMask = 0x00000010,
+    SpvImageOperandsConstOffsetsMask = 0x00000020,
+    SpvImageOperandsSampleMask = 0x00000040,
+    SpvImageOperandsMinLodMask = 0x00000080,
+    SpvImageOperandsMakeTexelAvailableMask = 0x00000100,
+    SpvImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
+    SpvImageOperandsMakeTexelVisibleMask = 0x00000200,
+    SpvImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
+    SpvImageOperandsNonPrivateTexelMask = 0x00000400,
+    SpvImageOperandsNonPrivateTexelKHRMask = 0x00000400,
+    SpvImageOperandsVolatileTexelMask = 0x00000800,
+    SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
+    SpvImageOperandsSignExtendMask = 0x00001000,
+    SpvImageOperandsZeroExtendMask = 0x00002000,
+    SpvImageOperandsNontemporalMask = 0x00004000,
+    SpvImageOperandsOffsetsMask = 0x00010000,
+} SpvImageOperandsMask;
+
+typedef enum SpvFPFastMathModeShift_ {
+    SpvFPFastMathModeNotNaNShift = 0,
+    SpvFPFastMathModeNotInfShift = 1,
+    SpvFPFastMathModeNSZShift = 2,
+    SpvFPFastMathModeAllowRecipShift = 3,
+    SpvFPFastMathModeFastShift = 4,
+    SpvFPFastMathModeAllowContractShift = 16,
+    SpvFPFastMathModeAllowContractFastINTELShift = 16,
+    SpvFPFastMathModeAllowReassocShift = 17,
+    SpvFPFastMathModeAllowReassocINTELShift = 17,
+    SpvFPFastMathModeAllowTransformShift = 18,
+    SpvFPFastMathModeMax = 0x7fffffff,
+} SpvFPFastMathModeShift;
+
+typedef enum SpvFPFastMathModeMask_ {
+    SpvFPFastMathModeMaskNone = 0,
+    SpvFPFastMathModeNotNaNMask = 0x00000001,
+    SpvFPFastMathModeNotInfMask = 0x00000002,
+    SpvFPFastMathModeNSZMask = 0x00000004,
+    SpvFPFastMathModeAllowRecipMask = 0x00000008,
+    SpvFPFastMathModeFastMask = 0x00000010,
+    SpvFPFastMathModeAllowContractMask = 0x00010000,
+    SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000,
+    SpvFPFastMathModeAllowReassocMask = 0x00020000,
+    SpvFPFastMathModeAllowReassocINTELMask = 0x00020000,
+    SpvFPFastMathModeAllowTransformMask = 0x00040000,
+} SpvFPFastMathModeMask;
+
+typedef enum SpvFPRoundingMode_ {
+    SpvFPRoundingModeRTE = 0,
+    SpvFPRoundingModeRTZ = 1,
+    SpvFPRoundingModeRTP = 2,
+    SpvFPRoundingModeRTN = 3,
+    SpvFPRoundingModeMax = 0x7fffffff,
+} SpvFPRoundingMode;
+
+typedef enum SpvLinkageType_ {
+    SpvLinkageTypeExport = 0,
+    SpvLinkageTypeImport = 1,
+    SpvLinkageTypeLinkOnceODR = 2,
+    SpvLinkageTypeMax = 0x7fffffff,
+} SpvLinkageType;
+
+typedef enum SpvAccessQualifier_ {
+    SpvAccessQualifierReadOnly = 0,
+    SpvAccessQualifierWriteOnly = 1,
+    SpvAccessQualifierReadWrite = 2,
+    SpvAccessQualifierMax = 0x7fffffff,
+} SpvAccessQualifier;
+
+typedef enum SpvFunctionParameterAttribute_ {
+    SpvFunctionParameterAttributeZext = 0,
+    SpvFunctionParameterAttributeSext = 1,
+    SpvFunctionParameterAttributeByVal = 2,
+    SpvFunctionParameterAttributeSret = 3,
+    SpvFunctionParameterAttributeNoAlias = 4,
+    SpvFunctionParameterAttributeNoCapture = 5,
+    SpvFunctionParameterAttributeNoWrite = 6,
+    SpvFunctionParameterAttributeNoReadWrite = 7,
+    SpvFunctionParameterAttributeRuntimeAlignedINTEL = 5940,
+    SpvFunctionParameterAttributeMax = 0x7fffffff,
+} SpvFunctionParameterAttribute;
+
+typedef enum SpvDecoration_ {
+    SpvDecorationRelaxedPrecision = 0,
+    SpvDecorationSpecId = 1,
+    SpvDecorationBlock = 2,
+    SpvDecorationBufferBlock = 3,
+    SpvDecorationRowMajor = 4,
+    SpvDecorationColMajor = 5,
+    SpvDecorationArrayStride = 6,
+    SpvDecorationMatrixStride = 7,
+    SpvDecorationGLSLShared = 8,
+    SpvDecorationGLSLPacked = 9,
+    SpvDecorationCPacked = 10,
+    SpvDecorationBuiltIn = 11,
+    SpvDecorationNoPerspective = 13,
+    SpvDecorationFlat = 14,
+    SpvDecorationPatch = 15,
+    SpvDecorationCentroid = 16,
+    SpvDecorationSample = 17,
+    SpvDecorationInvariant = 18,
+    SpvDecorationRestrict = 19,
+    SpvDecorationAliased = 20,
+    SpvDecorationVolatile = 21,
+    SpvDecorationConstant = 22,
+    SpvDecorationCoherent = 23,
+    SpvDecorationNonWritable = 24,
+    SpvDecorationNonReadable = 25,
+    SpvDecorationUniform = 26,
+    SpvDecorationUniformId = 27,
+    SpvDecorationSaturatedConversion = 28,
+    SpvDecorationStream = 29,
+    SpvDecorationLocation = 30,
+    SpvDecorationComponent = 31,
+    SpvDecorationIndex = 32,
+    SpvDecorationBinding = 33,
+    SpvDecorationDescriptorSet = 34,
+    SpvDecorationOffset = 35,
+    SpvDecorationXfbBuffer = 36,
+    SpvDecorationXfbStride = 37,
+    SpvDecorationFuncParamAttr = 38,
+    SpvDecorationFPRoundingMode = 39,
+    SpvDecorationFPFastMathMode = 40,
+    SpvDecorationLinkageAttributes = 41,
+    SpvDecorationNoContraction = 42,
+    SpvDecorationInputAttachmentIndex = 43,
+    SpvDecorationAlignment = 44,
+    SpvDecorationMaxByteOffset = 45,
+    SpvDecorationAlignmentId = 46,
+    SpvDecorationMaxByteOffsetId = 47,
+    SpvDecorationSaturatedToLargestFloat8NormalConversionEXT = 4216,
+    SpvDecorationNoSignedWrap = 4469,
+    SpvDecorationNoUnsignedWrap = 4470,
+    SpvDecorationWeightTextureQCOM = 4487,
+    SpvDecorationBlockMatchTextureQCOM = 4488,
+    SpvDecorationBlockMatchSamplerQCOM = 4499,
+    SpvDecorationExplicitInterpAMD = 4999,
+    SpvDecorationNodeSharesPayloadLimitsWithAMDX = 5019,
+    SpvDecorationNodeMaxPayloadsAMDX = 5020,
+    SpvDecorationTrackFinishWritingAMDX = 5078,
+    SpvDecorationPayloadNodeNameAMDX = 5091,
+    SpvDecorationPayloadNodeBaseIndexAMDX = 5098,
+    SpvDecorationPayloadNodeSparseArrayAMDX = 5099,
+    SpvDecorationPayloadNodeArraySizeAMDX = 5100,
+    SpvDecorationPayloadDispatchIndirectAMDX = 5105,
+    SpvDecorationOverrideCoverageNV = 5248,
+    SpvDecorationPassthroughNV = 5250,
+    SpvDecorationViewportRelativeNV = 5252,
+    SpvDecorationSecondaryViewportRelativeNV = 5256,
+    SpvDecorationPerPrimitiveEXT = 5271,
+    SpvDecorationPerPrimitiveNV = 5271,
+    SpvDecorationPerViewNV = 5272,
+    SpvDecorationPerTaskNV = 5273,
+    SpvDecorationPerVertexKHR = 5285,
+    SpvDecorationPerVertexNV = 5285,
+    SpvDecorationNonUniform = 5300,
+    SpvDecorationNonUniformEXT = 5300,
+    SpvDecorationRestrictPointer = 5355,
+    SpvDecorationRestrictPointerEXT = 5355,
+    SpvDecorationAliasedPointer = 5356,
+    SpvDecorationAliasedPointerEXT = 5356,
+    SpvDecorationHitObjectShaderRecordBufferNV = 5386,
+    SpvDecorationBindlessSamplerNV = 5398,
+    SpvDecorationBindlessImageNV = 5399,
+    SpvDecorationBoundSamplerNV = 5400,
+    SpvDecorationBoundImageNV = 5401,
+    SpvDecorationSIMTCallINTEL = 5599,
+    SpvDecorationReferencedIndirectlyINTEL = 5602,
+    SpvDecorationClobberINTEL = 5607,
+    SpvDecorationSideEffectsINTEL = 5608,
+    SpvDecorationVectorComputeVariableINTEL = 5624,
+    SpvDecorationFuncParamIOKindINTEL = 5625,
+    SpvDecorationVectorComputeFunctionINTEL = 5626,
+    SpvDecorationStackCallINTEL = 5627,
+    SpvDecorationGlobalVariableOffsetINTEL = 5628,
+    SpvDecorationCounterBuffer = 5634,
+    SpvDecorationHlslCounterBufferGOOGLE = 5634,
+    SpvDecorationHlslSemanticGOOGLE = 5635,
+    SpvDecorationUserSemantic = 5635,
+    SpvDecorationUserTypeGOOGLE = 5636,
+    SpvDecorationFunctionRoundingModeINTEL = 5822,
+    SpvDecorationFunctionDenormModeINTEL = 5823,
+    SpvDecorationRegisterINTEL = 5825,
+    SpvDecorationMemoryINTEL = 5826,
+    SpvDecorationNumbanksINTEL = 5827,
+    SpvDecorationBankwidthINTEL = 5828,
+    SpvDecorationMaxPrivateCopiesINTEL = 5829,
+    SpvDecorationSinglepumpINTEL = 5830,
+    SpvDecorationDoublepumpINTEL = 5831,
+    SpvDecorationMaxReplicatesINTEL = 5832,
+    SpvDecorationSimpleDualPortINTEL = 5833,
+    SpvDecorationMergeINTEL = 5834,
+    SpvDecorationBankBitsINTEL = 5835,
+    SpvDecorationForcePow2DepthINTEL = 5836,
+    SpvDecorationStridesizeINTEL = 5883,
+    SpvDecorationWordsizeINTEL = 5884,
+    SpvDecorationTrueDualPortINTEL = 5885,
+    SpvDecorationBurstCoalesceINTEL = 5899,
+    SpvDecorationCacheSizeINTEL = 5900,
+    SpvDecorationDontStaticallyCoalesceINTEL = 5901,
+    SpvDecorationPrefetchINTEL = 5902,
+    SpvDecorationStallEnableINTEL = 5905,
+    SpvDecorationFuseLoopsInFunctionINTEL = 5907,
+    SpvDecorationMathOpDSPModeINTEL = 5909,
+    SpvDecorationAliasScopeINTEL = 5914,
+    SpvDecorationNoAliasINTEL = 5915,
+    SpvDecorationInitiationIntervalINTEL = 5917,
+    SpvDecorationMaxConcurrencyINTEL = 5918,
+    SpvDecorationPipelineEnableINTEL = 5919,
+    SpvDecorationBufferLocationINTEL = 5921,
+    SpvDecorationIOPipeStorageINTEL = 5944,
+    SpvDecorationFunctionFloatingPointModeINTEL = 6080,
+    SpvDecorationSingleElementVectorINTEL = 6085,
+    SpvDecorationVectorComputeCallableFunctionINTEL = 6087,
+    SpvDecorationMediaBlockIOINTEL = 6140,
+    SpvDecorationStallFreeINTEL = 6151,
+    SpvDecorationFPMaxErrorDecorationINTEL = 6170,
+    SpvDecorationLatencyControlLabelINTEL = 6172,
+    SpvDecorationLatencyControlConstraintINTEL = 6173,
+    SpvDecorationConduitKernelArgumentINTEL = 6175,
+    SpvDecorationRegisterMapKernelArgumentINTEL = 6176,
+    SpvDecorationMMHostInterfaceAddressWidthINTEL = 6177,
+    SpvDecorationMMHostInterfaceDataWidthINTEL = 6178,
+    SpvDecorationMMHostInterfaceLatencyINTEL = 6179,
+    SpvDecorationMMHostInterfaceReadWriteModeINTEL = 6180,
+    SpvDecorationMMHostInterfaceMaxBurstINTEL = 6181,
+    SpvDecorationMMHostInterfaceWaitRequestINTEL = 6182,
+    SpvDecorationStableKernelArgumentINTEL = 6183,
+    SpvDecorationHostAccessINTEL = 6188,
+    SpvDecorationInitModeINTEL = 6190,
+    SpvDecorationImplementInRegisterMapINTEL = 6191,
+    SpvDecorationConditionalINTEL = 6247,
+    SpvDecorationCacheControlLoadINTEL = 6442,
+    SpvDecorationCacheControlStoreINTEL = 6443,
+    SpvDecorationMax = 0x7fffffff,
+} SpvDecoration;
+
+typedef enum SpvBuiltIn_ {
+    SpvBuiltInPosition = 0,
+    SpvBuiltInPointSize = 1,
+    SpvBuiltInClipDistance = 3,
+    SpvBuiltInCullDistance = 4,
+    SpvBuiltInVertexId = 5,
+    SpvBuiltInInstanceId = 6,
+    SpvBuiltInPrimitiveId = 7,
+    SpvBuiltInInvocationId = 8,
+    SpvBuiltInLayer = 9,
+    SpvBuiltInViewportIndex = 10,
+    SpvBuiltInTessLevelOuter = 11,
+    SpvBuiltInTessLevelInner = 12,
+    SpvBuiltInTessCoord = 13,
+    SpvBuiltInPatchVertices = 14,
+    SpvBuiltInFragCoord = 15,
+    SpvBuiltInPointCoord = 16,
+    SpvBuiltInFrontFacing = 17,
+    SpvBuiltInSampleId = 18,
+    SpvBuiltInSamplePosition = 19,
+    SpvBuiltInSampleMask = 20,
+    SpvBuiltInFragDepth = 22,
+    SpvBuiltInHelperInvocation = 23,
+    SpvBuiltInNumWorkgroups = 24,
+    SpvBuiltInWorkgroupSize = 25,
+    SpvBuiltInWorkgroupId = 26,
+    SpvBuiltInLocalInvocationId = 27,
+    SpvBuiltInGlobalInvocationId = 28,
+    SpvBuiltInLocalInvocationIndex = 29,
+    SpvBuiltInWorkDim = 30,
+    SpvBuiltInGlobalSize = 31,
+    SpvBuiltInEnqueuedWorkgroupSize = 32,
+    SpvBuiltInGlobalOffset = 33,
+    SpvBuiltInGlobalLinearId = 34,
+    SpvBuiltInSubgroupSize = 36,
+    SpvBuiltInSubgroupMaxSize = 37,
+    SpvBuiltInNumSubgroups = 38,
+    SpvBuiltInNumEnqueuedSubgroups = 39,
+    SpvBuiltInSubgroupId = 40,
+    SpvBuiltInSubgroupLocalInvocationId = 41,
+    SpvBuiltInVertexIndex = 42,
+    SpvBuiltInInstanceIndex = 43,
+    SpvBuiltInCoreIDARM = 4160,
+    SpvBuiltInCoreCountARM = 4161,
+    SpvBuiltInCoreMaxIDARM = 4162,
+    SpvBuiltInWarpIDARM = 4163,
+    SpvBuiltInWarpMaxIDARM = 4164,
+    SpvBuiltInSubgroupEqMask = 4416,
+    SpvBuiltInSubgroupEqMaskKHR = 4416,
+    SpvBuiltInSubgroupGeMask = 4417,
+    SpvBuiltInSubgroupGeMaskKHR = 4417,
+    SpvBuiltInSubgroupGtMask = 4418,
+    SpvBuiltInSubgroupGtMaskKHR = 4418,
+    SpvBuiltInSubgroupLeMask = 4419,
+    SpvBuiltInSubgroupLeMaskKHR = 4419,
+    SpvBuiltInSubgroupLtMask = 4420,
+    SpvBuiltInSubgroupLtMaskKHR = 4420,
+    SpvBuiltInBaseVertex = 4424,
+    SpvBuiltInBaseInstance = 4425,
+    SpvBuiltInDrawIndex = 4426,
+    SpvBuiltInPrimitiveShadingRateKHR = 4432,
+    SpvBuiltInDeviceIndex = 4438,
+    SpvBuiltInViewIndex = 4440,
+    SpvBuiltInShadingRateKHR = 4444,
+    SpvBuiltInTileOffsetQCOM = 4492,
+    SpvBuiltInTileDimensionQCOM = 4493,
+    SpvBuiltInTileApronSizeQCOM = 4494,
+    SpvBuiltInBaryCoordNoPerspAMD = 4992,
+    SpvBuiltInBaryCoordNoPerspCentroidAMD = 4993,
+    SpvBuiltInBaryCoordNoPerspSampleAMD = 4994,
+    SpvBuiltInBaryCoordSmoothAMD = 4995,
+    SpvBuiltInBaryCoordSmoothCentroidAMD = 4996,
+    SpvBuiltInBaryCoordSmoothSampleAMD = 4997,
+    SpvBuiltInBaryCoordPullModelAMD = 4998,
+    SpvBuiltInFragStencilRefEXT = 5014,
+    SpvBuiltInRemainingRecursionLevelsAMDX = 5021,
+    SpvBuiltInShaderIndexAMDX = 5073,
+    SpvBuiltInViewportMaskNV = 5253,
+    SpvBuiltInSecondaryPositionNV = 5257,
+    SpvBuiltInSecondaryViewportMaskNV = 5258,
+    SpvBuiltInPositionPerViewNV = 5261,
+    SpvBuiltInViewportMaskPerViewNV = 5262,
+    SpvBuiltInFullyCoveredEXT = 5264,
+    SpvBuiltInTaskCountNV = 5274,
+    SpvBuiltInPrimitiveCountNV = 5275,
+    SpvBuiltInPrimitiveIndicesNV = 5276,
+    SpvBuiltInClipDistancePerViewNV = 5277,
+    SpvBuiltInCullDistancePerViewNV = 5278,
+    SpvBuiltInLayerPerViewNV = 5279,
+    SpvBuiltInMeshViewCountNV = 5280,
+    SpvBuiltInMeshViewIndicesNV = 5281,
+    SpvBuiltInBaryCoordKHR = 5286,
+    SpvBuiltInBaryCoordNV = 5286,
+    SpvBuiltInBaryCoordNoPerspKHR = 5287,
+    SpvBuiltInBaryCoordNoPerspNV = 5287,
+    SpvBuiltInFragSizeEXT = 5292,
+    SpvBuiltInFragmentSizeNV = 5292,
+    SpvBuiltInFragInvocationCountEXT = 5293,
+    SpvBuiltInInvocationsPerPixelNV = 5293,
+    SpvBuiltInPrimitivePointIndicesEXT = 5294,
+    SpvBuiltInPrimitiveLineIndicesEXT = 5295,
+    SpvBuiltInPrimitiveTriangleIndicesEXT = 5296,
+    SpvBuiltInCullPrimitiveEXT = 5299,
+    SpvBuiltInLaunchIdKHR = 5319,
+    SpvBuiltInLaunchIdNV = 5319,
+    SpvBuiltInLaunchSizeKHR = 5320,
+    SpvBuiltInLaunchSizeNV = 5320,
+    SpvBuiltInWorldRayOriginKHR = 5321,
+    SpvBuiltInWorldRayOriginNV = 5321,
+    SpvBuiltInWorldRayDirectionKHR = 5322,
+    SpvBuiltInWorldRayDirectionNV = 5322,
+    SpvBuiltInObjectRayOriginKHR = 5323,
+    SpvBuiltInObjectRayOriginNV = 5323,
+    SpvBuiltInObjectRayDirectionKHR = 5324,
+    SpvBuiltInObjectRayDirectionNV = 5324,
+    SpvBuiltInRayTminKHR = 5325,
+    SpvBuiltInRayTminNV = 5325,
+    SpvBuiltInRayTmaxKHR = 5326,
+    SpvBuiltInRayTmaxNV = 5326,
+    SpvBuiltInInstanceCustomIndexKHR = 5327,
+    SpvBuiltInInstanceCustomIndexNV = 5327,
+    SpvBuiltInObjectToWorldKHR = 5330,
+    SpvBuiltInObjectToWorldNV = 5330,
+    SpvBuiltInWorldToObjectKHR = 5331,
+    SpvBuiltInWorldToObjectNV = 5331,
+    SpvBuiltInHitTNV = 5332,
+    SpvBuiltInHitKindKHR = 5333,
+    SpvBuiltInHitKindNV = 5333,
+    SpvBuiltInCurrentRayTimeNV = 5334,
+    SpvBuiltInHitTriangleVertexPositionsKHR = 5335,
+    SpvBuiltInHitMicroTriangleVertexPositionsNV = 5337,
+    SpvBuiltInHitMicroTriangleVertexBarycentricsNV = 5344,
+    SpvBuiltInIncomingRayFlagsKHR = 5351,
+    SpvBuiltInIncomingRayFlagsNV = 5351,
+    SpvBuiltInRayGeometryIndexKHR = 5352,
+    SpvBuiltInHitIsSphereNV = 5359,
+    SpvBuiltInHitIsLSSNV = 5360,
+    SpvBuiltInHitSpherePositionNV = 5361,
+    SpvBuiltInWarpsPerSMNV = 5374,
+    SpvBuiltInSMCountNV = 5375,
+    SpvBuiltInWarpIDNV = 5376,
+    SpvBuiltInSMIDNV = 5377,
+    SpvBuiltInHitLSSPositionsNV = 5396,
+    SpvBuiltInHitKindFrontFacingMicroTriangleNV = 5405,
+    SpvBuiltInHitKindBackFacingMicroTriangleNV = 5406,
+    SpvBuiltInHitSphereRadiusNV = 5420,
+    SpvBuiltInHitLSSRadiiNV = 5421,
+    SpvBuiltInClusterIDNV = 5436,
+    SpvBuiltInCullMaskKHR = 6021,
+    SpvBuiltInMax = 0x7fffffff,
+} SpvBuiltIn;
+
+typedef enum SpvSelectionControlShift_ {
+    SpvSelectionControlFlattenShift = 0,
+    SpvSelectionControlDontFlattenShift = 1,
+    SpvSelectionControlMax = 0x7fffffff,
+} SpvSelectionControlShift;
+
+typedef enum SpvSelectionControlMask_ {
+    SpvSelectionControlMaskNone = 0,
+    SpvSelectionControlFlattenMask = 0x00000001,
+    SpvSelectionControlDontFlattenMask = 0x00000002,
+} SpvSelectionControlMask;
+
+typedef enum SpvLoopControlShift_ {
+    SpvLoopControlUnrollShift = 0,
+    SpvLoopControlDontUnrollShift = 1,
+    SpvLoopControlDependencyInfiniteShift = 2,
+    SpvLoopControlDependencyLengthShift = 3,
+    SpvLoopControlMinIterationsShift = 4,
+    SpvLoopControlMaxIterationsShift = 5,
+    SpvLoopControlIterationMultipleShift = 6,
+    SpvLoopControlPeelCountShift = 7,
+    SpvLoopControlPartialCountShift = 8,
+    SpvLoopControlInitiationIntervalINTELShift = 16,
+    SpvLoopControlMaxConcurrencyINTELShift = 17,
+    SpvLoopControlDependencyArrayINTELShift = 18,
+    SpvLoopControlPipelineEnableINTELShift = 19,
+    SpvLoopControlLoopCoalesceINTELShift = 20,
+    SpvLoopControlMaxInterleavingINTELShift = 21,
+    SpvLoopControlSpeculatedIterationsINTELShift = 22,
+    SpvLoopControlNoFusionINTELShift = 23,
+    SpvLoopControlLoopCountINTELShift = 24,
+    SpvLoopControlMaxReinvocationDelayINTELShift = 25,
+    SpvLoopControlMax = 0x7fffffff,
+} SpvLoopControlShift;
+
+typedef enum SpvLoopControlMask_ {
+    SpvLoopControlMaskNone = 0,
+    SpvLoopControlUnrollMask = 0x00000001,
+    SpvLoopControlDontUnrollMask = 0x00000002,
+    SpvLoopControlDependencyInfiniteMask = 0x00000004,
+    SpvLoopControlDependencyLengthMask = 0x00000008,
+    SpvLoopControlMinIterationsMask = 0x00000010,
+    SpvLoopControlMaxIterationsMask = 0x00000020,
+    SpvLoopControlIterationMultipleMask = 0x00000040,
+    SpvLoopControlPeelCountMask = 0x00000080,
+    SpvLoopControlPartialCountMask = 0x00000100,
+    SpvLoopControlInitiationIntervalINTELMask = 0x00010000,
+    SpvLoopControlMaxConcurrencyINTELMask = 0x00020000,
+    SpvLoopControlDependencyArrayINTELMask = 0x00040000,
+    SpvLoopControlPipelineEnableINTELMask = 0x00080000,
+    SpvLoopControlLoopCoalesceINTELMask = 0x00100000,
+    SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
+    SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
+    SpvLoopControlNoFusionINTELMask = 0x00800000,
+    SpvLoopControlLoopCountINTELMask = 0x01000000,
+    SpvLoopControlMaxReinvocationDelayINTELMask = 0x02000000,
+} SpvLoopControlMask;
+
+typedef enum SpvFunctionControlShift_ {
+    SpvFunctionControlInlineShift = 0,
+    SpvFunctionControlDontInlineShift = 1,
+    SpvFunctionControlPureShift = 2,
+    SpvFunctionControlConstShift = 3,
+    SpvFunctionControlOptNoneEXTShift = 16,
+    SpvFunctionControlOptNoneINTELShift = 16,
+    SpvFunctionControlMax = 0x7fffffff,
+} SpvFunctionControlShift;
+
+typedef enum SpvFunctionControlMask_ {
+    SpvFunctionControlMaskNone = 0,
+    SpvFunctionControlInlineMask = 0x00000001,
+    SpvFunctionControlDontInlineMask = 0x00000002,
+    SpvFunctionControlPureMask = 0x00000004,
+    SpvFunctionControlConstMask = 0x00000008,
+    SpvFunctionControlOptNoneEXTMask = 0x00010000,
+    SpvFunctionControlOptNoneINTELMask = 0x00010000,
+} SpvFunctionControlMask;
+
+typedef enum SpvMemorySemanticsShift_ {
+    SpvMemorySemanticsAcquireShift = 1,
+    SpvMemorySemanticsReleaseShift = 2,
+    SpvMemorySemanticsAcquireReleaseShift = 3,
+    SpvMemorySemanticsSequentiallyConsistentShift = 4,
+    SpvMemorySemanticsUniformMemoryShift = 6,
+    SpvMemorySemanticsSubgroupMemoryShift = 7,
+    SpvMemorySemanticsWorkgroupMemoryShift = 8,
+    SpvMemorySemanticsCrossWorkgroupMemoryShift = 9,
+    SpvMemorySemanticsAtomicCounterMemoryShift = 10,
+    SpvMemorySemanticsImageMemoryShift = 11,
+    SpvMemorySemanticsOutputMemoryShift = 12,
+    SpvMemorySemanticsOutputMemoryKHRShift = 12,
+    SpvMemorySemanticsMakeAvailableShift = 13,
+    SpvMemorySemanticsMakeAvailableKHRShift = 13,
+    SpvMemorySemanticsMakeVisibleShift = 14,
+    SpvMemorySemanticsMakeVisibleKHRShift = 14,
+    SpvMemorySemanticsVolatileShift = 15,
+    SpvMemorySemanticsMax = 0x7fffffff,
+} SpvMemorySemanticsShift;
+
+typedef enum SpvMemorySemanticsMask_ {
+    SpvMemorySemanticsMaskNone = 0,
+    SpvMemorySemanticsAcquireMask = 0x00000002,
+    SpvMemorySemanticsReleaseMask = 0x00000004,
+    SpvMemorySemanticsAcquireReleaseMask = 0x00000008,
+    SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010,
+    SpvMemorySemanticsUniformMemoryMask = 0x00000040,
+    SpvMemorySemanticsSubgroupMemoryMask = 0x00000080,
+    SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100,
+    SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
+    SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400,
+    SpvMemorySemanticsImageMemoryMask = 0x00000800,
+    SpvMemorySemanticsOutputMemoryMask = 0x00001000,
+    SpvMemorySemanticsOutputMemoryKHRMask = 0x00001000,
+    SpvMemorySemanticsMakeAvailableMask = 0x00002000,
+    SpvMemorySemanticsMakeAvailableKHRMask = 0x00002000,
+    SpvMemorySemanticsMakeVisibleMask = 0x00004000,
+    SpvMemorySemanticsMakeVisibleKHRMask = 0x00004000,
+    SpvMemorySemanticsVolatileMask = 0x00008000,
+} SpvMemorySemanticsMask;
+
+typedef enum SpvMemoryAccessShift_ {
+    SpvMemoryAccessVolatileShift = 0,
+    SpvMemoryAccessAlignedShift = 1,
+    SpvMemoryAccessNontemporalShift = 2,
+    SpvMemoryAccessMakePointerAvailableShift = 3,
+    SpvMemoryAccessMakePointerAvailableKHRShift = 3,
+    SpvMemoryAccessMakePointerVisibleShift = 4,
+    SpvMemoryAccessMakePointerVisibleKHRShift = 4,
+    SpvMemoryAccessNonPrivatePointerShift = 5,
+    SpvMemoryAccessNonPrivatePointerKHRShift = 5,
+    SpvMemoryAccessAliasScopeINTELMaskShift = 16,
+    SpvMemoryAccessNoAliasINTELMaskShift = 17,
+    SpvMemoryAccessMax = 0x7fffffff,
+} SpvMemoryAccessShift;
+
+typedef enum SpvMemoryAccessMask_ {
+    SpvMemoryAccessMaskNone = 0,
+    SpvMemoryAccessVolatileMask = 0x00000001,
+    SpvMemoryAccessAlignedMask = 0x00000002,
+    SpvMemoryAccessNontemporalMask = 0x00000004,
+    SpvMemoryAccessMakePointerAvailableMask = 0x00000008,
+    SpvMemoryAccessMakePointerAvailableKHRMask = 0x00000008,
+    SpvMemoryAccessMakePointerVisibleMask = 0x00000010,
+    SpvMemoryAccessMakePointerVisibleKHRMask = 0x00000010,
+    SpvMemoryAccessNonPrivatePointerMask = 0x00000020,
+    SpvMemoryAccessNonPrivatePointerKHRMask = 0x00000020,
+    SpvMemoryAccessAliasScopeINTELMaskMask = 0x00010000,
+    SpvMemoryAccessNoAliasINTELMaskMask = 0x00020000,
+} SpvMemoryAccessMask;
+
+typedef enum SpvScope_ {
+    SpvScopeCrossDevice = 0,
+    SpvScopeDevice = 1,
+    SpvScopeWorkgroup = 2,
+    SpvScopeSubgroup = 3,
+    SpvScopeInvocation = 4,
+    SpvScopeQueueFamily = 5,
+    SpvScopeQueueFamilyKHR = 5,
+    SpvScopeShaderCallKHR = 6,
+    SpvScopeMax = 0x7fffffff,
+} SpvScope;
+
+typedef enum SpvGroupOperation_ {
+    SpvGroupOperationReduce = 0,
+    SpvGroupOperationInclusiveScan = 1,
+    SpvGroupOperationExclusiveScan = 2,
+    SpvGroupOperationClusteredReduce = 3,
+    SpvGroupOperationPartitionedReduceNV = 6,
+    SpvGroupOperationPartitionedInclusiveScanNV = 7,
+    SpvGroupOperationPartitionedExclusiveScanNV = 8,
+    SpvGroupOperationMax = 0x7fffffff,
+} SpvGroupOperation;
+
+typedef enum SpvKernelEnqueueFlags_ {
+    SpvKernelEnqueueFlagsNoWait = 0,
+    SpvKernelEnqueueFlagsWaitKernel = 1,
+    SpvKernelEnqueueFlagsWaitWorkGroup = 2,
+    SpvKernelEnqueueFlagsMax = 0x7fffffff,
+} SpvKernelEnqueueFlags;
+
+typedef enum SpvKernelProfilingInfoShift_ {
+    SpvKernelProfilingInfoCmdExecTimeShift = 0,
+    SpvKernelProfilingInfoMax = 0x7fffffff,
+} SpvKernelProfilingInfoShift;
+
+typedef enum SpvKernelProfilingInfoMask_ {
+    SpvKernelProfilingInfoMaskNone = 0,
+    SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001,
+} SpvKernelProfilingInfoMask;
+
+typedef enum SpvCapability_ {
+    SpvCapabilityMatrix = 0,
+    SpvCapabilityShader = 1,
+    SpvCapabilityGeometry = 2,
+    SpvCapabilityTessellation = 3,
+    SpvCapabilityAddresses = 4,
+    SpvCapabilityLinkage = 5,
+    SpvCapabilityKernel = 6,
+    SpvCapabilityVector16 = 7,
+    SpvCapabilityFloat16Buffer = 8,
+    SpvCapabilityFloat16 = 9,
+    SpvCapabilityFloat64 = 10,
+    SpvCapabilityInt64 = 11,
+    SpvCapabilityInt64Atomics = 12,
+    SpvCapabilityImageBasic = 13,
+    SpvCapabilityImageReadWrite = 14,
+    SpvCapabilityImageMipmap = 15,
+    SpvCapabilityPipes = 17,
+    SpvCapabilityGroups = 18,
+    SpvCapabilityDeviceEnqueue = 19,
+    SpvCapabilityLiteralSampler = 20,
+    SpvCapabilityAtomicStorage = 21,
+    SpvCapabilityInt16 = 22,
+    SpvCapabilityTessellationPointSize = 23,
+    SpvCapabilityGeometryPointSize = 24,
+    SpvCapabilityImageGatherExtended = 25,
+    SpvCapabilityStorageImageMultisample = 27,
+    SpvCapabilityUniformBufferArrayDynamicIndexing = 28,
+    SpvCapabilitySampledImageArrayDynamicIndexing = 29,
+    SpvCapabilityStorageBufferArrayDynamicIndexing = 30,
+    SpvCapabilityStorageImageArrayDynamicIndexing = 31,
+    SpvCapabilityClipDistance = 32,
+    SpvCapabilityCullDistance = 33,
+    SpvCapabilityImageCubeArray = 34,
+    SpvCapabilitySampleRateShading = 35,
+    SpvCapabilityImageRect = 36,
+    SpvCapabilitySampledRect = 37,
+    SpvCapabilityGenericPointer = 38,
+    SpvCapabilityInt8 = 39,
+    SpvCapabilityInputAttachment = 40,
+    SpvCapabilitySparseResidency = 41,
+    SpvCapabilityMinLod = 42,
+    SpvCapabilitySampled1D = 43,
+    SpvCapabilityImage1D = 44,
+    SpvCapabilitySampledCubeArray = 45,
+    SpvCapabilitySampledBuffer = 46,
+    SpvCapabilityImageBuffer = 47,
+    SpvCapabilityImageMSArray = 48,
+    SpvCapabilityStorageImageExtendedFormats = 49,
+    SpvCapabilityImageQuery = 50,
+    SpvCapabilityDerivativeControl = 51,
+    SpvCapabilityInterpolationFunction = 52,
+    SpvCapabilityTransformFeedback = 53,
+    SpvCapabilityGeometryStreams = 54,
+    SpvCapabilityStorageImageReadWithoutFormat = 55,
+    SpvCapabilityStorageImageWriteWithoutFormat = 56,
+    SpvCapabilityMultiViewport = 57,
+    SpvCapabilitySubgroupDispatch = 58,
+    SpvCapabilityNamedBarrier = 59,
+    SpvCapabilityPipeStorage = 60,
+    SpvCapabilityGroupNonUniform = 61,
+    SpvCapabilityGroupNonUniformVote = 62,
+    SpvCapabilityGroupNonUniformArithmetic = 63,
+    SpvCapabilityGroupNonUniformBallot = 64,
+    SpvCapabilityGroupNonUniformShuffle = 65,
+    SpvCapabilityGroupNonUniformShuffleRelative = 66,
+    SpvCapabilityGroupNonUniformClustered = 67,
+    SpvCapabilityGroupNonUniformQuad = 68,
+    SpvCapabilityShaderLayer = 69,
+    SpvCapabilityShaderViewportIndex = 70,
+    SpvCapabilityUniformDecoration = 71,
+    SpvCapabilityCoreBuiltinsARM = 4165,
+    SpvCapabilityTileImageColorReadAccessEXT = 4166,
+    SpvCapabilityTileImageDepthReadAccessEXT = 4167,
+    SpvCapabilityTileImageStencilReadAccessEXT = 4168,
+    SpvCapabilityTensorsARM = 4174,
+    SpvCapabilityStorageTensorArrayDynamicIndexingARM = 4175,
+    SpvCapabilityStorageTensorArrayNonUniformIndexingARM = 4176,
+    SpvCapabilityGraphARM = 4191,
+    SpvCapabilityCooperativeMatrixLayoutsARM = 4201,
+    SpvCapabilityFloat8EXT = 4212,
+    SpvCapabilityFloat8CooperativeMatrixEXT = 4213,
+    SpvCapabilityFragmentShadingRateKHR = 4422,
+    SpvCapabilitySubgroupBallotKHR = 4423,
+    SpvCapabilityDrawParameters = 4427,
+    SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
+    SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
+    SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
+    SpvCapabilitySubgroupVoteKHR = 4431,
+    SpvCapabilityStorageBuffer16BitAccess = 4433,
+    SpvCapabilityStorageUniformBufferBlock16 = 4433,
+    SpvCapabilityStorageUniform16 = 4434,
+    SpvCapabilityUniformAndStorageBuffer16BitAccess = 4434,
+    SpvCapabilityStoragePushConstant16 = 4435,
+    SpvCapabilityStorageInputOutput16 = 4436,
+    SpvCapabilityDeviceGroup = 4437,
+    SpvCapabilityMultiView = 4439,
+    SpvCapabilityVariablePointersStorageBuffer = 4441,
+    SpvCapabilityVariablePointers = 4442,
+    SpvCapabilityAtomicStorageOps = 4445,
+    SpvCapabilitySampleMaskPostDepthCoverage = 4447,
+    SpvCapabilityStorageBuffer8BitAccess = 4448,
+    SpvCapabilityUniformAndStorageBuffer8BitAccess = 4449,
+    SpvCapabilityStoragePushConstant8 = 4450,
+    SpvCapabilityDenormPreserve = 4464,
+    SpvCapabilityDenormFlushToZero = 4465,
+    SpvCapabilitySignedZeroInfNanPreserve = 4466,
+    SpvCapabilityRoundingModeRTE = 4467,
+    SpvCapabilityRoundingModeRTZ = 4468,
+    SpvCapabilityRayQueryProvisionalKHR = 4471,
+    SpvCapabilityRayQueryKHR = 4472,
+    SpvCapabilityUntypedPointersKHR = 4473,
+    SpvCapabilityRayTraversalPrimitiveCullingKHR = 4478,
+    SpvCapabilityRayTracingKHR = 4479,
+    SpvCapabilityTextureSampleWeightedQCOM = 4484,
+    SpvCapabilityTextureBoxFilterQCOM = 4485,
+    SpvCapabilityTextureBlockMatchQCOM = 4486,
+    SpvCapabilityTileShadingQCOM = 4495,
+    SpvCapabilityCooperativeMatrixConversionQCOM = 4496,
+    SpvCapabilityTextureBlockMatch2QCOM = 4498,
+    SpvCapabilityFloat16ImageAMD = 5008,
+    SpvCapabilityImageGatherBiasLodAMD = 5009,
+    SpvCapabilityFragmentMaskAMD = 5010,
+    SpvCapabilityStencilExportEXT = 5013,
+    SpvCapabilityImageReadWriteLodAMD = 5015,
+    SpvCapabilityInt64ImageEXT = 5016,
+    SpvCapabilityShaderClockKHR = 5055,
+    SpvCapabilityShaderEnqueueAMDX = 5067,
+    SpvCapabilityQuadControlKHR = 5087,
+    SpvCapabilityInt4TypeINTEL = 5112,
+    SpvCapabilityInt4CooperativeMatrixINTEL = 5114,
+    SpvCapabilityBFloat16TypeKHR = 5116,
+    SpvCapabilityBFloat16DotProductKHR = 5117,
+    SpvCapabilityBFloat16CooperativeMatrixKHR = 5118,
+    SpvCapabilitySampleMaskOverrideCoverageNV = 5249,
+    SpvCapabilityGeometryShaderPassthroughNV = 5251,
+    SpvCapabilityShaderViewportIndexLayerEXT = 5254,
+    SpvCapabilityShaderViewportIndexLayerNV = 5254,
+    SpvCapabilityShaderViewportMaskNV = 5255,
+    SpvCapabilityShaderStereoViewNV = 5259,
+    SpvCapabilityPerViewAttributesNV = 5260,
+    SpvCapabilityFragmentFullyCoveredEXT = 5265,
+    SpvCapabilityMeshShadingNV = 5266,
+    SpvCapabilityImageFootprintNV = 5282,
+    SpvCapabilityMeshShadingEXT = 5283,
+    SpvCapabilityFragmentBarycentricKHR = 5284,
+    SpvCapabilityFragmentBarycentricNV = 5284,
+    SpvCapabilityComputeDerivativeGroupQuadsKHR = 5288,
+    SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
+    SpvCapabilityFragmentDensityEXT = 5291,
+    SpvCapabilityShadingRateNV = 5291,
+    SpvCapabilityGroupNonUniformPartitionedNV = 5297,
+    SpvCapabilityShaderNonUniform = 5301,
+    SpvCapabilityShaderNonUniformEXT = 5301,
+    SpvCapabilityRuntimeDescriptorArray = 5302,
+    SpvCapabilityRuntimeDescriptorArrayEXT = 5302,
+    SpvCapabilityInputAttachmentArrayDynamicIndexing = 5303,
+    SpvCapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
+    SpvCapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
+    SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
+    SpvCapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
+    SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
+    SpvCapabilityUniformBufferArrayNonUniformIndexing = 5306,
+    SpvCapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
+    SpvCapabilitySampledImageArrayNonUniformIndexing = 5307,
+    SpvCapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
+    SpvCapabilityStorageBufferArrayNonUniformIndexing = 5308,
+    SpvCapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
+    SpvCapabilityStorageImageArrayNonUniformIndexing = 5309,
+    SpvCapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
+    SpvCapabilityInputAttachmentArrayNonUniformIndexing = 5310,
+    SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
+    SpvCapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
+    SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
+    SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
+    SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
+    SpvCapabilityRayTracingPositionFetchKHR = 5336,
+    SpvCapabilityRayTracingNV = 5340,
+    SpvCapabilityRayTracingMotionBlurNV = 5341,
+    SpvCapabilityVulkanMemoryModel = 5345,
+    SpvCapabilityVulkanMemoryModelKHR = 5345,
+    SpvCapabilityVulkanMemoryModelDeviceScope = 5346,
+    SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
+    SpvCapabilityPhysicalStorageBufferAddresses = 5347,
+    SpvCapabilityPhysicalStorageBufferAddressesEXT = 5347,
+    SpvCapabilityComputeDerivativeGroupLinearKHR = 5350,
+    SpvCapabilityComputeDerivativeGroupLinearNV = 5350,
+    SpvCapabilityRayTracingProvisionalKHR = 5353,
+    SpvCapabilityCooperativeMatrixNV = 5357,
+    SpvCapabilityFragmentShaderSampleInterlockEXT = 5363,
+    SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372,
+    SpvCapabilityShaderSMBuiltinsNV = 5373,
+    SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
+    SpvCapabilityDemoteToHelperInvocation = 5379,
+    SpvCapabilityDemoteToHelperInvocationEXT = 5379,
+    SpvCapabilityDisplacementMicromapNV = 5380,
+    SpvCapabilityRayTracingOpacityMicromapEXT = 5381,
+    SpvCapabilityShaderInvocationReorderNV = 5383,
+    SpvCapabilityBindlessTextureNV = 5390,
+    SpvCapabilityRayQueryPositionFetchKHR = 5391,
+    SpvCapabilityCooperativeVectorNV = 5394,
+    SpvCapabilityAtomicFloat16VectorNV = 5404,
+    SpvCapabilityRayTracingDisplacementMicromapNV = 5409,
+    SpvCapabilityRawAccessChainsNV = 5414,
+    SpvCapabilityRayTracingSpheresGeometryNV = 5418,
+    SpvCapabilityRayTracingLinearSweptSpheresGeometryNV = 5419,
+    SpvCapabilityCooperativeMatrixReductionsNV = 5430,
+    SpvCapabilityCooperativeMatrixConversionsNV = 5431,
+    SpvCapabilityCooperativeMatrixPerElementOperationsNV = 5432,
+    SpvCapabilityCooperativeMatrixTensorAddressingNV = 5433,
+    SpvCapabilityCooperativeMatrixBlockLoadsNV = 5434,
+    SpvCapabilityCooperativeVectorTrainingNV = 5435,
+    SpvCapabilityRayTracingClusterAccelerationStructureNV = 5437,
+    SpvCapabilityTensorAddressingNV = 5439,
+    SpvCapabilitySubgroupShuffleINTEL = 5568,
+    SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
+    SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
+    SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579,
+    SpvCapabilityRoundToInfinityINTEL = 5582,
+    SpvCapabilityFloatingPointModeINTEL = 5583,
+    SpvCapabilityIntegerFunctions2INTEL = 5584,
+    SpvCapabilityFunctionPointersINTEL = 5603,
+    SpvCapabilityIndirectReferencesINTEL = 5604,
+    SpvCapabilityAsmINTEL = 5606,
+    SpvCapabilityAtomicFloat32MinMaxEXT = 5612,
+    SpvCapabilityAtomicFloat64MinMaxEXT = 5613,
+    SpvCapabilityAtomicFloat16MinMaxEXT = 5616,
+    SpvCapabilityVectorComputeINTEL = 5617,
+    SpvCapabilityVectorAnyINTEL = 5619,
+    SpvCapabilityExpectAssumeKHR = 5629,
+    SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696,
+    SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
+    SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
+    SpvCapabilityVariableLengthArrayINTEL = 5817,
+    SpvCapabilityFunctionFloatControlINTEL = 5821,
+    SpvCapabilityFPGAMemoryAttributesINTEL = 5824,
+    SpvCapabilityFPFastMathModeINTEL = 5837,
+    SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844,
+    SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
+    SpvCapabilityUnstructuredLoopControlsINTEL = 5886,
+    SpvCapabilityFPGALoopControlsINTEL = 5888,
+    SpvCapabilityKernelAttributesINTEL = 5892,
+    SpvCapabilityFPGAKernelAttributesINTEL = 5897,
+    SpvCapabilityFPGAMemoryAccessesINTEL = 5898,
+    SpvCapabilityFPGAClusterAttributesINTEL = 5904,
+    SpvCapabilityLoopFuseINTEL = 5906,
+    SpvCapabilityFPGADSPControlINTEL = 5908,
+    SpvCapabilityMemoryAccessAliasingINTEL = 5910,
+    SpvCapabilityFPGAInvocationPipeliningAttributesINTEL = 5916,
+    SpvCapabilityFPGABufferLocationINTEL = 5920,
+    SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922,
+    SpvCapabilityUSMStorageClassesINTEL = 5935,
+    SpvCapabilityRuntimeAlignedAttributeINTEL = 5939,
+    SpvCapabilityIOPipesINTEL = 5943,
+    SpvCapabilityBlockingPipesINTEL = 5945,
+    SpvCapabilityFPGARegINTEL = 5948,
+    SpvCapabilityDotProductInputAll = 6016,
+    SpvCapabilityDotProductInputAllKHR = 6016,
+    SpvCapabilityDotProductInput4x8Bit = 6017,
+    SpvCapabilityDotProductInput4x8BitKHR = 6017,
+    SpvCapabilityDotProductInput4x8BitPacked = 6018,
+    SpvCapabilityDotProductInput4x8BitPackedKHR = 6018,
+    SpvCapabilityDotProduct = 6019,
+    SpvCapabilityDotProductKHR = 6019,
+    SpvCapabilityRayCullMaskKHR = 6020,
+    SpvCapabilityCooperativeMatrixKHR = 6022,
+    SpvCapabilityReplicatedCompositesEXT = 6024,
+    SpvCapabilityBitInstructions = 6025,
+    SpvCapabilityGroupNonUniformRotateKHR = 6026,
+    SpvCapabilityFloatControls2 = 6029,
+    SpvCapabilityAtomicFloat32AddEXT = 6033,
+    SpvCapabilityAtomicFloat64AddEXT = 6034,
+    SpvCapabilityLongCompositesINTEL = 6089,
+    SpvCapabilityOptNoneEXT = 6094,
+    SpvCapabilityOptNoneINTEL = 6094,
+    SpvCapabilityAtomicFloat16AddEXT = 6095,
+    SpvCapabilityDebugInfoModuleINTEL = 6114,
+    SpvCapabilityBFloat16ConversionINTEL = 6115,
+    SpvCapabilitySplitBarrierINTEL = 6141,
+    SpvCapabilityArithmeticFenceEXT = 6144,
+    SpvCapabilityFPGAClusterAttributesV2INTEL = 6150,
+    SpvCapabilityFPGAKernelAttributesv2INTEL = 6161,
+    SpvCapabilityTaskSequenceINTEL = 6162,
+    SpvCapabilityFPMaxErrorINTEL = 6169,
+    SpvCapabilityFPGALatencyControlINTEL = 6171,
+    SpvCapabilityFPGAArgumentInterfacesINTEL = 6174,
+    SpvCapabilityGlobalVariableHostAccessINTEL = 6187,
+    SpvCapabilityGlobalVariableFPGADecorationsINTEL = 6189,
+    SpvCapabilitySubgroupBufferPrefetchINTEL = 6220,
+    SpvCapabilitySubgroup2DBlockIOINTEL = 6228,
+    SpvCapabilitySubgroup2DBlockTransformINTEL = 6229,
+    SpvCapabilitySubgroup2DBlockTransposeINTEL = 6230,
+    SpvCapabilitySubgroupMatrixMultiplyAccumulateINTEL = 6236,
+    SpvCapabilityTernaryBitwiseFunctionINTEL = 6241,
+    SpvCapabilityUntypedVariableLengthArrayINTEL = 6243,
+    SpvCapabilitySpecConditionalINTEL = 6245,
+    SpvCapabilityFunctionVariantsINTEL = 6246,
+    SpvCapabilityGroupUniformArithmeticKHR = 6400,
+    SpvCapabilityTensorFloat32RoundingINTEL = 6425,
+    SpvCapabilityMaskedGatherScatterINTEL = 6427,
+    SpvCapabilityCacheControlsINTEL = 6441,
+    SpvCapabilityRegisterLimitsINTEL = 6460,
+    SpvCapabilityBindlessImagesINTEL = 6528,
+    SpvCapabilityMax = 0x7fffffff,
+} SpvCapability;
+
+typedef enum SpvRayFlagsShift_ {
+    SpvRayFlagsOpaqueKHRShift = 0,
+    SpvRayFlagsNoOpaqueKHRShift = 1,
+    SpvRayFlagsTerminateOnFirstHitKHRShift = 2,
+    SpvRayFlagsSkipClosestHitShaderKHRShift = 3,
+    SpvRayFlagsCullBackFacingTrianglesKHRShift = 4,
+    SpvRayFlagsCullFrontFacingTrianglesKHRShift = 5,
+    SpvRayFlagsCullOpaqueKHRShift = 6,
+    SpvRayFlagsCullNoOpaqueKHRShift = 7,
+    SpvRayFlagsSkipBuiltinPrimitivesNVShift = 8,
+    SpvRayFlagsSkipTrianglesKHRShift = 8,
+    SpvRayFlagsSkipAABBsKHRShift = 9,
+    SpvRayFlagsForceOpacityMicromap2StateEXTShift = 10,
+    SpvRayFlagsMax = 0x7fffffff,
+} SpvRayFlagsShift;
+
+typedef enum SpvRayFlagsMask_ {
+    SpvRayFlagsMaskNone = 0,
+    SpvRayFlagsOpaqueKHRMask = 0x00000001,
+    SpvRayFlagsNoOpaqueKHRMask = 0x00000002,
+    SpvRayFlagsTerminateOnFirstHitKHRMask = 0x00000004,
+    SpvRayFlagsSkipClosestHitShaderKHRMask = 0x00000008,
+    SpvRayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,
+    SpvRayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,
+    SpvRayFlagsCullOpaqueKHRMask = 0x00000040,
+    SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080,
+    SpvRayFlagsSkipBuiltinPrimitivesNVMask = 0x00000100,
+    SpvRayFlagsSkipTrianglesKHRMask = 0x00000100,
+    SpvRayFlagsSkipAABBsKHRMask = 0x00000200,
+    SpvRayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400,
+} SpvRayFlagsMask;
+
+typedef enum SpvRayQueryIntersection_ {
+    SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,
+    SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,
+    SpvRayQueryIntersectionMax = 0x7fffffff,
+} SpvRayQueryIntersection;
+
+typedef enum SpvRayQueryCommittedIntersectionType_ {
+    SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,
+    SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1,
+    SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2,
+    SpvRayQueryCommittedIntersectionTypeMax = 0x7fffffff,
+} SpvRayQueryCommittedIntersectionType;
+
+typedef enum SpvRayQueryCandidateIntersectionType_ {
+    SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0,
+    SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,
+    SpvRayQueryCandidateIntersectionTypeMax = 0x7fffffff,
+} SpvRayQueryCandidateIntersectionType;
+
+typedef enum SpvFragmentShadingRateShift_ {
+    SpvFragmentShadingRateVertical2PixelsShift = 0,
+    SpvFragmentShadingRateVertical4PixelsShift = 1,
+    SpvFragmentShadingRateHorizontal2PixelsShift = 2,
+    SpvFragmentShadingRateHorizontal4PixelsShift = 3,
+    SpvFragmentShadingRateMax = 0x7fffffff,
+} SpvFragmentShadingRateShift;
+
+typedef enum SpvFragmentShadingRateMask_ {
+    SpvFragmentShadingRateMaskNone = 0,
+    SpvFragmentShadingRateVertical2PixelsMask = 0x00000001,
+    SpvFragmentShadingRateVertical4PixelsMask = 0x00000002,
+    SpvFragmentShadingRateHorizontal2PixelsMask = 0x00000004,
+    SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008,
+} SpvFragmentShadingRateMask;
+
+typedef enum SpvFPDenormMode_ {
+    SpvFPDenormModePreserve = 0,
+    SpvFPDenormModeFlushToZero = 1,
+    SpvFPDenormModeMax = 0x7fffffff,
+} SpvFPDenormMode;
+
+typedef enum SpvFPOperationMode_ {
+    SpvFPOperationModeIEEE = 0,
+    SpvFPOperationModeALT = 1,
+    SpvFPOperationModeMax = 0x7fffffff,
+} SpvFPOperationMode;
+
+typedef enum SpvQuantizationModes_ {
+    SpvQuantizationModesTRN = 0,
+    SpvQuantizationModesTRN_ZERO = 1,
+    SpvQuantizationModesRND = 2,
+    SpvQuantizationModesRND_ZERO = 3,
+    SpvQuantizationModesRND_INF = 4,
+    SpvQuantizationModesRND_MIN_INF = 5,
+    SpvQuantizationModesRND_CONV = 6,
+    SpvQuantizationModesRND_CONV_ODD = 7,
+    SpvQuantizationModesMax = 0x7fffffff,
+} SpvQuantizationModes;
+
+typedef enum SpvOverflowModes_ {
+    SpvOverflowModesWRAP = 0,
+    SpvOverflowModesSAT = 1,
+    SpvOverflowModesSAT_ZERO = 2,
+    SpvOverflowModesSAT_SYM = 3,
+    SpvOverflowModesMax = 0x7fffffff,
+} SpvOverflowModes;
+
+typedef enum SpvPackedVectorFormat_ {
+    SpvPackedVectorFormatPackedVectorFormat4x8Bit = 0,
+    SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
+    SpvPackedVectorFormatMax = 0x7fffffff,
+} SpvPackedVectorFormat;
+
+typedef enum SpvCooperativeMatrixOperandsShift_ {
+    SpvCooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0,
+    SpvCooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1,
+    SpvCooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2,
+    SpvCooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3,
+    SpvCooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4,
+    SpvCooperativeMatrixOperandsMax = 0x7fffffff,
+} SpvCooperativeMatrixOperandsShift;
+
+typedef enum SpvCooperativeMatrixOperandsMask_ {
+    SpvCooperativeMatrixOperandsMaskNone = 0,
+    SpvCooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001,
+    SpvCooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002,
+    SpvCooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004,
+    SpvCooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008,
+    SpvCooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010,
+} SpvCooperativeMatrixOperandsMask;
+
+typedef enum SpvCooperativeMatrixLayout_ {
+    SpvCooperativeMatrixLayoutRowMajorKHR = 0,
+    SpvCooperativeMatrixLayoutColumnMajorKHR = 1,
+    SpvCooperativeMatrixLayoutRowBlockedInterleavedARM = 4202,
+    SpvCooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203,
+    SpvCooperativeMatrixLayoutMax = 0x7fffffff,
+} SpvCooperativeMatrixLayout;
+
+typedef enum SpvCooperativeMatrixUse_ {
+    SpvCooperativeMatrixUseMatrixAKHR = 0,
+    SpvCooperativeMatrixUseMatrixBKHR = 1,
+    SpvCooperativeMatrixUseMatrixAccumulatorKHR = 2,
+    SpvCooperativeMatrixUseMax = 0x7fffffff,
+} SpvCooperativeMatrixUse;
+
+typedef enum SpvCooperativeMatrixReduceShift_ {
+    SpvCooperativeMatrixReduceRowShift = 0,
+    SpvCooperativeMatrixReduceColumnShift = 1,
+    SpvCooperativeMatrixReduce2x2Shift = 2,
+    SpvCooperativeMatrixReduceMax = 0x7fffffff,
+} SpvCooperativeMatrixReduceShift;
+
+typedef enum SpvCooperativeMatrixReduceMask_ {
+    SpvCooperativeMatrixReduceMaskNone = 0,
+    SpvCooperativeMatrixReduceRowMask = 0x00000001,
+    SpvCooperativeMatrixReduceColumnMask = 0x00000002,
+    SpvCooperativeMatrixReduce2x2Mask = 0x00000004,
+} SpvCooperativeMatrixReduceMask;
+
+typedef enum SpvTensorClampMode_ {
+    SpvTensorClampModeUndefined = 0,
+    SpvTensorClampModeConstant = 1,
+    SpvTensorClampModeClampToEdge = 2,
+    SpvTensorClampModeRepeat = 3,
+    SpvTensorClampModeRepeatMirrored = 4,
+    SpvTensorClampModeMax = 0x7fffffff,
+} SpvTensorClampMode;
+
+typedef enum SpvTensorAddressingOperandsShift_ {
+    SpvTensorAddressingOperandsTensorViewShift = 0,
+    SpvTensorAddressingOperandsDecodeFuncShift = 1,
+    SpvTensorAddressingOperandsMax = 0x7fffffff,
+} SpvTensorAddressingOperandsShift;
+
+typedef enum SpvTensorAddressingOperandsMask_ {
+    SpvTensorAddressingOperandsMaskNone = 0,
+    SpvTensorAddressingOperandsTensorViewMask = 0x00000001,
+    SpvTensorAddressingOperandsDecodeFuncMask = 0x00000002,
+} SpvTensorAddressingOperandsMask;
+
+typedef enum SpvTensorOperandsShift_ {
+    SpvTensorOperandsNontemporalARMShift = 0,
+    SpvTensorOperandsOutOfBoundsValueARMShift = 1,
+    SpvTensorOperandsMakeElementAvailableARMShift = 2,
+    SpvTensorOperandsMakeElementVisibleARMShift = 3,
+    SpvTensorOperandsNonPrivateElementARMShift = 4,
+    SpvTensorOperandsMax = 0x7fffffff,
+} SpvTensorOperandsShift;
+
+typedef enum SpvTensorOperandsMask_ {
+    SpvTensorOperandsMaskNone = 0,
+    SpvTensorOperandsNontemporalARMMask = 0x00000001,
+    SpvTensorOperandsOutOfBoundsValueARMMask = 0x00000002,
+    SpvTensorOperandsMakeElementAvailableARMMask = 0x00000004,
+    SpvTensorOperandsMakeElementVisibleARMMask = 0x00000008,
+    SpvTensorOperandsNonPrivateElementARMMask = 0x00000010,
+} SpvTensorOperandsMask;
+
+typedef enum SpvInitializationModeQualifier_ {
+    SpvInitializationModeQualifierInitOnDeviceReprogramINTEL = 0,
+    SpvInitializationModeQualifierInitOnDeviceResetINTEL = 1,
+    SpvInitializationModeQualifierMax = 0x7fffffff,
+} SpvInitializationModeQualifier;
+
+typedef enum SpvHostAccessQualifier_ {
+    SpvHostAccessQualifierNoneINTEL = 0,
+    SpvHostAccessQualifierReadINTEL = 1,
+    SpvHostAccessQualifierWriteINTEL = 2,
+    SpvHostAccessQualifierReadWriteINTEL = 3,
+    SpvHostAccessQualifierMax = 0x7fffffff,
+} SpvHostAccessQualifier;
+
+typedef enum SpvLoadCacheControl_ {
+    SpvLoadCacheControlUncachedINTEL = 0,
+    SpvLoadCacheControlCachedINTEL = 1,
+    SpvLoadCacheControlStreamingINTEL = 2,
+    SpvLoadCacheControlInvalidateAfterReadINTEL = 3,
+    SpvLoadCacheControlConstCachedINTEL = 4,
+    SpvLoadCacheControlMax = 0x7fffffff,
+} SpvLoadCacheControl;
+
+typedef enum SpvStoreCacheControl_ {
+    SpvStoreCacheControlUncachedINTEL = 0,
+    SpvStoreCacheControlWriteThroughINTEL = 1,
+    SpvStoreCacheControlWriteBackINTEL = 2,
+    SpvStoreCacheControlStreamingINTEL = 3,
+    SpvStoreCacheControlMax = 0x7fffffff,
+} SpvStoreCacheControl;
+
+typedef enum SpvNamedMaximumNumberOfRegisters_ {
+    SpvNamedMaximumNumberOfRegistersAutoINTEL = 0,
+    SpvNamedMaximumNumberOfRegistersMax = 0x7fffffff,
+} SpvNamedMaximumNumberOfRegisters;
+
+typedef enum SpvMatrixMultiplyAccumulateOperandsShift_ {
+    SpvMatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELShift = 0,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELShift = 1,
+    SpvMatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELShift = 2,
+    SpvMatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELShift = 3,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELShift = 4,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELShift = 5,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELShift = 6,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELShift = 7,
+    SpvMatrixMultiplyAccumulateOperandsMatrixATF32INTELShift = 8,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBTF32INTELShift = 9,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELShift = 10,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELShift = 11,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELShift = 12,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELShift = 13,
+    SpvMatrixMultiplyAccumulateOperandsMax = 0x7fffffff,
+} SpvMatrixMultiplyAccumulateOperandsShift;
+
+typedef enum SpvMatrixMultiplyAccumulateOperandsMask_ {
+    SpvMatrixMultiplyAccumulateOperandsMaskNone = 0,
+    SpvMatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELMask = 0x00000001,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELMask = 0x00000002,
+    SpvMatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELMask = 0x00000004,
+    SpvMatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELMask = 0x00000008,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELMask = 0x00000010,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELMask = 0x00000020,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELMask = 0x00000040,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELMask = 0x00000080,
+    SpvMatrixMultiplyAccumulateOperandsMatrixATF32INTELMask = 0x00000100,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBTF32INTELMask = 0x00000200,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELMask = 0x00000400,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELMask = 0x00000800,
+    SpvMatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELMask = 0x00001000,
+    SpvMatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELMask = 0x00002000,
+} SpvMatrixMultiplyAccumulateOperandsMask;
+
+typedef enum SpvRawAccessChainOperandsShift_ {
+    SpvRawAccessChainOperandsRobustnessPerComponentNVShift = 0,
+    SpvRawAccessChainOperandsRobustnessPerElementNVShift = 1,
+    SpvRawAccessChainOperandsMax = 0x7fffffff,
+} SpvRawAccessChainOperandsShift;
+
+typedef enum SpvRawAccessChainOperandsMask_ {
+    SpvRawAccessChainOperandsMaskNone = 0,
+    SpvRawAccessChainOperandsRobustnessPerComponentNVMask = 0x00000001,
+    SpvRawAccessChainOperandsRobustnessPerElementNVMask = 0x00000002,
+} SpvRawAccessChainOperandsMask;
+
+typedef enum SpvFPEncoding_ {
+    SpvFPEncodingBFloat16KHR = 0,
+    SpvFPEncodingFloat8E4M3EXT = 4214,
+    SpvFPEncodingFloat8E5M2EXT = 4215,
+    SpvFPEncodingMax = 0x7fffffff,
+} SpvFPEncoding;
+
+typedef enum SpvCooperativeVectorMatrixLayout_ {
+    SpvCooperativeVectorMatrixLayoutRowMajorNV = 0,
+    SpvCooperativeVectorMatrixLayoutColumnMajorNV = 1,
+    SpvCooperativeVectorMatrixLayoutInferencingOptimalNV = 2,
+    SpvCooperativeVectorMatrixLayoutTrainingOptimalNV = 3,
+    SpvCooperativeVectorMatrixLayoutMax = 0x7fffffff,
+} SpvCooperativeVectorMatrixLayout;
+
+typedef enum SpvComponentType_ {
+    SpvComponentTypeFloat16NV = 0,
+    SpvComponentTypeFloat32NV = 1,
+    SpvComponentTypeFloat64NV = 2,
+    SpvComponentTypeSignedInt8NV = 3,
+    SpvComponentTypeSignedInt16NV = 4,
+    SpvComponentTypeSignedInt32NV = 5,
+    SpvComponentTypeSignedInt64NV = 6,
+    SpvComponentTypeUnsignedInt8NV = 7,
+    SpvComponentTypeUnsignedInt16NV = 8,
+    SpvComponentTypeUnsignedInt32NV = 9,
+    SpvComponentTypeUnsignedInt64NV = 10,
+    SpvComponentTypeSignedInt8PackedNV = 1000491000,
+    SpvComponentTypeUnsignedInt8PackedNV = 1000491001,
+    SpvComponentTypeFloatE4M3NV = 1000491002,
+    SpvComponentTypeFloatE5M2NV = 1000491003,
+    SpvComponentTypeMax = 0x7fffffff,
+} SpvComponentType;
+
+typedef enum SpvOp_ {
+    SpvOpNop = 0,
+    SpvOpUndef = 1,
+    SpvOpSourceContinued = 2,
+    SpvOpSource = 3,
+    SpvOpSourceExtension = 4,
+    SpvOpName = 5,
+    SpvOpMemberName = 6,
+    SpvOpString = 7,
+    SpvOpLine = 8,
+    SpvOpExtension = 10,
+    SpvOpExtInstImport = 11,
+    SpvOpExtInst = 12,
+    SpvOpMemoryModel = 14,
+    SpvOpEntryPoint = 15,
+    SpvOpExecutionMode = 16,
+    SpvOpCapability = 17,
+    SpvOpTypeVoid = 19,
+    SpvOpTypeBool = 20,
+    SpvOpTypeInt = 21,
+    SpvOpTypeFloat = 22,
+    SpvOpTypeVector = 23,
+    SpvOpTypeMatrix = 24,
+    SpvOpTypeImage = 25,
+    SpvOpTypeSampler = 26,
+    SpvOpTypeSampledImage = 27,
+    SpvOpTypeArray = 28,
+    SpvOpTypeRuntimeArray = 29,
+    SpvOpTypeStruct = 30,
+    SpvOpTypeOpaque = 31,
+    SpvOpTypePointer = 32,
+    SpvOpTypeFunction = 33,
+    SpvOpTypeEvent = 34,
+    SpvOpTypeDeviceEvent = 35,
+    SpvOpTypeReserveId = 36,
+    SpvOpTypeQueue = 37,
+    SpvOpTypePipe = 38,
+    SpvOpTypeForwardPointer = 39,
+    SpvOpConstantTrue = 41,
+    SpvOpConstantFalse = 42,
+    SpvOpConstant = 43,
+    SpvOpConstantComposite = 44,
+    SpvOpConstantSampler = 45,
+    SpvOpConstantNull = 46,
+    SpvOpSpecConstantTrue = 48,
+    SpvOpSpecConstantFalse = 49,
+    SpvOpSpecConstant = 50,
+    SpvOpSpecConstantComposite = 51,
+    SpvOpSpecConstantOp = 52,
+    SpvOpFunction = 54,
+    SpvOpFunctionParameter = 55,
+    SpvOpFunctionEnd = 56,
+    SpvOpFunctionCall = 57,
+    SpvOpVariable = 59,
+    SpvOpImageTexelPointer = 60,
+    SpvOpLoad = 61,
+    SpvOpStore = 62,
+    SpvOpCopyMemory = 63,
+    SpvOpCopyMemorySized = 64,
+    SpvOpAccessChain = 65,
+    SpvOpInBoundsAccessChain = 66,
+    SpvOpPtrAccessChain = 67,
+    SpvOpArrayLength = 68,
+    SpvOpGenericPtrMemSemantics = 69,
+    SpvOpInBoundsPtrAccessChain = 70,
+    SpvOpDecorate = 71,
+    SpvOpMemberDecorate = 72,
+    SpvOpDecorationGroup = 73,
+    SpvOpGroupDecorate = 74,
+    SpvOpGroupMemberDecorate = 75,
+    SpvOpVectorExtractDynamic = 77,
+    SpvOpVectorInsertDynamic = 78,
+    SpvOpVectorShuffle = 79,
+    SpvOpCompositeConstruct = 80,
+    SpvOpCompositeExtract = 81,
+    SpvOpCompositeInsert = 82,
+    SpvOpCopyObject = 83,
+    SpvOpTranspose = 84,
+    SpvOpSampledImage = 86,
+    SpvOpImageSampleImplicitLod = 87,
+    SpvOpImageSampleExplicitLod = 88,
+    SpvOpImageSampleDrefImplicitLod = 89,
+    SpvOpImageSampleDrefExplicitLod = 90,
+    SpvOpImageSampleProjImplicitLod = 91,
+    SpvOpImageSampleProjExplicitLod = 92,
+    SpvOpImageSampleProjDrefImplicitLod = 93,
+    SpvOpImageSampleProjDrefExplicitLod = 94,
+    SpvOpImageFetch = 95,
+    SpvOpImageGather = 96,
+    SpvOpImageDrefGather = 97,
+    SpvOpImageRead = 98,
+    SpvOpImageWrite = 99,
+    SpvOpImage = 100,
+    SpvOpImageQueryFormat = 101,
+    SpvOpImageQueryOrder = 102,
+    SpvOpImageQuerySizeLod = 103,
+    SpvOpImageQuerySize = 104,
+    SpvOpImageQueryLod = 105,
+    SpvOpImageQueryLevels = 106,
+    SpvOpImageQuerySamples = 107,
+    SpvOpConvertFToU = 109,
+    SpvOpConvertFToS = 110,
+    SpvOpConvertSToF = 111,
+    SpvOpConvertUToF = 112,
+    SpvOpUConvert = 113,
+    SpvOpSConvert = 114,
+    SpvOpFConvert = 115,
+    SpvOpQuantizeToF16 = 116,
+    SpvOpConvertPtrToU = 117,
+    SpvOpSatConvertSToU = 118,
+    SpvOpSatConvertUToS = 119,
+    SpvOpConvertUToPtr = 120,
+    SpvOpPtrCastToGeneric = 121,
+    SpvOpGenericCastToPtr = 122,
+    SpvOpGenericCastToPtrExplicit = 123,
+    SpvOpBitcast = 124,
+    SpvOpSNegate = 126,
+    SpvOpFNegate = 127,
+    SpvOpIAdd = 128,
+    SpvOpFAdd = 129,
+    SpvOpISub = 130,
+    SpvOpFSub = 131,
+    SpvOpIMul = 132,
+    SpvOpFMul = 133,
+    SpvOpUDiv = 134,
+    SpvOpSDiv = 135,
+    SpvOpFDiv = 136,
+    SpvOpUMod = 137,
+    SpvOpSRem = 138,
+    SpvOpSMod = 139,
+    SpvOpFRem = 140,
+    SpvOpFMod = 141,
+    SpvOpVectorTimesScalar = 142,
+    SpvOpMatrixTimesScalar = 143,
+    SpvOpVectorTimesMatrix = 144,
+    SpvOpMatrixTimesVector = 145,
+    SpvOpMatrixTimesMatrix = 146,
+    SpvOpOuterProduct = 147,
+    SpvOpDot = 148,
+    SpvOpIAddCarry = 149,
+    SpvOpISubBorrow = 150,
+    SpvOpUMulExtended = 151,
+    SpvOpSMulExtended = 152,
+    SpvOpAny = 154,
+    SpvOpAll = 155,
+    SpvOpIsNan = 156,
+    SpvOpIsInf = 157,
+    SpvOpIsFinite = 158,
+    SpvOpIsNormal = 159,
+    SpvOpSignBitSet = 160,
+    SpvOpLessOrGreater = 161,
+    SpvOpOrdered = 162,
+    SpvOpUnordered = 163,
+    SpvOpLogicalEqual = 164,
+    SpvOpLogicalNotEqual = 165,
+    SpvOpLogicalOr = 166,
+    SpvOpLogicalAnd = 167,
+    SpvOpLogicalNot = 168,
+    SpvOpSelect = 169,
+    SpvOpIEqual = 170,
+    SpvOpINotEqual = 171,
+    SpvOpUGreaterThan = 172,
+    SpvOpSGreaterThan = 173,
+    SpvOpUGreaterThanEqual = 174,
+    SpvOpSGreaterThanEqual = 175,
+    SpvOpULessThan = 176,
+    SpvOpSLessThan = 177,
+    SpvOpULessThanEqual = 178,
+    SpvOpSLessThanEqual = 179,
+    SpvOpFOrdEqual = 180,
+    SpvOpFUnordEqual = 181,
+    SpvOpFOrdNotEqual = 182,
+    SpvOpFUnordNotEqual = 183,
+    SpvOpFOrdLessThan = 184,
+    SpvOpFUnordLessThan = 185,
+    SpvOpFOrdGreaterThan = 186,
+    SpvOpFUnordGreaterThan = 187,
+    SpvOpFOrdLessThanEqual = 188,
+    SpvOpFUnordLessThanEqual = 189,
+    SpvOpFOrdGreaterThanEqual = 190,
+    SpvOpFUnordGreaterThanEqual = 191,
+    SpvOpShiftRightLogical = 194,
+    SpvOpShiftRightArithmetic = 195,
+    SpvOpShiftLeftLogical = 196,
+    SpvOpBitwiseOr = 197,
+    SpvOpBitwiseXor = 198,
+    SpvOpBitwiseAnd = 199,
+    SpvOpNot = 200,
+    SpvOpBitFieldInsert = 201,
+    SpvOpBitFieldSExtract = 202,
+    SpvOpBitFieldUExtract = 203,
+    SpvOpBitReverse = 204,
+    SpvOpBitCount = 205,
+    SpvOpDPdx = 207,
+    SpvOpDPdy = 208,
+    SpvOpFwidth = 209,
+    SpvOpDPdxFine = 210,
+    SpvOpDPdyFine = 211,
+    SpvOpFwidthFine = 212,
+    SpvOpDPdxCoarse = 213,
+    SpvOpDPdyCoarse = 214,
+    SpvOpFwidthCoarse = 215,
+    SpvOpEmitVertex = 218,
+    SpvOpEndPrimitive = 219,
+    SpvOpEmitStreamVertex = 220,
+    SpvOpEndStreamPrimitive = 221,
+    SpvOpControlBarrier = 224,
+    SpvOpMemoryBarrier = 225,
+    SpvOpAtomicLoad = 227,
+    SpvOpAtomicStore = 228,
+    SpvOpAtomicExchange = 229,
+    SpvOpAtomicCompareExchange = 230,
+    SpvOpAtomicCompareExchangeWeak = 231,
+    SpvOpAtomicIIncrement = 232,
+    SpvOpAtomicIDecrement = 233,
+    SpvOpAtomicIAdd = 234,
+    SpvOpAtomicISub = 235,
+    SpvOpAtomicSMin = 236,
+    SpvOpAtomicUMin = 237,
+    SpvOpAtomicSMax = 238,
+    SpvOpAtomicUMax = 239,
+    SpvOpAtomicAnd = 240,
+    SpvOpAtomicOr = 241,
+    SpvOpAtomicXor = 242,
+    SpvOpPhi = 245,
+    SpvOpLoopMerge = 246,
+    SpvOpSelectionMerge = 247,
+    SpvOpLabel = 248,
+    SpvOpBranch = 249,
+    SpvOpBranchConditional = 250,
+    SpvOpSwitch = 251,
+    SpvOpKill = 252,
+    SpvOpReturn = 253,
+    SpvOpReturnValue = 254,
+    SpvOpUnreachable = 255,
+    SpvOpLifetimeStart = 256,
+    SpvOpLifetimeStop = 257,
+    SpvOpGroupAsyncCopy = 259,
+    SpvOpGroupWaitEvents = 260,
+    SpvOpGroupAll = 261,
+    SpvOpGroupAny = 262,
+    SpvOpGroupBroadcast = 263,
+    SpvOpGroupIAdd = 264,
+    SpvOpGroupFAdd = 265,
+    SpvOpGroupFMin = 266,
+    SpvOpGroupUMin = 267,
+    SpvOpGroupSMin = 268,
+    SpvOpGroupFMax = 269,
+    SpvOpGroupUMax = 270,
+    SpvOpGroupSMax = 271,
+    SpvOpReadPipe = 274,
+    SpvOpWritePipe = 275,
+    SpvOpReservedReadPipe = 276,
+    SpvOpReservedWritePipe = 277,
+    SpvOpReserveReadPipePackets = 278,
+    SpvOpReserveWritePipePackets = 279,
+    SpvOpCommitReadPipe = 280,
+    SpvOpCommitWritePipe = 281,
+    SpvOpIsValidReserveId = 282,
+    SpvOpGetNumPipePackets = 283,
+    SpvOpGetMaxPipePackets = 284,
+    SpvOpGroupReserveReadPipePackets = 285,
+    SpvOpGroupReserveWritePipePackets = 286,
+    SpvOpGroupCommitReadPipe = 287,
+    SpvOpGroupCommitWritePipe = 288,
+    SpvOpEnqueueMarker = 291,
+    SpvOpEnqueueKernel = 292,
+    SpvOpGetKernelNDrangeSubGroupCount = 293,
+    SpvOpGetKernelNDrangeMaxSubGroupSize = 294,
+    SpvOpGetKernelWorkGroupSize = 295,
+    SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296,
+    SpvOpRetainEvent = 297,
+    SpvOpReleaseEvent = 298,
+    SpvOpCreateUserEvent = 299,
+    SpvOpIsValidEvent = 300,
+    SpvOpSetUserEventStatus = 301,
+    SpvOpCaptureEventProfilingInfo = 302,
+    SpvOpGetDefaultQueue = 303,
+    SpvOpBuildNDRange = 304,
+    SpvOpImageSparseSampleImplicitLod = 305,
+    SpvOpImageSparseSampleExplicitLod = 306,
+    SpvOpImageSparseSampleDrefImplicitLod = 307,
+    SpvOpImageSparseSampleDrefExplicitLod = 308,
+    SpvOpImageSparseSampleProjImplicitLod = 309,
+    SpvOpImageSparseSampleProjExplicitLod = 310,
+    SpvOpImageSparseSampleProjDrefImplicitLod = 311,
+    SpvOpImageSparseSampleProjDrefExplicitLod = 312,
+    SpvOpImageSparseFetch = 313,
+    SpvOpImageSparseGather = 314,
+    SpvOpImageSparseDrefGather = 315,
+    SpvOpImageSparseTexelsResident = 316,
+    SpvOpNoLine = 317,
+    SpvOpAtomicFlagTestAndSet = 318,
+    SpvOpAtomicFlagClear = 319,
+    SpvOpImageSparseRead = 320,
+    SpvOpSizeOf = 321,
+    SpvOpTypePipeStorage = 322,
+    SpvOpConstantPipeStorage = 323,
+    SpvOpCreatePipeFromPipeStorage = 324,
+    SpvOpGetKernelLocalSizeForSubgroupCount = 325,
+    SpvOpGetKernelMaxNumSubgroups = 326,
+    SpvOpTypeNamedBarrier = 327,
+    SpvOpNamedBarrierInitialize = 328,
+    SpvOpMemoryNamedBarrier = 329,
+    SpvOpModuleProcessed = 330,
+    SpvOpExecutionModeId = 331,
+    SpvOpDecorateId = 332,
+    SpvOpGroupNonUniformElect = 333,
+    SpvOpGroupNonUniformAll = 334,
+    SpvOpGroupNonUniformAny = 335,
+    SpvOpGroupNonUniformAllEqual = 336,
+    SpvOpGroupNonUniformBroadcast = 337,
+    SpvOpGroupNonUniformBroadcastFirst = 338,
+    SpvOpGroupNonUniformBallot = 339,
+    SpvOpGroupNonUniformInverseBallot = 340,
+    SpvOpGroupNonUniformBallotBitExtract = 341,
+    SpvOpGroupNonUniformBallotBitCount = 342,
+    SpvOpGroupNonUniformBallotFindLSB = 343,
+    SpvOpGroupNonUniformBallotFindMSB = 344,
+    SpvOpGroupNonUniformShuffle = 345,
+    SpvOpGroupNonUniformShuffleXor = 346,
+    SpvOpGroupNonUniformShuffleUp = 347,
+    SpvOpGroupNonUniformShuffleDown = 348,
+    SpvOpGroupNonUniformIAdd = 349,
+    SpvOpGroupNonUniformFAdd = 350,
+    SpvOpGroupNonUniformIMul = 351,
+    SpvOpGroupNonUniformFMul = 352,
+    SpvOpGroupNonUniformSMin = 353,
+    SpvOpGroupNonUniformUMin = 354,
+    SpvOpGroupNonUniformFMin = 355,
+    SpvOpGroupNonUniformSMax = 356,
+    SpvOpGroupNonUniformUMax = 357,
+    SpvOpGroupNonUniformFMax = 358,
+    SpvOpGroupNonUniformBitwiseAnd = 359,
+    SpvOpGroupNonUniformBitwiseOr = 360,
+    SpvOpGroupNonUniformBitwiseXor = 361,
+    SpvOpGroupNonUniformLogicalAnd = 362,
+    SpvOpGroupNonUniformLogicalOr = 363,
+    SpvOpGroupNonUniformLogicalXor = 364,
+    SpvOpGroupNonUniformQuadBroadcast = 365,
+    SpvOpGroupNonUniformQuadSwap = 366,
+    SpvOpCopyLogical = 400,
+    SpvOpPtrEqual = 401,
+    SpvOpPtrNotEqual = 402,
+    SpvOpPtrDiff = 403,
+    SpvOpColorAttachmentReadEXT = 4160,
+    SpvOpDepthAttachmentReadEXT = 4161,
+    SpvOpStencilAttachmentReadEXT = 4162,
+    SpvOpTypeTensorARM = 4163,
+    SpvOpTensorReadARM = 4164,
+    SpvOpTensorWriteARM = 4165,
+    SpvOpTensorQuerySizeARM = 4166,
+    SpvOpGraphConstantARM = 4181,
+    SpvOpGraphEntryPointARM = 4182,
+    SpvOpGraphARM = 4183,
+    SpvOpGraphInputARM = 4184,
+    SpvOpGraphSetOutputARM = 4185,
+    SpvOpGraphEndARM = 4186,
+    SpvOpTypeGraphARM = 4190,
+    SpvOpTerminateInvocation = 4416,
+    SpvOpTypeUntypedPointerKHR = 4417,
+    SpvOpUntypedVariableKHR = 4418,
+    SpvOpUntypedAccessChainKHR = 4419,
+    SpvOpUntypedInBoundsAccessChainKHR = 4420,
+    SpvOpSubgroupBallotKHR = 4421,
+    SpvOpSubgroupFirstInvocationKHR = 4422,
+    SpvOpUntypedPtrAccessChainKHR = 4423,
+    SpvOpUntypedInBoundsPtrAccessChainKHR = 4424,
+    SpvOpUntypedArrayLengthKHR = 4425,
+    SpvOpUntypedPrefetchKHR = 4426,
+    SpvOpSubgroupAllKHR = 4428,
+    SpvOpSubgroupAnyKHR = 4429,
+    SpvOpSubgroupAllEqualKHR = 4430,
+    SpvOpGroupNonUniformRotateKHR = 4431,
+    SpvOpSubgroupReadInvocationKHR = 4432,
+    SpvOpExtInstWithForwardRefsKHR = 4433,
+    SpvOpUntypedGroupAsyncCopyKHR = 4434,
+    SpvOpTraceRayKHR = 4445,
+    SpvOpExecuteCallableKHR = 4446,
+    SpvOpConvertUToAccelerationStructureKHR = 4447,
+    SpvOpIgnoreIntersectionKHR = 4448,
+    SpvOpTerminateRayKHR = 4449,
+    SpvOpSDot = 4450,
+    SpvOpSDotKHR = 4450,
+    SpvOpUDot = 4451,
+    SpvOpUDotKHR = 4451,
+    SpvOpSUDot = 4452,
+    SpvOpSUDotKHR = 4452,
+    SpvOpSDotAccSat = 4453,
+    SpvOpSDotAccSatKHR = 4453,
+    SpvOpUDotAccSat = 4454,
+    SpvOpUDotAccSatKHR = 4454,
+    SpvOpSUDotAccSat = 4455,
+    SpvOpSUDotAccSatKHR = 4455,
+    SpvOpTypeCooperativeMatrixKHR = 4456,
+    SpvOpCooperativeMatrixLoadKHR = 4457,
+    SpvOpCooperativeMatrixStoreKHR = 4458,
+    SpvOpCooperativeMatrixMulAddKHR = 4459,
+    SpvOpCooperativeMatrixLengthKHR = 4460,
+    SpvOpConstantCompositeReplicateEXT = 4461,
+    SpvOpSpecConstantCompositeReplicateEXT = 4462,
+    SpvOpCompositeConstructReplicateEXT = 4463,
+    SpvOpTypeRayQueryKHR = 4472,
+    SpvOpRayQueryInitializeKHR = 4473,
+    SpvOpRayQueryTerminateKHR = 4474,
+    SpvOpRayQueryGenerateIntersectionKHR = 4475,
+    SpvOpRayQueryConfirmIntersectionKHR = 4476,
+    SpvOpRayQueryProceedKHR = 4477,
+    SpvOpRayQueryGetIntersectionTypeKHR = 4479,
+    SpvOpImageSampleWeightedQCOM = 4480,
+    SpvOpImageBoxFilterQCOM = 4481,
+    SpvOpImageBlockMatchSSDQCOM = 4482,
+    SpvOpImageBlockMatchSADQCOM = 4483,
+    SpvOpBitCastArrayQCOM = 4497,
+    SpvOpImageBlockMatchWindowSSDQCOM = 4500,
+    SpvOpImageBlockMatchWindowSADQCOM = 4501,
+    SpvOpImageBlockMatchGatherSSDQCOM = 4502,
+    SpvOpImageBlockMatchGatherSADQCOM = 4503,
+    SpvOpCompositeConstructCoopMatQCOM = 4540,
+    SpvOpCompositeExtractCoopMatQCOM = 4541,
+    SpvOpExtractSubArrayQCOM = 4542,
+    SpvOpGroupIAddNonUniformAMD = 5000,
+    SpvOpGroupFAddNonUniformAMD = 5001,
+    SpvOpGroupFMinNonUniformAMD = 5002,
+    SpvOpGroupUMinNonUniformAMD = 5003,
+    SpvOpGroupSMinNonUniformAMD = 5004,
+    SpvOpGroupFMaxNonUniformAMD = 5005,
+    SpvOpGroupUMaxNonUniformAMD = 5006,
+    SpvOpGroupSMaxNonUniformAMD = 5007,
+    SpvOpFragmentMaskFetchAMD = 5011,
+    SpvOpFragmentFetchAMD = 5012,
+    SpvOpReadClockKHR = 5056,
+    SpvOpAllocateNodePayloadsAMDX = 5074,
+    SpvOpEnqueueNodePayloadsAMDX = 5075,
+    SpvOpTypeNodePayloadArrayAMDX = 5076,
+    SpvOpFinishWritingNodePayloadAMDX = 5078,
+    SpvOpNodePayloadArrayLengthAMDX = 5090,
+    SpvOpIsNodePayloadValidAMDX = 5101,
+    SpvOpConstantStringAMDX = 5103,
+    SpvOpSpecConstantStringAMDX = 5104,
+    SpvOpGroupNonUniformQuadAllKHR = 5110,
+    SpvOpGroupNonUniformQuadAnyKHR = 5111,
+    SpvOpHitObjectRecordHitMotionNV = 5249,
+    SpvOpHitObjectRecordHitWithIndexMotionNV = 5250,
+    SpvOpHitObjectRecordMissMotionNV = 5251,
+    SpvOpHitObjectGetWorldToObjectNV = 5252,
+    SpvOpHitObjectGetObjectToWorldNV = 5253,
+    SpvOpHitObjectGetObjectRayDirectionNV = 5254,
+    SpvOpHitObjectGetObjectRayOriginNV = 5255,
+    SpvOpHitObjectTraceRayMotionNV = 5256,
+    SpvOpHitObjectGetShaderRecordBufferHandleNV = 5257,
+    SpvOpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
+    SpvOpHitObjectRecordEmptyNV = 5259,
+    SpvOpHitObjectTraceRayNV = 5260,
+    SpvOpHitObjectRecordHitNV = 5261,
+    SpvOpHitObjectRecordHitWithIndexNV = 5262,
+    SpvOpHitObjectRecordMissNV = 5263,
+    SpvOpHitObjectExecuteShaderNV = 5264,
+    SpvOpHitObjectGetCurrentTimeNV = 5265,
+    SpvOpHitObjectGetAttributesNV = 5266,
+    SpvOpHitObjectGetHitKindNV = 5267,
+    SpvOpHitObjectGetPrimitiveIndexNV = 5268,
+    SpvOpHitObjectGetGeometryIndexNV = 5269,
+    SpvOpHitObjectGetInstanceIdNV = 5270,
+    SpvOpHitObjectGetInstanceCustomIndexNV = 5271,
+    SpvOpHitObjectGetWorldRayDirectionNV = 5272,
+    SpvOpHitObjectGetWorldRayOriginNV = 5273,
+    SpvOpHitObjectGetRayTMaxNV = 5274,
+    SpvOpHitObjectGetRayTMinNV = 5275,
+    SpvOpHitObjectIsEmptyNV = 5276,
+    SpvOpHitObjectIsHitNV = 5277,
+    SpvOpHitObjectIsMissNV = 5278,
+    SpvOpReorderThreadWithHitObjectNV = 5279,
+    SpvOpReorderThreadWithHintNV = 5280,
+    SpvOpTypeHitObjectNV = 5281,
+    SpvOpImageSampleFootprintNV = 5283,
+    SpvOpTypeCooperativeVectorNV = 5288,
+    SpvOpCooperativeVectorMatrixMulNV = 5289,
+    SpvOpCooperativeVectorOuterProductAccumulateNV = 5290,
+    SpvOpCooperativeVectorReduceSumAccumulateNV = 5291,
+    SpvOpCooperativeVectorMatrixMulAddNV = 5292,
+    SpvOpCooperativeMatrixConvertNV = 5293,
+    SpvOpEmitMeshTasksEXT = 5294,
+    SpvOpSetMeshOutputsEXT = 5295,
+    SpvOpGroupNonUniformPartitionNV = 5296,
+    SpvOpWritePackedPrimitiveIndices4x8NV = 5299,
+    SpvOpFetchMicroTriangleVertexPositionNV = 5300,
+    SpvOpFetchMicroTriangleVertexBarycentricNV = 5301,
+    SpvOpCooperativeVectorLoadNV = 5302,
+    SpvOpCooperativeVectorStoreNV = 5303,
+    SpvOpReportIntersectionKHR = 5334,
+    SpvOpReportIntersectionNV = 5334,
+    SpvOpIgnoreIntersectionNV = 5335,
+    SpvOpTerminateRayNV = 5336,
+    SpvOpTraceNV = 5337,
+    SpvOpTraceMotionNV = 5338,
+    SpvOpTraceRayMotionNV = 5339,
+    SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
+    SpvOpTypeAccelerationStructureKHR = 5341,
+    SpvOpTypeAccelerationStructureNV = 5341,
+    SpvOpExecuteCallableNV = 5344,
+    SpvOpRayQueryGetClusterIdNV = 5345,
+    SpvOpRayQueryGetIntersectionClusterIdNV = 5345,
+    SpvOpHitObjectGetClusterIdNV = 5346,
+    SpvOpTypeCooperativeMatrixNV = 5358,
+    SpvOpCooperativeMatrixLoadNV = 5359,
+    SpvOpCooperativeMatrixStoreNV = 5360,
+    SpvOpCooperativeMatrixMulAddNV = 5361,
+    SpvOpCooperativeMatrixLengthNV = 5362,
+    SpvOpBeginInvocationInterlockEXT = 5364,
+    SpvOpEndInvocationInterlockEXT = 5365,
+    SpvOpCooperativeMatrixReduceNV = 5366,
+    SpvOpCooperativeMatrixLoadTensorNV = 5367,
+    SpvOpCooperativeMatrixStoreTensorNV = 5368,
+    SpvOpCooperativeMatrixPerElementOpNV = 5369,
+    SpvOpTypeTensorLayoutNV = 5370,
+    SpvOpTypeTensorViewNV = 5371,
+    SpvOpCreateTensorLayoutNV = 5372,
+    SpvOpTensorLayoutSetDimensionNV = 5373,
+    SpvOpTensorLayoutSetStrideNV = 5374,
+    SpvOpTensorLayoutSliceNV = 5375,
+    SpvOpTensorLayoutSetClampValueNV = 5376,
+    SpvOpCreateTensorViewNV = 5377,
+    SpvOpTensorViewSetDimensionNV = 5378,
+    SpvOpTensorViewSetStrideNV = 5379,
+    SpvOpDemoteToHelperInvocation = 5380,
+    SpvOpDemoteToHelperInvocationEXT = 5380,
+    SpvOpIsHelperInvocationEXT = 5381,
+    SpvOpTensorViewSetClipNV = 5382,
+    SpvOpTensorLayoutSetBlockSizeNV = 5384,
+    SpvOpCooperativeMatrixTransposeNV = 5390,
+    SpvOpConvertUToImageNV = 5391,
+    SpvOpConvertUToSamplerNV = 5392,
+    SpvOpConvertImageToUNV = 5393,
+    SpvOpConvertSamplerToUNV = 5394,
+    SpvOpConvertUToSampledImageNV = 5395,
+    SpvOpConvertSampledImageToUNV = 5396,
+    SpvOpSamplerImageAddressingModeNV = 5397,
+    SpvOpRawAccessChainNV = 5398,
+    SpvOpRayQueryGetIntersectionSpherePositionNV = 5427,
+    SpvOpRayQueryGetIntersectionSphereRadiusNV = 5428,
+    SpvOpRayQueryGetIntersectionLSSPositionsNV = 5429,
+    SpvOpRayQueryGetIntersectionLSSRadiiNV = 5430,
+    SpvOpRayQueryGetIntersectionLSSHitValueNV = 5431,
+    SpvOpHitObjectGetSpherePositionNV = 5432,
+    SpvOpHitObjectGetSphereRadiusNV = 5433,
+    SpvOpHitObjectGetLSSPositionsNV = 5434,
+    SpvOpHitObjectGetLSSRadiiNV = 5435,
+    SpvOpHitObjectIsSphereHitNV = 5436,
+    SpvOpHitObjectIsLSSHitNV = 5437,
+    SpvOpRayQueryIsSphereHitNV = 5438,
+    SpvOpRayQueryIsLSSHitNV = 5439,
+    SpvOpSubgroupShuffleINTEL = 5571,
+    SpvOpSubgroupShuffleDownINTEL = 5572,
+    SpvOpSubgroupShuffleUpINTEL = 5573,
+    SpvOpSubgroupShuffleXorINTEL = 5574,
+    SpvOpSubgroupBlockReadINTEL = 5575,
+    SpvOpSubgroupBlockWriteINTEL = 5576,
+    SpvOpSubgroupImageBlockReadINTEL = 5577,
+    SpvOpSubgroupImageBlockWriteINTEL = 5578,
+    SpvOpSubgroupImageMediaBlockReadINTEL = 5580,
+    SpvOpSubgroupImageMediaBlockWriteINTEL = 5581,
+    SpvOpUCountLeadingZerosINTEL = 5585,
+    SpvOpUCountTrailingZerosINTEL = 5586,
+    SpvOpAbsISubINTEL = 5587,
+    SpvOpAbsUSubINTEL = 5588,
+    SpvOpIAddSatINTEL = 5589,
+    SpvOpUAddSatINTEL = 5590,
+    SpvOpIAverageINTEL = 5591,
+    SpvOpUAverageINTEL = 5592,
+    SpvOpIAverageRoundedINTEL = 5593,
+    SpvOpUAverageRoundedINTEL = 5594,
+    SpvOpISubSatINTEL = 5595,
+    SpvOpUSubSatINTEL = 5596,
+    SpvOpIMul32x16INTEL = 5597,
+    SpvOpUMul32x16INTEL = 5598,
+    SpvOpConstantFunctionPointerINTEL = 5600,
+    SpvOpFunctionPointerCallINTEL = 5601,
+    SpvOpAsmTargetINTEL = 5609,
+    SpvOpAsmINTEL = 5610,
+    SpvOpAsmCallINTEL = 5611,
+    SpvOpAtomicFMinEXT = 5614,
+    SpvOpAtomicFMaxEXT = 5615,
+    SpvOpAssumeTrueKHR = 5630,
+    SpvOpExpectKHR = 5631,
+    SpvOpDecorateString = 5632,
+    SpvOpDecorateStringGOOGLE = 5632,
+    SpvOpMemberDecorateString = 5633,
+    SpvOpMemberDecorateStringGOOGLE = 5633,
+    SpvOpVmeImageINTEL = 5699,
+    SpvOpTypeVmeImageINTEL = 5700,
+    SpvOpTypeAvcImePayloadINTEL = 5701,
+    SpvOpTypeAvcRefPayloadINTEL = 5702,
+    SpvOpTypeAvcSicPayloadINTEL = 5703,
+    SpvOpTypeAvcMcePayloadINTEL = 5704,
+    SpvOpTypeAvcMceResultINTEL = 5705,
+    SpvOpTypeAvcImeResultINTEL = 5706,
+    SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
+    SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
+    SpvOpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
+    SpvOpTypeAvcImeDualReferenceStreaminINTEL = 5710,
+    SpvOpTypeAvcRefResultINTEL = 5711,
+    SpvOpTypeAvcSicResultINTEL = 5712,
+    SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
+    SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
+    SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
+    SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
+    SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
+    SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
+    SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
+    SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
+    SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
+    SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
+    SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
+    SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
+    SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
+    SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
+    SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
+    SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
+    SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
+    SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
+    SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
+    SpvOpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
+    SpvOpSubgroupAvcMceConvertToImeResultINTEL = 5733,
+    SpvOpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
+    SpvOpSubgroupAvcMceConvertToRefResultINTEL = 5735,
+    SpvOpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
+    SpvOpSubgroupAvcMceConvertToSicResultINTEL = 5737,
+    SpvOpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
+    SpvOpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
+    SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
+    SpvOpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
+    SpvOpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
+    SpvOpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
+    SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
+    SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
+    SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
+    SpvOpSubgroupAvcImeInitializeINTEL = 5747,
+    SpvOpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
+    SpvOpSubgroupAvcImeSetDualReferenceINTEL = 5749,
+    SpvOpSubgroupAvcImeRefWindowSizeINTEL = 5750,
+    SpvOpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
+    SpvOpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
+    SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
+    SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
+    SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
+    SpvOpSubgroupAvcImeSetWeightedSadINTEL = 5756,
+    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
+    SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
+    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
+    SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
+    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
+    SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
+    SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
+    SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
+    SpvOpSubgroupAvcImeConvertToMceResultINTEL = 5765,
+    SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
+    SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
+    SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
+    SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
+    SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770,
+    SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771,
+    SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772,
+    SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773,
+    SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
+    SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775,
+    SpvOpSubgroupAvcImeGetBorderReachedINTEL = 5776,
+    SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
+    SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
+    SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
+    SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
+    SpvOpSubgroupAvcFmeInitializeINTEL = 5781,
+    SpvOpSubgroupAvcBmeInitializeINTEL = 5782,
+    SpvOpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
+    SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
+    SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
+    SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
+    SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
+    SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
+    SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
+    SpvOpSubgroupAvcRefConvertToMceResultINTEL = 5790,
+    SpvOpSubgroupAvcSicInitializeINTEL = 5791,
+    SpvOpSubgroupAvcSicConfigureSkcINTEL = 5792,
+    SpvOpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
+    SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
+    SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
+    SpvOpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
+    SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
+    SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
+    SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
+    SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
+    SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
+    SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
+    SpvOpSubgroupAvcSicEvaluateIpeINTEL = 5803,
+    SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
+    SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
+    SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
+    SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
+    SpvOpSubgroupAvcSicConvertToMceResultINTEL = 5808,
+    SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
+    SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
+    SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
+    SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
+    SpvOpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
+    SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
+    SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
+    SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
+    SpvOpVariableLengthArrayINTEL = 5818,
+    SpvOpSaveMemoryINTEL = 5819,
+    SpvOpRestoreMemoryINTEL = 5820,
+    SpvOpArbitraryFloatSinCosPiINTEL = 5840,
+    SpvOpArbitraryFloatCastINTEL = 5841,
+    SpvOpArbitraryFloatCastFromIntINTEL = 5842,
+    SpvOpArbitraryFloatCastToIntINTEL = 5843,
+    SpvOpArbitraryFloatAddINTEL = 5846,
+    SpvOpArbitraryFloatSubINTEL = 5847,
+    SpvOpArbitraryFloatMulINTEL = 5848,
+    SpvOpArbitraryFloatDivINTEL = 5849,
+    SpvOpArbitraryFloatGTINTEL = 5850,
+    SpvOpArbitraryFloatGEINTEL = 5851,
+    SpvOpArbitraryFloatLTINTEL = 5852,
+    SpvOpArbitraryFloatLEINTEL = 5853,
+    SpvOpArbitraryFloatEQINTEL = 5854,
+    SpvOpArbitraryFloatRecipINTEL = 5855,
+    SpvOpArbitraryFloatRSqrtINTEL = 5856,
+    SpvOpArbitraryFloatCbrtINTEL = 5857,
+    SpvOpArbitraryFloatHypotINTEL = 5858,
+    SpvOpArbitraryFloatSqrtINTEL = 5859,
+    SpvOpArbitraryFloatLogINTEL = 5860,
+    SpvOpArbitraryFloatLog2INTEL = 5861,
+    SpvOpArbitraryFloatLog10INTEL = 5862,
+    SpvOpArbitraryFloatLog1pINTEL = 5863,
+    SpvOpArbitraryFloatExpINTEL = 5864,
+    SpvOpArbitraryFloatExp2INTEL = 5865,
+    SpvOpArbitraryFloatExp10INTEL = 5866,
+    SpvOpArbitraryFloatExpm1INTEL = 5867,
+    SpvOpArbitraryFloatSinINTEL = 5868,
+    SpvOpArbitraryFloatCosINTEL = 5869,
+    SpvOpArbitraryFloatSinCosINTEL = 5870,
+    SpvOpArbitraryFloatSinPiINTEL = 5871,
+    SpvOpArbitraryFloatCosPiINTEL = 5872,
+    SpvOpArbitraryFloatASinINTEL = 5873,
+    SpvOpArbitraryFloatASinPiINTEL = 5874,
+    SpvOpArbitraryFloatACosINTEL = 5875,
+    SpvOpArbitraryFloatACosPiINTEL = 5876,
+    SpvOpArbitraryFloatATanINTEL = 5877,
+    SpvOpArbitraryFloatATanPiINTEL = 5878,
+    SpvOpArbitraryFloatATan2INTEL = 5879,
+    SpvOpArbitraryFloatPowINTEL = 5880,
+    SpvOpArbitraryFloatPowRINTEL = 5881,
+    SpvOpArbitraryFloatPowNINTEL = 5882,
+    SpvOpLoopControlINTEL = 5887,
+    SpvOpAliasDomainDeclINTEL = 5911,
+    SpvOpAliasScopeDeclINTEL = 5912,
+    SpvOpAliasScopeListDeclINTEL = 5913,
+    SpvOpFixedSqrtINTEL = 5923,
+    SpvOpFixedRecipINTEL = 5924,
+    SpvOpFixedRsqrtINTEL = 5925,
+    SpvOpFixedSinINTEL = 5926,
+    SpvOpFixedCosINTEL = 5927,
+    SpvOpFixedSinCosINTEL = 5928,
+    SpvOpFixedSinPiINTEL = 5929,
+    SpvOpFixedCosPiINTEL = 5930,
+    SpvOpFixedSinCosPiINTEL = 5931,
+    SpvOpFixedLogINTEL = 5932,
+    SpvOpFixedExpINTEL = 5933,
+    SpvOpPtrCastToCrossWorkgroupINTEL = 5934,
+    SpvOpCrossWorkgroupCastToPtrINTEL = 5938,
+    SpvOpReadPipeBlockingINTEL = 5946,
+    SpvOpWritePipeBlockingINTEL = 5947,
+    SpvOpFPGARegINTEL = 5949,
+    SpvOpRayQueryGetRayTMinKHR = 6016,
+    SpvOpRayQueryGetRayFlagsKHR = 6017,
+    SpvOpRayQueryGetIntersectionTKHR = 6018,
+    SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
+    SpvOpRayQueryGetIntersectionInstanceIdKHR = 6020,
+    SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
+    SpvOpRayQueryGetIntersectionGeometryIndexKHR = 6022,
+    SpvOpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
+    SpvOpRayQueryGetIntersectionBarycentricsKHR = 6024,
+    SpvOpRayQueryGetIntersectionFrontFaceKHR = 6025,
+    SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
+    SpvOpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
+    SpvOpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
+    SpvOpRayQueryGetWorldRayDirectionKHR = 6029,
+    SpvOpRayQueryGetWorldRayOriginKHR = 6030,
+    SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031,
+    SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032,
+    SpvOpAtomicFAddEXT = 6035,
+    SpvOpTypeBufferSurfaceINTEL = 6086,
+    SpvOpTypeStructContinuedINTEL = 6090,
+    SpvOpConstantCompositeContinuedINTEL = 6091,
+    SpvOpSpecConstantCompositeContinuedINTEL = 6092,
+    SpvOpCompositeConstructContinuedINTEL = 6096,
+    SpvOpConvertFToBF16INTEL = 6116,
+    SpvOpConvertBF16ToFINTEL = 6117,
+    SpvOpControlBarrierArriveINTEL = 6142,
+    SpvOpControlBarrierWaitINTEL = 6143,
+    SpvOpArithmeticFenceEXT = 6145,
+    SpvOpTaskSequenceCreateINTEL = 6163,
+    SpvOpTaskSequenceAsyncINTEL = 6164,
+    SpvOpTaskSequenceGetINTEL = 6165,
+    SpvOpTaskSequenceReleaseINTEL = 6166,
+    SpvOpTypeTaskSequenceINTEL = 6199,
+    SpvOpSubgroupBlockPrefetchINTEL = 6221,
+    SpvOpSubgroup2DBlockLoadINTEL = 6231,
+    SpvOpSubgroup2DBlockLoadTransformINTEL = 6232,
+    SpvOpSubgroup2DBlockLoadTransposeINTEL = 6233,
+    SpvOpSubgroup2DBlockPrefetchINTEL = 6234,
+    SpvOpSubgroup2DBlockStoreINTEL = 6235,
+    SpvOpSubgroupMatrixMultiplyAccumulateINTEL = 6237,
+    SpvOpBitwiseFunctionINTEL = 6242,
+    SpvOpUntypedVariableLengthArrayINTEL = 6244,
+    SpvOpConditionalExtensionINTEL = 6248,
+    SpvOpConditionalEntryPointINTEL = 6249,
+    SpvOpConditionalCapabilityINTEL = 6250,
+    SpvOpSpecConstantTargetINTEL = 6251,
+    SpvOpSpecConstantArchitectureINTEL = 6252,
+    SpvOpSpecConstantCapabilitiesINTEL = 6253,
+    SpvOpConditionalCopyObjectINTEL = 6254,
+    SpvOpGroupIMulKHR = 6401,
+    SpvOpGroupFMulKHR = 6402,
+    SpvOpGroupBitwiseAndKHR = 6403,
+    SpvOpGroupBitwiseOrKHR = 6404,
+    SpvOpGroupBitwiseXorKHR = 6405,
+    SpvOpGroupLogicalAndKHR = 6406,
+    SpvOpGroupLogicalOrKHR = 6407,
+    SpvOpGroupLogicalXorKHR = 6408,
+    SpvOpRoundFToTF32INTEL = 6426,
+    SpvOpMaskedGatherINTEL = 6428,
+    SpvOpMaskedScatterINTEL = 6429,
+    SpvOpConvertHandleToImageINTEL = 6529,
+    SpvOpConvertHandleToSamplerINTEL = 6530,
+    SpvOpConvertHandleToSampledImageINTEL = 6531,
+    SpvOpMax = 0x7fffffff,
+} SpvOp;
+
+#ifdef SPV_ENABLE_UTILITY_CODE
+#ifndef __cplusplus
+#include <stdbool.h>
+#endif
+inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultType) {
+    *hasResult = *hasResultType = false;
+    switch (opcode) {
+    default: /* unknown opcode */ break;
+    case SpvOpNop: *hasResult = false; *hasResultType = false; break;
+    case SpvOpUndef: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSourceContinued: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSource: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSourceExtension: *hasResult = false; *hasResultType = false; break;
+    case SpvOpName: *hasResult = false; *hasResultType = false; break;
+    case SpvOpMemberName: *hasResult = false; *hasResultType = false; break;
+    case SpvOpString: *hasResult = true; *hasResultType = false; break;
+    case SpvOpLine: *hasResult = false; *hasResultType = false; break;
+    case SpvOpExtension: *hasResult = false; *hasResultType = false; break;
+    case SpvOpExtInstImport: *hasResult = true; *hasResultType = false; break;
+    case SpvOpExtInst: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMemoryModel: *hasResult = false; *hasResultType = false; break;
+    case SpvOpEntryPoint: *hasResult = false; *hasResultType = false; break;
+    case SpvOpExecutionMode: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCapability: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeVoid: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeBool: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeInt: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeFloat: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeVector: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeMatrix: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeImage: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeSampler: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeSampledImage: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeArray: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeStruct: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeOpaque: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypePointer: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeFunction: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeEvent: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeReserveId: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeQueue: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypePipe: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeForwardPointer: *hasResult = false; *hasResultType = false; break;
+    case SpvOpConstantTrue: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantFalse: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstant: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantComposite: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantSampler: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantNull: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantTrue: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantFalse: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstant: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantComposite: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantOp: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFunction: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFunctionParameter: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFunctionEnd: *hasResult = false; *hasResultType = false; break;
+    case SpvOpFunctionCall: *hasResult = true; *hasResultType = true; break;
+    case SpvOpVariable: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageTexelPointer: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLoad: *hasResult = true; *hasResultType = true; break;
+    case SpvOpStore: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCopyMemory: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCopyMemorySized: *hasResult = false; *hasResultType = false; break;
+    case SpvOpAccessChain: *hasResult = true; *hasResultType = true; break;
+    case SpvOpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break;
+    case SpvOpPtrAccessChain: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArrayLength: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break;
+    case SpvOpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDecorate: *hasResult = false; *hasResultType = false; break;
+    case SpvOpMemberDecorate: *hasResult = false; *hasResultType = false; break;
+    case SpvOpDecorationGroup: *hasResult = true; *hasResultType = false; break;
+    case SpvOpGroupDecorate: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break;
+    case SpvOpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break;
+    case SpvOpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break;
+    case SpvOpVectorShuffle: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeConstruct: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeExtract: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeInsert: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCopyObject: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTranspose: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSampledImage: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageFetch: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageGather: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageDrefGather: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageRead: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageWrite: *hasResult = false; *hasResultType = false; break;
+    case SpvOpImage: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageQueryFormat: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageQueryOrder: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageQuerySize: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageQueryLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageQueryLevels: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageQuerySamples: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertFToU: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertFToS: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertSToF: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertUToF: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUConvert: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSConvert: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFConvert: *hasResult = true; *hasResultType = true; break;
+    case SpvOpQuantizeToF16: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertPtrToU: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSatConvertSToU: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSatConvertUToS: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertUToPtr: *hasResult = true; *hasResultType = true; break;
+    case SpvOpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGenericCastToPtr: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitcast: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSNegate: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFNegate: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIAdd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFAdd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpISub: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFSub: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIMul: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFMul: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUDiv: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSDiv: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFDiv: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUMod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSRem: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSMod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFRem: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFMod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpVectorTimesScalar: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break;
+    case SpvOpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMatrixTimesVector: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break;
+    case SpvOpOuterProduct: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIAddCarry: *hasResult = true; *hasResultType = true; break;
+    case SpvOpISubBorrow: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUMulExtended: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSMulExtended: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAny: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAll: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIsNan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIsInf: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIsFinite: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIsNormal: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSignBitSet: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLessOrGreater: *hasResult = true; *hasResultType = true; break;
+    case SpvOpOrdered: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUnordered: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLogicalEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLogicalNotEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLogicalOr: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLogicalAnd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLogicalNot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSelect: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpINotEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpULessThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSLessThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpULessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSLessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFOrdEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFUnordEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFOrdNotEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFUnordNotEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFOrdLessThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFUnordLessThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpShiftRightLogical: *hasResult = true; *hasResultType = true; break;
+    case SpvOpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break;
+    case SpvOpShiftLeftLogical: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitwiseOr: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitwiseXor: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitwiseAnd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpNot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitFieldInsert: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitFieldSExtract: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitFieldUExtract: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitReverse: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitCount: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDPdx: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDPdy: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFwidth: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDPdxFine: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDPdyFine: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFwidthFine: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDPdxCoarse: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDPdyCoarse: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFwidthCoarse: *hasResult = true; *hasResultType = true; break;
+    case SpvOpEmitVertex: *hasResult = false; *hasResultType = false; break;
+    case SpvOpEndPrimitive: *hasResult = false; *hasResultType = false; break;
+    case SpvOpEmitStreamVertex: *hasResult = false; *hasResultType = false; break;
+    case SpvOpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break;
+    case SpvOpControlBarrier: *hasResult = false; *hasResultType = false; break;
+    case SpvOpMemoryBarrier: *hasResult = false; *hasResultType = false; break;
+    case SpvOpAtomicLoad: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicStore: *hasResult = false; *hasResultType = false; break;
+    case SpvOpAtomicExchange: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicIIncrement: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicIDecrement: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicIAdd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicISub: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicSMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicUMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicSMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicUMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicAnd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicOr: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicXor: *hasResult = true; *hasResultType = true; break;
+    case SpvOpPhi: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLoopMerge: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSelectionMerge: *hasResult = false; *hasResultType = false; break;
+    case SpvOpLabel: *hasResult = true; *hasResultType = false; break;
+    case SpvOpBranch: *hasResult = false; *hasResultType = false; break;
+    case SpvOpBranchConditional: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSwitch: *hasResult = false; *hasResultType = false; break;
+    case SpvOpKill: *hasResult = false; *hasResultType = false; break;
+    case SpvOpReturn: *hasResult = false; *hasResultType = false; break;
+    case SpvOpReturnValue: *hasResult = false; *hasResultType = false; break;
+    case SpvOpUnreachable: *hasResult = false; *hasResultType = false; break;
+    case SpvOpLifetimeStart: *hasResult = false; *hasResultType = false; break;
+    case SpvOpLifetimeStop: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupWaitEvents: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGroupAll: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupAny: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupBroadcast: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupIAdd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupFAdd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupFMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupUMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupSMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupFMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupUMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupSMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReadPipe: *hasResult = true; *hasResultType = true; break;
+    case SpvOpWritePipe: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReservedReadPipe: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReservedWritePipe: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCommitReadPipe: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCommitWritePipe: *hasResult = false; *hasResultType = false; break;
+    case SpvOpIsValidReserveId: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetNumPipePackets: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break;
+    case SpvOpEnqueueMarker: *hasResult = true; *hasResultType = true; break;
+    case SpvOpEnqueueKernel: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRetainEvent: *hasResult = false; *hasResultType = false; break;
+    case SpvOpReleaseEvent: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCreateUserEvent: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIsValidEvent: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSetUserEventStatus: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGetDefaultQueue: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBuildNDRange: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseFetch: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseGather: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break;
+    case SpvOpNoLine: *hasResult = false; *hasResultType = false; break;
+    case SpvOpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicFlagClear: *hasResult = false; *hasResultType = false; break;
+    case SpvOpImageSparseRead: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSizeOf: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypePipeStorage: *hasResult = true; *hasResultType = false; break;
+    case SpvOpConstantPipeStorage: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break;
+    case SpvOpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break;
+    case SpvOpModuleProcessed: *hasResult = false; *hasResultType = false; break;
+    case SpvOpExecutionModeId: *hasResult = false; *hasResultType = false; break;
+    case SpvOpDecorateId: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCopyLogical: *hasResult = true; *hasResultType = true; break;
+    case SpvOpPtrEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpPtrNotEqual: *hasResult = true; *hasResultType = true; break;
+    case SpvOpPtrDiff: *hasResult = true; *hasResultType = true; break;
+    case SpvOpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeTensorARM: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTensorReadARM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorWriteARM: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTensorQuerySizeARM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGraphConstantARM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGraphEntryPointARM: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGraphARM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGraphInputARM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGraphSetOutputARM: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGraphEndARM: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeGraphARM: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break;
+    case SpvOpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedInBoundsAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedInBoundsPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedArrayLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedPrefetchKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedGroupAsyncCopyKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSDot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUDot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSUDot: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeConstructReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
+    case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageSampleWeightedQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitCastArrayQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeConstructCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCompositeExtractCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpExtractSubArrayQCOM: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReadClockKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAllocateNodePayloadsAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpEnqueueNodePayloadsAMDX: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeNodePayloadArrayAMDX: *hasResult = true; *hasResultType = false; break;
+    case SpvOpFinishWritingNodePayloadAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpNodePayloadArrayLengthAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIsNodePayloadValidAMDX: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case SpvOpSpecConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case SpvOpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeCooperativeVectorNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpCooperativeVectorMatrixMulNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeVectorOuterProductAccumulateNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeVectorReduceSumAccumulateNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeVectorMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;
+    case SpvOpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeVectorLoadNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeVectorStoreNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break;
+    case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRayQueryGetIntersectionClusterIdNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+    case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixReduceNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixLoadTensorNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixStoreTensorNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCooperativeMatrixPerElementOpNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break;
+    case SpvOpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetStrideNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSliceNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetClampValueNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCreateTensorViewNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorViewSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorViewSetStrideNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
+    case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorViewSetClipNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTensorLayoutSetBlockSizeNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCooperativeMatrixTransposeNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
+    case SpvOpRawAccessChainNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionSpherePositionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionSphereRadiusNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionLSSPositionsNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionLSSRadiiNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionLSSHitValueNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetSpherePositionNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetSphereRadiusNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetLSSPositionsNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectGetLSSRadiiNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsSphereHitNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpHitObjectIsLSSHitNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryIsSphereHitNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryIsLSSHitNV: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAbsISubINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIAddSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUAddSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIAverageINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUAverageINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpISubSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;
+    case SpvOpExpectKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpDecorateString: *hasResult = false; *hasResultType = false; break;
+    case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
+    case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpCompositeConstructContinuedINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertFToBF16INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertBF16ToFINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTaskSequenceCreateINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTaskSequenceAsyncINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTaskSequenceGetINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpTaskSequenceReleaseINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpTypeTaskSequenceINTEL: *hasResult = true; *hasResultType = false; break;
+    case SpvOpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroup2DBlockLoadINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroup2DBlockLoadTransformINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroup2DBlockLoadTransposeINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroup2DBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroup2DBlockStoreINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSubgroupMatrixMultiplyAccumulateINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpBitwiseFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpUntypedVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConditionalExtensionINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpConditionalEntryPointINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpConditionalCapabilityINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpSpecConstantTargetINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantArchitectureINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpSpecConstantCapabilitiesINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConditionalCopyObjectINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break;
+    case SpvOpRoundFToTF32INTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break;
+    case SpvOpConvertHandleToImageINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertHandleToSamplerINTEL: *hasResult = true; *hasResultType = true; break;
+    case SpvOpConvertHandleToSampledImageINTEL: *hasResult = true; *hasResultType = true; break;
+    }
+}
+inline const char* SpvSourceLanguageToString(SpvSourceLanguage value) {
+    switch (value) {
+    case SpvSourceLanguageUnknown: return "Unknown";
+    case SpvSourceLanguageESSL: return "ESSL";
+    case SpvSourceLanguageGLSL: return "GLSL";
+    case SpvSourceLanguageOpenCL_C: return "OpenCL_C";
+    case SpvSourceLanguageOpenCL_CPP: return "OpenCL_CPP";
+    case SpvSourceLanguageHLSL: return "HLSL";
+    case SpvSourceLanguageCPP_for_OpenCL: return "CPP_for_OpenCL";
+    case SpvSourceLanguageSYCL: return "SYCL";
+    case SpvSourceLanguageHERO_C: return "HERO_C";
+    case SpvSourceLanguageNZSL: return "NZSL";
+    case SpvSourceLanguageWGSL: return "WGSL";
+    case SpvSourceLanguageSlang: return "Slang";
+    case SpvSourceLanguageZig: return "Zig";
+    case SpvSourceLanguageRust: return "Rust";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvExecutionModelToString(SpvExecutionModel value) {
+    switch (value) {
+    case SpvExecutionModelVertex: return "Vertex";
+    case SpvExecutionModelTessellationControl: return "TessellationControl";
+    case SpvExecutionModelTessellationEvaluation: return "TessellationEvaluation";
+    case SpvExecutionModelGeometry: return "Geometry";
+    case SpvExecutionModelFragment: return "Fragment";
+    case SpvExecutionModelGLCompute: return "GLCompute";
+    case SpvExecutionModelKernel: return "Kernel";
+    case SpvExecutionModelTaskNV: return "TaskNV";
+    case SpvExecutionModelMeshNV: return "MeshNV";
+    case SpvExecutionModelRayGenerationKHR: return "RayGenerationKHR";
+    case SpvExecutionModelIntersectionKHR: return "IntersectionKHR";
+    case SpvExecutionModelAnyHitKHR: return "AnyHitKHR";
+    case SpvExecutionModelClosestHitKHR: return "ClosestHitKHR";
+    case SpvExecutionModelMissKHR: return "MissKHR";
+    case SpvExecutionModelCallableKHR: return "CallableKHR";
+    case SpvExecutionModelTaskEXT: return "TaskEXT";
+    case SpvExecutionModelMeshEXT: return "MeshEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvAddressingModelToString(SpvAddressingModel value) {
+    switch (value) {
+    case SpvAddressingModelLogical: return "Logical";
+    case SpvAddressingModelPhysical32: return "Physical32";
+    case SpvAddressingModelPhysical64: return "Physical64";
+    case SpvAddressingModelPhysicalStorageBuffer64: return "PhysicalStorageBuffer64";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvMemoryModelToString(SpvMemoryModel value) {
+    switch (value) {
+    case SpvMemoryModelSimple: return "Simple";
+    case SpvMemoryModelGLSL450: return "GLSL450";
+    case SpvMemoryModelOpenCL: return "OpenCL";
+    case SpvMemoryModelVulkan: return "Vulkan";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvExecutionModeToString(SpvExecutionMode value) {
+    switch (value) {
+    case SpvExecutionModeInvocations: return "Invocations";
+    case SpvExecutionModeSpacingEqual: return "SpacingEqual";
+    case SpvExecutionModeSpacingFractionalEven: return "SpacingFractionalEven";
+    case SpvExecutionModeSpacingFractionalOdd: return "SpacingFractionalOdd";
+    case SpvExecutionModeVertexOrderCw: return "VertexOrderCw";
+    case SpvExecutionModeVertexOrderCcw: return "VertexOrderCcw";
+    case SpvExecutionModePixelCenterInteger: return "PixelCenterInteger";
+    case SpvExecutionModeOriginUpperLeft: return "OriginUpperLeft";
+    case SpvExecutionModeOriginLowerLeft: return "OriginLowerLeft";
+    case SpvExecutionModeEarlyFragmentTests: return "EarlyFragmentTests";
+    case SpvExecutionModePointMode: return "PointMode";
+    case SpvExecutionModeXfb: return "Xfb";
+    case SpvExecutionModeDepthReplacing: return "DepthReplacing";
+    case SpvExecutionModeDepthGreater: return "DepthGreater";
+    case SpvExecutionModeDepthLess: return "DepthLess";
+    case SpvExecutionModeDepthUnchanged: return "DepthUnchanged";
+    case SpvExecutionModeLocalSize: return "LocalSize";
+    case SpvExecutionModeLocalSizeHint: return "LocalSizeHint";
+    case SpvExecutionModeInputPoints: return "InputPoints";
+    case SpvExecutionModeInputLines: return "InputLines";
+    case SpvExecutionModeInputLinesAdjacency: return "InputLinesAdjacency";
+    case SpvExecutionModeTriangles: return "Triangles";
+    case SpvExecutionModeInputTrianglesAdjacency: return "InputTrianglesAdjacency";
+    case SpvExecutionModeQuads: return "Quads";
+    case SpvExecutionModeIsolines: return "Isolines";
+    case SpvExecutionModeOutputVertices: return "OutputVertices";
+    case SpvExecutionModeOutputPoints: return "OutputPoints";
+    case SpvExecutionModeOutputLineStrip: return "OutputLineStrip";
+    case SpvExecutionModeOutputTriangleStrip: return "OutputTriangleStrip";
+    case SpvExecutionModeVecTypeHint: return "VecTypeHint";
+    case SpvExecutionModeContractionOff: return "ContractionOff";
+    case SpvExecutionModeInitializer: return "Initializer";
+    case SpvExecutionModeFinalizer: return "Finalizer";
+    case SpvExecutionModeSubgroupSize: return "SubgroupSize";
+    case SpvExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup";
+    case SpvExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId";
+    case SpvExecutionModeLocalSizeId: return "LocalSizeId";
+    case SpvExecutionModeLocalSizeHintId: return "LocalSizeHintId";
+    case SpvExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT";
+    case SpvExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT";
+    case SpvExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT";
+    case SpvExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlowKHR";
+    case SpvExecutionModePostDepthCoverage: return "PostDepthCoverage";
+    case SpvExecutionModeDenormPreserve: return "DenormPreserve";
+    case SpvExecutionModeDenormFlushToZero: return "DenormFlushToZero";
+    case SpvExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case SpvExecutionModeRoundingModeRTE: return "RoundingModeRTE";
+    case SpvExecutionModeRoundingModeRTZ: return "RoundingModeRTZ";
+    case SpvExecutionModeNonCoherentTileAttachmentReadQCOM: return "NonCoherentTileAttachmentReadQCOM";
+    case SpvExecutionModeTileShadingRateQCOM: return "TileShadingRateQCOM";
+    case SpvExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD";
+    case SpvExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT";
+    case SpvExecutionModeCoalescingAMDX: return "CoalescingAMDX";
+    case SpvExecutionModeIsApiEntryAMDX: return "IsApiEntryAMDX";
+    case SpvExecutionModeMaxNodeRecursionAMDX: return "MaxNodeRecursionAMDX";
+    case SpvExecutionModeStaticNumWorkgroupsAMDX: return "StaticNumWorkgroupsAMDX";
+    case SpvExecutionModeShaderIndexAMDX: return "ShaderIndexAMDX";
+    case SpvExecutionModeMaxNumWorkgroupsAMDX: return "MaxNumWorkgroupsAMDX";
+    case SpvExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD";
+    case SpvExecutionModeStencilRefGreaterFrontAMD: return "StencilRefGreaterFrontAMD";
+    case SpvExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD";
+    case SpvExecutionModeStencilRefUnchangedBackAMD: return "StencilRefUnchangedBackAMD";
+    case SpvExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD";
+    case SpvExecutionModeStencilRefLessBackAMD: return "StencilRefLessBackAMD";
+    case SpvExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR";
+    case SpvExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR";
+    case SpvExecutionModeSharesInputWithAMDX: return "SharesInputWithAMDX";
+    case SpvExecutionModeOutputLinesEXT: return "OutputLinesEXT";
+    case SpvExecutionModeOutputPrimitivesEXT: return "OutputPrimitivesEXT";
+    case SpvExecutionModeDerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR";
+    case SpvExecutionModeDerivativeGroupLinearKHR: return "DerivativeGroupLinearKHR";
+    case SpvExecutionModeOutputTrianglesEXT: return "OutputTrianglesEXT";
+    case SpvExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT";
+    case SpvExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT";
+    case SpvExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT";
+    case SpvExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT";
+    case SpvExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT";
+    case SpvExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
+    case SpvExecutionModeSharedLocalMemorySizeINTEL: return "SharedLocalMemorySizeINTEL";
+    case SpvExecutionModeRoundingModeRTPINTEL: return "RoundingModeRTPINTEL";
+    case SpvExecutionModeRoundingModeRTNINTEL: return "RoundingModeRTNINTEL";
+    case SpvExecutionModeFloatingPointModeALTINTEL: return "FloatingPointModeALTINTEL";
+    case SpvExecutionModeFloatingPointModeIEEEINTEL: return "FloatingPointModeIEEEINTEL";
+    case SpvExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL";
+    case SpvExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL";
+    case SpvExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL";
+    case SpvExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL";
+    case SpvExecutionModeSchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL";
+    case SpvExecutionModeMaximallyReconvergesKHR: return "MaximallyReconvergesKHR";
+    case SpvExecutionModeFPFastMathDefault: return "FPFastMathDefault";
+    case SpvExecutionModeStreamingInterfaceINTEL: return "StreamingInterfaceINTEL";
+    case SpvExecutionModeRegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL";
+    case SpvExecutionModeNamedBarrierCountINTEL: return "NamedBarrierCountINTEL";
+    case SpvExecutionModeMaximumRegistersINTEL: return "MaximumRegistersINTEL";
+    case SpvExecutionModeMaximumRegistersIdINTEL: return "MaximumRegistersIdINTEL";
+    case SpvExecutionModeNamedMaximumRegistersINTEL: return "NamedMaximumRegistersINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvStorageClassToString(SpvStorageClass value) {
+    switch (value) {
+    case SpvStorageClassUniformConstant: return "UniformConstant";
+    case SpvStorageClassInput: return "Input";
+    case SpvStorageClassUniform: return "Uniform";
+    case SpvStorageClassOutput: return "Output";
+    case SpvStorageClassWorkgroup: return "Workgroup";
+    case SpvStorageClassCrossWorkgroup: return "CrossWorkgroup";
+    case SpvStorageClassPrivate: return "Private";
+    case SpvStorageClassFunction: return "Function";
+    case SpvStorageClassGeneric: return "Generic";
+    case SpvStorageClassPushConstant: return "PushConstant";
+    case SpvStorageClassAtomicCounter: return "AtomicCounter";
+    case SpvStorageClassImage: return "Image";
+    case SpvStorageClassStorageBuffer: return "StorageBuffer";
+    case SpvStorageClassTileImageEXT: return "TileImageEXT";
+    case SpvStorageClassTileAttachmentQCOM: return "TileAttachmentQCOM";
+    case SpvStorageClassNodePayloadAMDX: return "NodePayloadAMDX";
+    case SpvStorageClassCallableDataKHR: return "CallableDataKHR";
+    case SpvStorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR";
+    case SpvStorageClassRayPayloadKHR: return "RayPayloadKHR";
+    case SpvStorageClassHitAttributeKHR: return "HitAttributeKHR";
+    case SpvStorageClassIncomingRayPayloadKHR: return "IncomingRayPayloadKHR";
+    case SpvStorageClassShaderRecordBufferKHR: return "ShaderRecordBufferKHR";
+    case SpvStorageClassPhysicalStorageBuffer: return "PhysicalStorageBuffer";
+    case SpvStorageClassHitObjectAttributeNV: return "HitObjectAttributeNV";
+    case SpvStorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT";
+    case SpvStorageClassCodeSectionINTEL: return "CodeSectionINTEL";
+    case SpvStorageClassDeviceOnlyINTEL: return "DeviceOnlyINTEL";
+    case SpvStorageClassHostOnlyINTEL: return "HostOnlyINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvDimToString(SpvDim value) {
+    switch (value) {
+    case SpvDim1D: return "1D";
+    case SpvDim2D: return "2D";
+    case SpvDim3D: return "3D";
+    case SpvDimCube: return "Cube";
+    case SpvDimRect: return "Rect";
+    case SpvDimBuffer: return "Buffer";
+    case SpvDimSubpassData: return "SubpassData";
+    case SpvDimTileImageDataEXT: return "TileImageDataEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvSamplerAddressingModeToString(SpvSamplerAddressingMode value) {
+    switch (value) {
+    case SpvSamplerAddressingModeNone: return "None";
+    case SpvSamplerAddressingModeClampToEdge: return "ClampToEdge";
+    case SpvSamplerAddressingModeClamp: return "Clamp";
+    case SpvSamplerAddressingModeRepeat: return "Repeat";
+    case SpvSamplerAddressingModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvSamplerFilterModeToString(SpvSamplerFilterMode value) {
+    switch (value) {
+    case SpvSamplerFilterModeNearest: return "Nearest";
+    case SpvSamplerFilterModeLinear: return "Linear";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvImageFormatToString(SpvImageFormat value) {
+    switch (value) {
+    case SpvImageFormatUnknown: return "Unknown";
+    case SpvImageFormatRgba32f: return "Rgba32f";
+    case SpvImageFormatRgba16f: return "Rgba16f";
+    case SpvImageFormatR32f: return "R32f";
+    case SpvImageFormatRgba8: return "Rgba8";
+    case SpvImageFormatRgba8Snorm: return "Rgba8Snorm";
+    case SpvImageFormatRg32f: return "Rg32f";
+    case SpvImageFormatRg16f: return "Rg16f";
+    case SpvImageFormatR11fG11fB10f: return "R11fG11fB10f";
+    case SpvImageFormatR16f: return "R16f";
+    case SpvImageFormatRgba16: return "Rgba16";
+    case SpvImageFormatRgb10A2: return "Rgb10A2";
+    case SpvImageFormatRg16: return "Rg16";
+    case SpvImageFormatRg8: return "Rg8";
+    case SpvImageFormatR16: return "R16";
+    case SpvImageFormatR8: return "R8";
+    case SpvImageFormatRgba16Snorm: return "Rgba16Snorm";
+    case SpvImageFormatRg16Snorm: return "Rg16Snorm";
+    case SpvImageFormatRg8Snorm: return "Rg8Snorm";
+    case SpvImageFormatR16Snorm: return "R16Snorm";
+    case SpvImageFormatR8Snorm: return "R8Snorm";
+    case SpvImageFormatRgba32i: return "Rgba32i";
+    case SpvImageFormatRgba16i: return "Rgba16i";
+    case SpvImageFormatRgba8i: return "Rgba8i";
+    case SpvImageFormatR32i: return "R32i";
+    case SpvImageFormatRg32i: return "Rg32i";
+    case SpvImageFormatRg16i: return "Rg16i";
+    case SpvImageFormatRg8i: return "Rg8i";
+    case SpvImageFormatR16i: return "R16i";
+    case SpvImageFormatR8i: return "R8i";
+    case SpvImageFormatRgba32ui: return "Rgba32ui";
+    case SpvImageFormatRgba16ui: return "Rgba16ui";
+    case SpvImageFormatRgba8ui: return "Rgba8ui";
+    case SpvImageFormatR32ui: return "R32ui";
+    case SpvImageFormatRgb10a2ui: return "Rgb10a2ui";
+    case SpvImageFormatRg32ui: return "Rg32ui";
+    case SpvImageFormatRg16ui: return "Rg16ui";
+    case SpvImageFormatRg8ui: return "Rg8ui";
+    case SpvImageFormatR16ui: return "R16ui";
+    case SpvImageFormatR8ui: return "R8ui";
+    case SpvImageFormatR64ui: return "R64ui";
+    case SpvImageFormatR64i: return "R64i";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvImageChannelOrderToString(SpvImageChannelOrder value) {
+    switch (value) {
+    case SpvImageChannelOrderR: return "R";
+    case SpvImageChannelOrderA: return "A";
+    case SpvImageChannelOrderRG: return "RG";
+    case SpvImageChannelOrderRA: return "RA";
+    case SpvImageChannelOrderRGB: return "RGB";
+    case SpvImageChannelOrderRGBA: return "RGBA";
+    case SpvImageChannelOrderBGRA: return "BGRA";
+    case SpvImageChannelOrderARGB: return "ARGB";
+    case SpvImageChannelOrderIntensity: return "Intensity";
+    case SpvImageChannelOrderLuminance: return "Luminance";
+    case SpvImageChannelOrderRx: return "Rx";
+    case SpvImageChannelOrderRGx: return "RGx";
+    case SpvImageChannelOrderRGBx: return "RGBx";
+    case SpvImageChannelOrderDepth: return "Depth";
+    case SpvImageChannelOrderDepthStencil: return "DepthStencil";
+    case SpvImageChannelOrdersRGB: return "sRGB";
+    case SpvImageChannelOrdersRGBx: return "sRGBx";
+    case SpvImageChannelOrdersRGBA: return "sRGBA";
+    case SpvImageChannelOrdersBGRA: return "sBGRA";
+    case SpvImageChannelOrderABGR: return "ABGR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvImageChannelDataTypeToString(SpvImageChannelDataType value) {
+    switch (value) {
+    case SpvImageChannelDataTypeSnormInt8: return "SnormInt8";
+    case SpvImageChannelDataTypeSnormInt16: return "SnormInt16";
+    case SpvImageChannelDataTypeUnormInt8: return "UnormInt8";
+    case SpvImageChannelDataTypeUnormInt16: return "UnormInt16";
+    case SpvImageChannelDataTypeUnormShort565: return "UnormShort565";
+    case SpvImageChannelDataTypeUnormShort555: return "UnormShort555";
+    case SpvImageChannelDataTypeUnormInt101010: return "UnormInt101010";
+    case SpvImageChannelDataTypeSignedInt8: return "SignedInt8";
+    case SpvImageChannelDataTypeSignedInt16: return "SignedInt16";
+    case SpvImageChannelDataTypeSignedInt32: return "SignedInt32";
+    case SpvImageChannelDataTypeUnsignedInt8: return "UnsignedInt8";
+    case SpvImageChannelDataTypeUnsignedInt16: return "UnsignedInt16";
+    case SpvImageChannelDataTypeUnsignedInt32: return "UnsignedInt32";
+    case SpvImageChannelDataTypeHalfFloat: return "HalfFloat";
+    case SpvImageChannelDataTypeFloat: return "Float";
+    case SpvImageChannelDataTypeUnormInt24: return "UnormInt24";
+    case SpvImageChannelDataTypeUnormInt101010_2: return "UnormInt101010_2";
+    case SpvImageChannelDataTypeUnormInt10X6EXT: return "UnormInt10X6EXT";
+    case SpvImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT";
+    case SpvImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT";
+    case SpvImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT";
+    case SpvImageChannelDataTypeUnsignedInt10X6EXT: return "UnsignedInt10X6EXT";
+    case SpvImageChannelDataTypeUnsignedInt12X4EXT: return "UnsignedInt12X4EXT";
+    case SpvImageChannelDataTypeUnsignedInt14X2EXT: return "UnsignedInt14X2EXT";
+    case SpvImageChannelDataTypeUnormInt12X4EXT: return "UnormInt12X4EXT";
+    case SpvImageChannelDataTypeUnormInt14X2EXT: return "UnormInt14X2EXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPRoundingModeToString(SpvFPRoundingMode value) {
+    switch (value) {
+    case SpvFPRoundingModeRTE: return "RTE";
+    case SpvFPRoundingModeRTZ: return "RTZ";
+    case SpvFPRoundingModeRTP: return "RTP";
+    case SpvFPRoundingModeRTN: return "RTN";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvLinkageTypeToString(SpvLinkageType value) {
+    switch (value) {
+    case SpvLinkageTypeExport: return "Export";
+    case SpvLinkageTypeImport: return "Import";
+    case SpvLinkageTypeLinkOnceODR: return "LinkOnceODR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvAccessQualifierToString(SpvAccessQualifier value) {
+    switch (value) {
+    case SpvAccessQualifierReadOnly: return "ReadOnly";
+    case SpvAccessQualifierWriteOnly: return "WriteOnly";
+    case SpvAccessQualifierReadWrite: return "ReadWrite";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFunctionParameterAttributeToString(SpvFunctionParameterAttribute value) {
+    switch (value) {
+    case SpvFunctionParameterAttributeZext: return "Zext";
+    case SpvFunctionParameterAttributeSext: return "Sext";
+    case SpvFunctionParameterAttributeByVal: return "ByVal";
+    case SpvFunctionParameterAttributeSret: return "Sret";
+    case SpvFunctionParameterAttributeNoAlias: return "NoAlias";
+    case SpvFunctionParameterAttributeNoCapture: return "NoCapture";
+    case SpvFunctionParameterAttributeNoWrite: return "NoWrite";
+    case SpvFunctionParameterAttributeNoReadWrite: return "NoReadWrite";
+    case SpvFunctionParameterAttributeRuntimeAlignedINTEL: return "RuntimeAlignedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvDecorationToString(SpvDecoration value) {
+    switch (value) {
+    case SpvDecorationRelaxedPrecision: return "RelaxedPrecision";
+    case SpvDecorationSpecId: return "SpecId";
+    case SpvDecorationBlock: return "Block";
+    case SpvDecorationBufferBlock: return "BufferBlock";
+    case SpvDecorationRowMajor: return "RowMajor";
+    case SpvDecorationColMajor: return "ColMajor";
+    case SpvDecorationArrayStride: return "ArrayStride";
+    case SpvDecorationMatrixStride: return "MatrixStride";
+    case SpvDecorationGLSLShared: return "GLSLShared";
+    case SpvDecorationGLSLPacked: return "GLSLPacked";
+    case SpvDecorationCPacked: return "CPacked";
+    case SpvDecorationBuiltIn: return "BuiltIn";
+    case SpvDecorationNoPerspective: return "NoPerspective";
+    case SpvDecorationFlat: return "Flat";
+    case SpvDecorationPatch: return "Patch";
+    case SpvDecorationCentroid: return "Centroid";
+    case SpvDecorationSample: return "Sample";
+    case SpvDecorationInvariant: return "Invariant";
+    case SpvDecorationRestrict: return "Restrict";
+    case SpvDecorationAliased: return "Aliased";
+    case SpvDecorationVolatile: return "Volatile";
+    case SpvDecorationConstant: return "Constant";
+    case SpvDecorationCoherent: return "Coherent";
+    case SpvDecorationNonWritable: return "NonWritable";
+    case SpvDecorationNonReadable: return "NonReadable";
+    case SpvDecorationUniform: return "Uniform";
+    case SpvDecorationUniformId: return "UniformId";
+    case SpvDecorationSaturatedConversion: return "SaturatedConversion";
+    case SpvDecorationStream: return "Stream";
+    case SpvDecorationLocation: return "Location";
+    case SpvDecorationComponent: return "Component";
+    case SpvDecorationIndex: return "Index";
+    case SpvDecorationBinding: return "Binding";
+    case SpvDecorationDescriptorSet: return "DescriptorSet";
+    case SpvDecorationOffset: return "Offset";
+    case SpvDecorationXfbBuffer: return "XfbBuffer";
+    case SpvDecorationXfbStride: return "XfbStride";
+    case SpvDecorationFuncParamAttr: return "FuncParamAttr";
+    case SpvDecorationFPRoundingMode: return "FPRoundingMode";
+    case SpvDecorationFPFastMathMode: return "FPFastMathMode";
+    case SpvDecorationLinkageAttributes: return "LinkageAttributes";
+    case SpvDecorationNoContraction: return "NoContraction";
+    case SpvDecorationInputAttachmentIndex: return "InputAttachmentIndex";
+    case SpvDecorationAlignment: return "Alignment";
+    case SpvDecorationMaxByteOffset: return "MaxByteOffset";
+    case SpvDecorationAlignmentId: return "AlignmentId";
+    case SpvDecorationMaxByteOffsetId: return "MaxByteOffsetId";
+    case SpvDecorationSaturatedToLargestFloat8NormalConversionEXT: return "SaturatedToLargestFloat8NormalConversionEXT";
+    case SpvDecorationNoSignedWrap: return "NoSignedWrap";
+    case SpvDecorationNoUnsignedWrap: return "NoUnsignedWrap";
+    case SpvDecorationWeightTextureQCOM: return "WeightTextureQCOM";
+    case SpvDecorationBlockMatchTextureQCOM: return "BlockMatchTextureQCOM";
+    case SpvDecorationBlockMatchSamplerQCOM: return "BlockMatchSamplerQCOM";
+    case SpvDecorationExplicitInterpAMD: return "ExplicitInterpAMD";
+    case SpvDecorationNodeSharesPayloadLimitsWithAMDX: return "NodeSharesPayloadLimitsWithAMDX";
+    case SpvDecorationNodeMaxPayloadsAMDX: return "NodeMaxPayloadsAMDX";
+    case SpvDecorationTrackFinishWritingAMDX: return "TrackFinishWritingAMDX";
+    case SpvDecorationPayloadNodeNameAMDX: return "PayloadNodeNameAMDX";
+    case SpvDecorationPayloadNodeBaseIndexAMDX: return "PayloadNodeBaseIndexAMDX";
+    case SpvDecorationPayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX";
+    case SpvDecorationPayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX";
+    case SpvDecorationPayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX";
+    case SpvDecorationOverrideCoverageNV: return "OverrideCoverageNV";
+    case SpvDecorationPassthroughNV: return "PassthroughNV";
+    case SpvDecorationViewportRelativeNV: return "ViewportRelativeNV";
+    case SpvDecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
+    case SpvDecorationPerPrimitiveEXT: return "PerPrimitiveEXT";
+    case SpvDecorationPerViewNV: return "PerViewNV";
+    case SpvDecorationPerTaskNV: return "PerTaskNV";
+    case SpvDecorationPerVertexKHR: return "PerVertexKHR";
+    case SpvDecorationNonUniform: return "NonUniform";
+    case SpvDecorationRestrictPointer: return "RestrictPointer";
+    case SpvDecorationAliasedPointer: return "AliasedPointer";
+    case SpvDecorationHitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV";
+    case SpvDecorationBindlessSamplerNV: return "BindlessSamplerNV";
+    case SpvDecorationBindlessImageNV: return "BindlessImageNV";
+    case SpvDecorationBoundSamplerNV: return "BoundSamplerNV";
+    case SpvDecorationBoundImageNV: return "BoundImageNV";
+    case SpvDecorationSIMTCallINTEL: return "SIMTCallINTEL";
+    case SpvDecorationReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL";
+    case SpvDecorationClobberINTEL: return "ClobberINTEL";
+    case SpvDecorationSideEffectsINTEL: return "SideEffectsINTEL";
+    case SpvDecorationVectorComputeVariableINTEL: return "VectorComputeVariableINTEL";
+    case SpvDecorationFuncParamIOKindINTEL: return "FuncParamIOKindINTEL";
+    case SpvDecorationVectorComputeFunctionINTEL: return "VectorComputeFunctionINTEL";
+    case SpvDecorationStackCallINTEL: return "StackCallINTEL";
+    case SpvDecorationGlobalVariableOffsetINTEL: return "GlobalVariableOffsetINTEL";
+    case SpvDecorationCounterBuffer: return "CounterBuffer";
+    case SpvDecorationHlslSemanticGOOGLE: return "HlslSemanticGOOGLE";
+    case SpvDecorationUserTypeGOOGLE: return "UserTypeGOOGLE";
+    case SpvDecorationFunctionRoundingModeINTEL: return "FunctionRoundingModeINTEL";
+    case SpvDecorationFunctionDenormModeINTEL: return "FunctionDenormModeINTEL";
+    case SpvDecorationRegisterINTEL: return "RegisterINTEL";
+    case SpvDecorationMemoryINTEL: return "MemoryINTEL";
+    case SpvDecorationNumbanksINTEL: return "NumbanksINTEL";
+    case SpvDecorationBankwidthINTEL: return "BankwidthINTEL";
+    case SpvDecorationMaxPrivateCopiesINTEL: return "MaxPrivateCopiesINTEL";
+    case SpvDecorationSinglepumpINTEL: return "SinglepumpINTEL";
+    case SpvDecorationDoublepumpINTEL: return "DoublepumpINTEL";
+    case SpvDecorationMaxReplicatesINTEL: return "MaxReplicatesINTEL";
+    case SpvDecorationSimpleDualPortINTEL: return "SimpleDualPortINTEL";
+    case SpvDecorationMergeINTEL: return "MergeINTEL";
+    case SpvDecorationBankBitsINTEL: return "BankBitsINTEL";
+    case SpvDecorationForcePow2DepthINTEL: return "ForcePow2DepthINTEL";
+    case SpvDecorationStridesizeINTEL: return "StridesizeINTEL";
+    case SpvDecorationWordsizeINTEL: return "WordsizeINTEL";
+    case SpvDecorationTrueDualPortINTEL: return "TrueDualPortINTEL";
+    case SpvDecorationBurstCoalesceINTEL: return "BurstCoalesceINTEL";
+    case SpvDecorationCacheSizeINTEL: return "CacheSizeINTEL";
+    case SpvDecorationDontStaticallyCoalesceINTEL: return "DontStaticallyCoalesceINTEL";
+    case SpvDecorationPrefetchINTEL: return "PrefetchINTEL";
+    case SpvDecorationStallEnableINTEL: return "StallEnableINTEL";
+    case SpvDecorationFuseLoopsInFunctionINTEL: return "FuseLoopsInFunctionINTEL";
+    case SpvDecorationMathOpDSPModeINTEL: return "MathOpDSPModeINTEL";
+    case SpvDecorationAliasScopeINTEL: return "AliasScopeINTEL";
+    case SpvDecorationNoAliasINTEL: return "NoAliasINTEL";
+    case SpvDecorationInitiationIntervalINTEL: return "InitiationIntervalINTEL";
+    case SpvDecorationMaxConcurrencyINTEL: return "MaxConcurrencyINTEL";
+    case SpvDecorationPipelineEnableINTEL: return "PipelineEnableINTEL";
+    case SpvDecorationBufferLocationINTEL: return "BufferLocationINTEL";
+    case SpvDecorationIOPipeStorageINTEL: return "IOPipeStorageINTEL";
+    case SpvDecorationFunctionFloatingPointModeINTEL: return "FunctionFloatingPointModeINTEL";
+    case SpvDecorationSingleElementVectorINTEL: return "SingleElementVectorINTEL";
+    case SpvDecorationVectorComputeCallableFunctionINTEL: return "VectorComputeCallableFunctionINTEL";
+    case SpvDecorationMediaBlockIOINTEL: return "MediaBlockIOINTEL";
+    case SpvDecorationStallFreeINTEL: return "StallFreeINTEL";
+    case SpvDecorationFPMaxErrorDecorationINTEL: return "FPMaxErrorDecorationINTEL";
+    case SpvDecorationLatencyControlLabelINTEL: return "LatencyControlLabelINTEL";
+    case SpvDecorationLatencyControlConstraintINTEL: return "LatencyControlConstraintINTEL";
+    case SpvDecorationConduitKernelArgumentINTEL: return "ConduitKernelArgumentINTEL";
+    case SpvDecorationRegisterMapKernelArgumentINTEL: return "RegisterMapKernelArgumentINTEL";
+    case SpvDecorationMMHostInterfaceAddressWidthINTEL: return "MMHostInterfaceAddressWidthINTEL";
+    case SpvDecorationMMHostInterfaceDataWidthINTEL: return "MMHostInterfaceDataWidthINTEL";
+    case SpvDecorationMMHostInterfaceLatencyINTEL: return "MMHostInterfaceLatencyINTEL";
+    case SpvDecorationMMHostInterfaceReadWriteModeINTEL: return "MMHostInterfaceReadWriteModeINTEL";
+    case SpvDecorationMMHostInterfaceMaxBurstINTEL: return "MMHostInterfaceMaxBurstINTEL";
+    case SpvDecorationMMHostInterfaceWaitRequestINTEL: return "MMHostInterfaceWaitRequestINTEL";
+    case SpvDecorationStableKernelArgumentINTEL: return "StableKernelArgumentINTEL";
+    case SpvDecorationHostAccessINTEL: return "HostAccessINTEL";
+    case SpvDecorationInitModeINTEL: return "InitModeINTEL";
+    case SpvDecorationImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL";
+    case SpvDecorationConditionalINTEL: return "ConditionalINTEL";
+    case SpvDecorationCacheControlLoadINTEL: return "CacheControlLoadINTEL";
+    case SpvDecorationCacheControlStoreINTEL: return "CacheControlStoreINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvBuiltInToString(SpvBuiltIn value) {
+    switch (value) {
+    case SpvBuiltInPosition: return "Position";
+    case SpvBuiltInPointSize: return "PointSize";
+    case SpvBuiltInClipDistance: return "ClipDistance";
+    case SpvBuiltInCullDistance: return "CullDistance";
+    case SpvBuiltInVertexId: return "VertexId";
+    case SpvBuiltInInstanceId: return "InstanceId";
+    case SpvBuiltInPrimitiveId: return "PrimitiveId";
+    case SpvBuiltInInvocationId: return "InvocationId";
+    case SpvBuiltInLayer: return "Layer";
+    case SpvBuiltInViewportIndex: return "ViewportIndex";
+    case SpvBuiltInTessLevelOuter: return "TessLevelOuter";
+    case SpvBuiltInTessLevelInner: return "TessLevelInner";
+    case SpvBuiltInTessCoord: return "TessCoord";
+    case SpvBuiltInPatchVertices: return "PatchVertices";
+    case SpvBuiltInFragCoord: return "FragCoord";
+    case SpvBuiltInPointCoord: return "PointCoord";
+    case SpvBuiltInFrontFacing: return "FrontFacing";
+    case SpvBuiltInSampleId: return "SampleId";
+    case SpvBuiltInSamplePosition: return "SamplePosition";
+    case SpvBuiltInSampleMask: return "SampleMask";
+    case SpvBuiltInFragDepth: return "FragDepth";
+    case SpvBuiltInHelperInvocation: return "HelperInvocation";
+    case SpvBuiltInNumWorkgroups: return "NumWorkgroups";
+    case SpvBuiltInWorkgroupSize: return "WorkgroupSize";
+    case SpvBuiltInWorkgroupId: return "WorkgroupId";
+    case SpvBuiltInLocalInvocationId: return "LocalInvocationId";
+    case SpvBuiltInGlobalInvocationId: return "GlobalInvocationId";
+    case SpvBuiltInLocalInvocationIndex: return "LocalInvocationIndex";
+    case SpvBuiltInWorkDim: return "WorkDim";
+    case SpvBuiltInGlobalSize: return "GlobalSize";
+    case SpvBuiltInEnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize";
+    case SpvBuiltInGlobalOffset: return "GlobalOffset";
+    case SpvBuiltInGlobalLinearId: return "GlobalLinearId";
+    case SpvBuiltInSubgroupSize: return "SubgroupSize";
+    case SpvBuiltInSubgroupMaxSize: return "SubgroupMaxSize";
+    case SpvBuiltInNumSubgroups: return "NumSubgroups";
+    case SpvBuiltInNumEnqueuedSubgroups: return "NumEnqueuedSubgroups";
+    case SpvBuiltInSubgroupId: return "SubgroupId";
+    case SpvBuiltInSubgroupLocalInvocationId: return "SubgroupLocalInvocationId";
+    case SpvBuiltInVertexIndex: return "VertexIndex";
+    case SpvBuiltInInstanceIndex: return "InstanceIndex";
+    case SpvBuiltInCoreIDARM: return "CoreIDARM";
+    case SpvBuiltInCoreCountARM: return "CoreCountARM";
+    case SpvBuiltInCoreMaxIDARM: return "CoreMaxIDARM";
+    case SpvBuiltInWarpIDARM: return "WarpIDARM";
+    case SpvBuiltInWarpMaxIDARM: return "WarpMaxIDARM";
+    case SpvBuiltInSubgroupEqMask: return "SubgroupEqMask";
+    case SpvBuiltInSubgroupGeMask: return "SubgroupGeMask";
+    case SpvBuiltInSubgroupGtMask: return "SubgroupGtMask";
+    case SpvBuiltInSubgroupLeMask: return "SubgroupLeMask";
+    case SpvBuiltInSubgroupLtMask: return "SubgroupLtMask";
+    case SpvBuiltInBaseVertex: return "BaseVertex";
+    case SpvBuiltInBaseInstance: return "BaseInstance";
+    case SpvBuiltInDrawIndex: return "DrawIndex";
+    case SpvBuiltInPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR";
+    case SpvBuiltInDeviceIndex: return "DeviceIndex";
+    case SpvBuiltInViewIndex: return "ViewIndex";
+    case SpvBuiltInShadingRateKHR: return "ShadingRateKHR";
+    case SpvBuiltInTileOffsetQCOM: return "TileOffsetQCOM";
+    case SpvBuiltInTileDimensionQCOM: return "TileDimensionQCOM";
+    case SpvBuiltInTileApronSizeQCOM: return "TileApronSizeQCOM";
+    case SpvBuiltInBaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD";
+    case SpvBuiltInBaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD";
+    case SpvBuiltInBaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD";
+    case SpvBuiltInBaryCoordSmoothAMD: return "BaryCoordSmoothAMD";
+    case SpvBuiltInBaryCoordSmoothCentroidAMD: return "BaryCoordSmoothCentroidAMD";
+    case SpvBuiltInBaryCoordSmoothSampleAMD: return "BaryCoordSmoothSampleAMD";
+    case SpvBuiltInBaryCoordPullModelAMD: return "BaryCoordPullModelAMD";
+    case SpvBuiltInFragStencilRefEXT: return "FragStencilRefEXT";
+    case SpvBuiltInRemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX";
+    case SpvBuiltInShaderIndexAMDX: return "ShaderIndexAMDX";
+    case SpvBuiltInViewportMaskNV: return "ViewportMaskNV";
+    case SpvBuiltInSecondaryPositionNV: return "SecondaryPositionNV";
+    case SpvBuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV";
+    case SpvBuiltInPositionPerViewNV: return "PositionPerViewNV";
+    case SpvBuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV";
+    case SpvBuiltInFullyCoveredEXT: return "FullyCoveredEXT";
+    case SpvBuiltInTaskCountNV: return "TaskCountNV";
+    case SpvBuiltInPrimitiveCountNV: return "PrimitiveCountNV";
+    case SpvBuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV";
+    case SpvBuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV";
+    case SpvBuiltInCullDistancePerViewNV: return "CullDistancePerViewNV";
+    case SpvBuiltInLayerPerViewNV: return "LayerPerViewNV";
+    case SpvBuiltInMeshViewCountNV: return "MeshViewCountNV";
+    case SpvBuiltInMeshViewIndicesNV: return "MeshViewIndicesNV";
+    case SpvBuiltInBaryCoordKHR: return "BaryCoordKHR";
+    case SpvBuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR";
+    case SpvBuiltInFragSizeEXT: return "FragSizeEXT";
+    case SpvBuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";
+    case SpvBuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT";
+    case SpvBuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT";
+    case SpvBuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT";
+    case SpvBuiltInCullPrimitiveEXT: return "CullPrimitiveEXT";
+    case SpvBuiltInLaunchIdKHR: return "LaunchIdKHR";
+    case SpvBuiltInLaunchSizeKHR: return "LaunchSizeKHR";
+    case SpvBuiltInWorldRayOriginKHR: return "WorldRayOriginKHR";
+    case SpvBuiltInWorldRayDirectionKHR: return "WorldRayDirectionKHR";
+    case SpvBuiltInObjectRayOriginKHR: return "ObjectRayOriginKHR";
+    case SpvBuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR";
+    case SpvBuiltInRayTminKHR: return "RayTminKHR";
+    case SpvBuiltInRayTmaxKHR: return "RayTmaxKHR";
+    case SpvBuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR";
+    case SpvBuiltInObjectToWorldKHR: return "ObjectToWorldKHR";
+    case SpvBuiltInWorldToObjectKHR: return "WorldToObjectKHR";
+    case SpvBuiltInHitTNV: return "HitTNV";
+    case SpvBuiltInHitKindKHR: return "HitKindKHR";
+    case SpvBuiltInCurrentRayTimeNV: return "CurrentRayTimeNV";
+    case SpvBuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR";
+    case SpvBuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV";
+    case SpvBuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV";
+    case SpvBuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR";
+    case SpvBuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR";
+    case SpvBuiltInHitIsSphereNV: return "HitIsSphereNV";
+    case SpvBuiltInHitIsLSSNV: return "HitIsLSSNV";
+    case SpvBuiltInHitSpherePositionNV: return "HitSpherePositionNV";
+    case SpvBuiltInWarpsPerSMNV: return "WarpsPerSMNV";
+    case SpvBuiltInSMCountNV: return "SMCountNV";
+    case SpvBuiltInWarpIDNV: return "WarpIDNV";
+    case SpvBuiltInSMIDNV: return "SMIDNV";
+    case SpvBuiltInHitLSSPositionsNV: return "HitLSSPositionsNV";
+    case SpvBuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV";
+    case SpvBuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV";
+    case SpvBuiltInHitSphereRadiusNV: return "HitSphereRadiusNV";
+    case SpvBuiltInHitLSSRadiiNV: return "HitLSSRadiiNV";
+    case SpvBuiltInClusterIDNV: return "ClusterIDNV";
+    case SpvBuiltInCullMaskKHR: return "CullMaskKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvScopeToString(SpvScope value) {
+    switch (value) {
+    case SpvScopeCrossDevice: return "CrossDevice";
+    case SpvScopeDevice: return "Device";
+    case SpvScopeWorkgroup: return "Workgroup";
+    case SpvScopeSubgroup: return "Subgroup";
+    case SpvScopeInvocation: return "Invocation";
+    case SpvScopeQueueFamily: return "QueueFamily";
+    case SpvScopeShaderCallKHR: return "ShaderCallKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvGroupOperationToString(SpvGroupOperation value) {
+    switch (value) {
+    case SpvGroupOperationReduce: return "Reduce";
+    case SpvGroupOperationInclusiveScan: return "InclusiveScan";
+    case SpvGroupOperationExclusiveScan: return "ExclusiveScan";
+    case SpvGroupOperationClusteredReduce: return "ClusteredReduce";
+    case SpvGroupOperationPartitionedReduceNV: return "PartitionedReduceNV";
+    case SpvGroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV";
+    case SpvGroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvKernelEnqueueFlagsToString(SpvKernelEnqueueFlags value) {
+    switch (value) {
+    case SpvKernelEnqueueFlagsNoWait: return "NoWait";
+    case SpvKernelEnqueueFlagsWaitKernel: return "WaitKernel";
+    case SpvKernelEnqueueFlagsWaitWorkGroup: return "WaitWorkGroup";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvCapabilityToString(SpvCapability value) {
+    switch (value) {
+    case SpvCapabilityMatrix: return "Matrix";
+    case SpvCapabilityShader: return "Shader";
+    case SpvCapabilityGeometry: return "Geometry";
+    case SpvCapabilityTessellation: return "Tessellation";
+    case SpvCapabilityAddresses: return "Addresses";
+    case SpvCapabilityLinkage: return "Linkage";
+    case SpvCapabilityKernel: return "Kernel";
+    case SpvCapabilityVector16: return "Vector16";
+    case SpvCapabilityFloat16Buffer: return "Float16Buffer";
+    case SpvCapabilityFloat16: return "Float16";
+    case SpvCapabilityFloat64: return "Float64";
+    case SpvCapabilityInt64: return "Int64";
+    case SpvCapabilityInt64Atomics: return "Int64Atomics";
+    case SpvCapabilityImageBasic: return "ImageBasic";
+    case SpvCapabilityImageReadWrite: return "ImageReadWrite";
+    case SpvCapabilityImageMipmap: return "ImageMipmap";
+    case SpvCapabilityPipes: return "Pipes";
+    case SpvCapabilityGroups: return "Groups";
+    case SpvCapabilityDeviceEnqueue: return "DeviceEnqueue";
+    case SpvCapabilityLiteralSampler: return "LiteralSampler";
+    case SpvCapabilityAtomicStorage: return "AtomicStorage";
+    case SpvCapabilityInt16: return "Int16";
+    case SpvCapabilityTessellationPointSize: return "TessellationPointSize";
+    case SpvCapabilityGeometryPointSize: return "GeometryPointSize";
+    case SpvCapabilityImageGatherExtended: return "ImageGatherExtended";
+    case SpvCapabilityStorageImageMultisample: return "StorageImageMultisample";
+    case SpvCapabilityUniformBufferArrayDynamicIndexing: return "UniformBufferArrayDynamicIndexing";
+    case SpvCapabilitySampledImageArrayDynamicIndexing: return "SampledImageArrayDynamicIndexing";
+    case SpvCapabilityStorageBufferArrayDynamicIndexing: return "StorageBufferArrayDynamicIndexing";
+    case SpvCapabilityStorageImageArrayDynamicIndexing: return "StorageImageArrayDynamicIndexing";
+    case SpvCapabilityClipDistance: return "ClipDistance";
+    case SpvCapabilityCullDistance: return "CullDistance";
+    case SpvCapabilityImageCubeArray: return "ImageCubeArray";
+    case SpvCapabilitySampleRateShading: return "SampleRateShading";
+    case SpvCapabilityImageRect: return "ImageRect";
+    case SpvCapabilitySampledRect: return "SampledRect";
+    case SpvCapabilityGenericPointer: return "GenericPointer";
+    case SpvCapabilityInt8: return "Int8";
+    case SpvCapabilityInputAttachment: return "InputAttachment";
+    case SpvCapabilitySparseResidency: return "SparseResidency";
+    case SpvCapabilityMinLod: return "MinLod";
+    case SpvCapabilitySampled1D: return "Sampled1D";
+    case SpvCapabilityImage1D: return "Image1D";
+    case SpvCapabilitySampledCubeArray: return "SampledCubeArray";
+    case SpvCapabilitySampledBuffer: return "SampledBuffer";
+    case SpvCapabilityImageBuffer: return "ImageBuffer";
+    case SpvCapabilityImageMSArray: return "ImageMSArray";
+    case SpvCapabilityStorageImageExtendedFormats: return "StorageImageExtendedFormats";
+    case SpvCapabilityImageQuery: return "ImageQuery";
+    case SpvCapabilityDerivativeControl: return "DerivativeControl";
+    case SpvCapabilityInterpolationFunction: return "InterpolationFunction";
+    case SpvCapabilityTransformFeedback: return "TransformFeedback";
+    case SpvCapabilityGeometryStreams: return "GeometryStreams";
+    case SpvCapabilityStorageImageReadWithoutFormat: return "StorageImageReadWithoutFormat";
+    case SpvCapabilityStorageImageWriteWithoutFormat: return "StorageImageWriteWithoutFormat";
+    case SpvCapabilityMultiViewport: return "MultiViewport";
+    case SpvCapabilitySubgroupDispatch: return "SubgroupDispatch";
+    case SpvCapabilityNamedBarrier: return "NamedBarrier";
+    case SpvCapabilityPipeStorage: return "PipeStorage";
+    case SpvCapabilityGroupNonUniform: return "GroupNonUniform";
+    case SpvCapabilityGroupNonUniformVote: return "GroupNonUniformVote";
+    case SpvCapabilityGroupNonUniformArithmetic: return "GroupNonUniformArithmetic";
+    case SpvCapabilityGroupNonUniformBallot: return "GroupNonUniformBallot";
+    case SpvCapabilityGroupNonUniformShuffle: return "GroupNonUniformShuffle";
+    case SpvCapabilityGroupNonUniformShuffleRelative: return "GroupNonUniformShuffleRelative";
+    case SpvCapabilityGroupNonUniformClustered: return "GroupNonUniformClustered";
+    case SpvCapabilityGroupNonUniformQuad: return "GroupNonUniformQuad";
+    case SpvCapabilityShaderLayer: return "ShaderLayer";
+    case SpvCapabilityShaderViewportIndex: return "ShaderViewportIndex";
+    case SpvCapabilityUniformDecoration: return "UniformDecoration";
+    case SpvCapabilityCoreBuiltinsARM: return "CoreBuiltinsARM";
+    case SpvCapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT";
+    case SpvCapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT";
+    case SpvCapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT";
+    case SpvCapabilityTensorsARM: return "TensorsARM";
+    case SpvCapabilityStorageTensorArrayDynamicIndexingARM: return "StorageTensorArrayDynamicIndexingARM";
+    case SpvCapabilityStorageTensorArrayNonUniformIndexingARM: return "StorageTensorArrayNonUniformIndexingARM";
+    case SpvCapabilityGraphARM: return "GraphARM";
+    case SpvCapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM";
+    case SpvCapabilityFloat8EXT: return "Float8EXT";
+    case SpvCapabilityFloat8CooperativeMatrixEXT: return "Float8CooperativeMatrixEXT";
+    case SpvCapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR";
+    case SpvCapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
+    case SpvCapabilityDrawParameters: return "DrawParameters";
+    case SpvCapabilityWorkgroupMemoryExplicitLayoutKHR: return "WorkgroupMemoryExplicitLayoutKHR";
+    case SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "WorkgroupMemoryExplicitLayout8BitAccessKHR";
+    case SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR";
+    case SpvCapabilitySubgroupVoteKHR: return "SubgroupVoteKHR";
+    case SpvCapabilityStorageBuffer16BitAccess: return "StorageBuffer16BitAccess";
+    case SpvCapabilityStorageUniform16: return "StorageUniform16";
+    case SpvCapabilityStoragePushConstant16: return "StoragePushConstant16";
+    case SpvCapabilityStorageInputOutput16: return "StorageInputOutput16";
+    case SpvCapabilityDeviceGroup: return "DeviceGroup";
+    case SpvCapabilityMultiView: return "MultiView";
+    case SpvCapabilityVariablePointersStorageBuffer: return "VariablePointersStorageBuffer";
+    case SpvCapabilityVariablePointers: return "VariablePointers";
+    case SpvCapabilityAtomicStorageOps: return "AtomicStorageOps";
+    case SpvCapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage";
+    case SpvCapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess";
+    case SpvCapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess";
+    case SpvCapabilityStoragePushConstant8: return "StoragePushConstant8";
+    case SpvCapabilityDenormPreserve: return "DenormPreserve";
+    case SpvCapabilityDenormFlushToZero: return "DenormFlushToZero";
+    case SpvCapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case SpvCapabilityRoundingModeRTE: return "RoundingModeRTE";
+    case SpvCapabilityRoundingModeRTZ: return "RoundingModeRTZ";
+    case SpvCapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR";
+    case SpvCapabilityRayQueryKHR: return "RayQueryKHR";
+    case SpvCapabilityUntypedPointersKHR: return "UntypedPointersKHR";
+    case SpvCapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
+    case SpvCapabilityRayTracingKHR: return "RayTracingKHR";
+    case SpvCapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM";
+    case SpvCapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
+    case SpvCapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
+    case SpvCapabilityTileShadingQCOM: return "TileShadingQCOM";
+    case SpvCapabilityCooperativeMatrixConversionQCOM: return "CooperativeMatrixConversionQCOM";
+    case SpvCapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
+    case SpvCapabilityFloat16ImageAMD: return "Float16ImageAMD";
+    case SpvCapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
+    case SpvCapabilityFragmentMaskAMD: return "FragmentMaskAMD";
+    case SpvCapabilityStencilExportEXT: return "StencilExportEXT";
+    case SpvCapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD";
+    case SpvCapabilityInt64ImageEXT: return "Int64ImageEXT";
+    case SpvCapabilityShaderClockKHR: return "ShaderClockKHR";
+    case SpvCapabilityShaderEnqueueAMDX: return "ShaderEnqueueAMDX";
+    case SpvCapabilityQuadControlKHR: return "QuadControlKHR";
+    case SpvCapabilityInt4TypeINTEL: return "Int4TypeINTEL";
+    case SpvCapabilityInt4CooperativeMatrixINTEL: return "Int4CooperativeMatrixINTEL";
+    case SpvCapabilityBFloat16TypeKHR: return "BFloat16TypeKHR";
+    case SpvCapabilityBFloat16DotProductKHR: return "BFloat16DotProductKHR";
+    case SpvCapabilityBFloat16CooperativeMatrixKHR: return "BFloat16CooperativeMatrixKHR";
+    case SpvCapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV";
+    case SpvCapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV";
+    case SpvCapabilityShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT";
+    case SpvCapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV";
+    case SpvCapabilityShaderStereoViewNV: return "ShaderStereoViewNV";
+    case SpvCapabilityPerViewAttributesNV: return "PerViewAttributesNV";
+    case SpvCapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
+    case SpvCapabilityMeshShadingNV: return "MeshShadingNV";
+    case SpvCapabilityImageFootprintNV: return "ImageFootprintNV";
+    case SpvCapabilityMeshShadingEXT: return "MeshShadingEXT";
+    case SpvCapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR";
+    case SpvCapabilityComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR";
+    case SpvCapabilityFragmentDensityEXT: return "FragmentDensityEXT";
+    case SpvCapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
+    case SpvCapabilityShaderNonUniform: return "ShaderNonUniform";
+    case SpvCapabilityRuntimeDescriptorArray: return "RuntimeDescriptorArray";
+    case SpvCapabilityInputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing";
+    case SpvCapabilityUniformTexelBufferArrayDynamicIndexing: return "UniformTexelBufferArrayDynamicIndexing";
+    case SpvCapabilityStorageTexelBufferArrayDynamicIndexing: return "StorageTexelBufferArrayDynamicIndexing";
+    case SpvCapabilityUniformBufferArrayNonUniformIndexing: return "UniformBufferArrayNonUniformIndexing";
+    case SpvCapabilitySampledImageArrayNonUniformIndexing: return "SampledImageArrayNonUniformIndexing";
+    case SpvCapabilityStorageBufferArrayNonUniformIndexing: return "StorageBufferArrayNonUniformIndexing";
+    case SpvCapabilityStorageImageArrayNonUniformIndexing: return "StorageImageArrayNonUniformIndexing";
+    case SpvCapabilityInputAttachmentArrayNonUniformIndexing: return "InputAttachmentArrayNonUniformIndexing";
+    case SpvCapabilityUniformTexelBufferArrayNonUniformIndexing: return "UniformTexelBufferArrayNonUniformIndexing";
+    case SpvCapabilityStorageTexelBufferArrayNonUniformIndexing: return "StorageTexelBufferArrayNonUniformIndexing";
+    case SpvCapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR";
+    case SpvCapabilityRayTracingNV: return "RayTracingNV";
+    case SpvCapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV";
+    case SpvCapabilityVulkanMemoryModel: return "VulkanMemoryModel";
+    case SpvCapabilityVulkanMemoryModelDeviceScope: return "VulkanMemoryModelDeviceScope";
+    case SpvCapabilityPhysicalStorageBufferAddresses: return "PhysicalStorageBufferAddresses";
+    case SpvCapabilityComputeDerivativeGroupLinearKHR: return "ComputeDerivativeGroupLinearKHR";
+    case SpvCapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR";
+    case SpvCapabilityCooperativeMatrixNV: return "CooperativeMatrixNV";
+    case SpvCapabilityFragmentShaderSampleInterlockEXT: return "FragmentShaderSampleInterlockEXT";
+    case SpvCapabilityFragmentShaderShadingRateInterlockEXT: return "FragmentShaderShadingRateInterlockEXT";
+    case SpvCapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV";
+    case SpvCapabilityFragmentShaderPixelInterlockEXT: return "FragmentShaderPixelInterlockEXT";
+    case SpvCapabilityDemoteToHelperInvocation: return "DemoteToHelperInvocation";
+    case SpvCapabilityDisplacementMicromapNV: return "DisplacementMicromapNV";
+    case SpvCapabilityRayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT";
+    case SpvCapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV";
+    case SpvCapabilityBindlessTextureNV: return "BindlessTextureNV";
+    case SpvCapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR";
+    case SpvCapabilityCooperativeVectorNV: return "CooperativeVectorNV";
+    case SpvCapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV";
+    case SpvCapabilityRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV";
+    case SpvCapabilityRawAccessChainsNV: return "RawAccessChainsNV";
+    case SpvCapabilityRayTracingSpheresGeometryNV: return "RayTracingSpheresGeometryNV";
+    case SpvCapabilityRayTracingLinearSweptSpheresGeometryNV: return "RayTracingLinearSweptSpheresGeometryNV";
+    case SpvCapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV";
+    case SpvCapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV";
+    case SpvCapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV";
+    case SpvCapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV";
+    case SpvCapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV";
+    case SpvCapabilityCooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV";
+    case SpvCapabilityRayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV";
+    case SpvCapabilityTensorAddressingNV: return "TensorAddressingNV";
+    case SpvCapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL";
+    case SpvCapabilitySubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL";
+    case SpvCapabilitySubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL";
+    case SpvCapabilitySubgroupImageMediaBlockIOINTEL: return "SubgroupImageMediaBlockIOINTEL";
+    case SpvCapabilityRoundToInfinityINTEL: return "RoundToInfinityINTEL";
+    case SpvCapabilityFloatingPointModeINTEL: return "FloatingPointModeINTEL";
+    case SpvCapabilityIntegerFunctions2INTEL: return "IntegerFunctions2INTEL";
+    case SpvCapabilityFunctionPointersINTEL: return "FunctionPointersINTEL";
+    case SpvCapabilityIndirectReferencesINTEL: return "IndirectReferencesINTEL";
+    case SpvCapabilityAsmINTEL: return "AsmINTEL";
+    case SpvCapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT";
+    case SpvCapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT";
+    case SpvCapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT";
+    case SpvCapabilityVectorComputeINTEL: return "VectorComputeINTEL";
+    case SpvCapabilityVectorAnyINTEL: return "VectorAnyINTEL";
+    case SpvCapabilityExpectAssumeKHR: return "ExpectAssumeKHR";
+    case SpvCapabilitySubgroupAvcMotionEstimationINTEL: return "SubgroupAvcMotionEstimationINTEL";
+    case SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL: return "SubgroupAvcMotionEstimationIntraINTEL";
+    case SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL";
+    case SpvCapabilityVariableLengthArrayINTEL: return "VariableLengthArrayINTEL";
+    case SpvCapabilityFunctionFloatControlINTEL: return "FunctionFloatControlINTEL";
+    case SpvCapabilityFPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL";
+    case SpvCapabilityFPFastMathModeINTEL: return "FPFastMathModeINTEL";
+    case SpvCapabilityArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL";
+    case SpvCapabilityArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL";
+    case SpvCapabilityUnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL";
+    case SpvCapabilityFPGALoopControlsINTEL: return "FPGALoopControlsINTEL";
+    case SpvCapabilityKernelAttributesINTEL: return "KernelAttributesINTEL";
+    case SpvCapabilityFPGAKernelAttributesINTEL: return "FPGAKernelAttributesINTEL";
+    case SpvCapabilityFPGAMemoryAccessesINTEL: return "FPGAMemoryAccessesINTEL";
+    case SpvCapabilityFPGAClusterAttributesINTEL: return "FPGAClusterAttributesINTEL";
+    case SpvCapabilityLoopFuseINTEL: return "LoopFuseINTEL";
+    case SpvCapabilityFPGADSPControlINTEL: return "FPGADSPControlINTEL";
+    case SpvCapabilityMemoryAccessAliasingINTEL: return "MemoryAccessAliasingINTEL";
+    case SpvCapabilityFPGAInvocationPipeliningAttributesINTEL: return "FPGAInvocationPipeliningAttributesINTEL";
+    case SpvCapabilityFPGABufferLocationINTEL: return "FPGABufferLocationINTEL";
+    case SpvCapabilityArbitraryPrecisionFixedPointINTEL: return "ArbitraryPrecisionFixedPointINTEL";
+    case SpvCapabilityUSMStorageClassesINTEL: return "USMStorageClassesINTEL";
+    case SpvCapabilityRuntimeAlignedAttributeINTEL: return "RuntimeAlignedAttributeINTEL";
+    case SpvCapabilityIOPipesINTEL: return "IOPipesINTEL";
+    case SpvCapabilityBlockingPipesINTEL: return "BlockingPipesINTEL";
+    case SpvCapabilityFPGARegINTEL: return "FPGARegINTEL";
+    case SpvCapabilityDotProductInputAll: return "DotProductInputAll";
+    case SpvCapabilityDotProductInput4x8Bit: return "DotProductInput4x8Bit";
+    case SpvCapabilityDotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked";
+    case SpvCapabilityDotProduct: return "DotProduct";
+    case SpvCapabilityRayCullMaskKHR: return "RayCullMaskKHR";
+    case SpvCapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR";
+    case SpvCapabilityReplicatedCompositesEXT: return "ReplicatedCompositesEXT";
+    case SpvCapabilityBitInstructions: return "BitInstructions";
+    case SpvCapabilityGroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR";
+    case SpvCapabilityFloatControls2: return "FloatControls2";
+    case SpvCapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT";
+    case SpvCapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT";
+    case SpvCapabilityLongCompositesINTEL: return "LongCompositesINTEL";
+    case SpvCapabilityOptNoneEXT: return "OptNoneEXT";
+    case SpvCapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT";
+    case SpvCapabilityDebugInfoModuleINTEL: return "DebugInfoModuleINTEL";
+    case SpvCapabilityBFloat16ConversionINTEL: return "BFloat16ConversionINTEL";
+    case SpvCapabilitySplitBarrierINTEL: return "SplitBarrierINTEL";
+    case SpvCapabilityArithmeticFenceEXT: return "ArithmeticFenceEXT";
+    case SpvCapabilityFPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL";
+    case SpvCapabilityFPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL";
+    case SpvCapabilityTaskSequenceINTEL: return "TaskSequenceINTEL";
+    case SpvCapabilityFPMaxErrorINTEL: return "FPMaxErrorINTEL";
+    case SpvCapabilityFPGALatencyControlINTEL: return "FPGALatencyControlINTEL";
+    case SpvCapabilityFPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL";
+    case SpvCapabilityGlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL";
+    case SpvCapabilityGlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL";
+    case SpvCapabilitySubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL";
+    case SpvCapabilitySubgroup2DBlockIOINTEL: return "Subgroup2DBlockIOINTEL";
+    case SpvCapabilitySubgroup2DBlockTransformINTEL: return "Subgroup2DBlockTransformINTEL";
+    case SpvCapabilitySubgroup2DBlockTransposeINTEL: return "Subgroup2DBlockTransposeINTEL";
+    case SpvCapabilitySubgroupMatrixMultiplyAccumulateINTEL: return "SubgroupMatrixMultiplyAccumulateINTEL";
+    case SpvCapabilityTernaryBitwiseFunctionINTEL: return "TernaryBitwiseFunctionINTEL";
+    case SpvCapabilityUntypedVariableLengthArrayINTEL: return "UntypedVariableLengthArrayINTEL";
+    case SpvCapabilitySpecConditionalINTEL: return "SpecConditionalINTEL";
+    case SpvCapabilityFunctionVariantsINTEL: return "FunctionVariantsINTEL";
+    case SpvCapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR";
+    case SpvCapabilityTensorFloat32RoundingINTEL: return "TensorFloat32RoundingINTEL";
+    case SpvCapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL";
+    case SpvCapabilityCacheControlsINTEL: return "CacheControlsINTEL";
+    case SpvCapabilityRegisterLimitsINTEL: return "RegisterLimitsINTEL";
+    case SpvCapabilityBindlessImagesINTEL: return "BindlessImagesINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvRayQueryIntersectionToString(SpvRayQueryIntersection value) {
+    switch (value) {
+    case SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR: return "RayQueryCandidateIntersectionKHR";
+    case SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR: return "RayQueryCommittedIntersectionKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvRayQueryCommittedIntersectionTypeToString(SpvRayQueryCommittedIntersectionType value) {
+    switch (value) {
+    case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR: return "RayQueryCommittedIntersectionNoneKHR";
+    case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR: return "RayQueryCommittedIntersectionTriangleKHR";
+    case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR: return "RayQueryCommittedIntersectionGeneratedKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvRayQueryCandidateIntersectionTypeToString(SpvRayQueryCandidateIntersectionType value) {
+    switch (value) {
+    case SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR: return "RayQueryCandidateIntersectionTriangleKHR";
+    case SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR: return "RayQueryCandidateIntersectionAABBKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPDenormModeToString(SpvFPDenormMode value) {
+    switch (value) {
+    case SpvFPDenormModePreserve: return "Preserve";
+    case SpvFPDenormModeFlushToZero: return "FlushToZero";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPOperationModeToString(SpvFPOperationMode value) {
+    switch (value) {
+    case SpvFPOperationModeIEEE: return "IEEE";
+    case SpvFPOperationModeALT: return "ALT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvQuantizationModesToString(SpvQuantizationModes value) {
+    switch (value) {
+    case SpvQuantizationModesTRN: return "TRN";
+    case SpvQuantizationModesTRN_ZERO: return "TRN_ZERO";
+    case SpvQuantizationModesRND: return "RND";
+    case SpvQuantizationModesRND_ZERO: return "RND_ZERO";
+    case SpvQuantizationModesRND_INF: return "RND_INF";
+    case SpvQuantizationModesRND_MIN_INF: return "RND_MIN_INF";
+    case SpvQuantizationModesRND_CONV: return "RND_CONV";
+    case SpvQuantizationModesRND_CONV_ODD: return "RND_CONV_ODD";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvOverflowModesToString(SpvOverflowModes value) {
+    switch (value) {
+    case SpvOverflowModesWRAP: return "WRAP";
+    case SpvOverflowModesSAT: return "SAT";
+    case SpvOverflowModesSAT_ZERO: return "SAT_ZERO";
+    case SpvOverflowModesSAT_SYM: return "SAT_SYM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvPackedVectorFormatToString(SpvPackedVectorFormat value) {
+    switch (value) {
+    case SpvPackedVectorFormatPackedVectorFormat4x8Bit: return "PackedVectorFormat4x8Bit";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvCooperativeMatrixLayoutToString(SpvCooperativeMatrixLayout value) {
+    switch (value) {
+    case SpvCooperativeMatrixLayoutRowMajorKHR: return "RowMajorKHR";
+    case SpvCooperativeMatrixLayoutColumnMajorKHR: return "ColumnMajorKHR";
+    case SpvCooperativeMatrixLayoutRowBlockedInterleavedARM: return "RowBlockedInterleavedARM";
+    case SpvCooperativeMatrixLayoutColumnBlockedInterleavedARM: return "ColumnBlockedInterleavedARM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvCooperativeMatrixUseToString(SpvCooperativeMatrixUse value) {
+    switch (value) {
+    case SpvCooperativeMatrixUseMatrixAKHR: return "MatrixAKHR";
+    case SpvCooperativeMatrixUseMatrixBKHR: return "MatrixBKHR";
+    case SpvCooperativeMatrixUseMatrixAccumulatorKHR: return "MatrixAccumulatorKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvTensorClampModeToString(SpvTensorClampMode value) {
+    switch (value) {
+    case SpvTensorClampModeUndefined: return "Undefined";
+    case SpvTensorClampModeConstant: return "Constant";
+    case SpvTensorClampModeClampToEdge: return "ClampToEdge";
+    case SpvTensorClampModeRepeat: return "Repeat";
+    case SpvTensorClampModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvInitializationModeQualifierToString(SpvInitializationModeQualifier value) {
+    switch (value) {
+    case SpvInitializationModeQualifierInitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL";
+    case SpvInitializationModeQualifierInitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvHostAccessQualifierToString(SpvHostAccessQualifier value) {
+    switch (value) {
+    case SpvHostAccessQualifierNoneINTEL: return "NoneINTEL";
+    case SpvHostAccessQualifierReadINTEL: return "ReadINTEL";
+    case SpvHostAccessQualifierWriteINTEL: return "WriteINTEL";
+    case SpvHostAccessQualifierReadWriteINTEL: return "ReadWriteINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvLoadCacheControlToString(SpvLoadCacheControl value) {
+    switch (value) {
+    case SpvLoadCacheControlUncachedINTEL: return "UncachedINTEL";
+    case SpvLoadCacheControlCachedINTEL: return "CachedINTEL";
+    case SpvLoadCacheControlStreamingINTEL: return "StreamingINTEL";
+    case SpvLoadCacheControlInvalidateAfterReadINTEL: return "InvalidateAfterReadINTEL";
+    case SpvLoadCacheControlConstCachedINTEL: return "ConstCachedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvStoreCacheControlToString(SpvStoreCacheControl value) {
+    switch (value) {
+    case SpvStoreCacheControlUncachedINTEL: return "UncachedINTEL";
+    case SpvStoreCacheControlWriteThroughINTEL: return "WriteThroughINTEL";
+    case SpvStoreCacheControlWriteBackINTEL: return "WriteBackINTEL";
+    case SpvStoreCacheControlStreamingINTEL: return "StreamingINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvNamedMaximumNumberOfRegistersToString(SpvNamedMaximumNumberOfRegisters value) {
+    switch (value) {
+    case SpvNamedMaximumNumberOfRegistersAutoINTEL: return "AutoINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvFPEncodingToString(SpvFPEncoding value) {
+    switch (value) {
+    case SpvFPEncodingBFloat16KHR: return "BFloat16KHR";
+    case SpvFPEncodingFloat8E4M3EXT: return "Float8E4M3EXT";
+    case SpvFPEncodingFloat8E5M2EXT: return "Float8E5M2EXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvCooperativeVectorMatrixLayoutToString(SpvCooperativeVectorMatrixLayout value) {
+    switch (value) {
+    case SpvCooperativeVectorMatrixLayoutRowMajorNV: return "RowMajorNV";
+    case SpvCooperativeVectorMatrixLayoutColumnMajorNV: return "ColumnMajorNV";
+    case SpvCooperativeVectorMatrixLayoutInferencingOptimalNV: return "InferencingOptimalNV";
+    case SpvCooperativeVectorMatrixLayoutTrainingOptimalNV: return "TrainingOptimalNV";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvComponentTypeToString(SpvComponentType value) {
+    switch (value) {
+    case SpvComponentTypeFloat16NV: return "Float16NV";
+    case SpvComponentTypeFloat32NV: return "Float32NV";
+    case SpvComponentTypeFloat64NV: return "Float64NV";
+    case SpvComponentTypeSignedInt8NV: return "SignedInt8NV";
+    case SpvComponentTypeSignedInt16NV: return "SignedInt16NV";
+    case SpvComponentTypeSignedInt32NV: return "SignedInt32NV";
+    case SpvComponentTypeSignedInt64NV: return "SignedInt64NV";
+    case SpvComponentTypeUnsignedInt8NV: return "UnsignedInt8NV";
+    case SpvComponentTypeUnsignedInt16NV: return "UnsignedInt16NV";
+    case SpvComponentTypeUnsignedInt32NV: return "UnsignedInt32NV";
+    case SpvComponentTypeUnsignedInt64NV: return "UnsignedInt64NV";
+    case SpvComponentTypeSignedInt8PackedNV: return "SignedInt8PackedNV";
+    case SpvComponentTypeUnsignedInt8PackedNV: return "UnsignedInt8PackedNV";
+    case SpvComponentTypeFloatE4M3NV: return "FloatE4M3NV";
+    case SpvComponentTypeFloatE5M2NV: return "FloatE5M2NV";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SpvOpToString(SpvOp value) {
+    switch (value) {
+    case SpvOpNop: return "OpNop";
+    case SpvOpUndef: return "OpUndef";
+    case SpvOpSourceContinued: return "OpSourceContinued";
+    case SpvOpSource: return "OpSource";
+    case SpvOpSourceExtension: return "OpSourceExtension";
+    case SpvOpName: return "OpName";
+    case SpvOpMemberName: return "OpMemberName";
+    case SpvOpString: return "OpString";
+    case SpvOpLine: return "OpLine";
+    case SpvOpExtension: return "OpExtension";
+    case SpvOpExtInstImport: return "OpExtInstImport";
+    case SpvOpExtInst: return "OpExtInst";
+    case SpvOpMemoryModel: return "OpMemoryModel";
+    case SpvOpEntryPoint: return "OpEntryPoint";
+    case SpvOpExecutionMode: return "OpExecutionMode";
+    case SpvOpCapability: return "OpCapability";
+    case SpvOpTypeVoid: return "OpTypeVoid";
+    case SpvOpTypeBool: return "OpTypeBool";
+    case SpvOpTypeInt: return "OpTypeInt";
+    case SpvOpTypeFloat: return "OpTypeFloat";
+    case SpvOpTypeVector: return "OpTypeVector";
+    case SpvOpTypeMatrix: return "OpTypeMatrix";
+    case SpvOpTypeImage: return "OpTypeImage";
+    case SpvOpTypeSampler: return "OpTypeSampler";
+    case SpvOpTypeSampledImage: return "OpTypeSampledImage";
+    case SpvOpTypeArray: return "OpTypeArray";
+    case SpvOpTypeRuntimeArray: return "OpTypeRuntimeArray";
+    case SpvOpTypeStruct: return "OpTypeStruct";
+    case SpvOpTypeOpaque: return "OpTypeOpaque";
+    case SpvOpTypePointer: return "OpTypePointer";
+    case SpvOpTypeFunction: return "OpTypeFunction";
+    case SpvOpTypeEvent: return "OpTypeEvent";
+    case SpvOpTypeDeviceEvent: return "OpTypeDeviceEvent";
+    case SpvOpTypeReserveId: return "OpTypeReserveId";
+    case SpvOpTypeQueue: return "OpTypeQueue";
+    case SpvOpTypePipe: return "OpTypePipe";
+    case SpvOpTypeForwardPointer: return "OpTypeForwardPointer";
+    case SpvOpConstantTrue: return "OpConstantTrue";
+    case SpvOpConstantFalse: return "OpConstantFalse";
+    case SpvOpConstant: return "OpConstant";
+    case SpvOpConstantComposite: return "OpConstantComposite";
+    case SpvOpConstantSampler: return "OpConstantSampler";
+    case SpvOpConstantNull: return "OpConstantNull";
+    case SpvOpSpecConstantTrue: return "OpSpecConstantTrue";
+    case SpvOpSpecConstantFalse: return "OpSpecConstantFalse";
+    case SpvOpSpecConstant: return "OpSpecConstant";
+    case SpvOpSpecConstantComposite: return "OpSpecConstantComposite";
+    case SpvOpSpecConstantOp: return "OpSpecConstantOp";
+    case SpvOpFunction: return "OpFunction";
+    case SpvOpFunctionParameter: return "OpFunctionParameter";
+    case SpvOpFunctionEnd: return "OpFunctionEnd";
+    case SpvOpFunctionCall: return "OpFunctionCall";
+    case SpvOpVariable: return "OpVariable";
+    case SpvOpImageTexelPointer: return "OpImageTexelPointer";
+    case SpvOpLoad: return "OpLoad";
+    case SpvOpStore: return "OpStore";
+    case SpvOpCopyMemory: return "OpCopyMemory";
+    case SpvOpCopyMemorySized: return "OpCopyMemorySized";
+    case SpvOpAccessChain: return "OpAccessChain";
+    case SpvOpInBoundsAccessChain: return "OpInBoundsAccessChain";
+    case SpvOpPtrAccessChain: return "OpPtrAccessChain";
+    case SpvOpArrayLength: return "OpArrayLength";
+    case SpvOpGenericPtrMemSemantics: return "OpGenericPtrMemSemantics";
+    case SpvOpInBoundsPtrAccessChain: return "OpInBoundsPtrAccessChain";
+    case SpvOpDecorate: return "OpDecorate";
+    case SpvOpMemberDecorate: return "OpMemberDecorate";
+    case SpvOpDecorationGroup: return "OpDecorationGroup";
+    case SpvOpGroupDecorate: return "OpGroupDecorate";
+    case SpvOpGroupMemberDecorate: return "OpGroupMemberDecorate";
+    case SpvOpVectorExtractDynamic: return "OpVectorExtractDynamic";
+    case SpvOpVectorInsertDynamic: return "OpVectorInsertDynamic";
+    case SpvOpVectorShuffle: return "OpVectorShuffle";
+    case SpvOpCompositeConstruct: return "OpCompositeConstruct";
+    case SpvOpCompositeExtract: return "OpCompositeExtract";
+    case SpvOpCompositeInsert: return "OpCompositeInsert";
+    case SpvOpCopyObject: return "OpCopyObject";
+    case SpvOpTranspose: return "OpTranspose";
+    case SpvOpSampledImage: return "OpSampledImage";
+    case SpvOpImageSampleImplicitLod: return "OpImageSampleImplicitLod";
+    case SpvOpImageSampleExplicitLod: return "OpImageSampleExplicitLod";
+    case SpvOpImageSampleDrefImplicitLod: return "OpImageSampleDrefImplicitLod";
+    case SpvOpImageSampleDrefExplicitLod: return "OpImageSampleDrefExplicitLod";
+    case SpvOpImageSampleProjImplicitLod: return "OpImageSampleProjImplicitLod";
+    case SpvOpImageSampleProjExplicitLod: return "OpImageSampleProjExplicitLod";
+    case SpvOpImageSampleProjDrefImplicitLod: return "OpImageSampleProjDrefImplicitLod";
+    case SpvOpImageSampleProjDrefExplicitLod: return "OpImageSampleProjDrefExplicitLod";
+    case SpvOpImageFetch: return "OpImageFetch";
+    case SpvOpImageGather: return "OpImageGather";
+    case SpvOpImageDrefGather: return "OpImageDrefGather";
+    case SpvOpImageRead: return "OpImageRead";
+    case SpvOpImageWrite: return "OpImageWrite";
+    case SpvOpImage: return "OpImage";
+    case SpvOpImageQueryFormat: return "OpImageQueryFormat";
+    case SpvOpImageQueryOrder: return "OpImageQueryOrder";
+    case SpvOpImageQuerySizeLod: return "OpImageQuerySizeLod";
+    case SpvOpImageQuerySize: return "OpImageQuerySize";
+    case SpvOpImageQueryLod: return "OpImageQueryLod";
+    case SpvOpImageQueryLevels: return "OpImageQueryLevels";
+    case SpvOpImageQuerySamples: return "OpImageQuerySamples";
+    case SpvOpConvertFToU: return "OpConvertFToU";
+    case SpvOpConvertFToS: return "OpConvertFToS";
+    case SpvOpConvertSToF: return "OpConvertSToF";
+    case SpvOpConvertUToF: return "OpConvertUToF";
+    case SpvOpUConvert: return "OpUConvert";
+    case SpvOpSConvert: return "OpSConvert";
+    case SpvOpFConvert: return "OpFConvert";
+    case SpvOpQuantizeToF16: return "OpQuantizeToF16";
+    case SpvOpConvertPtrToU: return "OpConvertPtrToU";
+    case SpvOpSatConvertSToU: return "OpSatConvertSToU";
+    case SpvOpSatConvertUToS: return "OpSatConvertUToS";
+    case SpvOpConvertUToPtr: return "OpConvertUToPtr";
+    case SpvOpPtrCastToGeneric: return "OpPtrCastToGeneric";
+    case SpvOpGenericCastToPtr: return "OpGenericCastToPtr";
+    case SpvOpGenericCastToPtrExplicit: return "OpGenericCastToPtrExplicit";
+    case SpvOpBitcast: return "OpBitcast";
+    case SpvOpSNegate: return "OpSNegate";
+    case SpvOpFNegate: return "OpFNegate";
+    case SpvOpIAdd: return "OpIAdd";
+    case SpvOpFAdd: return "OpFAdd";
+    case SpvOpISub: return "OpISub";
+    case SpvOpFSub: return "OpFSub";
+    case SpvOpIMul: return "OpIMul";
+    case SpvOpFMul: return "OpFMul";
+    case SpvOpUDiv: return "OpUDiv";
+    case SpvOpSDiv: return "OpSDiv";
+    case SpvOpFDiv: return "OpFDiv";
+    case SpvOpUMod: return "OpUMod";
+    case SpvOpSRem: return "OpSRem";
+    case SpvOpSMod: return "OpSMod";
+    case SpvOpFRem: return "OpFRem";
+    case SpvOpFMod: return "OpFMod";
+    case SpvOpVectorTimesScalar: return "OpVectorTimesScalar";
+    case SpvOpMatrixTimesScalar: return "OpMatrixTimesScalar";
+    case SpvOpVectorTimesMatrix: return "OpVectorTimesMatrix";
+    case SpvOpMatrixTimesVector: return "OpMatrixTimesVector";
+    case SpvOpMatrixTimesMatrix: return "OpMatrixTimesMatrix";
+    case SpvOpOuterProduct: return "OpOuterProduct";
+    case SpvOpDot: return "OpDot";
+    case SpvOpIAddCarry: return "OpIAddCarry";
+    case SpvOpISubBorrow: return "OpISubBorrow";
+    case SpvOpUMulExtended: return "OpUMulExtended";
+    case SpvOpSMulExtended: return "OpSMulExtended";
+    case SpvOpAny: return "OpAny";
+    case SpvOpAll: return "OpAll";
+    case SpvOpIsNan: return "OpIsNan";
+    case SpvOpIsInf: return "OpIsInf";
+    case SpvOpIsFinite: return "OpIsFinite";
+    case SpvOpIsNormal: return "OpIsNormal";
+    case SpvOpSignBitSet: return "OpSignBitSet";
+    case SpvOpLessOrGreater: return "OpLessOrGreater";
+    case SpvOpOrdered: return "OpOrdered";
+    case SpvOpUnordered: return "OpUnordered";
+    case SpvOpLogicalEqual: return "OpLogicalEqual";
+    case SpvOpLogicalNotEqual: return "OpLogicalNotEqual";
+    case SpvOpLogicalOr: return "OpLogicalOr";
+    case SpvOpLogicalAnd: return "OpLogicalAnd";
+    case SpvOpLogicalNot: return "OpLogicalNot";
+    case SpvOpSelect: return "OpSelect";
+    case SpvOpIEqual: return "OpIEqual";
+    case SpvOpINotEqual: return "OpINotEqual";
+    case SpvOpUGreaterThan: return "OpUGreaterThan";
+    case SpvOpSGreaterThan: return "OpSGreaterThan";
+    case SpvOpUGreaterThanEqual: return "OpUGreaterThanEqual";
+    case SpvOpSGreaterThanEqual: return "OpSGreaterThanEqual";
+    case SpvOpULessThan: return "OpULessThan";
+    case SpvOpSLessThan: return "OpSLessThan";
+    case SpvOpULessThanEqual: return "OpULessThanEqual";
+    case SpvOpSLessThanEqual: return "OpSLessThanEqual";
+    case SpvOpFOrdEqual: return "OpFOrdEqual";
+    case SpvOpFUnordEqual: return "OpFUnordEqual";
+    case SpvOpFOrdNotEqual: return "OpFOrdNotEqual";
+    case SpvOpFUnordNotEqual: return "OpFUnordNotEqual";
+    case SpvOpFOrdLessThan: return "OpFOrdLessThan";
+    case SpvOpFUnordLessThan: return "OpFUnordLessThan";
+    case SpvOpFOrdGreaterThan: return "OpFOrdGreaterThan";
+    case SpvOpFUnordGreaterThan: return "OpFUnordGreaterThan";
+    case SpvOpFOrdLessThanEqual: return "OpFOrdLessThanEqual";
+    case SpvOpFUnordLessThanEqual: return "OpFUnordLessThanEqual";
+    case SpvOpFOrdGreaterThanEqual: return "OpFOrdGreaterThanEqual";
+    case SpvOpFUnordGreaterThanEqual: return "OpFUnordGreaterThanEqual";
+    case SpvOpShiftRightLogical: return "OpShiftRightLogical";
+    case SpvOpShiftRightArithmetic: return "OpShiftRightArithmetic";
+    case SpvOpShiftLeftLogical: return "OpShiftLeftLogical";
+    case SpvOpBitwiseOr: return "OpBitwiseOr";
+    case SpvOpBitwiseXor: return "OpBitwiseXor";
+    case SpvOpBitwiseAnd: return "OpBitwiseAnd";
+    case SpvOpNot: return "OpNot";
+    case SpvOpBitFieldInsert: return "OpBitFieldInsert";
+    case SpvOpBitFieldSExtract: return "OpBitFieldSExtract";
+    case SpvOpBitFieldUExtract: return "OpBitFieldUExtract";
+    case SpvOpBitReverse: return "OpBitReverse";
+    case SpvOpBitCount: return "OpBitCount";
+    case SpvOpDPdx: return "OpDPdx";
+    case SpvOpDPdy: return "OpDPdy";
+    case SpvOpFwidth: return "OpFwidth";
+    case SpvOpDPdxFine: return "OpDPdxFine";
+    case SpvOpDPdyFine: return "OpDPdyFine";
+    case SpvOpFwidthFine: return "OpFwidthFine";
+    case SpvOpDPdxCoarse: return "OpDPdxCoarse";
+    case SpvOpDPdyCoarse: return "OpDPdyCoarse";
+    case SpvOpFwidthCoarse: return "OpFwidthCoarse";
+    case SpvOpEmitVertex: return "OpEmitVertex";
+    case SpvOpEndPrimitive: return "OpEndPrimitive";
+    case SpvOpEmitStreamVertex: return "OpEmitStreamVertex";
+    case SpvOpEndStreamPrimitive: return "OpEndStreamPrimitive";
+    case SpvOpControlBarrier: return "OpControlBarrier";
+    case SpvOpMemoryBarrier: return "OpMemoryBarrier";
+    case SpvOpAtomicLoad: return "OpAtomicLoad";
+    case SpvOpAtomicStore: return "OpAtomicStore";
+    case SpvOpAtomicExchange: return "OpAtomicExchange";
+    case SpvOpAtomicCompareExchange: return "OpAtomicCompareExchange";
+    case SpvOpAtomicCompareExchangeWeak: return "OpAtomicCompareExchangeWeak";
+    case SpvOpAtomicIIncrement: return "OpAtomicIIncrement";
+    case SpvOpAtomicIDecrement: return "OpAtomicIDecrement";
+    case SpvOpAtomicIAdd: return "OpAtomicIAdd";
+    case SpvOpAtomicISub: return "OpAtomicISub";
+    case SpvOpAtomicSMin: return "OpAtomicSMin";
+    case SpvOpAtomicUMin: return "OpAtomicUMin";
+    case SpvOpAtomicSMax: return "OpAtomicSMax";
+    case SpvOpAtomicUMax: return "OpAtomicUMax";
+    case SpvOpAtomicAnd: return "OpAtomicAnd";
+    case SpvOpAtomicOr: return "OpAtomicOr";
+    case SpvOpAtomicXor: return "OpAtomicXor";
+    case SpvOpPhi: return "OpPhi";
+    case SpvOpLoopMerge: return "OpLoopMerge";
+    case SpvOpSelectionMerge: return "OpSelectionMerge";
+    case SpvOpLabel: return "OpLabel";
+    case SpvOpBranch: return "OpBranch";
+    case SpvOpBranchConditional: return "OpBranchConditional";
+    case SpvOpSwitch: return "OpSwitch";
+    case SpvOpKill: return "OpKill";
+    case SpvOpReturn: return "OpReturn";
+    case SpvOpReturnValue: return "OpReturnValue";
+    case SpvOpUnreachable: return "OpUnreachable";
+    case SpvOpLifetimeStart: return "OpLifetimeStart";
+    case SpvOpLifetimeStop: return "OpLifetimeStop";
+    case SpvOpGroupAsyncCopy: return "OpGroupAsyncCopy";
+    case SpvOpGroupWaitEvents: return "OpGroupWaitEvents";
+    case SpvOpGroupAll: return "OpGroupAll";
+    case SpvOpGroupAny: return "OpGroupAny";
+    case SpvOpGroupBroadcast: return "OpGroupBroadcast";
+    case SpvOpGroupIAdd: return "OpGroupIAdd";
+    case SpvOpGroupFAdd: return "OpGroupFAdd";
+    case SpvOpGroupFMin: return "OpGroupFMin";
+    case SpvOpGroupUMin: return "OpGroupUMin";
+    case SpvOpGroupSMin: return "OpGroupSMin";
+    case SpvOpGroupFMax: return "OpGroupFMax";
+    case SpvOpGroupUMax: return "OpGroupUMax";
+    case SpvOpGroupSMax: return "OpGroupSMax";
+    case SpvOpReadPipe: return "OpReadPipe";
+    case SpvOpWritePipe: return "OpWritePipe";
+    case SpvOpReservedReadPipe: return "OpReservedReadPipe";
+    case SpvOpReservedWritePipe: return "OpReservedWritePipe";
+    case SpvOpReserveReadPipePackets: return "OpReserveReadPipePackets";
+    case SpvOpReserveWritePipePackets: return "OpReserveWritePipePackets";
+    case SpvOpCommitReadPipe: return "OpCommitReadPipe";
+    case SpvOpCommitWritePipe: return "OpCommitWritePipe";
+    case SpvOpIsValidReserveId: return "OpIsValidReserveId";
+    case SpvOpGetNumPipePackets: return "OpGetNumPipePackets";
+    case SpvOpGetMaxPipePackets: return "OpGetMaxPipePackets";
+    case SpvOpGroupReserveReadPipePackets: return "OpGroupReserveReadPipePackets";
+    case SpvOpGroupReserveWritePipePackets: return "OpGroupReserveWritePipePackets";
+    case SpvOpGroupCommitReadPipe: return "OpGroupCommitReadPipe";
+    case SpvOpGroupCommitWritePipe: return "OpGroupCommitWritePipe";
+    case SpvOpEnqueueMarker: return "OpEnqueueMarker";
+    case SpvOpEnqueueKernel: return "OpEnqueueKernel";
+    case SpvOpGetKernelNDrangeSubGroupCount: return "OpGetKernelNDrangeSubGroupCount";
+    case SpvOpGetKernelNDrangeMaxSubGroupSize: return "OpGetKernelNDrangeMaxSubGroupSize";
+    case SpvOpGetKernelWorkGroupSize: return "OpGetKernelWorkGroupSize";
+    case SpvOpGetKernelPreferredWorkGroupSizeMultiple: return "OpGetKernelPreferredWorkGroupSizeMultiple";
+    case SpvOpRetainEvent: return "OpRetainEvent";
+    case SpvOpReleaseEvent: return "OpReleaseEvent";
+    case SpvOpCreateUserEvent: return "OpCreateUserEvent";
+    case SpvOpIsValidEvent: return "OpIsValidEvent";
+    case SpvOpSetUserEventStatus: return "OpSetUserEventStatus";
+    case SpvOpCaptureEventProfilingInfo: return "OpCaptureEventProfilingInfo";
+    case SpvOpGetDefaultQueue: return "OpGetDefaultQueue";
+    case SpvOpBuildNDRange: return "OpBuildNDRange";
+    case SpvOpImageSparseSampleImplicitLod: return "OpImageSparseSampleImplicitLod";
+    case SpvOpImageSparseSampleExplicitLod: return "OpImageSparseSampleExplicitLod";
+    case SpvOpImageSparseSampleDrefImplicitLod: return "OpImageSparseSampleDrefImplicitLod";
+    case SpvOpImageSparseSampleDrefExplicitLod: return "OpImageSparseSampleDrefExplicitLod";
+    case SpvOpImageSparseSampleProjImplicitLod: return "OpImageSparseSampleProjImplicitLod";
+    case SpvOpImageSparseSampleProjExplicitLod: return "OpImageSparseSampleProjExplicitLod";
+    case SpvOpImageSparseSampleProjDrefImplicitLod: return "OpImageSparseSampleProjDrefImplicitLod";
+    case SpvOpImageSparseSampleProjDrefExplicitLod: return "OpImageSparseSampleProjDrefExplicitLod";
+    case SpvOpImageSparseFetch: return "OpImageSparseFetch";
+    case SpvOpImageSparseGather: return "OpImageSparseGather";
+    case SpvOpImageSparseDrefGather: return "OpImageSparseDrefGather";
+    case SpvOpImageSparseTexelsResident: return "OpImageSparseTexelsResident";
+    case SpvOpNoLine: return "OpNoLine";
+    case SpvOpAtomicFlagTestAndSet: return "OpAtomicFlagTestAndSet";
+    case SpvOpAtomicFlagClear: return "OpAtomicFlagClear";
+    case SpvOpImageSparseRead: return "OpImageSparseRead";
+    case SpvOpSizeOf: return "OpSizeOf";
+    case SpvOpTypePipeStorage: return "OpTypePipeStorage";
+    case SpvOpConstantPipeStorage: return "OpConstantPipeStorage";
+    case SpvOpCreatePipeFromPipeStorage: return "OpCreatePipeFromPipeStorage";
+    case SpvOpGetKernelLocalSizeForSubgroupCount: return "OpGetKernelLocalSizeForSubgroupCount";
+    case SpvOpGetKernelMaxNumSubgroups: return "OpGetKernelMaxNumSubgroups";
+    case SpvOpTypeNamedBarrier: return "OpTypeNamedBarrier";
+    case SpvOpNamedBarrierInitialize: return "OpNamedBarrierInitialize";
+    case SpvOpMemoryNamedBarrier: return "OpMemoryNamedBarrier";
+    case SpvOpModuleProcessed: return "OpModuleProcessed";
+    case SpvOpExecutionModeId: return "OpExecutionModeId";
+    case SpvOpDecorateId: return "OpDecorateId";
+    case SpvOpGroupNonUniformElect: return "OpGroupNonUniformElect";
+    case SpvOpGroupNonUniformAll: return "OpGroupNonUniformAll";
+    case SpvOpGroupNonUniformAny: return "OpGroupNonUniformAny";
+    case SpvOpGroupNonUniformAllEqual: return "OpGroupNonUniformAllEqual";
+    case SpvOpGroupNonUniformBroadcast: return "OpGroupNonUniformBroadcast";
+    case SpvOpGroupNonUniformBroadcastFirst: return "OpGroupNonUniformBroadcastFirst";
+    case SpvOpGroupNonUniformBallot: return "OpGroupNonUniformBallot";
+    case SpvOpGroupNonUniformInverseBallot: return "OpGroupNonUniformInverseBallot";
+    case SpvOpGroupNonUniformBallotBitExtract: return "OpGroupNonUniformBallotBitExtract";
+    case SpvOpGroupNonUniformBallotBitCount: return "OpGroupNonUniformBallotBitCount";
+    case SpvOpGroupNonUniformBallotFindLSB: return "OpGroupNonUniformBallotFindLSB";
+    case SpvOpGroupNonUniformBallotFindMSB: return "OpGroupNonUniformBallotFindMSB";
+    case SpvOpGroupNonUniformShuffle: return "OpGroupNonUniformShuffle";
+    case SpvOpGroupNonUniformShuffleXor: return "OpGroupNonUniformShuffleXor";
+    case SpvOpGroupNonUniformShuffleUp: return "OpGroupNonUniformShuffleUp";
+    case SpvOpGroupNonUniformShuffleDown: return "OpGroupNonUniformShuffleDown";
+    case SpvOpGroupNonUniformIAdd: return "OpGroupNonUniformIAdd";
+    case SpvOpGroupNonUniformFAdd: return "OpGroupNonUniformFAdd";
+    case SpvOpGroupNonUniformIMul: return "OpGroupNonUniformIMul";
+    case SpvOpGroupNonUniformFMul: return "OpGroupNonUniformFMul";
+    case SpvOpGroupNonUniformSMin: return "OpGroupNonUniformSMin";
+    case SpvOpGroupNonUniformUMin: return "OpGroupNonUniformUMin";
+    case SpvOpGroupNonUniformFMin: return "OpGroupNonUniformFMin";
+    case SpvOpGroupNonUniformSMax: return "OpGroupNonUniformSMax";
+    case SpvOpGroupNonUniformUMax: return "OpGroupNonUniformUMax";
+    case SpvOpGroupNonUniformFMax: return "OpGroupNonUniformFMax";
+    case SpvOpGroupNonUniformBitwiseAnd: return "OpGroupNonUniformBitwiseAnd";
+    case SpvOpGroupNonUniformBitwiseOr: return "OpGroupNonUniformBitwiseOr";
+    case SpvOpGroupNonUniformBitwiseXor: return "OpGroupNonUniformBitwiseXor";
+    case SpvOpGroupNonUniformLogicalAnd: return "OpGroupNonUniformLogicalAnd";
+    case SpvOpGroupNonUniformLogicalOr: return "OpGroupNonUniformLogicalOr";
+    case SpvOpGroupNonUniformLogicalXor: return "OpGroupNonUniformLogicalXor";
+    case SpvOpGroupNonUniformQuadBroadcast: return "OpGroupNonUniformQuadBroadcast";
+    case SpvOpGroupNonUniformQuadSwap: return "OpGroupNonUniformQuadSwap";
+    case SpvOpCopyLogical: return "OpCopyLogical";
+    case SpvOpPtrEqual: return "OpPtrEqual";
+    case SpvOpPtrNotEqual: return "OpPtrNotEqual";
+    case SpvOpPtrDiff: return "OpPtrDiff";
+    case SpvOpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT";
+    case SpvOpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT";
+    case SpvOpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT";
+    case SpvOpTypeTensorARM: return "OpTypeTensorARM";
+    case SpvOpTensorReadARM: return "OpTensorReadARM";
+    case SpvOpTensorWriteARM: return "OpTensorWriteARM";
+    case SpvOpTensorQuerySizeARM: return "OpTensorQuerySizeARM";
+    case SpvOpGraphConstantARM: return "OpGraphConstantARM";
+    case SpvOpGraphEntryPointARM: return "OpGraphEntryPointARM";
+    case SpvOpGraphARM: return "OpGraphARM";
+    case SpvOpGraphInputARM: return "OpGraphInputARM";
+    case SpvOpGraphSetOutputARM: return "OpGraphSetOutputARM";
+    case SpvOpGraphEndARM: return "OpGraphEndARM";
+    case SpvOpTypeGraphARM: return "OpTypeGraphARM";
+    case SpvOpTerminateInvocation: return "OpTerminateInvocation";
+    case SpvOpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR";
+    case SpvOpUntypedVariableKHR: return "OpUntypedVariableKHR";
+    case SpvOpUntypedAccessChainKHR: return "OpUntypedAccessChainKHR";
+    case SpvOpUntypedInBoundsAccessChainKHR: return "OpUntypedInBoundsAccessChainKHR";
+    case SpvOpSubgroupBallotKHR: return "OpSubgroupBallotKHR";
+    case SpvOpSubgroupFirstInvocationKHR: return "OpSubgroupFirstInvocationKHR";
+    case SpvOpUntypedPtrAccessChainKHR: return "OpUntypedPtrAccessChainKHR";
+    case SpvOpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR";
+    case SpvOpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR";
+    case SpvOpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR";
+    case SpvOpSubgroupAllKHR: return "OpSubgroupAllKHR";
+    case SpvOpSubgroupAnyKHR: return "OpSubgroupAnyKHR";
+    case SpvOpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR";
+    case SpvOpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR";
+    case SpvOpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR";
+    case SpvOpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR";
+    case SpvOpUntypedGroupAsyncCopyKHR: return "OpUntypedGroupAsyncCopyKHR";
+    case SpvOpTraceRayKHR: return "OpTraceRayKHR";
+    case SpvOpExecuteCallableKHR: return "OpExecuteCallableKHR";
+    case SpvOpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
+    case SpvOpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
+    case SpvOpTerminateRayKHR: return "OpTerminateRayKHR";
+    case SpvOpSDot: return "OpSDot";
+    case SpvOpUDot: return "OpUDot";
+    case SpvOpSUDot: return "OpSUDot";
+    case SpvOpSDotAccSat: return "OpSDotAccSat";
+    case SpvOpUDotAccSat: return "OpUDotAccSat";
+    case SpvOpSUDotAccSat: return "OpSUDotAccSat";
+    case SpvOpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR";
+    case SpvOpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR";
+    case SpvOpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR";
+    case SpvOpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR";
+    case SpvOpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR";
+    case SpvOpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT";
+    case SpvOpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT";
+    case SpvOpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT";
+    case SpvOpTypeRayQueryKHR: return "OpTypeRayQueryKHR";
+    case SpvOpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
+    case SpvOpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
+    case SpvOpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR";
+    case SpvOpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR";
+    case SpvOpRayQueryProceedKHR: return "OpRayQueryProceedKHR";
+    case SpvOpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR";
+    case SpvOpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM";
+    case SpvOpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
+    case SpvOpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
+    case SpvOpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case SpvOpBitCastArrayQCOM: return "OpBitCastArrayQCOM";
+    case SpvOpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
+    case SpvOpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
+    case SpvOpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
+    case SpvOpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case SpvOpCompositeConstructCoopMatQCOM: return "OpCompositeConstructCoopMatQCOM";
+    case SpvOpCompositeExtractCoopMatQCOM: return "OpCompositeExtractCoopMatQCOM";
+    case SpvOpExtractSubArrayQCOM: return "OpExtractSubArrayQCOM";
+    case SpvOpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
+    case SpvOpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
+    case SpvOpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
+    case SpvOpGroupUMinNonUniformAMD: return "OpGroupUMinNonUniformAMD";
+    case SpvOpGroupSMinNonUniformAMD: return "OpGroupSMinNonUniformAMD";
+    case SpvOpGroupFMaxNonUniformAMD: return "OpGroupFMaxNonUniformAMD";
+    case SpvOpGroupUMaxNonUniformAMD: return "OpGroupUMaxNonUniformAMD";
+    case SpvOpGroupSMaxNonUniformAMD: return "OpGroupSMaxNonUniformAMD";
+    case SpvOpFragmentMaskFetchAMD: return "OpFragmentMaskFetchAMD";
+    case SpvOpFragmentFetchAMD: return "OpFragmentFetchAMD";
+    case SpvOpReadClockKHR: return "OpReadClockKHR";
+    case SpvOpAllocateNodePayloadsAMDX: return "OpAllocateNodePayloadsAMDX";
+    case SpvOpEnqueueNodePayloadsAMDX: return "OpEnqueueNodePayloadsAMDX";
+    case SpvOpTypeNodePayloadArrayAMDX: return "OpTypeNodePayloadArrayAMDX";
+    case SpvOpFinishWritingNodePayloadAMDX: return "OpFinishWritingNodePayloadAMDX";
+    case SpvOpNodePayloadArrayLengthAMDX: return "OpNodePayloadArrayLengthAMDX";
+    case SpvOpIsNodePayloadValidAMDX: return "OpIsNodePayloadValidAMDX";
+    case SpvOpConstantStringAMDX: return "OpConstantStringAMDX";
+    case SpvOpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX";
+    case SpvOpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR";
+    case SpvOpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR";
+    case SpvOpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV";
+    case SpvOpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV";
+    case SpvOpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV";
+    case SpvOpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV";
+    case SpvOpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV";
+    case SpvOpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV";
+    case SpvOpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV";
+    case SpvOpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV";
+    case SpvOpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV";
+    case SpvOpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
+    case SpvOpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV";
+    case SpvOpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV";
+    case SpvOpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV";
+    case SpvOpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV";
+    case SpvOpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV";
+    case SpvOpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV";
+    case SpvOpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV";
+    case SpvOpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV";
+    case SpvOpHitObjectGetHitKindNV: return "OpHitObjectGetHitKindNV";
+    case SpvOpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV";
+    case SpvOpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV";
+    case SpvOpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV";
+    case SpvOpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV";
+    case SpvOpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV";
+    case SpvOpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV";
+    case SpvOpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV";
+    case SpvOpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV";
+    case SpvOpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV";
+    case SpvOpHitObjectIsHitNV: return "OpHitObjectIsHitNV";
+    case SpvOpHitObjectIsMissNV: return "OpHitObjectIsMissNV";
+    case SpvOpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV";
+    case SpvOpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV";
+    case SpvOpTypeHitObjectNV: return "OpTypeHitObjectNV";
+    case SpvOpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
+    case SpvOpTypeCooperativeVectorNV: return "OpTypeCooperativeVectorNV";
+    case SpvOpCooperativeVectorMatrixMulNV: return "OpCooperativeVectorMatrixMulNV";
+    case SpvOpCooperativeVectorOuterProductAccumulateNV: return "OpCooperativeVectorOuterProductAccumulateNV";
+    case SpvOpCooperativeVectorReduceSumAccumulateNV: return "OpCooperativeVectorReduceSumAccumulateNV";
+    case SpvOpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV";
+    case SpvOpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV";
+    case SpvOpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT";
+    case SpvOpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT";
+    case SpvOpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
+    case SpvOpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
+    case SpvOpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV";
+    case SpvOpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV";
+    case SpvOpCooperativeVectorLoadNV: return "OpCooperativeVectorLoadNV";
+    case SpvOpCooperativeVectorStoreNV: return "OpCooperativeVectorStoreNV";
+    case SpvOpReportIntersectionKHR: return "OpReportIntersectionKHR";
+    case SpvOpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV";
+    case SpvOpTerminateRayNV: return "OpTerminateRayNV";
+    case SpvOpTraceNV: return "OpTraceNV";
+    case SpvOpTraceMotionNV: return "OpTraceMotionNV";
+    case SpvOpTraceRayMotionNV: return "OpTraceRayMotionNV";
+    case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
+    case SpvOpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
+    case SpvOpExecuteCallableNV: return "OpExecuteCallableNV";
+    case SpvOpRayQueryGetClusterIdNV: return "OpRayQueryGetClusterIdNV";
+    case SpvOpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV";
+    case SpvOpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV";
+    case SpvOpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV";
+    case SpvOpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV";
+    case SpvOpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV";
+    case SpvOpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV";
+    case SpvOpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT";
+    case SpvOpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT";
+    case SpvOpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV";
+    case SpvOpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV";
+    case SpvOpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV";
+    case SpvOpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV";
+    case SpvOpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV";
+    case SpvOpTypeTensorViewNV: return "OpTypeTensorViewNV";
+    case SpvOpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV";
+    case SpvOpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV";
+    case SpvOpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV";
+    case SpvOpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV";
+    case SpvOpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV";
+    case SpvOpCreateTensorViewNV: return "OpCreateTensorViewNV";
+    case SpvOpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV";
+    case SpvOpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV";
+    case SpvOpDemoteToHelperInvocation: return "OpDemoteToHelperInvocation";
+    case SpvOpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT";
+    case SpvOpTensorViewSetClipNV: return "OpTensorViewSetClipNV";
+    case SpvOpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV";
+    case SpvOpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV";
+    case SpvOpConvertUToImageNV: return "OpConvertUToImageNV";
+    case SpvOpConvertUToSamplerNV: return "OpConvertUToSamplerNV";
+    case SpvOpConvertImageToUNV: return "OpConvertImageToUNV";
+    case SpvOpConvertSamplerToUNV: return "OpConvertSamplerToUNV";
+    case SpvOpConvertUToSampledImageNV: return "OpConvertUToSampledImageNV";
+    case SpvOpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV";
+    case SpvOpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV";
+    case SpvOpRawAccessChainNV: return "OpRawAccessChainNV";
+    case SpvOpRayQueryGetIntersectionSpherePositionNV: return "OpRayQueryGetIntersectionSpherePositionNV";
+    case SpvOpRayQueryGetIntersectionSphereRadiusNV: return "OpRayQueryGetIntersectionSphereRadiusNV";
+    case SpvOpRayQueryGetIntersectionLSSPositionsNV: return "OpRayQueryGetIntersectionLSSPositionsNV";
+    case SpvOpRayQueryGetIntersectionLSSRadiiNV: return "OpRayQueryGetIntersectionLSSRadiiNV";
+    case SpvOpRayQueryGetIntersectionLSSHitValueNV: return "OpRayQueryGetIntersectionLSSHitValueNV";
+    case SpvOpHitObjectGetSpherePositionNV: return "OpHitObjectGetSpherePositionNV";
+    case SpvOpHitObjectGetSphereRadiusNV: return "OpHitObjectGetSphereRadiusNV";
+    case SpvOpHitObjectGetLSSPositionsNV: return "OpHitObjectGetLSSPositionsNV";
+    case SpvOpHitObjectGetLSSRadiiNV: return "OpHitObjectGetLSSRadiiNV";
+    case SpvOpHitObjectIsSphereHitNV: return "OpHitObjectIsSphereHitNV";
+    case SpvOpHitObjectIsLSSHitNV: return "OpHitObjectIsLSSHitNV";
+    case SpvOpRayQueryIsSphereHitNV: return "OpRayQueryIsSphereHitNV";
+    case SpvOpRayQueryIsLSSHitNV: return "OpRayQueryIsLSSHitNV";
+    case SpvOpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL";
+    case SpvOpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL";
+    case SpvOpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL";
+    case SpvOpSubgroupShuffleXorINTEL: return "OpSubgroupShuffleXorINTEL";
+    case SpvOpSubgroupBlockReadINTEL: return "OpSubgroupBlockReadINTEL";
+    case SpvOpSubgroupBlockWriteINTEL: return "OpSubgroupBlockWriteINTEL";
+    case SpvOpSubgroupImageBlockReadINTEL: return "OpSubgroupImageBlockReadINTEL";
+    case SpvOpSubgroupImageBlockWriteINTEL: return "OpSubgroupImageBlockWriteINTEL";
+    case SpvOpSubgroupImageMediaBlockReadINTEL: return "OpSubgroupImageMediaBlockReadINTEL";
+    case SpvOpSubgroupImageMediaBlockWriteINTEL: return "OpSubgroupImageMediaBlockWriteINTEL";
+    case SpvOpUCountLeadingZerosINTEL: return "OpUCountLeadingZerosINTEL";
+    case SpvOpUCountTrailingZerosINTEL: return "OpUCountTrailingZerosINTEL";
+    case SpvOpAbsISubINTEL: return "OpAbsISubINTEL";
+    case SpvOpAbsUSubINTEL: return "OpAbsUSubINTEL";
+    case SpvOpIAddSatINTEL: return "OpIAddSatINTEL";
+    case SpvOpUAddSatINTEL: return "OpUAddSatINTEL";
+    case SpvOpIAverageINTEL: return "OpIAverageINTEL";
+    case SpvOpUAverageINTEL: return "OpUAverageINTEL";
+    case SpvOpIAverageRoundedINTEL: return "OpIAverageRoundedINTEL";
+    case SpvOpUAverageRoundedINTEL: return "OpUAverageRoundedINTEL";
+    case SpvOpISubSatINTEL: return "OpISubSatINTEL";
+    case SpvOpUSubSatINTEL: return "OpUSubSatINTEL";
+    case SpvOpIMul32x16INTEL: return "OpIMul32x16INTEL";
+    case SpvOpUMul32x16INTEL: return "OpUMul32x16INTEL";
+    case SpvOpConstantFunctionPointerINTEL: return "OpConstantFunctionPointerINTEL";
+    case SpvOpFunctionPointerCallINTEL: return "OpFunctionPointerCallINTEL";
+    case SpvOpAsmTargetINTEL: return "OpAsmTargetINTEL";
+    case SpvOpAsmINTEL: return "OpAsmINTEL";
+    case SpvOpAsmCallINTEL: return "OpAsmCallINTEL";
+    case SpvOpAtomicFMinEXT: return "OpAtomicFMinEXT";
+    case SpvOpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
+    case SpvOpAssumeTrueKHR: return "OpAssumeTrueKHR";
+    case SpvOpExpectKHR: return "OpExpectKHR";
+    case SpvOpDecorateString: return "OpDecorateString";
+    case SpvOpMemberDecorateString: return "OpMemberDecorateString";
+    case SpvOpVmeImageINTEL: return "OpVmeImageINTEL";
+    case SpvOpTypeVmeImageINTEL: return "OpTypeVmeImageINTEL";
+    case SpvOpTypeAvcImePayloadINTEL: return "OpTypeAvcImePayloadINTEL";
+    case SpvOpTypeAvcRefPayloadINTEL: return "OpTypeAvcRefPayloadINTEL";
+    case SpvOpTypeAvcSicPayloadINTEL: return "OpTypeAvcSicPayloadINTEL";
+    case SpvOpTypeAvcMcePayloadINTEL: return "OpTypeAvcMcePayloadINTEL";
+    case SpvOpTypeAvcMceResultINTEL: return "OpTypeAvcMceResultINTEL";
+    case SpvOpTypeAvcImeResultINTEL: return "OpTypeAvcImeResultINTEL";
+    case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: return "OpTypeAvcImeResultSingleReferenceStreamoutINTEL";
+    case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: return "OpTypeAvcImeResultDualReferenceStreamoutINTEL";
+    case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: return "OpTypeAvcImeSingleReferenceStreaminINTEL";
+    case SpvOpTypeAvcImeDualReferenceStreaminINTEL: return "OpTypeAvcImeDualReferenceStreaminINTEL";
+    case SpvOpTypeAvcRefResultINTEL: return "OpTypeAvcRefResultINTEL";
+    case SpvOpTypeAvcSicResultINTEL: return "OpTypeAvcSicResultINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: return "OpSubgroupAvcMceSetInterShapePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL";
+    case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL";
+    case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL";
+    case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: return "OpSubgroupAvcMceSetAcOnlyHaarINTEL";
+    case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL";
+    case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL";
+    case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL";
+    case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: return "OpSubgroupAvcMceConvertToImePayloadINTEL";
+    case SpvOpSubgroupAvcMceConvertToImeResultINTEL: return "OpSubgroupAvcMceConvertToImeResultINTEL";
+    case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: return "OpSubgroupAvcMceConvertToRefPayloadINTEL";
+    case SpvOpSubgroupAvcMceConvertToRefResultINTEL: return "OpSubgroupAvcMceConvertToRefResultINTEL";
+    case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: return "OpSubgroupAvcMceConvertToSicPayloadINTEL";
+    case SpvOpSubgroupAvcMceConvertToSicResultINTEL: return "OpSubgroupAvcMceConvertToSicResultINTEL";
+    case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: return "OpSubgroupAvcMceGetMotionVectorsINTEL";
+    case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: return "OpSubgroupAvcMceGetInterDistortionsINTEL";
+    case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: return "OpSubgroupAvcMceGetBestInterDistortionsINTEL";
+    case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: return "OpSubgroupAvcMceGetInterMajorShapeINTEL";
+    case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: return "OpSubgroupAvcMceGetInterMinorShapeINTEL";
+    case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: return "OpSubgroupAvcMceGetInterDirectionsINTEL";
+    case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: return "OpSubgroupAvcMceGetInterMotionVectorCountINTEL";
+    case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: return "OpSubgroupAvcMceGetInterReferenceIdsINTEL";
+    case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL";
+    case SpvOpSubgroupAvcImeInitializeINTEL: return "OpSubgroupAvcImeInitializeINTEL";
+    case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: return "OpSubgroupAvcImeSetSingleReferenceINTEL";
+    case SpvOpSubgroupAvcImeSetDualReferenceINTEL: return "OpSubgroupAvcImeSetDualReferenceINTEL";
+    case SpvOpSubgroupAvcImeRefWindowSizeINTEL: return "OpSubgroupAvcImeRefWindowSizeINTEL";
+    case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: return "OpSubgroupAvcImeAdjustRefOffsetINTEL";
+    case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: return "OpSubgroupAvcImeConvertToMcePayloadINTEL";
+    case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL";
+    case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL";
+    case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL";
+    case SpvOpSubgroupAvcImeSetWeightedSadINTEL: return "OpSubgroupAvcImeSetWeightedSadINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL";
+    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL";
+    case SpvOpSubgroupAvcImeConvertToMceResultINTEL: return "OpSubgroupAvcImeConvertToMceResultINTEL";
+    case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: return "OpSubgroupAvcImeGetDualReferenceStreaminINTEL";
+    case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL";
+    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL";
+    case SpvOpSubgroupAvcImeGetBorderReachedINTEL: return "OpSubgroupAvcImeGetBorderReachedINTEL";
+    case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL";
+    case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL";
+    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL";
+    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL";
+    case SpvOpSubgroupAvcFmeInitializeINTEL: return "OpSubgroupAvcFmeInitializeINTEL";
+    case SpvOpSubgroupAvcBmeInitializeINTEL: return "OpSubgroupAvcBmeInitializeINTEL";
+    case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: return "OpSubgroupAvcRefConvertToMcePayloadINTEL";
+    case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL";
+    case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: return "OpSubgroupAvcRefSetBilinearFilterEnableINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL";
+    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL";
+    case SpvOpSubgroupAvcRefConvertToMceResultINTEL: return "OpSubgroupAvcRefConvertToMceResultINTEL";
+    case SpvOpSubgroupAvcSicInitializeINTEL: return "OpSubgroupAvcSicInitializeINTEL";
+    case SpvOpSubgroupAvcSicConfigureSkcINTEL: return "OpSubgroupAvcSicConfigureSkcINTEL";
+    case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaINTEL";
+    case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL";
+    case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: return "OpSubgroupAvcSicGetMotionVectorMaskINTEL";
+    case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: return "OpSubgroupAvcSicConvertToMcePayloadINTEL";
+    case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL";
+    case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL";
+    case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL";
+    case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: return "OpSubgroupAvcSicSetBilinearFilterEnableINTEL";
+    case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL";
+    case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL";
+    case SpvOpSubgroupAvcSicEvaluateIpeINTEL: return "OpSubgroupAvcSicEvaluateIpeINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL";
+    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL";
+    case SpvOpSubgroupAvcSicConvertToMceResultINTEL: return "OpSubgroupAvcSicConvertToMceResultINTEL";
+    case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: return "OpSubgroupAvcSicGetIpeLumaShapeINTEL";
+    case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL";
+    case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL";
+    case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL";
+    case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: return "OpSubgroupAvcSicGetIpeChromaModeINTEL";
+    case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL";
+    case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL";
+    case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: return "OpSubgroupAvcSicGetInterRawSadsINTEL";
+    case SpvOpVariableLengthArrayINTEL: return "OpVariableLengthArrayINTEL";
+    case SpvOpSaveMemoryINTEL: return "OpSaveMemoryINTEL";
+    case SpvOpRestoreMemoryINTEL: return "OpRestoreMemoryINTEL";
+    case SpvOpArbitraryFloatSinCosPiINTEL: return "OpArbitraryFloatSinCosPiINTEL";
+    case SpvOpArbitraryFloatCastINTEL: return "OpArbitraryFloatCastINTEL";
+    case SpvOpArbitraryFloatCastFromIntINTEL: return "OpArbitraryFloatCastFromIntINTEL";
+    case SpvOpArbitraryFloatCastToIntINTEL: return "OpArbitraryFloatCastToIntINTEL";
+    case SpvOpArbitraryFloatAddINTEL: return "OpArbitraryFloatAddINTEL";
+    case SpvOpArbitraryFloatSubINTEL: return "OpArbitraryFloatSubINTEL";
+    case SpvOpArbitraryFloatMulINTEL: return "OpArbitraryFloatMulINTEL";
+    case SpvOpArbitraryFloatDivINTEL: return "OpArbitraryFloatDivINTEL";
+    case SpvOpArbitraryFloatGTINTEL: return "OpArbitraryFloatGTINTEL";
+    case SpvOpArbitraryFloatGEINTEL: return "OpArbitraryFloatGEINTEL";
+    case SpvOpArbitraryFloatLTINTEL: return "OpArbitraryFloatLTINTEL";
+    case SpvOpArbitraryFloatLEINTEL: return "OpArbitraryFloatLEINTEL";
+    case SpvOpArbitraryFloatEQINTEL: return "OpArbitraryFloatEQINTEL";
+    case SpvOpArbitraryFloatRecipINTEL: return "OpArbitraryFloatRecipINTEL";
+    case SpvOpArbitraryFloatRSqrtINTEL: return "OpArbitraryFloatRSqrtINTEL";
+    case SpvOpArbitraryFloatCbrtINTEL: return "OpArbitraryFloatCbrtINTEL";
+    case SpvOpArbitraryFloatHypotINTEL: return "OpArbitraryFloatHypotINTEL";
+    case SpvOpArbitraryFloatSqrtINTEL: return "OpArbitraryFloatSqrtINTEL";
+    case SpvOpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL";
+    case SpvOpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL";
+    case SpvOpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL";
+    case SpvOpArbitraryFloatLog1pINTEL: return "OpArbitraryFloatLog1pINTEL";
+    case SpvOpArbitraryFloatExpINTEL: return "OpArbitraryFloatExpINTEL";
+    case SpvOpArbitraryFloatExp2INTEL: return "OpArbitraryFloatExp2INTEL";
+    case SpvOpArbitraryFloatExp10INTEL: return "OpArbitraryFloatExp10INTEL";
+    case SpvOpArbitraryFloatExpm1INTEL: return "OpArbitraryFloatExpm1INTEL";
+    case SpvOpArbitraryFloatSinINTEL: return "OpArbitraryFloatSinINTEL";
+    case SpvOpArbitraryFloatCosINTEL: return "OpArbitraryFloatCosINTEL";
+    case SpvOpArbitraryFloatSinCosINTEL: return "OpArbitraryFloatSinCosINTEL";
+    case SpvOpArbitraryFloatSinPiINTEL: return "OpArbitraryFloatSinPiINTEL";
+    case SpvOpArbitraryFloatCosPiINTEL: return "OpArbitraryFloatCosPiINTEL";
+    case SpvOpArbitraryFloatASinINTEL: return "OpArbitraryFloatASinINTEL";
+    case SpvOpArbitraryFloatASinPiINTEL: return "OpArbitraryFloatASinPiINTEL";
+    case SpvOpArbitraryFloatACosINTEL: return "OpArbitraryFloatACosINTEL";
+    case SpvOpArbitraryFloatACosPiINTEL: return "OpArbitraryFloatACosPiINTEL";
+    case SpvOpArbitraryFloatATanINTEL: return "OpArbitraryFloatATanINTEL";
+    case SpvOpArbitraryFloatATanPiINTEL: return "OpArbitraryFloatATanPiINTEL";
+    case SpvOpArbitraryFloatATan2INTEL: return "OpArbitraryFloatATan2INTEL";
+    case SpvOpArbitraryFloatPowINTEL: return "OpArbitraryFloatPowINTEL";
+    case SpvOpArbitraryFloatPowRINTEL: return "OpArbitraryFloatPowRINTEL";
+    case SpvOpArbitraryFloatPowNINTEL: return "OpArbitraryFloatPowNINTEL";
+    case SpvOpLoopControlINTEL: return "OpLoopControlINTEL";
+    case SpvOpAliasDomainDeclINTEL: return "OpAliasDomainDeclINTEL";
+    case SpvOpAliasScopeDeclINTEL: return "OpAliasScopeDeclINTEL";
+    case SpvOpAliasScopeListDeclINTEL: return "OpAliasScopeListDeclINTEL";
+    case SpvOpFixedSqrtINTEL: return "OpFixedSqrtINTEL";
+    case SpvOpFixedRecipINTEL: return "OpFixedRecipINTEL";
+    case SpvOpFixedRsqrtINTEL: return "OpFixedRsqrtINTEL";
+    case SpvOpFixedSinINTEL: return "OpFixedSinINTEL";
+    case SpvOpFixedCosINTEL: return "OpFixedCosINTEL";
+    case SpvOpFixedSinCosINTEL: return "OpFixedSinCosINTEL";
+    case SpvOpFixedSinPiINTEL: return "OpFixedSinPiINTEL";
+    case SpvOpFixedCosPiINTEL: return "OpFixedCosPiINTEL";
+    case SpvOpFixedSinCosPiINTEL: return "OpFixedSinCosPiINTEL";
+    case SpvOpFixedLogINTEL: return "OpFixedLogINTEL";
+    case SpvOpFixedExpINTEL: return "OpFixedExpINTEL";
+    case SpvOpPtrCastToCrossWorkgroupINTEL: return "OpPtrCastToCrossWorkgroupINTEL";
+    case SpvOpCrossWorkgroupCastToPtrINTEL: return "OpCrossWorkgroupCastToPtrINTEL";
+    case SpvOpReadPipeBlockingINTEL: return "OpReadPipeBlockingINTEL";
+    case SpvOpWritePipeBlockingINTEL: return "OpWritePipeBlockingINTEL";
+    case SpvOpFPGARegINTEL: return "OpFPGARegINTEL";
+    case SpvOpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR";
+    case SpvOpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR";
+    case SpvOpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR";
+    case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
+    case SpvOpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR";
+    case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
+    case SpvOpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR";
+    case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
+    case SpvOpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR";
+    case SpvOpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR";
+    case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
+    case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
+    case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR";
+    case SpvOpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR";
+    case SpvOpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR";
+    case SpvOpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR";
+    case SpvOpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR";
+    case SpvOpAtomicFAddEXT: return "OpAtomicFAddEXT";
+    case SpvOpTypeBufferSurfaceINTEL: return "OpTypeBufferSurfaceINTEL";
+    case SpvOpTypeStructContinuedINTEL: return "OpTypeStructContinuedINTEL";
+    case SpvOpConstantCompositeContinuedINTEL: return "OpConstantCompositeContinuedINTEL";
+    case SpvOpSpecConstantCompositeContinuedINTEL: return "OpSpecConstantCompositeContinuedINTEL";
+    case SpvOpCompositeConstructContinuedINTEL: return "OpCompositeConstructContinuedINTEL";
+    case SpvOpConvertFToBF16INTEL: return "OpConvertFToBF16INTEL";
+    case SpvOpConvertBF16ToFINTEL: return "OpConvertBF16ToFINTEL";
+    case SpvOpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL";
+    case SpvOpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL";
+    case SpvOpArithmeticFenceEXT: return "OpArithmeticFenceEXT";
+    case SpvOpTaskSequenceCreateINTEL: return "OpTaskSequenceCreateINTEL";
+    case SpvOpTaskSequenceAsyncINTEL: return "OpTaskSequenceAsyncINTEL";
+    case SpvOpTaskSequenceGetINTEL: return "OpTaskSequenceGetINTEL";
+    case SpvOpTaskSequenceReleaseINTEL: return "OpTaskSequenceReleaseINTEL";
+    case SpvOpTypeTaskSequenceINTEL: return "OpTypeTaskSequenceINTEL";
+    case SpvOpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL";
+    case SpvOpSubgroup2DBlockLoadINTEL: return "OpSubgroup2DBlockLoadINTEL";
+    case SpvOpSubgroup2DBlockLoadTransformINTEL: return "OpSubgroup2DBlockLoadTransformINTEL";
+    case SpvOpSubgroup2DBlockLoadTransposeINTEL: return "OpSubgroup2DBlockLoadTransposeINTEL";
+    case SpvOpSubgroup2DBlockPrefetchINTEL: return "OpSubgroup2DBlockPrefetchINTEL";
+    case SpvOpSubgroup2DBlockStoreINTEL: return "OpSubgroup2DBlockStoreINTEL";
+    case SpvOpSubgroupMatrixMultiplyAccumulateINTEL: return "OpSubgroupMatrixMultiplyAccumulateINTEL";
+    case SpvOpBitwiseFunctionINTEL: return "OpBitwiseFunctionINTEL";
+    case SpvOpUntypedVariableLengthArrayINTEL: return "OpUntypedVariableLengthArrayINTEL";
+    case SpvOpConditionalExtensionINTEL: return "OpConditionalExtensionINTEL";
+    case SpvOpConditionalEntryPointINTEL: return "OpConditionalEntryPointINTEL";
+    case SpvOpConditionalCapabilityINTEL: return "OpConditionalCapabilityINTEL";
+    case SpvOpSpecConstantTargetINTEL: return "OpSpecConstantTargetINTEL";
+    case SpvOpSpecConstantArchitectureINTEL: return "OpSpecConstantArchitectureINTEL";
+    case SpvOpSpecConstantCapabilitiesINTEL: return "OpSpecConstantCapabilitiesINTEL";
+    case SpvOpConditionalCopyObjectINTEL: return "OpConditionalCopyObjectINTEL";
+    case SpvOpGroupIMulKHR: return "OpGroupIMulKHR";
+    case SpvOpGroupFMulKHR: return "OpGroupFMulKHR";
+    case SpvOpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR";
+    case SpvOpGroupBitwiseOrKHR: return "OpGroupBitwiseOrKHR";
+    case SpvOpGroupBitwiseXorKHR: return "OpGroupBitwiseXorKHR";
+    case SpvOpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR";
+    case SpvOpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR";
+    case SpvOpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR";
+    case SpvOpRoundFToTF32INTEL: return "OpRoundFToTF32INTEL";
+    case SpvOpMaskedGatherINTEL: return "OpMaskedGatherINTEL";
+    case SpvOpMaskedScatterINTEL: return "OpMaskedScatterINTEL";
+    case SpvOpConvertHandleToImageINTEL: return "OpConvertHandleToImageINTEL";
+    case SpvOpConvertHandleToSamplerINTEL: return "OpConvertHandleToSamplerINTEL";
+    case SpvOpConvertHandleToSampledImageINTEL: return "OpConvertHandleToSampledImageINTEL";
+    default: return "Unknown";
+    }
+}
+
+#endif /* SPV_ENABLE_UTILITY_CODE */
+
+#endif
+

+ 51 - 1
thirdparty/spirv-cross/spirv.hpp → thirdparty/spirv-headers/include/spirv/unified1/spirv.hpp

@@ -638,6 +638,7 @@ enum Decoration {
     DecorationHostAccessINTEL = 6188,
     DecorationInitModeINTEL = 6190,
     DecorationImplementInRegisterMapINTEL = 6191,
+    DecorationConditionalINTEL = 6247,
     DecorationCacheControlLoadINTEL = 6442,
     DecorationCacheControlStoreINTEL = 6443,
     DecorationMax = 0x7fffffff,
@@ -1103,6 +1104,7 @@ enum Capability {
     CapabilityTextureBoxFilterQCOM = 4485,
     CapabilityTextureBlockMatchQCOM = 4486,
     CapabilityTileShadingQCOM = 4495,
+    CapabilityCooperativeMatrixConversionQCOM = 4496,
     CapabilityTextureBlockMatch2QCOM = 4498,
     CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
@@ -1278,6 +1280,9 @@ enum Capability {
     CapabilitySubgroup2DBlockTransposeINTEL = 6230,
     CapabilitySubgroupMatrixMultiplyAccumulateINTEL = 6236,
     CapabilityTernaryBitwiseFunctionINTEL = 6241,
+    CapabilityUntypedVariableLengthArrayINTEL = 6243,
+    CapabilitySpecConditionalINTEL = 6245,
+    CapabilityFunctionVariantsINTEL = 6246,
     CapabilityGroupUniformArithmeticKHR = 6400,
     CapabilityTensorFloat32RoundingINTEL = 6425,
     CapabilityMaskedGatherScatterINTEL = 6427,
@@ -1972,6 +1977,7 @@ enum Op {
     OpGroupNonUniformRotateKHR = 4431,
     OpSubgroupReadInvocationKHR = 4432,
     OpExtInstWithForwardRefsKHR = 4433,
+    OpUntypedGroupAsyncCopyKHR = 4434,
     OpTraceRayKHR = 4445,
     OpExecuteCallableKHR = 4446,
     OpConvertUToAccelerationStructureKHR = 4447,
@@ -2008,10 +2014,14 @@ enum Op {
     OpImageBoxFilterQCOM = 4481,
     OpImageBlockMatchSSDQCOM = 4482,
     OpImageBlockMatchSADQCOM = 4483,
+    OpBitCastArrayQCOM = 4497,
     OpImageBlockMatchWindowSSDQCOM = 4500,
     OpImageBlockMatchWindowSADQCOM = 4501,
     OpImageBlockMatchGatherSSDQCOM = 4502,
     OpImageBlockMatchGatherSADQCOM = 4503,
+    OpCompositeConstructCoopMatQCOM = 4540,
+    OpCompositeExtractCoopMatQCOM = 4541,
+    OpExtractSubArrayQCOM = 4542,
     OpGroupIAddNonUniformAMD = 5000,
     OpGroupFAddNonUniformAMD = 5001,
     OpGroupFMinNonUniformAMD = 5002,
@@ -2093,6 +2103,7 @@ enum Op {
     OpTypeAccelerationStructureNV = 5341,
     OpExecuteCallableNV = 5344,
     OpRayQueryGetClusterIdNV = 5345,
+    OpRayQueryGetIntersectionClusterIdNV = 5345,
     OpHitObjectGetClusterIdNV = 5346,
     OpTypeCooperativeMatrixNV = 5358,
     OpCooperativeMatrixLoadNV = 5359,
@@ -2402,6 +2413,14 @@ enum Op {
     OpSubgroup2DBlockStoreINTEL = 6235,
     OpSubgroupMatrixMultiplyAccumulateINTEL = 6237,
     OpBitwiseFunctionINTEL = 6242,
+    OpUntypedVariableLengthArrayINTEL = 6244,
+    OpConditionalExtensionINTEL = 6248,
+    OpConditionalEntryPointINTEL = 6249,
+    OpConditionalCapabilityINTEL = 6250,
+    OpSpecConstantTargetINTEL = 6251,
+    OpSpecConstantArchitectureINTEL = 6252,
+    OpSpecConstantCapabilitiesINTEL = 6253,
+    OpConditionalCopyObjectINTEL = 6254,
     OpGroupIMulKHR = 6401,
     OpGroupFMulKHR = 6402,
     OpGroupBitwiseAndKHR = 6403,
@@ -2802,6 +2821,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
     case OpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedGroupAsyncCopyKHR: *hasResult = true; *hasResultType = true; break;
     case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
     case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
     case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
@@ -2832,10 +2852,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpBitCastArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeConstructCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeExtractCoopMatQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpExtractSubArrayQCOM: *hasResult = true; *hasResultType = true; break;
     case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
@@ -2914,7 +2938,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break;
     case OpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break;
     case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
-    case OpRayQueryGetClusterIdNV: *hasResult = true; *hasResultType = true; break;
+    case OpRayQueryGetIntersectionClusterIdNV: *hasResult = true; *hasResultType = true; break;
     case OpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break;
     case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
     case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
@@ -3221,6 +3245,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpSubgroup2DBlockStoreINTEL: *hasResult = false; *hasResultType = false; break;
     case OpSubgroupMatrixMultiplyAccumulateINTEL: *hasResult = true; *hasResultType = true; break;
     case OpBitwiseFunctionINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpConditionalExtensionINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpConditionalEntryPointINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpConditionalCapabilityINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpSpecConstantTargetINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantArchitectureINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantCapabilitiesINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpConditionalCopyObjectINTEL: *hasResult = true; *hasResultType = true; break;
     case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
@@ -3761,6 +3793,7 @@ inline const char* DecorationToString(Decoration value) {
     case DecorationHostAccessINTEL: return "HostAccessINTEL";
     case DecorationInitModeINTEL: return "InitModeINTEL";
     case DecorationImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL";
+    case DecorationConditionalINTEL: return "ConditionalINTEL";
     case DecorationCacheControlLoadINTEL: return "CacheControlLoadINTEL";
     case DecorationCacheControlStoreINTEL: return "CacheControlStoreINTEL";
     default: return "Unknown";
@@ -4051,6 +4084,7 @@ inline const char* CapabilityToString(Capability value) {
     case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
     case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
     case CapabilityTileShadingQCOM: return "TileShadingQCOM";
+    case CapabilityCooperativeMatrixConversionQCOM: return "CooperativeMatrixConversionQCOM";
     case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
     case CapabilityFloat16ImageAMD: return "Float16ImageAMD";
     case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
@@ -4200,6 +4234,9 @@ inline const char* CapabilityToString(Capability value) {
     case CapabilitySubgroup2DBlockTransposeINTEL: return "Subgroup2DBlockTransposeINTEL";
     case CapabilitySubgroupMatrixMultiplyAccumulateINTEL: return "SubgroupMatrixMultiplyAccumulateINTEL";
     case CapabilityTernaryBitwiseFunctionINTEL: return "TernaryBitwiseFunctionINTEL";
+    case CapabilityUntypedVariableLengthArrayINTEL: return "UntypedVariableLengthArrayINTEL";
+    case CapabilitySpecConditionalINTEL: return "SpecConditionalINTEL";
+    case CapabilityFunctionVariantsINTEL: return "FunctionVariantsINTEL";
     case CapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR";
     case CapabilityTensorFloat32RoundingINTEL: return "TensorFloat32RoundingINTEL";
     case CapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL";
@@ -4775,6 +4812,7 @@ inline const char* OpToString(Op value) {
     case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR";
     case OpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR";
     case OpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR";
+    case OpUntypedGroupAsyncCopyKHR: return "OpUntypedGroupAsyncCopyKHR";
     case OpTraceRayKHR: return "OpTraceRayKHR";
     case OpExecuteCallableKHR: return "OpExecuteCallableKHR";
     case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
@@ -4805,10 +4843,14 @@ inline const char* OpToString(Op value) {
     case OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
     case OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
     case OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case OpBitCastArrayQCOM: return "OpBitCastArrayQCOM";
     case OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
     case OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
     case OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
     case OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case OpCompositeConstructCoopMatQCOM: return "OpCompositeConstructCoopMatQCOM";
+    case OpCompositeExtractCoopMatQCOM: return "OpCompositeExtractCoopMatQCOM";
+    case OpExtractSubArrayQCOM: return "OpExtractSubArrayQCOM";
     case OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
     case OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
     case OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
@@ -5194,6 +5236,14 @@ inline const char* OpToString(Op value) {
     case OpSubgroup2DBlockStoreINTEL: return "OpSubgroup2DBlockStoreINTEL";
     case OpSubgroupMatrixMultiplyAccumulateINTEL: return "OpSubgroupMatrixMultiplyAccumulateINTEL";
     case OpBitwiseFunctionINTEL: return "OpBitwiseFunctionINTEL";
+    case OpUntypedVariableLengthArrayINTEL: return "OpUntypedVariableLengthArrayINTEL";
+    case OpConditionalExtensionINTEL: return "OpConditionalExtensionINTEL";
+    case OpConditionalEntryPointINTEL: return "OpConditionalEntryPointINTEL";
+    case OpConditionalCapabilityINTEL: return "OpConditionalCapabilityINTEL";
+    case OpSpecConstantTargetINTEL: return "OpSpecConstantTargetINTEL";
+    case OpSpecConstantArchitectureINTEL: return "OpSpecConstantArchitectureINTEL";
+    case OpSpecConstantCapabilitiesINTEL: return "OpSpecConstantCapabilitiesINTEL";
+    case OpConditionalCopyObjectINTEL: return "OpConditionalCopyObjectINTEL";
     case OpGroupIMulKHR: return "OpGroupIMulKHR";
     case OpGroupFMulKHR: return "OpGroupFMulKHR";
     case OpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR";

+ 0 - 4890
thirdparty/spirv-reflect/include/spirv/unified1/spirv.h

@@ -1,4890 +0,0 @@
-/*
-** Copyright (c) 2014-2020 The Khronos Group Inc.
-**
-** Permission is hereby granted, free of charge, to any person obtaining a copy
-** of this software and/or associated documentation files (the "Materials"),
-** to deal in the Materials without restriction, including without limitation
-** the rights to use, copy, modify, merge, publish, distribute, sublicense,
-** and/or sell copies of the Materials, and to permit persons to whom the
-** Materials are furnished to do so, subject to the following conditions:
-**
-** The above copyright notice and this permission notice shall be included in
-** all copies or substantial portions of the Materials.
-**
-** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
-** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
-** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
-**
-** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
-** IN THE MATERIALS.
-*/
-
-/*
-** This header is automatically generated by the same tool that creates
-** the Binary Section of the SPIR-V specification.
-*/
-
-/*
-** Enumeration tokens for SPIR-V, in various styles:
-**   C, C++, C++11, JSON, Lua, Python, C#, D, Beef
-**
-** - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
-** - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
-** - C++11 will use enum classes in the spv namespace, e.g.:
-*spv::SourceLanguage::GLSL
-** - Lua will use tables, e.g.: spv.SourceLanguage.GLSL
-** - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL']
-** - C# will use enum classes in the Specification class located in the "Spv"
-*namespace,
-**     e.g.: Spv.Specification.SourceLanguage.GLSL
-** - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL
-** - Beef will use enum classes in the Specification class located in the "Spv"
-*namespace,
-**     e.g.: Spv.Specification.SourceLanguage.GLSL
-**
-** Some tokens act like mask values, which can be OR'd together,
-** while others are mutually exclusive.  The mask-like ones have
-** "Mask" in their name, and a parallel enum that has the shift
-** amount (1 << x) for each corresponding enumerant.
-*/
-
-#ifndef spirv_H
-#define spirv_H
-
-typedef unsigned int SpvId;
-
-#define SPV_VERSION 0x10600
-#define SPV_REVISION 1
-
-static const unsigned int SpvMagicNumber = 0x07230203;
-static const unsigned int SpvVersion = 0x00010600;
-static const unsigned int SpvRevision = 1;
-static const unsigned int SpvOpCodeMask = 0xffff;
-static const unsigned int SpvWordCountShift = 16;
-
-typedef enum SpvSourceLanguage_ {
-  SpvSourceLanguageUnknown = 0,
-  SpvSourceLanguageESSL = 1,
-  SpvSourceLanguageGLSL = 2,
-  SpvSourceLanguageOpenCL_C = 3,
-  SpvSourceLanguageOpenCL_CPP = 4,
-  SpvSourceLanguageHLSL = 5,
-  SpvSourceLanguageCPP_for_OpenCL = 6,
-  SpvSourceLanguageSYCL = 7,
-  SpvSourceLanguageHERO_C = 8,
-  SpvSourceLanguageNZSL = 9,
-  SpvSourceLanguageMax = 0x7fffffff,
-} SpvSourceLanguage;
-
-typedef enum SpvExecutionModel_ {
-  SpvExecutionModelVertex = 0,
-  SpvExecutionModelTessellationControl = 1,
-  SpvExecutionModelTessellationEvaluation = 2,
-  SpvExecutionModelGeometry = 3,
-  SpvExecutionModelFragment = 4,
-  SpvExecutionModelGLCompute = 5,
-  SpvExecutionModelKernel = 6,
-  SpvExecutionModelTaskNV = 5267,
-  SpvExecutionModelMeshNV = 5268,
-  SpvExecutionModelRayGenerationKHR = 5313,
-  SpvExecutionModelRayGenerationNV = 5313,
-  SpvExecutionModelIntersectionKHR = 5314,
-  SpvExecutionModelIntersectionNV = 5314,
-  SpvExecutionModelAnyHitKHR = 5315,
-  SpvExecutionModelAnyHitNV = 5315,
-  SpvExecutionModelClosestHitKHR = 5316,
-  SpvExecutionModelClosestHitNV = 5316,
-  SpvExecutionModelMissKHR = 5317,
-  SpvExecutionModelMissNV = 5317,
-  SpvExecutionModelCallableKHR = 5318,
-  SpvExecutionModelCallableNV = 5318,
-  SpvExecutionModelTaskEXT = 5364,
-  SpvExecutionModelMeshEXT = 5365,
-  SpvExecutionModelMax = 0x7fffffff,
-} SpvExecutionModel;
-
-typedef enum SpvAddressingModel_ {
-  SpvAddressingModelLogical = 0,
-  SpvAddressingModelPhysical32 = 1,
-  SpvAddressingModelPhysical64 = 2,
-  SpvAddressingModelPhysicalStorageBuffer64 = 5348,
-  SpvAddressingModelPhysicalStorageBuffer64EXT = 5348,
-  SpvAddressingModelMax = 0x7fffffff,
-} SpvAddressingModel;
-
-typedef enum SpvMemoryModel_ {
-  SpvMemoryModelSimple = 0,
-  SpvMemoryModelGLSL450 = 1,
-  SpvMemoryModelOpenCL = 2,
-  SpvMemoryModelVulkan = 3,
-  SpvMemoryModelVulkanKHR = 3,
-  SpvMemoryModelMax = 0x7fffffff,
-} SpvMemoryModel;
-
-typedef enum SpvExecutionMode_ {
-  SpvExecutionModeInvocations = 0,
-  SpvExecutionModeSpacingEqual = 1,
-  SpvExecutionModeSpacingFractionalEven = 2,
-  SpvExecutionModeSpacingFractionalOdd = 3,
-  SpvExecutionModeVertexOrderCw = 4,
-  SpvExecutionModeVertexOrderCcw = 5,
-  SpvExecutionModePixelCenterInteger = 6,
-  SpvExecutionModeOriginUpperLeft = 7,
-  SpvExecutionModeOriginLowerLeft = 8,
-  SpvExecutionModeEarlyFragmentTests = 9,
-  SpvExecutionModePointMode = 10,
-  SpvExecutionModeXfb = 11,
-  SpvExecutionModeDepthReplacing = 12,
-  SpvExecutionModeDepthGreater = 14,
-  SpvExecutionModeDepthLess = 15,
-  SpvExecutionModeDepthUnchanged = 16,
-  SpvExecutionModeLocalSize = 17,
-  SpvExecutionModeLocalSizeHint = 18,
-  SpvExecutionModeInputPoints = 19,
-  SpvExecutionModeInputLines = 20,
-  SpvExecutionModeInputLinesAdjacency = 21,
-  SpvExecutionModeTriangles = 22,
-  SpvExecutionModeInputTrianglesAdjacency = 23,
-  SpvExecutionModeQuads = 24,
-  SpvExecutionModeIsolines = 25,
-  SpvExecutionModeOutputVertices = 26,
-  SpvExecutionModeOutputPoints = 27,
-  SpvExecutionModeOutputLineStrip = 28,
-  SpvExecutionModeOutputTriangleStrip = 29,
-  SpvExecutionModeVecTypeHint = 30,
-  SpvExecutionModeContractionOff = 31,
-  SpvExecutionModeInitializer = 33,
-  SpvExecutionModeFinalizer = 34,
-  SpvExecutionModeSubgroupSize = 35,
-  SpvExecutionModeSubgroupsPerWorkgroup = 36,
-  SpvExecutionModeSubgroupsPerWorkgroupId = 37,
-  SpvExecutionModeLocalSizeId = 38,
-  SpvExecutionModeLocalSizeHintId = 39,
-  SpvExecutionModeNonCoherentColorAttachmentReadEXT = 4169,
-  SpvExecutionModeNonCoherentDepthAttachmentReadEXT = 4170,
-  SpvExecutionModeNonCoherentStencilAttachmentReadEXT = 4171,
-  SpvExecutionModeSubgroupUniformControlFlowKHR = 4421,
-  SpvExecutionModePostDepthCoverage = 4446,
-  SpvExecutionModeDenormPreserve = 4459,
-  SpvExecutionModeDenormFlushToZero = 4460,
-  SpvExecutionModeSignedZeroInfNanPreserve = 4461,
-  SpvExecutionModeRoundingModeRTE = 4462,
-  SpvExecutionModeRoundingModeRTZ = 4463,
-  SpvExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
-  SpvExecutionModeStencilRefReplacingEXT = 5027,
-  SpvExecutionModeStencilRefUnchangedFrontAMD = 5079,
-  SpvExecutionModeStencilRefGreaterFrontAMD = 5080,
-  SpvExecutionModeStencilRefLessFrontAMD = 5081,
-  SpvExecutionModeStencilRefUnchangedBackAMD = 5082,
-  SpvExecutionModeStencilRefGreaterBackAMD = 5083,
-  SpvExecutionModeStencilRefLessBackAMD = 5084,
-  SpvExecutionModeOutputLinesEXT = 5269,
-  SpvExecutionModeOutputLinesNV = 5269,
-  SpvExecutionModeOutputPrimitivesEXT = 5270,
-  SpvExecutionModeOutputPrimitivesNV = 5270,
-  SpvExecutionModeDerivativeGroupQuadsNV = 5289,
-  SpvExecutionModeDerivativeGroupLinearNV = 5290,
-  SpvExecutionModeOutputTrianglesEXT = 5298,
-  SpvExecutionModeOutputTrianglesNV = 5298,
-  SpvExecutionModePixelInterlockOrderedEXT = 5366,
-  SpvExecutionModePixelInterlockUnorderedEXT = 5367,
-  SpvExecutionModeSampleInterlockOrderedEXT = 5368,
-  SpvExecutionModeSampleInterlockUnorderedEXT = 5369,
-  SpvExecutionModeShadingRateInterlockOrderedEXT = 5370,
-  SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371,
-  SpvExecutionModeSharedLocalMemorySizeINTEL = 5618,
-  SpvExecutionModeRoundingModeRTPINTEL = 5620,
-  SpvExecutionModeRoundingModeRTNINTEL = 5621,
-  SpvExecutionModeFloatingPointModeALTINTEL = 5622,
-  SpvExecutionModeFloatingPointModeIEEEINTEL = 5623,
-  SpvExecutionModeMaxWorkgroupSizeINTEL = 5893,
-  SpvExecutionModeMaxWorkDimINTEL = 5894,
-  SpvExecutionModeNoGlobalOffsetINTEL = 5895,
-  SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
-  SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
-  SpvExecutionModeStreamingInterfaceINTEL = 6154,
-  SpvExecutionModeRegisterMapInterfaceINTEL = 6160,
-  SpvExecutionModeNamedBarrierCountINTEL = 6417,
-  SpvExecutionModeMax = 0x7fffffff,
-} SpvExecutionMode;
-
-typedef enum SpvStorageClass_ {
-  SpvStorageClassUniformConstant = 0,
-  SpvStorageClassInput = 1,
-  SpvStorageClassUniform = 2,
-  SpvStorageClassOutput = 3,
-  SpvStorageClassWorkgroup = 4,
-  SpvStorageClassCrossWorkgroup = 5,
-  SpvStorageClassPrivate = 6,
-  SpvStorageClassFunction = 7,
-  SpvStorageClassGeneric = 8,
-  SpvStorageClassPushConstant = 9,
-  SpvStorageClassAtomicCounter = 10,
-  SpvStorageClassImage = 11,
-  SpvStorageClassStorageBuffer = 12,
-  SpvStorageClassTileImageEXT = 4172,
-  SpvStorageClassCallableDataKHR = 5328,
-  SpvStorageClassCallableDataNV = 5328,
-  SpvStorageClassIncomingCallableDataKHR = 5329,
-  SpvStorageClassIncomingCallableDataNV = 5329,
-  SpvStorageClassRayPayloadKHR = 5338,
-  SpvStorageClassRayPayloadNV = 5338,
-  SpvStorageClassHitAttributeKHR = 5339,
-  SpvStorageClassHitAttributeNV = 5339,
-  SpvStorageClassIncomingRayPayloadKHR = 5342,
-  SpvStorageClassIncomingRayPayloadNV = 5342,
-  SpvStorageClassShaderRecordBufferKHR = 5343,
-  SpvStorageClassShaderRecordBufferNV = 5343,
-  SpvStorageClassPhysicalStorageBuffer = 5349,
-  SpvStorageClassPhysicalStorageBufferEXT = 5349,
-  SpvStorageClassHitObjectAttributeNV = 5385,
-  SpvStorageClassTaskPayloadWorkgroupEXT = 5402,
-  SpvStorageClassCodeSectionINTEL = 5605,
-  SpvStorageClassDeviceOnlyINTEL = 5936,
-  SpvStorageClassHostOnlyINTEL = 5937,
-  SpvStorageClassMax = 0x7fffffff,
-} SpvStorageClass;
-
-typedef enum SpvDim_ {
-  SpvDim1D = 0,
-  SpvDim2D = 1,
-  SpvDim3D = 2,
-  SpvDimCube = 3,
-  SpvDimRect = 4,
-  SpvDimBuffer = 5,
-  SpvDimSubpassData = 6,
-  SpvDimTileImageDataEXT = 4173,
-  SpvDimMax = 0x7fffffff,
-} SpvDim;
-
-typedef enum SpvSamplerAddressingMode_ {
-  SpvSamplerAddressingModeNone = 0,
-  SpvSamplerAddressingModeClampToEdge = 1,
-  SpvSamplerAddressingModeClamp = 2,
-  SpvSamplerAddressingModeRepeat = 3,
-  SpvSamplerAddressingModeRepeatMirrored = 4,
-  SpvSamplerAddressingModeMax = 0x7fffffff,
-} SpvSamplerAddressingMode;
-
-typedef enum SpvSamplerFilterMode_ {
-  SpvSamplerFilterModeNearest = 0,
-  SpvSamplerFilterModeLinear = 1,
-  SpvSamplerFilterModeMax = 0x7fffffff,
-} SpvSamplerFilterMode;
-
-typedef enum SpvImageFormat_ {
-  SpvImageFormatUnknown = 0,
-  SpvImageFormatRgba32f = 1,
-  SpvImageFormatRgba16f = 2,
-  SpvImageFormatR32f = 3,
-  SpvImageFormatRgba8 = 4,
-  SpvImageFormatRgba8Snorm = 5,
-  SpvImageFormatRg32f = 6,
-  SpvImageFormatRg16f = 7,
-  SpvImageFormatR11fG11fB10f = 8,
-  SpvImageFormatR16f = 9,
-  SpvImageFormatRgba16 = 10,
-  SpvImageFormatRgb10A2 = 11,
-  SpvImageFormatRg16 = 12,
-  SpvImageFormatRg8 = 13,
-  SpvImageFormatR16 = 14,
-  SpvImageFormatR8 = 15,
-  SpvImageFormatRgba16Snorm = 16,
-  SpvImageFormatRg16Snorm = 17,
-  SpvImageFormatRg8Snorm = 18,
-  SpvImageFormatR16Snorm = 19,
-  SpvImageFormatR8Snorm = 20,
-  SpvImageFormatRgba32i = 21,
-  SpvImageFormatRgba16i = 22,
-  SpvImageFormatRgba8i = 23,
-  SpvImageFormatR32i = 24,
-  SpvImageFormatRg32i = 25,
-  SpvImageFormatRg16i = 26,
-  SpvImageFormatRg8i = 27,
-  SpvImageFormatR16i = 28,
-  SpvImageFormatR8i = 29,
-  SpvImageFormatRgba32ui = 30,
-  SpvImageFormatRgba16ui = 31,
-  SpvImageFormatRgba8ui = 32,
-  SpvImageFormatR32ui = 33,
-  SpvImageFormatRgb10a2ui = 34,
-  SpvImageFormatRg32ui = 35,
-  SpvImageFormatRg16ui = 36,
-  SpvImageFormatRg8ui = 37,
-  SpvImageFormatR16ui = 38,
-  SpvImageFormatR8ui = 39,
-  SpvImageFormatR64ui = 40,
-  SpvImageFormatR64i = 41,
-  SpvImageFormatMax = 0x7fffffff,
-} SpvImageFormat;
-
-typedef enum SpvImageChannelOrder_ {
-  SpvImageChannelOrderR = 0,
-  SpvImageChannelOrderA = 1,
-  SpvImageChannelOrderRG = 2,
-  SpvImageChannelOrderRA = 3,
-  SpvImageChannelOrderRGB = 4,
-  SpvImageChannelOrderRGBA = 5,
-  SpvImageChannelOrderBGRA = 6,
-  SpvImageChannelOrderARGB = 7,
-  SpvImageChannelOrderIntensity = 8,
-  SpvImageChannelOrderLuminance = 9,
-  SpvImageChannelOrderRx = 10,
-  SpvImageChannelOrderRGx = 11,
-  SpvImageChannelOrderRGBx = 12,
-  SpvImageChannelOrderDepth = 13,
-  SpvImageChannelOrderDepthStencil = 14,
-  SpvImageChannelOrdersRGB = 15,
-  SpvImageChannelOrdersRGBx = 16,
-  SpvImageChannelOrdersRGBA = 17,
-  SpvImageChannelOrdersBGRA = 18,
-  SpvImageChannelOrderABGR = 19,
-  SpvImageChannelOrderMax = 0x7fffffff,
-} SpvImageChannelOrder;
-
-typedef enum SpvImageChannelDataType_ {
-  SpvImageChannelDataTypeSnormInt8 = 0,
-  SpvImageChannelDataTypeSnormInt16 = 1,
-  SpvImageChannelDataTypeUnormInt8 = 2,
-  SpvImageChannelDataTypeUnormInt16 = 3,
-  SpvImageChannelDataTypeUnormShort565 = 4,
-  SpvImageChannelDataTypeUnormShort555 = 5,
-  SpvImageChannelDataTypeUnormInt101010 = 6,
-  SpvImageChannelDataTypeSignedInt8 = 7,
-  SpvImageChannelDataTypeSignedInt16 = 8,
-  SpvImageChannelDataTypeSignedInt32 = 9,
-  SpvImageChannelDataTypeUnsignedInt8 = 10,
-  SpvImageChannelDataTypeUnsignedInt16 = 11,
-  SpvImageChannelDataTypeUnsignedInt32 = 12,
-  SpvImageChannelDataTypeHalfFloat = 13,
-  SpvImageChannelDataTypeFloat = 14,
-  SpvImageChannelDataTypeUnormInt24 = 15,
-  SpvImageChannelDataTypeUnormInt101010_2 = 16,
-  SpvImageChannelDataTypeUnsignedIntRaw10EXT = 19,
-  SpvImageChannelDataTypeUnsignedIntRaw12EXT = 20,
-  SpvImageChannelDataTypeMax = 0x7fffffff,
-} SpvImageChannelDataType;
-
-typedef enum SpvImageOperandsShift_ {
-  SpvImageOperandsBiasShift = 0,
-  SpvImageOperandsLodShift = 1,
-  SpvImageOperandsGradShift = 2,
-  SpvImageOperandsConstOffsetShift = 3,
-  SpvImageOperandsOffsetShift = 4,
-  SpvImageOperandsConstOffsetsShift = 5,
-  SpvImageOperandsSampleShift = 6,
-  SpvImageOperandsMinLodShift = 7,
-  SpvImageOperandsMakeTexelAvailableShift = 8,
-  SpvImageOperandsMakeTexelAvailableKHRShift = 8,
-  SpvImageOperandsMakeTexelVisibleShift = 9,
-  SpvImageOperandsMakeTexelVisibleKHRShift = 9,
-  SpvImageOperandsNonPrivateTexelShift = 10,
-  SpvImageOperandsNonPrivateTexelKHRShift = 10,
-  SpvImageOperandsVolatileTexelShift = 11,
-  SpvImageOperandsVolatileTexelKHRShift = 11,
-  SpvImageOperandsSignExtendShift = 12,
-  SpvImageOperandsZeroExtendShift = 13,
-  SpvImageOperandsNontemporalShift = 14,
-  SpvImageOperandsOffsetsShift = 16,
-  SpvImageOperandsMax = 0x7fffffff,
-} SpvImageOperandsShift;
-
-typedef enum SpvImageOperandsMask_ {
-  SpvImageOperandsMaskNone = 0,
-  SpvImageOperandsBiasMask = 0x00000001,
-  SpvImageOperandsLodMask = 0x00000002,
-  SpvImageOperandsGradMask = 0x00000004,
-  SpvImageOperandsConstOffsetMask = 0x00000008,
-  SpvImageOperandsOffsetMask = 0x00000010,
-  SpvImageOperandsConstOffsetsMask = 0x00000020,
-  SpvImageOperandsSampleMask = 0x00000040,
-  SpvImageOperandsMinLodMask = 0x00000080,
-  SpvImageOperandsMakeTexelAvailableMask = 0x00000100,
-  SpvImageOperandsMakeTexelAvailableKHRMask = 0x00000100,
-  SpvImageOperandsMakeTexelVisibleMask = 0x00000200,
-  SpvImageOperandsMakeTexelVisibleKHRMask = 0x00000200,
-  SpvImageOperandsNonPrivateTexelMask = 0x00000400,
-  SpvImageOperandsNonPrivateTexelKHRMask = 0x00000400,
-  SpvImageOperandsVolatileTexelMask = 0x00000800,
-  SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
-  SpvImageOperandsSignExtendMask = 0x00001000,
-  SpvImageOperandsZeroExtendMask = 0x00002000,
-  SpvImageOperandsNontemporalMask = 0x00004000,
-  SpvImageOperandsOffsetsMask = 0x00010000,
-} SpvImageOperandsMask;
-
-typedef enum SpvFPFastMathModeShift_ {
-  SpvFPFastMathModeNotNaNShift = 0,
-  SpvFPFastMathModeNotInfShift = 1,
-  SpvFPFastMathModeNSZShift = 2,
-  SpvFPFastMathModeAllowRecipShift = 3,
-  SpvFPFastMathModeFastShift = 4,
-  SpvFPFastMathModeAllowContractFastINTELShift = 16,
-  SpvFPFastMathModeAllowReassocINTELShift = 17,
-  SpvFPFastMathModeMax = 0x7fffffff,
-} SpvFPFastMathModeShift;
-
-typedef enum SpvFPFastMathModeMask_ {
-  SpvFPFastMathModeMaskNone = 0,
-  SpvFPFastMathModeNotNaNMask = 0x00000001,
-  SpvFPFastMathModeNotInfMask = 0x00000002,
-  SpvFPFastMathModeNSZMask = 0x00000004,
-  SpvFPFastMathModeAllowRecipMask = 0x00000008,
-  SpvFPFastMathModeFastMask = 0x00000010,
-  SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000,
-  SpvFPFastMathModeAllowReassocINTELMask = 0x00020000,
-} SpvFPFastMathModeMask;
-
-typedef enum SpvFPRoundingMode_ {
-  SpvFPRoundingModeRTE = 0,
-  SpvFPRoundingModeRTZ = 1,
-  SpvFPRoundingModeRTP = 2,
-  SpvFPRoundingModeRTN = 3,
-  SpvFPRoundingModeMax = 0x7fffffff,
-} SpvFPRoundingMode;
-
-typedef enum SpvLinkageType_ {
-  SpvLinkageTypeExport = 0,
-  SpvLinkageTypeImport = 1,
-  SpvLinkageTypeLinkOnceODR = 2,
-  SpvLinkageTypeMax = 0x7fffffff,
-} SpvLinkageType;
-
-typedef enum SpvAccessQualifier_ {
-  SpvAccessQualifierReadOnly = 0,
-  SpvAccessQualifierWriteOnly = 1,
-  SpvAccessQualifierReadWrite = 2,
-  SpvAccessQualifierMax = 0x7fffffff,
-} SpvAccessQualifier;
-
-typedef enum SpvFunctionParameterAttribute_ {
-  SpvFunctionParameterAttributeZext = 0,
-  SpvFunctionParameterAttributeSext = 1,
-  SpvFunctionParameterAttributeByVal = 2,
-  SpvFunctionParameterAttributeSret = 3,
-  SpvFunctionParameterAttributeNoAlias = 4,
-  SpvFunctionParameterAttributeNoCapture = 5,
-  SpvFunctionParameterAttributeNoWrite = 6,
-  SpvFunctionParameterAttributeNoReadWrite = 7,
-  SpvFunctionParameterAttributeRuntimeAlignedINTEL = 5940,
-  SpvFunctionParameterAttributeMax = 0x7fffffff,
-} SpvFunctionParameterAttribute;
-
-typedef enum SpvDecoration_ {
-  SpvDecorationRelaxedPrecision = 0,
-  SpvDecorationSpecId = 1,
-  SpvDecorationBlock = 2,
-  SpvDecorationBufferBlock = 3,
-  SpvDecorationRowMajor = 4,
-  SpvDecorationColMajor = 5,
-  SpvDecorationArrayStride = 6,
-  SpvDecorationMatrixStride = 7,
-  SpvDecorationGLSLShared = 8,
-  SpvDecorationGLSLPacked = 9,
-  SpvDecorationCPacked = 10,
-  SpvDecorationBuiltIn = 11,
-  SpvDecorationNoPerspective = 13,
-  SpvDecorationFlat = 14,
-  SpvDecorationPatch = 15,
-  SpvDecorationCentroid = 16,
-  SpvDecorationSample = 17,
-  SpvDecorationInvariant = 18,
-  SpvDecorationRestrict = 19,
-  SpvDecorationAliased = 20,
-  SpvDecorationVolatile = 21,
-  SpvDecorationConstant = 22,
-  SpvDecorationCoherent = 23,
-  SpvDecorationNonWritable = 24,
-  SpvDecorationNonReadable = 25,
-  SpvDecorationUniform = 26,
-  SpvDecorationUniformId = 27,
-  SpvDecorationSaturatedConversion = 28,
-  SpvDecorationStream = 29,
-  SpvDecorationLocation = 30,
-  SpvDecorationComponent = 31,
-  SpvDecorationIndex = 32,
-  SpvDecorationBinding = 33,
-  SpvDecorationDescriptorSet = 34,
-  SpvDecorationOffset = 35,
-  SpvDecorationXfbBuffer = 36,
-  SpvDecorationXfbStride = 37,
-  SpvDecorationFuncParamAttr = 38,
-  SpvDecorationFPRoundingMode = 39,
-  SpvDecorationFPFastMathMode = 40,
-  SpvDecorationLinkageAttributes = 41,
-  SpvDecorationNoContraction = 42,
-  SpvDecorationInputAttachmentIndex = 43,
-  SpvDecorationAlignment = 44,
-  SpvDecorationMaxByteOffset = 45,
-  SpvDecorationAlignmentId = 46,
-  SpvDecorationMaxByteOffsetId = 47,
-  SpvDecorationNoSignedWrap = 4469,
-  SpvDecorationNoUnsignedWrap = 4470,
-  SpvDecorationWeightTextureQCOM = 4487,
-  SpvDecorationBlockMatchTextureQCOM = 4488,
-  SpvDecorationExplicitInterpAMD = 4999,
-  SpvDecorationOverrideCoverageNV = 5248,
-  SpvDecorationPassthroughNV = 5250,
-  SpvDecorationViewportRelativeNV = 5252,
-  SpvDecorationSecondaryViewportRelativeNV = 5256,
-  SpvDecorationPerPrimitiveEXT = 5271,
-  SpvDecorationPerPrimitiveNV = 5271,
-  SpvDecorationPerViewNV = 5272,
-  SpvDecorationPerTaskNV = 5273,
-  SpvDecorationPerVertexKHR = 5285,
-  SpvDecorationPerVertexNV = 5285,
-  SpvDecorationNonUniform = 5300,
-  SpvDecorationNonUniformEXT = 5300,
-  SpvDecorationRestrictPointer = 5355,
-  SpvDecorationRestrictPointerEXT = 5355,
-  SpvDecorationAliasedPointer = 5356,
-  SpvDecorationAliasedPointerEXT = 5356,
-  SpvDecorationHitObjectShaderRecordBufferNV = 5386,
-  SpvDecorationBindlessSamplerNV = 5398,
-  SpvDecorationBindlessImageNV = 5399,
-  SpvDecorationBoundSamplerNV = 5400,
-  SpvDecorationBoundImageNV = 5401,
-  SpvDecorationSIMTCallINTEL = 5599,
-  SpvDecorationReferencedIndirectlyINTEL = 5602,
-  SpvDecorationClobberINTEL = 5607,
-  SpvDecorationSideEffectsINTEL = 5608,
-  SpvDecorationVectorComputeVariableINTEL = 5624,
-  SpvDecorationFuncParamIOKindINTEL = 5625,
-  SpvDecorationVectorComputeFunctionINTEL = 5626,
-  SpvDecorationStackCallINTEL = 5627,
-  SpvDecorationGlobalVariableOffsetINTEL = 5628,
-  SpvDecorationCounterBuffer = 5634,
-  SpvDecorationHlslCounterBufferGOOGLE = 5634,
-  SpvDecorationHlslSemanticGOOGLE = 5635,
-  SpvDecorationUserSemantic = 5635,
-  SpvDecorationUserTypeGOOGLE = 5636,
-  SpvDecorationFunctionRoundingModeINTEL = 5822,
-  SpvDecorationFunctionDenormModeINTEL = 5823,
-  SpvDecorationRegisterINTEL = 5825,
-  SpvDecorationMemoryINTEL = 5826,
-  SpvDecorationNumbanksINTEL = 5827,
-  SpvDecorationBankwidthINTEL = 5828,
-  SpvDecorationMaxPrivateCopiesINTEL = 5829,
-  SpvDecorationSinglepumpINTEL = 5830,
-  SpvDecorationDoublepumpINTEL = 5831,
-  SpvDecorationMaxReplicatesINTEL = 5832,
-  SpvDecorationSimpleDualPortINTEL = 5833,
-  SpvDecorationMergeINTEL = 5834,
-  SpvDecorationBankBitsINTEL = 5835,
-  SpvDecorationForcePow2DepthINTEL = 5836,
-  SpvDecorationBurstCoalesceINTEL = 5899,
-  SpvDecorationCacheSizeINTEL = 5900,
-  SpvDecorationDontStaticallyCoalesceINTEL = 5901,
-  SpvDecorationPrefetchINTEL = 5902,
-  SpvDecorationStallEnableINTEL = 5905,
-  SpvDecorationFuseLoopsInFunctionINTEL = 5907,
-  SpvDecorationMathOpDSPModeINTEL = 5909,
-  SpvDecorationAliasScopeINTEL = 5914,
-  SpvDecorationNoAliasINTEL = 5915,
-  SpvDecorationInitiationIntervalINTEL = 5917,
-  SpvDecorationMaxConcurrencyINTEL = 5918,
-  SpvDecorationPipelineEnableINTEL = 5919,
-  SpvDecorationBufferLocationINTEL = 5921,
-  SpvDecorationIOPipeStorageINTEL = 5944,
-  SpvDecorationFunctionFloatingPointModeINTEL = 6080,
-  SpvDecorationSingleElementVectorINTEL = 6085,
-  SpvDecorationVectorComputeCallableFunctionINTEL = 6087,
-  SpvDecorationMediaBlockIOINTEL = 6140,
-  SpvDecorationLatencyControlLabelINTEL = 6172,
-  SpvDecorationLatencyControlConstraintINTEL = 6173,
-  SpvDecorationConduitKernelArgumentINTEL = 6175,
-  SpvDecorationRegisterMapKernelArgumentINTEL = 6176,
-  SpvDecorationMMHostInterfaceAddressWidthINTEL = 6177,
-  SpvDecorationMMHostInterfaceDataWidthINTEL = 6178,
-  SpvDecorationMMHostInterfaceLatencyINTEL = 6179,
-  SpvDecorationMMHostInterfaceReadWriteModeINTEL = 6180,
-  SpvDecorationMMHostInterfaceMaxBurstINTEL = 6181,
-  SpvDecorationMMHostInterfaceWaitRequestINTEL = 6182,
-  SpvDecorationStableKernelArgumentINTEL = 6183,
-  SpvDecorationMax = 0x7fffffff,
-} SpvDecoration;
-
-typedef enum SpvBuiltIn_ {
-  SpvBuiltInPosition = 0,
-  SpvBuiltInPointSize = 1,
-  SpvBuiltInClipDistance = 3,
-  SpvBuiltInCullDistance = 4,
-  SpvBuiltInVertexId = 5,
-  SpvBuiltInInstanceId = 6,
-  SpvBuiltInPrimitiveId = 7,
-  SpvBuiltInInvocationId = 8,
-  SpvBuiltInLayer = 9,
-  SpvBuiltInViewportIndex = 10,
-  SpvBuiltInTessLevelOuter = 11,
-  SpvBuiltInTessLevelInner = 12,
-  SpvBuiltInTessCoord = 13,
-  SpvBuiltInPatchVertices = 14,
-  SpvBuiltInFragCoord = 15,
-  SpvBuiltInPointCoord = 16,
-  SpvBuiltInFrontFacing = 17,
-  SpvBuiltInSampleId = 18,
-  SpvBuiltInSamplePosition = 19,
-  SpvBuiltInSampleMask = 20,
-  SpvBuiltInFragDepth = 22,
-  SpvBuiltInHelperInvocation = 23,
-  SpvBuiltInNumWorkgroups = 24,
-  SpvBuiltInWorkgroupSize = 25,
-  SpvBuiltInWorkgroupId = 26,
-  SpvBuiltInLocalInvocationId = 27,
-  SpvBuiltInGlobalInvocationId = 28,
-  SpvBuiltInLocalInvocationIndex = 29,
-  SpvBuiltInWorkDim = 30,
-  SpvBuiltInGlobalSize = 31,
-  SpvBuiltInEnqueuedWorkgroupSize = 32,
-  SpvBuiltInGlobalOffset = 33,
-  SpvBuiltInGlobalLinearId = 34,
-  SpvBuiltInSubgroupSize = 36,
-  SpvBuiltInSubgroupMaxSize = 37,
-  SpvBuiltInNumSubgroups = 38,
-  SpvBuiltInNumEnqueuedSubgroups = 39,
-  SpvBuiltInSubgroupId = 40,
-  SpvBuiltInSubgroupLocalInvocationId = 41,
-  SpvBuiltInVertexIndex = 42,
-  SpvBuiltInInstanceIndex = 43,
-  SpvBuiltInCoreIDARM = 4160,
-  SpvBuiltInCoreCountARM = 4161,
-  SpvBuiltInCoreMaxIDARM = 4162,
-  SpvBuiltInWarpIDARM = 4163,
-  SpvBuiltInWarpMaxIDARM = 4164,
-  SpvBuiltInSubgroupEqMask = 4416,
-  SpvBuiltInSubgroupEqMaskKHR = 4416,
-  SpvBuiltInSubgroupGeMask = 4417,
-  SpvBuiltInSubgroupGeMaskKHR = 4417,
-  SpvBuiltInSubgroupGtMask = 4418,
-  SpvBuiltInSubgroupGtMaskKHR = 4418,
-  SpvBuiltInSubgroupLeMask = 4419,
-  SpvBuiltInSubgroupLeMaskKHR = 4419,
-  SpvBuiltInSubgroupLtMask = 4420,
-  SpvBuiltInSubgroupLtMaskKHR = 4420,
-  SpvBuiltInBaseVertex = 4424,
-  SpvBuiltInBaseInstance = 4425,
-  SpvBuiltInDrawIndex = 4426,
-  SpvBuiltInPrimitiveShadingRateKHR = 4432,
-  SpvBuiltInDeviceIndex = 4438,
-  SpvBuiltInViewIndex = 4440,
-  SpvBuiltInShadingRateKHR = 4444,
-  SpvBuiltInBaryCoordNoPerspAMD = 4992,
-  SpvBuiltInBaryCoordNoPerspCentroidAMD = 4993,
-  SpvBuiltInBaryCoordNoPerspSampleAMD = 4994,
-  SpvBuiltInBaryCoordSmoothAMD = 4995,
-  SpvBuiltInBaryCoordSmoothCentroidAMD = 4996,
-  SpvBuiltInBaryCoordSmoothSampleAMD = 4997,
-  SpvBuiltInBaryCoordPullModelAMD = 4998,
-  SpvBuiltInFragStencilRefEXT = 5014,
-  SpvBuiltInViewportMaskNV = 5253,
-  SpvBuiltInSecondaryPositionNV = 5257,
-  SpvBuiltInSecondaryViewportMaskNV = 5258,
-  SpvBuiltInPositionPerViewNV = 5261,
-  SpvBuiltInViewportMaskPerViewNV = 5262,
-  SpvBuiltInFullyCoveredEXT = 5264,
-  SpvBuiltInTaskCountNV = 5274,
-  SpvBuiltInPrimitiveCountNV = 5275,
-  SpvBuiltInPrimitiveIndicesNV = 5276,
-  SpvBuiltInClipDistancePerViewNV = 5277,
-  SpvBuiltInCullDistancePerViewNV = 5278,
-  SpvBuiltInLayerPerViewNV = 5279,
-  SpvBuiltInMeshViewCountNV = 5280,
-  SpvBuiltInMeshViewIndicesNV = 5281,
-  SpvBuiltInBaryCoordKHR = 5286,
-  SpvBuiltInBaryCoordNV = 5286,
-  SpvBuiltInBaryCoordNoPerspKHR = 5287,
-  SpvBuiltInBaryCoordNoPerspNV = 5287,
-  SpvBuiltInFragSizeEXT = 5292,
-  SpvBuiltInFragmentSizeNV = 5292,
-  SpvBuiltInFragInvocationCountEXT = 5293,
-  SpvBuiltInInvocationsPerPixelNV = 5293,
-  SpvBuiltInPrimitivePointIndicesEXT = 5294,
-  SpvBuiltInPrimitiveLineIndicesEXT = 5295,
-  SpvBuiltInPrimitiveTriangleIndicesEXT = 5296,
-  SpvBuiltInCullPrimitiveEXT = 5299,
-  SpvBuiltInLaunchIdKHR = 5319,
-  SpvBuiltInLaunchIdNV = 5319,
-  SpvBuiltInLaunchSizeKHR = 5320,
-  SpvBuiltInLaunchSizeNV = 5320,
-  SpvBuiltInWorldRayOriginKHR = 5321,
-  SpvBuiltInWorldRayOriginNV = 5321,
-  SpvBuiltInWorldRayDirectionKHR = 5322,
-  SpvBuiltInWorldRayDirectionNV = 5322,
-  SpvBuiltInObjectRayOriginKHR = 5323,
-  SpvBuiltInObjectRayOriginNV = 5323,
-  SpvBuiltInObjectRayDirectionKHR = 5324,
-  SpvBuiltInObjectRayDirectionNV = 5324,
-  SpvBuiltInRayTminKHR = 5325,
-  SpvBuiltInRayTminNV = 5325,
-  SpvBuiltInRayTmaxKHR = 5326,
-  SpvBuiltInRayTmaxNV = 5326,
-  SpvBuiltInInstanceCustomIndexKHR = 5327,
-  SpvBuiltInInstanceCustomIndexNV = 5327,
-  SpvBuiltInObjectToWorldKHR = 5330,
-  SpvBuiltInObjectToWorldNV = 5330,
-  SpvBuiltInWorldToObjectKHR = 5331,
-  SpvBuiltInWorldToObjectNV = 5331,
-  SpvBuiltInHitTNV = 5332,
-  SpvBuiltInHitKindKHR = 5333,
-  SpvBuiltInHitKindNV = 5333,
-  SpvBuiltInCurrentRayTimeNV = 5334,
-  SpvBuiltInHitTriangleVertexPositionsKHR = 5335,
-  SpvBuiltInIncomingRayFlagsKHR = 5351,
-  SpvBuiltInIncomingRayFlagsNV = 5351,
-  SpvBuiltInRayGeometryIndexKHR = 5352,
-  SpvBuiltInWarpsPerSMNV = 5374,
-  SpvBuiltInSMCountNV = 5375,
-  SpvBuiltInWarpIDNV = 5376,
-  SpvBuiltInSMIDNV = 5377,
-  SpvBuiltInCullMaskKHR = 6021,
-  SpvBuiltInMax = 0x7fffffff,
-} SpvBuiltIn;
-
-typedef enum SpvSelectionControlShift_ {
-  SpvSelectionControlFlattenShift = 0,
-  SpvSelectionControlDontFlattenShift = 1,
-  SpvSelectionControlMax = 0x7fffffff,
-} SpvSelectionControlShift;
-
-typedef enum SpvSelectionControlMask_ {
-  SpvSelectionControlMaskNone = 0,
-  SpvSelectionControlFlattenMask = 0x00000001,
-  SpvSelectionControlDontFlattenMask = 0x00000002,
-} SpvSelectionControlMask;
-
-typedef enum SpvLoopControlShift_ {
-  SpvLoopControlUnrollShift = 0,
-  SpvLoopControlDontUnrollShift = 1,
-  SpvLoopControlDependencyInfiniteShift = 2,
-  SpvLoopControlDependencyLengthShift = 3,
-  SpvLoopControlMinIterationsShift = 4,
-  SpvLoopControlMaxIterationsShift = 5,
-  SpvLoopControlIterationMultipleShift = 6,
-  SpvLoopControlPeelCountShift = 7,
-  SpvLoopControlPartialCountShift = 8,
-  SpvLoopControlInitiationIntervalINTELShift = 16,
-  SpvLoopControlMaxConcurrencyINTELShift = 17,
-  SpvLoopControlDependencyArrayINTELShift = 18,
-  SpvLoopControlPipelineEnableINTELShift = 19,
-  SpvLoopControlLoopCoalesceINTELShift = 20,
-  SpvLoopControlMaxInterleavingINTELShift = 21,
-  SpvLoopControlSpeculatedIterationsINTELShift = 22,
-  SpvLoopControlNoFusionINTELShift = 23,
-  SpvLoopControlLoopCountINTELShift = 24,
-  SpvLoopControlMaxReinvocationDelayINTELShift = 25,
-  SpvLoopControlMax = 0x7fffffff,
-} SpvLoopControlShift;
-
-typedef enum SpvLoopControlMask_ {
-  SpvLoopControlMaskNone = 0,
-  SpvLoopControlUnrollMask = 0x00000001,
-  SpvLoopControlDontUnrollMask = 0x00000002,
-  SpvLoopControlDependencyInfiniteMask = 0x00000004,
-  SpvLoopControlDependencyLengthMask = 0x00000008,
-  SpvLoopControlMinIterationsMask = 0x00000010,
-  SpvLoopControlMaxIterationsMask = 0x00000020,
-  SpvLoopControlIterationMultipleMask = 0x00000040,
-  SpvLoopControlPeelCountMask = 0x00000080,
-  SpvLoopControlPartialCountMask = 0x00000100,
-  SpvLoopControlInitiationIntervalINTELMask = 0x00010000,
-  SpvLoopControlMaxConcurrencyINTELMask = 0x00020000,
-  SpvLoopControlDependencyArrayINTELMask = 0x00040000,
-  SpvLoopControlPipelineEnableINTELMask = 0x00080000,
-  SpvLoopControlLoopCoalesceINTELMask = 0x00100000,
-  SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
-  SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
-  SpvLoopControlNoFusionINTELMask = 0x00800000,
-  SpvLoopControlLoopCountINTELMask = 0x01000000,
-  SpvLoopControlMaxReinvocationDelayINTELMask = 0x02000000,
-} SpvLoopControlMask;
-
-typedef enum SpvFunctionControlShift_ {
-  SpvFunctionControlInlineShift = 0,
-  SpvFunctionControlDontInlineShift = 1,
-  SpvFunctionControlPureShift = 2,
-  SpvFunctionControlConstShift = 3,
-  SpvFunctionControlOptNoneINTELShift = 16,
-  SpvFunctionControlMax = 0x7fffffff,
-} SpvFunctionControlShift;
-
-typedef enum SpvFunctionControlMask_ {
-  SpvFunctionControlMaskNone = 0,
-  SpvFunctionControlInlineMask = 0x00000001,
-  SpvFunctionControlDontInlineMask = 0x00000002,
-  SpvFunctionControlPureMask = 0x00000004,
-  SpvFunctionControlConstMask = 0x00000008,
-  SpvFunctionControlOptNoneINTELMask = 0x00010000,
-} SpvFunctionControlMask;
-
-typedef enum SpvMemorySemanticsShift_ {
-  SpvMemorySemanticsAcquireShift = 1,
-  SpvMemorySemanticsReleaseShift = 2,
-  SpvMemorySemanticsAcquireReleaseShift = 3,
-  SpvMemorySemanticsSequentiallyConsistentShift = 4,
-  SpvMemorySemanticsUniformMemoryShift = 6,
-  SpvMemorySemanticsSubgroupMemoryShift = 7,
-  SpvMemorySemanticsWorkgroupMemoryShift = 8,
-  SpvMemorySemanticsCrossWorkgroupMemoryShift = 9,
-  SpvMemorySemanticsAtomicCounterMemoryShift = 10,
-  SpvMemorySemanticsImageMemoryShift = 11,
-  SpvMemorySemanticsOutputMemoryShift = 12,
-  SpvMemorySemanticsOutputMemoryKHRShift = 12,
-  SpvMemorySemanticsMakeAvailableShift = 13,
-  SpvMemorySemanticsMakeAvailableKHRShift = 13,
-  SpvMemorySemanticsMakeVisibleShift = 14,
-  SpvMemorySemanticsMakeVisibleKHRShift = 14,
-  SpvMemorySemanticsVolatileShift = 15,
-  SpvMemorySemanticsMax = 0x7fffffff,
-} SpvMemorySemanticsShift;
-
-typedef enum SpvMemorySemanticsMask_ {
-  SpvMemorySemanticsMaskNone = 0,
-  SpvMemorySemanticsAcquireMask = 0x00000002,
-  SpvMemorySemanticsReleaseMask = 0x00000004,
-  SpvMemorySemanticsAcquireReleaseMask = 0x00000008,
-  SpvMemorySemanticsSequentiallyConsistentMask = 0x00000010,
-  SpvMemorySemanticsUniformMemoryMask = 0x00000040,
-  SpvMemorySemanticsSubgroupMemoryMask = 0x00000080,
-  SpvMemorySemanticsWorkgroupMemoryMask = 0x00000100,
-  SpvMemorySemanticsCrossWorkgroupMemoryMask = 0x00000200,
-  SpvMemorySemanticsAtomicCounterMemoryMask = 0x00000400,
-  SpvMemorySemanticsImageMemoryMask = 0x00000800,
-  SpvMemorySemanticsOutputMemoryMask = 0x00001000,
-  SpvMemorySemanticsOutputMemoryKHRMask = 0x00001000,
-  SpvMemorySemanticsMakeAvailableMask = 0x00002000,
-  SpvMemorySemanticsMakeAvailableKHRMask = 0x00002000,
-  SpvMemorySemanticsMakeVisibleMask = 0x00004000,
-  SpvMemorySemanticsMakeVisibleKHRMask = 0x00004000,
-  SpvMemorySemanticsVolatileMask = 0x00008000,
-} SpvMemorySemanticsMask;
-
-typedef enum SpvMemoryAccessShift_ {
-  SpvMemoryAccessVolatileShift = 0,
-  SpvMemoryAccessAlignedShift = 1,
-  SpvMemoryAccessNontemporalShift = 2,
-  SpvMemoryAccessMakePointerAvailableShift = 3,
-  SpvMemoryAccessMakePointerAvailableKHRShift = 3,
-  SpvMemoryAccessMakePointerVisibleShift = 4,
-  SpvMemoryAccessMakePointerVisibleKHRShift = 4,
-  SpvMemoryAccessNonPrivatePointerShift = 5,
-  SpvMemoryAccessNonPrivatePointerKHRShift = 5,
-  SpvMemoryAccessAliasScopeINTELMaskShift = 16,
-  SpvMemoryAccessNoAliasINTELMaskShift = 17,
-  SpvMemoryAccessMax = 0x7fffffff,
-} SpvMemoryAccessShift;
-
-typedef enum SpvMemoryAccessMask_ {
-  SpvMemoryAccessMaskNone = 0,
-  SpvMemoryAccessVolatileMask = 0x00000001,
-  SpvMemoryAccessAlignedMask = 0x00000002,
-  SpvMemoryAccessNontemporalMask = 0x00000004,
-  SpvMemoryAccessMakePointerAvailableMask = 0x00000008,
-  SpvMemoryAccessMakePointerAvailableKHRMask = 0x00000008,
-  SpvMemoryAccessMakePointerVisibleMask = 0x00000010,
-  SpvMemoryAccessMakePointerVisibleKHRMask = 0x00000010,
-  SpvMemoryAccessNonPrivatePointerMask = 0x00000020,
-  SpvMemoryAccessNonPrivatePointerKHRMask = 0x00000020,
-  SpvMemoryAccessAliasScopeINTELMaskMask = 0x00010000,
-  SpvMemoryAccessNoAliasINTELMaskMask = 0x00020000,
-} SpvMemoryAccessMask;
-
-typedef enum SpvScope_ {
-  SpvScopeCrossDevice = 0,
-  SpvScopeDevice = 1,
-  SpvScopeWorkgroup = 2,
-  SpvScopeSubgroup = 3,
-  SpvScopeInvocation = 4,
-  SpvScopeQueueFamily = 5,
-  SpvScopeQueueFamilyKHR = 5,
-  SpvScopeShaderCallKHR = 6,
-  SpvScopeMax = 0x7fffffff,
-} SpvScope;
-
-typedef enum SpvGroupOperation_ {
-  SpvGroupOperationReduce = 0,
-  SpvGroupOperationInclusiveScan = 1,
-  SpvGroupOperationExclusiveScan = 2,
-  SpvGroupOperationClusteredReduce = 3,
-  SpvGroupOperationPartitionedReduceNV = 6,
-  SpvGroupOperationPartitionedInclusiveScanNV = 7,
-  SpvGroupOperationPartitionedExclusiveScanNV = 8,
-  SpvGroupOperationMax = 0x7fffffff,
-} SpvGroupOperation;
-
-typedef enum SpvKernelEnqueueFlags_ {
-  SpvKernelEnqueueFlagsNoWait = 0,
-  SpvKernelEnqueueFlagsWaitKernel = 1,
-  SpvKernelEnqueueFlagsWaitWorkGroup = 2,
-  SpvKernelEnqueueFlagsMax = 0x7fffffff,
-} SpvKernelEnqueueFlags;
-
-typedef enum SpvKernelProfilingInfoShift_ {
-  SpvKernelProfilingInfoCmdExecTimeShift = 0,
-  SpvKernelProfilingInfoMax = 0x7fffffff,
-} SpvKernelProfilingInfoShift;
-
-typedef enum SpvKernelProfilingInfoMask_ {
-  SpvKernelProfilingInfoMaskNone = 0,
-  SpvKernelProfilingInfoCmdExecTimeMask = 0x00000001,
-} SpvKernelProfilingInfoMask;
-
-typedef enum SpvCapability_ {
-  SpvCapabilityMatrix = 0,
-  SpvCapabilityShader = 1,
-  SpvCapabilityGeometry = 2,
-  SpvCapabilityTessellation = 3,
-  SpvCapabilityAddresses = 4,
-  SpvCapabilityLinkage = 5,
-  SpvCapabilityKernel = 6,
-  SpvCapabilityVector16 = 7,
-  SpvCapabilityFloat16Buffer = 8,
-  SpvCapabilityFloat16 = 9,
-  SpvCapabilityFloat64 = 10,
-  SpvCapabilityInt64 = 11,
-  SpvCapabilityInt64Atomics = 12,
-  SpvCapabilityImageBasic = 13,
-  SpvCapabilityImageReadWrite = 14,
-  SpvCapabilityImageMipmap = 15,
-  SpvCapabilityPipes = 17,
-  SpvCapabilityGroups = 18,
-  SpvCapabilityDeviceEnqueue = 19,
-  SpvCapabilityLiteralSampler = 20,
-  SpvCapabilityAtomicStorage = 21,
-  SpvCapabilityInt16 = 22,
-  SpvCapabilityTessellationPointSize = 23,
-  SpvCapabilityGeometryPointSize = 24,
-  SpvCapabilityImageGatherExtended = 25,
-  SpvCapabilityStorageImageMultisample = 27,
-  SpvCapabilityUniformBufferArrayDynamicIndexing = 28,
-  SpvCapabilitySampledImageArrayDynamicIndexing = 29,
-  SpvCapabilityStorageBufferArrayDynamicIndexing = 30,
-  SpvCapabilityStorageImageArrayDynamicIndexing = 31,
-  SpvCapabilityClipDistance = 32,
-  SpvCapabilityCullDistance = 33,
-  SpvCapabilityImageCubeArray = 34,
-  SpvCapabilitySampleRateShading = 35,
-  SpvCapabilityImageRect = 36,
-  SpvCapabilitySampledRect = 37,
-  SpvCapabilityGenericPointer = 38,
-  SpvCapabilityInt8 = 39,
-  SpvCapabilityInputAttachment = 40,
-  SpvCapabilitySparseResidency = 41,
-  SpvCapabilityMinLod = 42,
-  SpvCapabilitySampled1D = 43,
-  SpvCapabilityImage1D = 44,
-  SpvCapabilitySampledCubeArray = 45,
-  SpvCapabilitySampledBuffer = 46,
-  SpvCapabilityImageBuffer = 47,
-  SpvCapabilityImageMSArray = 48,
-  SpvCapabilityStorageImageExtendedFormats = 49,
-  SpvCapabilityImageQuery = 50,
-  SpvCapabilityDerivativeControl = 51,
-  SpvCapabilityInterpolationFunction = 52,
-  SpvCapabilityTransformFeedback = 53,
-  SpvCapabilityGeometryStreams = 54,
-  SpvCapabilityStorageImageReadWithoutFormat = 55,
-  SpvCapabilityStorageImageWriteWithoutFormat = 56,
-  SpvCapabilityMultiViewport = 57,
-  SpvCapabilitySubgroupDispatch = 58,
-  SpvCapabilityNamedBarrier = 59,
-  SpvCapabilityPipeStorage = 60,
-  SpvCapabilityGroupNonUniform = 61,
-  SpvCapabilityGroupNonUniformVote = 62,
-  SpvCapabilityGroupNonUniformArithmetic = 63,
-  SpvCapabilityGroupNonUniformBallot = 64,
-  SpvCapabilityGroupNonUniformShuffle = 65,
-  SpvCapabilityGroupNonUniformShuffleRelative = 66,
-  SpvCapabilityGroupNonUniformClustered = 67,
-  SpvCapabilityGroupNonUniformQuad = 68,
-  SpvCapabilityShaderLayer = 69,
-  SpvCapabilityShaderViewportIndex = 70,
-  SpvCapabilityUniformDecoration = 71,
-  SpvCapabilityCoreBuiltinsARM = 4165,
-  SpvCapabilityTileImageColorReadAccessEXT = 4166,
-  SpvCapabilityTileImageDepthReadAccessEXT = 4167,
-  SpvCapabilityTileImageStencilReadAccessEXT = 4168,
-  SpvCapabilityFragmentShadingRateKHR = 4422,
-  SpvCapabilitySubgroupBallotKHR = 4423,
-  SpvCapabilityDrawParameters = 4427,
-  SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
-  SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
-  SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
-  SpvCapabilitySubgroupVoteKHR = 4431,
-  SpvCapabilityStorageBuffer16BitAccess = 4433,
-  SpvCapabilityStorageUniformBufferBlock16 = 4433,
-  SpvCapabilityStorageUniform16 = 4434,
-  SpvCapabilityUniformAndStorageBuffer16BitAccess = 4434,
-  SpvCapabilityStoragePushConstant16 = 4435,
-  SpvCapabilityStorageInputOutput16 = 4436,
-  SpvCapabilityDeviceGroup = 4437,
-  SpvCapabilityMultiView = 4439,
-  SpvCapabilityVariablePointersStorageBuffer = 4441,
-  SpvCapabilityVariablePointers = 4442,
-  SpvCapabilityAtomicStorageOps = 4445,
-  SpvCapabilitySampleMaskPostDepthCoverage = 4447,
-  SpvCapabilityStorageBuffer8BitAccess = 4448,
-  SpvCapabilityUniformAndStorageBuffer8BitAccess = 4449,
-  SpvCapabilityStoragePushConstant8 = 4450,
-  SpvCapabilityDenormPreserve = 4464,
-  SpvCapabilityDenormFlushToZero = 4465,
-  SpvCapabilitySignedZeroInfNanPreserve = 4466,
-  SpvCapabilityRoundingModeRTE = 4467,
-  SpvCapabilityRoundingModeRTZ = 4468,
-  SpvCapabilityRayQueryProvisionalKHR = 4471,
-  SpvCapabilityRayQueryKHR = 4472,
-  SpvCapabilityRayTraversalPrimitiveCullingKHR = 4478,
-  SpvCapabilityRayTracingKHR = 4479,
-  SpvCapabilityTextureSampleWeightedQCOM = 4484,
-  SpvCapabilityTextureBoxFilterQCOM = 4485,
-  SpvCapabilityTextureBlockMatchQCOM = 4486,
-  SpvCapabilityFloat16ImageAMD = 5008,
-  SpvCapabilityImageGatherBiasLodAMD = 5009,
-  SpvCapabilityFragmentMaskAMD = 5010,
-  SpvCapabilityStencilExportEXT = 5013,
-  SpvCapabilityImageReadWriteLodAMD = 5015,
-  SpvCapabilityInt64ImageEXT = 5016,
-  SpvCapabilityShaderClockKHR = 5055,
-  SpvCapabilitySampleMaskOverrideCoverageNV = 5249,
-  SpvCapabilityGeometryShaderPassthroughNV = 5251,
-  SpvCapabilityShaderViewportIndexLayerEXT = 5254,
-  SpvCapabilityShaderViewportIndexLayerNV = 5254,
-  SpvCapabilityShaderViewportMaskNV = 5255,
-  SpvCapabilityShaderStereoViewNV = 5259,
-  SpvCapabilityPerViewAttributesNV = 5260,
-  SpvCapabilityFragmentFullyCoveredEXT = 5265,
-  SpvCapabilityMeshShadingNV = 5266,
-  SpvCapabilityImageFootprintNV = 5282,
-  SpvCapabilityMeshShadingEXT = 5283,
-  SpvCapabilityFragmentBarycentricKHR = 5284,
-  SpvCapabilityFragmentBarycentricNV = 5284,
-  SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
-  SpvCapabilityFragmentDensityEXT = 5291,
-  SpvCapabilityShadingRateNV = 5291,
-  SpvCapabilityGroupNonUniformPartitionedNV = 5297,
-  SpvCapabilityShaderNonUniform = 5301,
-  SpvCapabilityShaderNonUniformEXT = 5301,
-  SpvCapabilityRuntimeDescriptorArray = 5302,
-  SpvCapabilityRuntimeDescriptorArrayEXT = 5302,
-  SpvCapabilityInputAttachmentArrayDynamicIndexing = 5303,
-  SpvCapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
-  SpvCapabilityUniformTexelBufferArrayDynamicIndexing = 5304,
-  SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
-  SpvCapabilityStorageTexelBufferArrayDynamicIndexing = 5305,
-  SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
-  SpvCapabilityUniformBufferArrayNonUniformIndexing = 5306,
-  SpvCapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
-  SpvCapabilitySampledImageArrayNonUniformIndexing = 5307,
-  SpvCapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
-  SpvCapabilityStorageBufferArrayNonUniformIndexing = 5308,
-  SpvCapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
-  SpvCapabilityStorageImageArrayNonUniformIndexing = 5309,
-  SpvCapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
-  SpvCapabilityInputAttachmentArrayNonUniformIndexing = 5310,
-  SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
-  SpvCapabilityUniformTexelBufferArrayNonUniformIndexing = 5311,
-  SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
-  SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
-  SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
-  SpvCapabilityRayTracingPositionFetchKHR = 5336,
-  SpvCapabilityRayTracingNV = 5340,
-  SpvCapabilityRayTracingMotionBlurNV = 5341,
-  SpvCapabilityVulkanMemoryModel = 5345,
-  SpvCapabilityVulkanMemoryModelKHR = 5345,
-  SpvCapabilityVulkanMemoryModelDeviceScope = 5346,
-  SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
-  SpvCapabilityPhysicalStorageBufferAddresses = 5347,
-  SpvCapabilityPhysicalStorageBufferAddressesEXT = 5347,
-  SpvCapabilityComputeDerivativeGroupLinearNV = 5350,
-  SpvCapabilityRayTracingProvisionalKHR = 5353,
-  SpvCapabilityCooperativeMatrixNV = 5357,
-  SpvCapabilityFragmentShaderSampleInterlockEXT = 5363,
-  SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372,
-  SpvCapabilityShaderSMBuiltinsNV = 5373,
-  SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
-  SpvCapabilityDemoteToHelperInvocation = 5379,
-  SpvCapabilityDemoteToHelperInvocationEXT = 5379,
-  SpvCapabilityRayTracingOpacityMicromapEXT = 5381,
-  SpvCapabilityShaderInvocationReorderNV = 5383,
-  SpvCapabilityBindlessTextureNV = 5390,
-  SpvCapabilityRayQueryPositionFetchKHR = 5391,
-  SpvCapabilitySubgroupShuffleINTEL = 5568,
-  SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
-  SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
-  SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579,
-  SpvCapabilityRoundToInfinityINTEL = 5582,
-  SpvCapabilityFloatingPointModeINTEL = 5583,
-  SpvCapabilityIntegerFunctions2INTEL = 5584,
-  SpvCapabilityFunctionPointersINTEL = 5603,
-  SpvCapabilityIndirectReferencesINTEL = 5604,
-  SpvCapabilityAsmINTEL = 5606,
-  SpvCapabilityAtomicFloat32MinMaxEXT = 5612,
-  SpvCapabilityAtomicFloat64MinMaxEXT = 5613,
-  SpvCapabilityAtomicFloat16MinMaxEXT = 5616,
-  SpvCapabilityVectorComputeINTEL = 5617,
-  SpvCapabilityVectorAnyINTEL = 5619,
-  SpvCapabilityExpectAssumeKHR = 5629,
-  SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696,
-  SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
-  SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
-  SpvCapabilityVariableLengthArrayINTEL = 5817,
-  SpvCapabilityFunctionFloatControlINTEL = 5821,
-  SpvCapabilityFPGAMemoryAttributesINTEL = 5824,
-  SpvCapabilityFPFastMathModeINTEL = 5837,
-  SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844,
-  SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
-  SpvCapabilityUnstructuredLoopControlsINTEL = 5886,
-  SpvCapabilityFPGALoopControlsINTEL = 5888,
-  SpvCapabilityKernelAttributesINTEL = 5892,
-  SpvCapabilityFPGAKernelAttributesINTEL = 5897,
-  SpvCapabilityFPGAMemoryAccessesINTEL = 5898,
-  SpvCapabilityFPGAClusterAttributesINTEL = 5904,
-  SpvCapabilityLoopFuseINTEL = 5906,
-  SpvCapabilityFPGADSPControlINTEL = 5908,
-  SpvCapabilityMemoryAccessAliasingINTEL = 5910,
-  SpvCapabilityFPGAInvocationPipeliningAttributesINTEL = 5916,
-  SpvCapabilityFPGABufferLocationINTEL = 5920,
-  SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922,
-  SpvCapabilityUSMStorageClassesINTEL = 5935,
-  SpvCapabilityRuntimeAlignedAttributeINTEL = 5939,
-  SpvCapabilityIOPipesINTEL = 5943,
-  SpvCapabilityBlockingPipesINTEL = 5945,
-  SpvCapabilityFPGARegINTEL = 5948,
-  SpvCapabilityDotProductInputAll = 6016,
-  SpvCapabilityDotProductInputAllKHR = 6016,
-  SpvCapabilityDotProductInput4x8Bit = 6017,
-  SpvCapabilityDotProductInput4x8BitKHR = 6017,
-  SpvCapabilityDotProductInput4x8BitPacked = 6018,
-  SpvCapabilityDotProductInput4x8BitPackedKHR = 6018,
-  SpvCapabilityDotProduct = 6019,
-  SpvCapabilityDotProductKHR = 6019,
-  SpvCapabilityRayCullMaskKHR = 6020,
-  SpvCapabilityCooperativeMatrixKHR = 6022,
-  SpvCapabilityBitInstructions = 6025,
-  SpvCapabilityGroupNonUniformRotateKHR = 6026,
-  SpvCapabilityAtomicFloat32AddEXT = 6033,
-  SpvCapabilityAtomicFloat64AddEXT = 6034,
-  SpvCapabilityLongConstantCompositeINTEL = 6089,
-  SpvCapabilityOptNoneINTEL = 6094,
-  SpvCapabilityAtomicFloat16AddEXT = 6095,
-  SpvCapabilityDebugInfoModuleINTEL = 6114,
-  SpvCapabilityBFloat16ConversionINTEL = 6115,
-  SpvCapabilitySplitBarrierINTEL = 6141,
-  SpvCapabilityFPGAKernelAttributesv2INTEL = 6161,
-  SpvCapabilityFPGALatencyControlINTEL = 6171,
-  SpvCapabilityFPGAArgumentInterfacesINTEL = 6174,
-  SpvCapabilityGroupUniformArithmeticKHR = 6400,
-  SpvCapabilityMax = 0x7fffffff,
-} SpvCapability;
-
-typedef enum SpvRayFlagsShift_ {
-  SpvRayFlagsOpaqueKHRShift = 0,
-  SpvRayFlagsNoOpaqueKHRShift = 1,
-  SpvRayFlagsTerminateOnFirstHitKHRShift = 2,
-  SpvRayFlagsSkipClosestHitShaderKHRShift = 3,
-  SpvRayFlagsCullBackFacingTrianglesKHRShift = 4,
-  SpvRayFlagsCullFrontFacingTrianglesKHRShift = 5,
-  SpvRayFlagsCullOpaqueKHRShift = 6,
-  SpvRayFlagsCullNoOpaqueKHRShift = 7,
-  SpvRayFlagsSkipTrianglesKHRShift = 8,
-  SpvRayFlagsSkipAABBsKHRShift = 9,
-  SpvRayFlagsForceOpacityMicromap2StateEXTShift = 10,
-  SpvRayFlagsMax = 0x7fffffff,
-} SpvRayFlagsShift;
-
-typedef enum SpvRayFlagsMask_ {
-  SpvRayFlagsMaskNone = 0,
-  SpvRayFlagsOpaqueKHRMask = 0x00000001,
-  SpvRayFlagsNoOpaqueKHRMask = 0x00000002,
-  SpvRayFlagsTerminateOnFirstHitKHRMask = 0x00000004,
-  SpvRayFlagsSkipClosestHitShaderKHRMask = 0x00000008,
-  SpvRayFlagsCullBackFacingTrianglesKHRMask = 0x00000010,
-  SpvRayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020,
-  SpvRayFlagsCullOpaqueKHRMask = 0x00000040,
-  SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080,
-  SpvRayFlagsSkipTrianglesKHRMask = 0x00000100,
-  SpvRayFlagsSkipAABBsKHRMask = 0x00000200,
-  SpvRayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400,
-} SpvRayFlagsMask;
-
-typedef enum SpvRayQueryIntersection_ {
-  SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR = 0,
-  SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR = 1,
-  SpvRayQueryIntersectionMax = 0x7fffffff,
-} SpvRayQueryIntersection;
-
-typedef enum SpvRayQueryCommittedIntersectionType_ {
-  SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0,
-  SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR =
-      1,
-  SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR =
-      2,
-  SpvRayQueryCommittedIntersectionTypeMax = 0x7fffffff,
-} SpvRayQueryCommittedIntersectionType;
-
-typedef enum SpvRayQueryCandidateIntersectionType_ {
-  SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR =
-      0,
-  SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1,
-  SpvRayQueryCandidateIntersectionTypeMax = 0x7fffffff,
-} SpvRayQueryCandidateIntersectionType;
-
-typedef enum SpvFragmentShadingRateShift_ {
-  SpvFragmentShadingRateVertical2PixelsShift = 0,
-  SpvFragmentShadingRateVertical4PixelsShift = 1,
-  SpvFragmentShadingRateHorizontal2PixelsShift = 2,
-  SpvFragmentShadingRateHorizontal4PixelsShift = 3,
-  SpvFragmentShadingRateMax = 0x7fffffff,
-} SpvFragmentShadingRateShift;
-
-typedef enum SpvFragmentShadingRateMask_ {
-  SpvFragmentShadingRateMaskNone = 0,
-  SpvFragmentShadingRateVertical2PixelsMask = 0x00000001,
-  SpvFragmentShadingRateVertical4PixelsMask = 0x00000002,
-  SpvFragmentShadingRateHorizontal2PixelsMask = 0x00000004,
-  SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008,
-} SpvFragmentShadingRateMask;
-
-typedef enum SpvFPDenormMode_ {
-  SpvFPDenormModePreserve = 0,
-  SpvFPDenormModeFlushToZero = 1,
-  SpvFPDenormModeMax = 0x7fffffff,
-} SpvFPDenormMode;
-
-typedef enum SpvFPOperationMode_ {
-  SpvFPOperationModeIEEE = 0,
-  SpvFPOperationModeALT = 1,
-  SpvFPOperationModeMax = 0x7fffffff,
-} SpvFPOperationMode;
-
-typedef enum SpvQuantizationModes_ {
-  SpvQuantizationModesTRN = 0,
-  SpvQuantizationModesTRN_ZERO = 1,
-  SpvQuantizationModesRND = 2,
-  SpvQuantizationModesRND_ZERO = 3,
-  SpvQuantizationModesRND_INF = 4,
-  SpvQuantizationModesRND_MIN_INF = 5,
-  SpvQuantizationModesRND_CONV = 6,
-  SpvQuantizationModesRND_CONV_ODD = 7,
-  SpvQuantizationModesMax = 0x7fffffff,
-} SpvQuantizationModes;
-
-typedef enum SpvOverflowModes_ {
-  SpvOverflowModesWRAP = 0,
-  SpvOverflowModesSAT = 1,
-  SpvOverflowModesSAT_ZERO = 2,
-  SpvOverflowModesSAT_SYM = 3,
-  SpvOverflowModesMax = 0x7fffffff,
-} SpvOverflowModes;
-
-typedef enum SpvPackedVectorFormat_ {
-  SpvPackedVectorFormatPackedVectorFormat4x8Bit = 0,
-  SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
-  SpvPackedVectorFormatMax = 0x7fffffff,
-} SpvPackedVectorFormat;
-
-typedef enum SpvCooperativeMatrixOperandsShift_ {
-  SpvCooperativeMatrixOperandsMatrixASignedComponentsShift = 0,
-  SpvCooperativeMatrixOperandsMatrixBSignedComponentsShift = 1,
-  SpvCooperativeMatrixOperandsMatrixCSignedComponentsShift = 2,
-  SpvCooperativeMatrixOperandsMatrixResultSignedComponentsShift = 3,
-  SpvCooperativeMatrixOperandsSaturatingAccumulationShift = 4,
-  SpvCooperativeMatrixOperandsMax = 0x7fffffff,
-} SpvCooperativeMatrixOperandsShift;
-
-typedef enum SpvCooperativeMatrixOperandsMask_ {
-  SpvCooperativeMatrixOperandsMaskNone = 0,
-  SpvCooperativeMatrixOperandsMatrixASignedComponentsMask = 0x00000001,
-  SpvCooperativeMatrixOperandsMatrixBSignedComponentsMask = 0x00000002,
-  SpvCooperativeMatrixOperandsMatrixCSignedComponentsMask = 0x00000004,
-  SpvCooperativeMatrixOperandsMatrixResultSignedComponentsMask = 0x00000008,
-  SpvCooperativeMatrixOperandsSaturatingAccumulationMask = 0x00000010,
-} SpvCooperativeMatrixOperandsMask;
-
-typedef enum SpvCooperativeMatrixLayout_ {
-  SpvCooperativeMatrixLayoutRowMajorKHR = 0,
-  SpvCooperativeMatrixLayoutColumnMajorKHR = 1,
-  SpvCooperativeMatrixLayoutMax = 0x7fffffff,
-} SpvCooperativeMatrixLayout;
-
-typedef enum SpvCooperativeMatrixUse_ {
-  SpvCooperativeMatrixUseMatrixAKHR = 0,
-  SpvCooperativeMatrixUseMatrixBKHR = 1,
-  SpvCooperativeMatrixUseMatrixAccumulatorKHR = 2,
-  SpvCooperativeMatrixUseMax = 0x7fffffff,
-} SpvCooperativeMatrixUse;
-
-typedef enum SpvOp_ {
-  SpvOpNop = 0,
-  SpvOpUndef = 1,
-  SpvOpSourceContinued = 2,
-  SpvOpSource = 3,
-  SpvOpSourceExtension = 4,
-  SpvOpName = 5,
-  SpvOpMemberName = 6,
-  SpvOpString = 7,
-  SpvOpLine = 8,
-  SpvOpExtension = 10,
-  SpvOpExtInstImport = 11,
-  SpvOpExtInst = 12,
-  SpvOpMemoryModel = 14,
-  SpvOpEntryPoint = 15,
-  SpvOpExecutionMode = 16,
-  SpvOpCapability = 17,
-  SpvOpTypeVoid = 19,
-  SpvOpTypeBool = 20,
-  SpvOpTypeInt = 21,
-  SpvOpTypeFloat = 22,
-  SpvOpTypeVector = 23,
-  SpvOpTypeMatrix = 24,
-  SpvOpTypeImage = 25,
-  SpvOpTypeSampler = 26,
-  SpvOpTypeSampledImage = 27,
-  SpvOpTypeArray = 28,
-  SpvOpTypeRuntimeArray = 29,
-  SpvOpTypeStruct = 30,
-  SpvOpTypeOpaque = 31,
-  SpvOpTypePointer = 32,
-  SpvOpTypeFunction = 33,
-  SpvOpTypeEvent = 34,
-  SpvOpTypeDeviceEvent = 35,
-  SpvOpTypeReserveId = 36,
-  SpvOpTypeQueue = 37,
-  SpvOpTypePipe = 38,
-  SpvOpTypeForwardPointer = 39,
-  SpvOpConstantTrue = 41,
-  SpvOpConstantFalse = 42,
-  SpvOpConstant = 43,
-  SpvOpConstantComposite = 44,
-  SpvOpConstantSampler = 45,
-  SpvOpConstantNull = 46,
-  SpvOpSpecConstantTrue = 48,
-  SpvOpSpecConstantFalse = 49,
-  SpvOpSpecConstant = 50,
-  SpvOpSpecConstantComposite = 51,
-  SpvOpSpecConstantOp = 52,
-  SpvOpFunction = 54,
-  SpvOpFunctionParameter = 55,
-  SpvOpFunctionEnd = 56,
-  SpvOpFunctionCall = 57,
-  SpvOpVariable = 59,
-  SpvOpImageTexelPointer = 60,
-  SpvOpLoad = 61,
-  SpvOpStore = 62,
-  SpvOpCopyMemory = 63,
-  SpvOpCopyMemorySized = 64,
-  SpvOpAccessChain = 65,
-  SpvOpInBoundsAccessChain = 66,
-  SpvOpPtrAccessChain = 67,
-  SpvOpArrayLength = 68,
-  SpvOpGenericPtrMemSemantics = 69,
-  SpvOpInBoundsPtrAccessChain = 70,
-  SpvOpDecorate = 71,
-  SpvOpMemberDecorate = 72,
-  SpvOpDecorationGroup = 73,
-  SpvOpGroupDecorate = 74,
-  SpvOpGroupMemberDecorate = 75,
-  SpvOpVectorExtractDynamic = 77,
-  SpvOpVectorInsertDynamic = 78,
-  SpvOpVectorShuffle = 79,
-  SpvOpCompositeConstruct = 80,
-  SpvOpCompositeExtract = 81,
-  SpvOpCompositeInsert = 82,
-  SpvOpCopyObject = 83,
-  SpvOpTranspose = 84,
-  SpvOpSampledImage = 86,
-  SpvOpImageSampleImplicitLod = 87,
-  SpvOpImageSampleExplicitLod = 88,
-  SpvOpImageSampleDrefImplicitLod = 89,
-  SpvOpImageSampleDrefExplicitLod = 90,
-  SpvOpImageSampleProjImplicitLod = 91,
-  SpvOpImageSampleProjExplicitLod = 92,
-  SpvOpImageSampleProjDrefImplicitLod = 93,
-  SpvOpImageSampleProjDrefExplicitLod = 94,
-  SpvOpImageFetch = 95,
-  SpvOpImageGather = 96,
-  SpvOpImageDrefGather = 97,
-  SpvOpImageRead = 98,
-  SpvOpImageWrite = 99,
-  SpvOpImage = 100,
-  SpvOpImageQueryFormat = 101,
-  SpvOpImageQueryOrder = 102,
-  SpvOpImageQuerySizeLod = 103,
-  SpvOpImageQuerySize = 104,
-  SpvOpImageQueryLod = 105,
-  SpvOpImageQueryLevels = 106,
-  SpvOpImageQuerySamples = 107,
-  SpvOpConvertFToU = 109,
-  SpvOpConvertFToS = 110,
-  SpvOpConvertSToF = 111,
-  SpvOpConvertUToF = 112,
-  SpvOpUConvert = 113,
-  SpvOpSConvert = 114,
-  SpvOpFConvert = 115,
-  SpvOpQuantizeToF16 = 116,
-  SpvOpConvertPtrToU = 117,
-  SpvOpSatConvertSToU = 118,
-  SpvOpSatConvertUToS = 119,
-  SpvOpConvertUToPtr = 120,
-  SpvOpPtrCastToGeneric = 121,
-  SpvOpGenericCastToPtr = 122,
-  SpvOpGenericCastToPtrExplicit = 123,
-  SpvOpBitcast = 124,
-  SpvOpSNegate = 126,
-  SpvOpFNegate = 127,
-  SpvOpIAdd = 128,
-  SpvOpFAdd = 129,
-  SpvOpISub = 130,
-  SpvOpFSub = 131,
-  SpvOpIMul = 132,
-  SpvOpFMul = 133,
-  SpvOpUDiv = 134,
-  SpvOpSDiv = 135,
-  SpvOpFDiv = 136,
-  SpvOpUMod = 137,
-  SpvOpSRem = 138,
-  SpvOpSMod = 139,
-  SpvOpFRem = 140,
-  SpvOpFMod = 141,
-  SpvOpVectorTimesScalar = 142,
-  SpvOpMatrixTimesScalar = 143,
-  SpvOpVectorTimesMatrix = 144,
-  SpvOpMatrixTimesVector = 145,
-  SpvOpMatrixTimesMatrix = 146,
-  SpvOpOuterProduct = 147,
-  SpvOpDot = 148,
-  SpvOpIAddCarry = 149,
-  SpvOpISubBorrow = 150,
-  SpvOpUMulExtended = 151,
-  SpvOpSMulExtended = 152,
-  SpvOpAny = 154,
-  SpvOpAll = 155,
-  SpvOpIsNan = 156,
-  SpvOpIsInf = 157,
-  SpvOpIsFinite = 158,
-  SpvOpIsNormal = 159,
-  SpvOpSignBitSet = 160,
-  SpvOpLessOrGreater = 161,
-  SpvOpOrdered = 162,
-  SpvOpUnordered = 163,
-  SpvOpLogicalEqual = 164,
-  SpvOpLogicalNotEqual = 165,
-  SpvOpLogicalOr = 166,
-  SpvOpLogicalAnd = 167,
-  SpvOpLogicalNot = 168,
-  SpvOpSelect = 169,
-  SpvOpIEqual = 170,
-  SpvOpINotEqual = 171,
-  SpvOpUGreaterThan = 172,
-  SpvOpSGreaterThan = 173,
-  SpvOpUGreaterThanEqual = 174,
-  SpvOpSGreaterThanEqual = 175,
-  SpvOpULessThan = 176,
-  SpvOpSLessThan = 177,
-  SpvOpULessThanEqual = 178,
-  SpvOpSLessThanEqual = 179,
-  SpvOpFOrdEqual = 180,
-  SpvOpFUnordEqual = 181,
-  SpvOpFOrdNotEqual = 182,
-  SpvOpFUnordNotEqual = 183,
-  SpvOpFOrdLessThan = 184,
-  SpvOpFUnordLessThan = 185,
-  SpvOpFOrdGreaterThan = 186,
-  SpvOpFUnordGreaterThan = 187,
-  SpvOpFOrdLessThanEqual = 188,
-  SpvOpFUnordLessThanEqual = 189,
-  SpvOpFOrdGreaterThanEqual = 190,
-  SpvOpFUnordGreaterThanEqual = 191,
-  SpvOpShiftRightLogical = 194,
-  SpvOpShiftRightArithmetic = 195,
-  SpvOpShiftLeftLogical = 196,
-  SpvOpBitwiseOr = 197,
-  SpvOpBitwiseXor = 198,
-  SpvOpBitwiseAnd = 199,
-  SpvOpNot = 200,
-  SpvOpBitFieldInsert = 201,
-  SpvOpBitFieldSExtract = 202,
-  SpvOpBitFieldUExtract = 203,
-  SpvOpBitReverse = 204,
-  SpvOpBitCount = 205,
-  SpvOpDPdx = 207,
-  SpvOpDPdy = 208,
-  SpvOpFwidth = 209,
-  SpvOpDPdxFine = 210,
-  SpvOpDPdyFine = 211,
-  SpvOpFwidthFine = 212,
-  SpvOpDPdxCoarse = 213,
-  SpvOpDPdyCoarse = 214,
-  SpvOpFwidthCoarse = 215,
-  SpvOpEmitVertex = 218,
-  SpvOpEndPrimitive = 219,
-  SpvOpEmitStreamVertex = 220,
-  SpvOpEndStreamPrimitive = 221,
-  SpvOpControlBarrier = 224,
-  SpvOpMemoryBarrier = 225,
-  SpvOpAtomicLoad = 227,
-  SpvOpAtomicStore = 228,
-  SpvOpAtomicExchange = 229,
-  SpvOpAtomicCompareExchange = 230,
-  SpvOpAtomicCompareExchangeWeak = 231,
-  SpvOpAtomicIIncrement = 232,
-  SpvOpAtomicIDecrement = 233,
-  SpvOpAtomicIAdd = 234,
-  SpvOpAtomicISub = 235,
-  SpvOpAtomicSMin = 236,
-  SpvOpAtomicUMin = 237,
-  SpvOpAtomicSMax = 238,
-  SpvOpAtomicUMax = 239,
-  SpvOpAtomicAnd = 240,
-  SpvOpAtomicOr = 241,
-  SpvOpAtomicXor = 242,
-  SpvOpPhi = 245,
-  SpvOpLoopMerge = 246,
-  SpvOpSelectionMerge = 247,
-  SpvOpLabel = 248,
-  SpvOpBranch = 249,
-  SpvOpBranchConditional = 250,
-  SpvOpSwitch = 251,
-  SpvOpKill = 252,
-  SpvOpReturn = 253,
-  SpvOpReturnValue = 254,
-  SpvOpUnreachable = 255,
-  SpvOpLifetimeStart = 256,
-  SpvOpLifetimeStop = 257,
-  SpvOpGroupAsyncCopy = 259,
-  SpvOpGroupWaitEvents = 260,
-  SpvOpGroupAll = 261,
-  SpvOpGroupAny = 262,
-  SpvOpGroupBroadcast = 263,
-  SpvOpGroupIAdd = 264,
-  SpvOpGroupFAdd = 265,
-  SpvOpGroupFMin = 266,
-  SpvOpGroupUMin = 267,
-  SpvOpGroupSMin = 268,
-  SpvOpGroupFMax = 269,
-  SpvOpGroupUMax = 270,
-  SpvOpGroupSMax = 271,
-  SpvOpReadPipe = 274,
-  SpvOpWritePipe = 275,
-  SpvOpReservedReadPipe = 276,
-  SpvOpReservedWritePipe = 277,
-  SpvOpReserveReadPipePackets = 278,
-  SpvOpReserveWritePipePackets = 279,
-  SpvOpCommitReadPipe = 280,
-  SpvOpCommitWritePipe = 281,
-  SpvOpIsValidReserveId = 282,
-  SpvOpGetNumPipePackets = 283,
-  SpvOpGetMaxPipePackets = 284,
-  SpvOpGroupReserveReadPipePackets = 285,
-  SpvOpGroupReserveWritePipePackets = 286,
-  SpvOpGroupCommitReadPipe = 287,
-  SpvOpGroupCommitWritePipe = 288,
-  SpvOpEnqueueMarker = 291,
-  SpvOpEnqueueKernel = 292,
-  SpvOpGetKernelNDrangeSubGroupCount = 293,
-  SpvOpGetKernelNDrangeMaxSubGroupSize = 294,
-  SpvOpGetKernelWorkGroupSize = 295,
-  SpvOpGetKernelPreferredWorkGroupSizeMultiple = 296,
-  SpvOpRetainEvent = 297,
-  SpvOpReleaseEvent = 298,
-  SpvOpCreateUserEvent = 299,
-  SpvOpIsValidEvent = 300,
-  SpvOpSetUserEventStatus = 301,
-  SpvOpCaptureEventProfilingInfo = 302,
-  SpvOpGetDefaultQueue = 303,
-  SpvOpBuildNDRange = 304,
-  SpvOpImageSparseSampleImplicitLod = 305,
-  SpvOpImageSparseSampleExplicitLod = 306,
-  SpvOpImageSparseSampleDrefImplicitLod = 307,
-  SpvOpImageSparseSampleDrefExplicitLod = 308,
-  SpvOpImageSparseSampleProjImplicitLod = 309,
-  SpvOpImageSparseSampleProjExplicitLod = 310,
-  SpvOpImageSparseSampleProjDrefImplicitLod = 311,
-  SpvOpImageSparseSampleProjDrefExplicitLod = 312,
-  SpvOpImageSparseFetch = 313,
-  SpvOpImageSparseGather = 314,
-  SpvOpImageSparseDrefGather = 315,
-  SpvOpImageSparseTexelsResident = 316,
-  SpvOpNoLine = 317,
-  SpvOpAtomicFlagTestAndSet = 318,
-  SpvOpAtomicFlagClear = 319,
-  SpvOpImageSparseRead = 320,
-  SpvOpSizeOf = 321,
-  SpvOpTypePipeStorage = 322,
-  SpvOpConstantPipeStorage = 323,
-  SpvOpCreatePipeFromPipeStorage = 324,
-  SpvOpGetKernelLocalSizeForSubgroupCount = 325,
-  SpvOpGetKernelMaxNumSubgroups = 326,
-  SpvOpTypeNamedBarrier = 327,
-  SpvOpNamedBarrierInitialize = 328,
-  SpvOpMemoryNamedBarrier = 329,
-  SpvOpModuleProcessed = 330,
-  SpvOpExecutionModeId = 331,
-  SpvOpDecorateId = 332,
-  SpvOpGroupNonUniformElect = 333,
-  SpvOpGroupNonUniformAll = 334,
-  SpvOpGroupNonUniformAny = 335,
-  SpvOpGroupNonUniformAllEqual = 336,
-  SpvOpGroupNonUniformBroadcast = 337,
-  SpvOpGroupNonUniformBroadcastFirst = 338,
-  SpvOpGroupNonUniformBallot = 339,
-  SpvOpGroupNonUniformInverseBallot = 340,
-  SpvOpGroupNonUniformBallotBitExtract = 341,
-  SpvOpGroupNonUniformBallotBitCount = 342,
-  SpvOpGroupNonUniformBallotFindLSB = 343,
-  SpvOpGroupNonUniformBallotFindMSB = 344,
-  SpvOpGroupNonUniformShuffle = 345,
-  SpvOpGroupNonUniformShuffleXor = 346,
-  SpvOpGroupNonUniformShuffleUp = 347,
-  SpvOpGroupNonUniformShuffleDown = 348,
-  SpvOpGroupNonUniformIAdd = 349,
-  SpvOpGroupNonUniformFAdd = 350,
-  SpvOpGroupNonUniformIMul = 351,
-  SpvOpGroupNonUniformFMul = 352,
-  SpvOpGroupNonUniformSMin = 353,
-  SpvOpGroupNonUniformUMin = 354,
-  SpvOpGroupNonUniformFMin = 355,
-  SpvOpGroupNonUniformSMax = 356,
-  SpvOpGroupNonUniformUMax = 357,
-  SpvOpGroupNonUniformFMax = 358,
-  SpvOpGroupNonUniformBitwiseAnd = 359,
-  SpvOpGroupNonUniformBitwiseOr = 360,
-  SpvOpGroupNonUniformBitwiseXor = 361,
-  SpvOpGroupNonUniformLogicalAnd = 362,
-  SpvOpGroupNonUniformLogicalOr = 363,
-  SpvOpGroupNonUniformLogicalXor = 364,
-  SpvOpGroupNonUniformQuadBroadcast = 365,
-  SpvOpGroupNonUniformQuadSwap = 366,
-  SpvOpCopyLogical = 400,
-  SpvOpPtrEqual = 401,
-  SpvOpPtrNotEqual = 402,
-  SpvOpPtrDiff = 403,
-  SpvOpColorAttachmentReadEXT = 4160,
-  SpvOpDepthAttachmentReadEXT = 4161,
-  SpvOpStencilAttachmentReadEXT = 4162,
-  SpvOpTerminateInvocation = 4416,
-  SpvOpSubgroupBallotKHR = 4421,
-  SpvOpSubgroupFirstInvocationKHR = 4422,
-  SpvOpSubgroupAllKHR = 4428,
-  SpvOpSubgroupAnyKHR = 4429,
-  SpvOpSubgroupAllEqualKHR = 4430,
-  SpvOpGroupNonUniformRotateKHR = 4431,
-  SpvOpSubgroupReadInvocationKHR = 4432,
-  SpvOpTraceRayKHR = 4445,
-  SpvOpExecuteCallableKHR = 4446,
-  SpvOpConvertUToAccelerationStructureKHR = 4447,
-  SpvOpIgnoreIntersectionKHR = 4448,
-  SpvOpTerminateRayKHR = 4449,
-  SpvOpSDot = 4450,
-  SpvOpSDotKHR = 4450,
-  SpvOpUDot = 4451,
-  SpvOpUDotKHR = 4451,
-  SpvOpSUDot = 4452,
-  SpvOpSUDotKHR = 4452,
-  SpvOpSDotAccSat = 4453,
-  SpvOpSDotAccSatKHR = 4453,
-  SpvOpUDotAccSat = 4454,
-  SpvOpUDotAccSatKHR = 4454,
-  SpvOpSUDotAccSat = 4455,
-  SpvOpSUDotAccSatKHR = 4455,
-  SpvOpTypeCooperativeMatrixKHR = 4456,
-  SpvOpCooperativeMatrixLoadKHR = 4457,
-  SpvOpCooperativeMatrixStoreKHR = 4458,
-  SpvOpCooperativeMatrixMulAddKHR = 4459,
-  SpvOpCooperativeMatrixLengthKHR = 4460,
-  SpvOpTypeRayQueryKHR = 4472,
-  SpvOpRayQueryInitializeKHR = 4473,
-  SpvOpRayQueryTerminateKHR = 4474,
-  SpvOpRayQueryGenerateIntersectionKHR = 4475,
-  SpvOpRayQueryConfirmIntersectionKHR = 4476,
-  SpvOpRayQueryProceedKHR = 4477,
-  SpvOpRayQueryGetIntersectionTypeKHR = 4479,
-  SpvOpImageSampleWeightedQCOM = 4480,
-  SpvOpImageBoxFilterQCOM = 4481,
-  SpvOpImageBlockMatchSSDQCOM = 4482,
-  SpvOpImageBlockMatchSADQCOM = 4483,
-  SpvOpGroupIAddNonUniformAMD = 5000,
-  SpvOpGroupFAddNonUniformAMD = 5001,
-  SpvOpGroupFMinNonUniformAMD = 5002,
-  SpvOpGroupUMinNonUniformAMD = 5003,
-  SpvOpGroupSMinNonUniformAMD = 5004,
-  SpvOpGroupFMaxNonUniformAMD = 5005,
-  SpvOpGroupUMaxNonUniformAMD = 5006,
-  SpvOpGroupSMaxNonUniformAMD = 5007,
-  SpvOpFragmentMaskFetchAMD = 5011,
-  SpvOpFragmentFetchAMD = 5012,
-  SpvOpReadClockKHR = 5056,
-  SpvOpHitObjectRecordHitMotionNV = 5249,
-  SpvOpHitObjectRecordHitWithIndexMotionNV = 5250,
-  SpvOpHitObjectRecordMissMotionNV = 5251,
-  SpvOpHitObjectGetWorldToObjectNV = 5252,
-  SpvOpHitObjectGetObjectToWorldNV = 5253,
-  SpvOpHitObjectGetObjectRayDirectionNV = 5254,
-  SpvOpHitObjectGetObjectRayOriginNV = 5255,
-  SpvOpHitObjectTraceRayMotionNV = 5256,
-  SpvOpHitObjectGetShaderRecordBufferHandleNV = 5257,
-  SpvOpHitObjectGetShaderBindingTableRecordIndexNV = 5258,
-  SpvOpHitObjectRecordEmptyNV = 5259,
-  SpvOpHitObjectTraceRayNV = 5260,
-  SpvOpHitObjectRecordHitNV = 5261,
-  SpvOpHitObjectRecordHitWithIndexNV = 5262,
-  SpvOpHitObjectRecordMissNV = 5263,
-  SpvOpHitObjectExecuteShaderNV = 5264,
-  SpvOpHitObjectGetCurrentTimeNV = 5265,
-  SpvOpHitObjectGetAttributesNV = 5266,
-  SpvOpHitObjectGetHitKindNV = 5267,
-  SpvOpHitObjectGetPrimitiveIndexNV = 5268,
-  SpvOpHitObjectGetGeometryIndexNV = 5269,
-  SpvOpHitObjectGetInstanceIdNV = 5270,
-  SpvOpHitObjectGetInstanceCustomIndexNV = 5271,
-  SpvOpHitObjectGetWorldRayDirectionNV = 5272,
-  SpvOpHitObjectGetWorldRayOriginNV = 5273,
-  SpvOpHitObjectGetRayTMaxNV = 5274,
-  SpvOpHitObjectGetRayTMinNV = 5275,
-  SpvOpHitObjectIsEmptyNV = 5276,
-  SpvOpHitObjectIsHitNV = 5277,
-  SpvOpHitObjectIsMissNV = 5278,
-  SpvOpReorderThreadWithHitObjectNV = 5279,
-  SpvOpReorderThreadWithHintNV = 5280,
-  SpvOpTypeHitObjectNV = 5281,
-  SpvOpImageSampleFootprintNV = 5283,
-  SpvOpEmitMeshTasksEXT = 5294,
-  SpvOpSetMeshOutputsEXT = 5295,
-  SpvOpGroupNonUniformPartitionNV = 5296,
-  SpvOpWritePackedPrimitiveIndices4x8NV = 5299,
-  SpvOpReportIntersectionKHR = 5334,
-  SpvOpReportIntersectionNV = 5334,
-  SpvOpIgnoreIntersectionNV = 5335,
-  SpvOpTerminateRayNV = 5336,
-  SpvOpTraceNV = 5337,
-  SpvOpTraceMotionNV = 5338,
-  SpvOpTraceRayMotionNV = 5339,
-  SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340,
-  SpvOpTypeAccelerationStructureKHR = 5341,
-  SpvOpTypeAccelerationStructureNV = 5341,
-  SpvOpExecuteCallableNV = 5344,
-  SpvOpTypeCooperativeMatrixNV = 5358,
-  SpvOpCooperativeMatrixLoadNV = 5359,
-  SpvOpCooperativeMatrixStoreNV = 5360,
-  SpvOpCooperativeMatrixMulAddNV = 5361,
-  SpvOpCooperativeMatrixLengthNV = 5362,
-  SpvOpBeginInvocationInterlockEXT = 5364,
-  SpvOpEndInvocationInterlockEXT = 5365,
-  SpvOpDemoteToHelperInvocation = 5380,
-  SpvOpDemoteToHelperInvocationEXT = 5380,
-  SpvOpIsHelperInvocationEXT = 5381,
-  SpvOpConvertUToImageNV = 5391,
-  SpvOpConvertUToSamplerNV = 5392,
-  SpvOpConvertImageToUNV = 5393,
-  SpvOpConvertSamplerToUNV = 5394,
-  SpvOpConvertUToSampledImageNV = 5395,
-  SpvOpConvertSampledImageToUNV = 5396,
-  SpvOpSamplerImageAddressingModeNV = 5397,
-  SpvOpSubgroupShuffleINTEL = 5571,
-  SpvOpSubgroupShuffleDownINTEL = 5572,
-  SpvOpSubgroupShuffleUpINTEL = 5573,
-  SpvOpSubgroupShuffleXorINTEL = 5574,
-  SpvOpSubgroupBlockReadINTEL = 5575,
-  SpvOpSubgroupBlockWriteINTEL = 5576,
-  SpvOpSubgroupImageBlockReadINTEL = 5577,
-  SpvOpSubgroupImageBlockWriteINTEL = 5578,
-  SpvOpSubgroupImageMediaBlockReadINTEL = 5580,
-  SpvOpSubgroupImageMediaBlockWriteINTEL = 5581,
-  SpvOpUCountLeadingZerosINTEL = 5585,
-  SpvOpUCountTrailingZerosINTEL = 5586,
-  SpvOpAbsISubINTEL = 5587,
-  SpvOpAbsUSubINTEL = 5588,
-  SpvOpIAddSatINTEL = 5589,
-  SpvOpUAddSatINTEL = 5590,
-  SpvOpIAverageINTEL = 5591,
-  SpvOpUAverageINTEL = 5592,
-  SpvOpIAverageRoundedINTEL = 5593,
-  SpvOpUAverageRoundedINTEL = 5594,
-  SpvOpISubSatINTEL = 5595,
-  SpvOpUSubSatINTEL = 5596,
-  SpvOpIMul32x16INTEL = 5597,
-  SpvOpUMul32x16INTEL = 5598,
-  SpvOpConstantFunctionPointerINTEL = 5600,
-  SpvOpFunctionPointerCallINTEL = 5601,
-  SpvOpAsmTargetINTEL = 5609,
-  SpvOpAsmINTEL = 5610,
-  SpvOpAsmCallINTEL = 5611,
-  SpvOpAtomicFMinEXT = 5614,
-  SpvOpAtomicFMaxEXT = 5615,
-  SpvOpAssumeTrueKHR = 5630,
-  SpvOpExpectKHR = 5631,
-  SpvOpDecorateString = 5632,
-  SpvOpDecorateStringGOOGLE = 5632,
-  SpvOpMemberDecorateString = 5633,
-  SpvOpMemberDecorateStringGOOGLE = 5633,
-  SpvOpVmeImageINTEL = 5699,
-  SpvOpTypeVmeImageINTEL = 5700,
-  SpvOpTypeAvcImePayloadINTEL = 5701,
-  SpvOpTypeAvcRefPayloadINTEL = 5702,
-  SpvOpTypeAvcSicPayloadINTEL = 5703,
-  SpvOpTypeAvcMcePayloadINTEL = 5704,
-  SpvOpTypeAvcMceResultINTEL = 5705,
-  SpvOpTypeAvcImeResultINTEL = 5706,
-  SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707,
-  SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708,
-  SpvOpTypeAvcImeSingleReferenceStreaminINTEL = 5709,
-  SpvOpTypeAvcImeDualReferenceStreaminINTEL = 5710,
-  SpvOpTypeAvcRefResultINTEL = 5711,
-  SpvOpTypeAvcSicResultINTEL = 5712,
-  SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713,
-  SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714,
-  SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715,
-  SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716,
-  SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717,
-  SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718,
-  SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719,
-  SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720,
-  SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721,
-  SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722,
-  SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723,
-  SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724,
-  SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725,
-  SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726,
-  SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727,
-  SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728,
-  SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729,
-  SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730,
-  SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731,
-  SpvOpSubgroupAvcMceConvertToImePayloadINTEL = 5732,
-  SpvOpSubgroupAvcMceConvertToImeResultINTEL = 5733,
-  SpvOpSubgroupAvcMceConvertToRefPayloadINTEL = 5734,
-  SpvOpSubgroupAvcMceConvertToRefResultINTEL = 5735,
-  SpvOpSubgroupAvcMceConvertToSicPayloadINTEL = 5736,
-  SpvOpSubgroupAvcMceConvertToSicResultINTEL = 5737,
-  SpvOpSubgroupAvcMceGetMotionVectorsINTEL = 5738,
-  SpvOpSubgroupAvcMceGetInterDistortionsINTEL = 5739,
-  SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740,
-  SpvOpSubgroupAvcMceGetInterMajorShapeINTEL = 5741,
-  SpvOpSubgroupAvcMceGetInterMinorShapeINTEL = 5742,
-  SpvOpSubgroupAvcMceGetInterDirectionsINTEL = 5743,
-  SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744,
-  SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745,
-  SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746,
-  SpvOpSubgroupAvcImeInitializeINTEL = 5747,
-  SpvOpSubgroupAvcImeSetSingleReferenceINTEL = 5748,
-  SpvOpSubgroupAvcImeSetDualReferenceINTEL = 5749,
-  SpvOpSubgroupAvcImeRefWindowSizeINTEL = 5750,
-  SpvOpSubgroupAvcImeAdjustRefOffsetINTEL = 5751,
-  SpvOpSubgroupAvcImeConvertToMcePayloadINTEL = 5752,
-  SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753,
-  SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754,
-  SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755,
-  SpvOpSubgroupAvcImeSetWeightedSadINTEL = 5756,
-  SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757,
-  SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758,
-  SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759,
-  SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760,
-  SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761,
-  SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762,
-  SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763,
-  SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764,
-  SpvOpSubgroupAvcImeConvertToMceResultINTEL = 5765,
-  SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766,
-  SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767,
-  SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768,
-  SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769,
-  SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL =
-      5770,
-  SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL =
-      5771,
-  SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL =
-      5772,
-  SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL =
-      5773,
-  SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774,
-  SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL =
-      5775,
-  SpvOpSubgroupAvcImeGetBorderReachedINTEL = 5776,
-  SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777,
-  SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778,
-  SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779,
-  SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780,
-  SpvOpSubgroupAvcFmeInitializeINTEL = 5781,
-  SpvOpSubgroupAvcBmeInitializeINTEL = 5782,
-  SpvOpSubgroupAvcRefConvertToMcePayloadINTEL = 5783,
-  SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784,
-  SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785,
-  SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786,
-  SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787,
-  SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788,
-  SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789,
-  SpvOpSubgroupAvcRefConvertToMceResultINTEL = 5790,
-  SpvOpSubgroupAvcSicInitializeINTEL = 5791,
-  SpvOpSubgroupAvcSicConfigureSkcINTEL = 5792,
-  SpvOpSubgroupAvcSicConfigureIpeLumaINTEL = 5793,
-  SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794,
-  SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795,
-  SpvOpSubgroupAvcSicConvertToMcePayloadINTEL = 5796,
-  SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797,
-  SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798,
-  SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799,
-  SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800,
-  SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801,
-  SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802,
-  SpvOpSubgroupAvcSicEvaluateIpeINTEL = 5803,
-  SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804,
-  SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805,
-  SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806,
-  SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807,
-  SpvOpSubgroupAvcSicConvertToMceResultINTEL = 5808,
-  SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809,
-  SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810,
-  SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811,
-  SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812,
-  SpvOpSubgroupAvcSicGetIpeChromaModeINTEL = 5813,
-  SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
-  SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
-  SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
-  SpvOpVariableLengthArrayINTEL = 5818,
-  SpvOpSaveMemoryINTEL = 5819,
-  SpvOpRestoreMemoryINTEL = 5820,
-  SpvOpArbitraryFloatSinCosPiINTEL = 5840,
-  SpvOpArbitraryFloatCastINTEL = 5841,
-  SpvOpArbitraryFloatCastFromIntINTEL = 5842,
-  SpvOpArbitraryFloatCastToIntINTEL = 5843,
-  SpvOpArbitraryFloatAddINTEL = 5846,
-  SpvOpArbitraryFloatSubINTEL = 5847,
-  SpvOpArbitraryFloatMulINTEL = 5848,
-  SpvOpArbitraryFloatDivINTEL = 5849,
-  SpvOpArbitraryFloatGTINTEL = 5850,
-  SpvOpArbitraryFloatGEINTEL = 5851,
-  SpvOpArbitraryFloatLTINTEL = 5852,
-  SpvOpArbitraryFloatLEINTEL = 5853,
-  SpvOpArbitraryFloatEQINTEL = 5854,
-  SpvOpArbitraryFloatRecipINTEL = 5855,
-  SpvOpArbitraryFloatRSqrtINTEL = 5856,
-  SpvOpArbitraryFloatCbrtINTEL = 5857,
-  SpvOpArbitraryFloatHypotINTEL = 5858,
-  SpvOpArbitraryFloatSqrtINTEL = 5859,
-  SpvOpArbitraryFloatLogINTEL = 5860,
-  SpvOpArbitraryFloatLog2INTEL = 5861,
-  SpvOpArbitraryFloatLog10INTEL = 5862,
-  SpvOpArbitraryFloatLog1pINTEL = 5863,
-  SpvOpArbitraryFloatExpINTEL = 5864,
-  SpvOpArbitraryFloatExp2INTEL = 5865,
-  SpvOpArbitraryFloatExp10INTEL = 5866,
-  SpvOpArbitraryFloatExpm1INTEL = 5867,
-  SpvOpArbitraryFloatSinINTEL = 5868,
-  SpvOpArbitraryFloatCosINTEL = 5869,
-  SpvOpArbitraryFloatSinCosINTEL = 5870,
-  SpvOpArbitraryFloatSinPiINTEL = 5871,
-  SpvOpArbitraryFloatCosPiINTEL = 5872,
-  SpvOpArbitraryFloatASinINTEL = 5873,
-  SpvOpArbitraryFloatASinPiINTEL = 5874,
-  SpvOpArbitraryFloatACosINTEL = 5875,
-  SpvOpArbitraryFloatACosPiINTEL = 5876,
-  SpvOpArbitraryFloatATanINTEL = 5877,
-  SpvOpArbitraryFloatATanPiINTEL = 5878,
-  SpvOpArbitraryFloatATan2INTEL = 5879,
-  SpvOpArbitraryFloatPowINTEL = 5880,
-  SpvOpArbitraryFloatPowRINTEL = 5881,
-  SpvOpArbitraryFloatPowNINTEL = 5882,
-  SpvOpLoopControlINTEL = 5887,
-  SpvOpAliasDomainDeclINTEL = 5911,
-  SpvOpAliasScopeDeclINTEL = 5912,
-  SpvOpAliasScopeListDeclINTEL = 5913,
-  SpvOpFixedSqrtINTEL = 5923,
-  SpvOpFixedRecipINTEL = 5924,
-  SpvOpFixedRsqrtINTEL = 5925,
-  SpvOpFixedSinINTEL = 5926,
-  SpvOpFixedCosINTEL = 5927,
-  SpvOpFixedSinCosINTEL = 5928,
-  SpvOpFixedSinPiINTEL = 5929,
-  SpvOpFixedCosPiINTEL = 5930,
-  SpvOpFixedSinCosPiINTEL = 5931,
-  SpvOpFixedLogINTEL = 5932,
-  SpvOpFixedExpINTEL = 5933,
-  SpvOpPtrCastToCrossWorkgroupINTEL = 5934,
-  SpvOpCrossWorkgroupCastToPtrINTEL = 5938,
-  SpvOpReadPipeBlockingINTEL = 5946,
-  SpvOpWritePipeBlockingINTEL = 5947,
-  SpvOpFPGARegINTEL = 5949,
-  SpvOpRayQueryGetRayTMinKHR = 6016,
-  SpvOpRayQueryGetRayFlagsKHR = 6017,
-  SpvOpRayQueryGetIntersectionTKHR = 6018,
-  SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019,
-  SpvOpRayQueryGetIntersectionInstanceIdKHR = 6020,
-  SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021,
-  SpvOpRayQueryGetIntersectionGeometryIndexKHR = 6022,
-  SpvOpRayQueryGetIntersectionPrimitiveIndexKHR = 6023,
-  SpvOpRayQueryGetIntersectionBarycentricsKHR = 6024,
-  SpvOpRayQueryGetIntersectionFrontFaceKHR = 6025,
-  SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026,
-  SpvOpRayQueryGetIntersectionObjectRayDirectionKHR = 6027,
-  SpvOpRayQueryGetIntersectionObjectRayOriginKHR = 6028,
-  SpvOpRayQueryGetWorldRayDirectionKHR = 6029,
-  SpvOpRayQueryGetWorldRayOriginKHR = 6030,
-  SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031,
-  SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032,
-  SpvOpAtomicFAddEXT = 6035,
-  SpvOpTypeBufferSurfaceINTEL = 6086,
-  SpvOpTypeStructContinuedINTEL = 6090,
-  SpvOpConstantCompositeContinuedINTEL = 6091,
-  SpvOpSpecConstantCompositeContinuedINTEL = 6092,
-  SpvOpConvertFToBF16INTEL = 6116,
-  SpvOpConvertBF16ToFINTEL = 6117,
-  SpvOpControlBarrierArriveINTEL = 6142,
-  SpvOpControlBarrierWaitINTEL = 6143,
-  SpvOpGroupIMulKHR = 6401,
-  SpvOpGroupFMulKHR = 6402,
-  SpvOpGroupBitwiseAndKHR = 6403,
-  SpvOpGroupBitwiseOrKHR = 6404,
-  SpvOpGroupBitwiseXorKHR = 6405,
-  SpvOpGroupLogicalAndKHR = 6406,
-  SpvOpGroupLogicalOrKHR = 6407,
-  SpvOpGroupLogicalXorKHR = 6408,
-  SpvOpMax = 0x7fffffff,
-} SpvOp;
-
-#ifdef SPV_ENABLE_UTILITY_CODE
-#ifndef __cplusplus
-#include <stdbool.h>
-#endif
-inline void SpvHasResultAndType(SpvOp opcode, bool* hasResult,
-                                bool* hasResultType) {
-  *hasResult = *hasResultType = false;
-  switch (opcode) {
-    default: /* unknown opcode */
-      break;
-    case SpvOpNop:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpUndef:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSourceContinued:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSource:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSourceExtension:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpName:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpMemberName:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpString:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpLine:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpExtension:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpExtInstImport:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpExtInst:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpMemoryModel:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpEntryPoint:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpExecutionMode:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCapability:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeVoid:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeBool:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeInt:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeFloat:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeVector:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeMatrix:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeImage:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeSampler:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeSampledImage:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeArray:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeRuntimeArray:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeStruct:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeOpaque:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypePointer:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeFunction:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeEvent:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeDeviceEvent:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeReserveId:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeQueue:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypePipe:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeForwardPointer:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpConstantTrue:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConstantFalse:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConstant:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConstantComposite:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConstantSampler:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConstantNull:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSpecConstantTrue:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSpecConstantFalse:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSpecConstant:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSpecConstantComposite:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSpecConstantOp:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFunction:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFunctionParameter:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFunctionEnd:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpFunctionCall:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpVariable:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageTexelPointer:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLoad:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpStore:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCopyMemory:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCopyMemorySized:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpAccessChain:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpInBoundsAccessChain:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpPtrAccessChain:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArrayLength:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGenericPtrMemSemantics:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpInBoundsPtrAccessChain:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDecorate:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpMemberDecorate:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpDecorationGroup:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupDecorate:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupMemberDecorate:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpVectorExtractDynamic:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpVectorInsertDynamic:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpVectorShuffle:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCompositeConstruct:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCompositeExtract:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCompositeInsert:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCopyObject:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTranspose:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSampledImage:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleDrefImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleDrefExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleProjImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleProjExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleProjDrefImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleProjDrefExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageFetch:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageGather:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageDrefGather:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageRead:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageWrite:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpImage:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageQueryFormat:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageQueryOrder:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageQuerySizeLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageQuerySize:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageQueryLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageQueryLevels:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageQuerySamples:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertFToU:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertFToS:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertSToF:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertUToF:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUConvert:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSConvert:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFConvert:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpQuantizeToF16:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertPtrToU:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSatConvertSToU:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSatConvertUToS:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertUToPtr:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpPtrCastToGeneric:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGenericCastToPtr:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGenericCastToPtrExplicit:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitcast:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSNegate:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFNegate:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIAdd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFAdd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpISub:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFSub:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIMul:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFMul:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUDiv:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSDiv:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFDiv:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUMod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSRem:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSMod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFRem:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFMod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpVectorTimesScalar:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpMatrixTimesScalar:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpVectorTimesMatrix:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpMatrixTimesVector:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpMatrixTimesMatrix:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpOuterProduct:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIAddCarry:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpISubBorrow:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUMulExtended:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSMulExtended:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAny:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAll:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIsNan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIsInf:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIsFinite:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIsNormal:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSignBitSet:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLessOrGreater:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpOrdered:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUnordered:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLogicalEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLogicalNotEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLogicalOr:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLogicalAnd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLogicalNot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSelect:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpINotEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUGreaterThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSGreaterThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUGreaterThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSGreaterThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpULessThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSLessThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpULessThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSLessThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFOrdEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFUnordEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFOrdNotEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFUnordNotEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFOrdLessThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFUnordLessThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFOrdGreaterThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFUnordGreaterThan:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFOrdLessThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFUnordLessThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFOrdGreaterThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFUnordGreaterThanEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpShiftRightLogical:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpShiftRightArithmetic:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpShiftLeftLogical:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitwiseOr:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitwiseXor:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitwiseAnd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpNot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitFieldInsert:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitFieldSExtract:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitFieldUExtract:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitReverse:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBitCount:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDPdx:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDPdy:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFwidth:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDPdxFine:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDPdyFine:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFwidthFine:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDPdxCoarse:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDPdyCoarse:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFwidthCoarse:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpEmitVertex:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpEndPrimitive:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpEmitStreamVertex:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpEndStreamPrimitive:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpControlBarrier:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpMemoryBarrier:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpAtomicLoad:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicStore:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpAtomicExchange:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicCompareExchange:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicCompareExchangeWeak:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicIIncrement:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicIDecrement:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicIAdd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicISub:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicSMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicUMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicSMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicUMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicAnd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicOr:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicXor:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpPhi:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLoopMerge:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSelectionMerge:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpLabel:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpBranch:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpBranchConditional:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSwitch:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpKill:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpReturn:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpReturnValue:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpUnreachable:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpLifetimeStart:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpLifetimeStop:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupAsyncCopy:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupWaitEvents:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupAll:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupAny:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupBroadcast:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupIAdd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupFAdd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupFMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupUMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupSMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupFMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupUMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupSMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReadPipe:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpWritePipe:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReservedReadPipe:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReservedWritePipe:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReserveReadPipePackets:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReserveWritePipePackets:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCommitReadPipe:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCommitWritePipe:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpIsValidReserveId:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetNumPipePackets:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetMaxPipePackets:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupReserveReadPipePackets:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupReserveWritePipePackets:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupCommitReadPipe:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupCommitWritePipe:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpEnqueueMarker:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpEnqueueKernel:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetKernelNDrangeSubGroupCount:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetKernelNDrangeMaxSubGroupSize:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetKernelWorkGroupSize:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetKernelPreferredWorkGroupSizeMultiple:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRetainEvent:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpReleaseEvent:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCreateUserEvent:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIsValidEvent:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSetUserEventStatus:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCaptureEventProfilingInfo:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGetDefaultQueue:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBuildNDRange:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleDrefImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleDrefExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleProjImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleProjExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleProjDrefImplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseSampleProjDrefExplicitLod:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseFetch:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseGather:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseDrefGather:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSparseTexelsResident:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpNoLine:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpAtomicFlagTestAndSet:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicFlagClear:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpImageSparseRead:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSizeOf:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTypePipeStorage:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpConstantPipeStorage:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCreatePipeFromPipeStorage:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetKernelLocalSizeForSubgroupCount:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGetKernelMaxNumSubgroups:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTypeNamedBarrier:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpNamedBarrierInitialize:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpMemoryNamedBarrier:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpModuleProcessed:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpExecutionModeId:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpDecorateId:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupNonUniformElect:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformAll:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformAny:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformAllEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBroadcast:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBroadcastFirst:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBallot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformInverseBallot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBallotBitExtract:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBallotBitCount:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBallotFindLSB:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBallotFindMSB:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformShuffle:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformShuffleXor:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformShuffleUp:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformShuffleDown:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformIAdd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformFAdd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformIMul:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformFMul:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformSMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformUMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformFMin:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformSMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformUMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformFMax:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBitwiseAnd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBitwiseOr:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformBitwiseXor:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformLogicalAnd:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformLogicalOr:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformLogicalXor:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformQuadBroadcast:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformQuadSwap:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCopyLogical:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpPtrEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpPtrNotEqual:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpPtrDiff:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpColorAttachmentReadEXT:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDepthAttachmentReadEXT:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpStencilAttachmentReadEXT:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTerminateInvocation:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSubgroupBallotKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupFirstInvocationKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAllKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAnyKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAllEqualKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupNonUniformRotateKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupReadInvocationKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTraceRayKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpExecuteCallableKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpConvertUToAccelerationStructureKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIgnoreIntersectionKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTerminateRayKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSDot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUDot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSUDot:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSDotAccSat:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUDotAccSat:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSUDotAccSat:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTypeCooperativeMatrixKHR:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpCooperativeMatrixLoadKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCooperativeMatrixStoreKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCooperativeMatrixMulAddKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCooperativeMatrixLengthKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTypeRayQueryKHR:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpRayQueryInitializeKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpRayQueryTerminateKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpRayQueryGenerateIntersectionKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpRayQueryConfirmIntersectionKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpRayQueryProceedKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionTypeKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageSampleWeightedQCOM:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageBoxFilterQCOM:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageBlockMatchSSDQCOM:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpImageBlockMatchSADQCOM:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupIAddNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupFAddNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupFMinNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupUMinNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupSMinNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupFMaxNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupUMaxNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupSMaxNonUniformAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFragmentMaskFetchAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFragmentFetchAMD:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReadClockKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectRecordHitMotionNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectRecordHitWithIndexMotionNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectRecordMissMotionNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectGetWorldToObjectNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetObjectToWorldNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetObjectRayDirectionNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetObjectRayOriginNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectTraceRayMotionNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectGetShaderRecordBufferHandleNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetShaderBindingTableRecordIndexNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectRecordEmptyNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectTraceRayNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectRecordHitNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectRecordHitWithIndexNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectRecordMissNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectExecuteShaderNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectGetCurrentTimeNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetAttributesNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpHitObjectGetHitKindNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetPrimitiveIndexNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetGeometryIndexNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetInstanceIdNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetInstanceCustomIndexNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetWorldRayDirectionNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetWorldRayOriginNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetRayTMaxNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectGetRayTMinNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectIsEmptyNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectIsHitNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpHitObjectIsMissNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReorderThreadWithHitObjectNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpReorderThreadWithHintNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeHitObjectNV:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpImageSampleFootprintNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpEmitMeshTasksEXT:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSetMeshOutputsEXT:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupNonUniformPartitionNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpWritePackedPrimitiveIndices4x8NV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpReportIntersectionNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIgnoreIntersectionNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTerminateRayNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTraceNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTraceMotionNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTraceRayMotionNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTypeAccelerationStructureNV:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpExecuteCallableNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeCooperativeMatrixNV:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpCooperativeMatrixLoadNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCooperativeMatrixStoreNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpCooperativeMatrixMulAddNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCooperativeMatrixLengthNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpBeginInvocationInterlockEXT:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpEndInvocationInterlockEXT:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpDemoteToHelperInvocation:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpIsHelperInvocationEXT:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertUToImageNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertUToSamplerNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertImageToUNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertSamplerToUNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertUToSampledImageNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertSampledImageToUNV:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSamplerImageAddressingModeNV:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSubgroupShuffleINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupShuffleDownINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupShuffleUpINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupShuffleXorINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupBlockReadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupBlockWriteINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSubgroupImageBlockReadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupImageBlockWriteINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSubgroupImageMediaBlockReadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupImageMediaBlockWriteINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpUCountLeadingZerosINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUCountTrailingZerosINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAbsISubINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAbsUSubINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIAddSatINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUAddSatINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIAverageINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUAverageINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIAverageRoundedINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUAverageRoundedINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpISubSatINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUSubSatINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpIMul32x16INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpUMul32x16INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConstantFunctionPointerINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFunctionPointerCallINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAsmTargetINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAsmINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAsmCallINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicFMinEXT:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicFMaxEXT:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAssumeTrueKHR:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpExpectKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpDecorateString:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpMemberDecorateString:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpVmeImageINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTypeVmeImageINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcImePayloadINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcRefPayloadINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcSicPayloadINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcMcePayloadINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcMceResultINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcImeResultINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcImeSingleReferenceStreaminINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcImeDualReferenceStreaminINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcRefResultINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeAvcSicResultINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceConvertToImePayloadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceConvertToImeResultINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceConvertToRefResultINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceConvertToSicResultINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetMotionVectorsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetInterDistortionsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetInterDirectionsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeInitializeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeSetSingleReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeSetDualReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeRefWindowSizeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeSetWeightedSadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeConvertToMceResultINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetBorderReachedINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcFmeInitializeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcBmeInitializeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcRefConvertToMceResultINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicInitializeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicConfigureSkcINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicEvaluateIpeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicConvertToMceResultINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSubgroupAvcSicGetInterRawSadsINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpVariableLengthArrayINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpSaveMemoryINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRestoreMemoryINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpArbitraryFloatSinCosPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatCastINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatCastFromIntINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatCastToIntINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatAddINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatSubINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatMulINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatDivINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatGTINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatGEINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatLTINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatLEINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatEQINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatRecipINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatRSqrtINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatCbrtINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatHypotINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatSqrtINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatLogINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatLog2INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatLog10INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatLog1pINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatExpINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatExp2INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatExp10INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatExpm1INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatSinINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatCosINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatSinCosINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatSinPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatCosPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatASinINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatASinPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatACosINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatACosPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatATanINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatATanPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatATan2INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatPowINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatPowRINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpArbitraryFloatPowNINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpLoopControlINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpAliasDomainDeclINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpAliasScopeDeclINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpAliasScopeListDeclINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpFixedSqrtINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedRecipINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedRsqrtINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedSinINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedCosINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedSinCosINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedSinPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedCosPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedSinCosPiINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedLogINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFixedExpINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpPtrCastToCrossWorkgroupINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpCrossWorkgroupCastToPtrINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpReadPipeBlockingINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpWritePipeBlockingINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpFPGARegINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetRayTMinKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetRayFlagsKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionTKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionInstanceIdKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionGeometryIndexKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionBarycentricsKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionFrontFaceKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionObjectRayOriginKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetWorldRayDirectionKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetWorldRayOriginKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionObjectToWorldKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpRayQueryGetIntersectionWorldToObjectKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpAtomicFAddEXT:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpTypeBufferSurfaceINTEL:
-      *hasResult = true;
-      *hasResultType = false;
-      break;
-    case SpvOpTypeStructContinuedINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpConstantCompositeContinuedINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpSpecConstantCompositeContinuedINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpConvertFToBF16INTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpConvertBF16ToFINTEL:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpControlBarrierArriveINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpControlBarrierWaitINTEL:
-      *hasResult = false;
-      *hasResultType = false;
-      break;
-    case SpvOpGroupIMulKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupFMulKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupBitwiseAndKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupBitwiseOrKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupBitwiseXorKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupLogicalAndKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupLogicalOrKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-    case SpvOpGroupLogicalXorKHR:
-      *hasResult = true;
-      *hasResultType = true;
-      break;
-  }
-}
-#endif /* SPV_ENABLE_UTILITY_CODE */
-
-#endif

+ 12 - 0
thirdparty/spirv-reflect/patches/0003-spirv-headers.patch

@@ -0,0 +1,12 @@
+diff --git a/thirdparty/spirv-reflect/spirv_reflect.h b/thirdparty/spirv-reflect/spirv_reflect.h
+index cf8cfe2183..8f281ec80f 100644
+--- a/thirdparty/spirv-reflect/spirv_reflect.h
++++ b/thirdparty/spirv-reflect/spirv_reflect.h
+@@ -34,7 +34,7 @@ VERSION HISTORY
+ #if defined(SPIRV_REFLECT_USE_SYSTEM_SPIRV_H)
+ #include <spirv/unified1/spirv.h>
+ #else
+-#include "./include/spirv/unified1/spirv.h"
++#include "../spirv-headers/include/spirv/unified1/spirv.h"
+ #endif
+ 

+ 1 - 1
thirdparty/spirv-reflect/spirv_reflect.h

@@ -34,7 +34,7 @@ VERSION HISTORY
 #if defined(SPIRV_REFLECT_USE_SYSTEM_SPIRV_H)
 #include <spirv/unified1/spirv.h>
 #else
-#include "./include/spirv/unified1/spirv.h"
+#include "../spirv-headers/include/spirv/unified1/spirv.h"
 #endif