• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1const char* ExtensionToString(Extension extension) {
2  switch (extension) {
3    case Extension::kSPV_AMD_gcn_shader:
4      return "SPV_AMD_gcn_shader";
5    case Extension::kSPV_AMD_gpu_shader_half_float:
6      return "SPV_AMD_gpu_shader_half_float";
7    case Extension::kSPV_AMD_gpu_shader_half_float_fetch:
8      return "SPV_AMD_gpu_shader_half_float_fetch";
9    case Extension::kSPV_AMD_gpu_shader_int16:
10      return "SPV_AMD_gpu_shader_int16";
11    case Extension::kSPV_AMD_shader_ballot:
12      return "SPV_AMD_shader_ballot";
13    case Extension::kSPV_AMD_shader_early_and_late_fragment_tests:
14      return "SPV_AMD_shader_early_and_late_fragment_tests";
15    case Extension::kSPV_AMD_shader_explicit_vertex_parameter:
16      return "SPV_AMD_shader_explicit_vertex_parameter";
17    case Extension::kSPV_AMD_shader_fragment_mask:
18      return "SPV_AMD_shader_fragment_mask";
19    case Extension::kSPV_AMD_shader_image_load_store_lod:
20      return "SPV_AMD_shader_image_load_store_lod";
21    case Extension::kSPV_AMD_shader_trinary_minmax:
22      return "SPV_AMD_shader_trinary_minmax";
23    case Extension::kSPV_AMD_texture_gather_bias_lod:
24      return "SPV_AMD_texture_gather_bias_lod";
25    case Extension::kSPV_EXT_demote_to_helper_invocation:
26      return "SPV_EXT_demote_to_helper_invocation";
27    case Extension::kSPV_EXT_descriptor_indexing:
28      return "SPV_EXT_descriptor_indexing";
29    case Extension::kSPV_EXT_fragment_fully_covered:
30      return "SPV_EXT_fragment_fully_covered";
31    case Extension::kSPV_EXT_fragment_invocation_density:
32      return "SPV_EXT_fragment_invocation_density";
33    case Extension::kSPV_EXT_fragment_shader_interlock:
34      return "SPV_EXT_fragment_shader_interlock";
35    case Extension::kSPV_EXT_mesh_shader:
36      return "SPV_EXT_mesh_shader";
37    case Extension::kSPV_EXT_physical_storage_buffer:
38      return "SPV_EXT_physical_storage_buffer";
39    case Extension::kSPV_EXT_shader_atomic_float16_add:
40      return "SPV_EXT_shader_atomic_float16_add";
41    case Extension::kSPV_EXT_shader_atomic_float_add:
42      return "SPV_EXT_shader_atomic_float_add";
43    case Extension::kSPV_EXT_shader_atomic_float_min_max:
44      return "SPV_EXT_shader_atomic_float_min_max";
45    case Extension::kSPV_EXT_shader_image_int64:
46      return "SPV_EXT_shader_image_int64";
47    case Extension::kSPV_EXT_shader_stencil_export:
48      return "SPV_EXT_shader_stencil_export";
49    case Extension::kSPV_EXT_shader_viewport_index_layer:
50      return "SPV_EXT_shader_viewport_index_layer";
51    case Extension::kSPV_GOOGLE_decorate_string:
52      return "SPV_GOOGLE_decorate_string";
53    case Extension::kSPV_GOOGLE_hlsl_functionality1:
54      return "SPV_GOOGLE_hlsl_functionality1";
55    case Extension::kSPV_GOOGLE_user_type:
56      return "SPV_GOOGLE_user_type";
57    case Extension::kSPV_INTEL_arbitrary_precision_fixed_point:
58      return "SPV_INTEL_arbitrary_precision_fixed_point";
59    case Extension::kSPV_INTEL_arbitrary_precision_floating_point:
60      return "SPV_INTEL_arbitrary_precision_floating_point";
61    case Extension::kSPV_INTEL_arbitrary_precision_integers:
62      return "SPV_INTEL_arbitrary_precision_integers";
63    case Extension::kSPV_INTEL_blocking_pipes:
64      return "SPV_INTEL_blocking_pipes";
65    case Extension::kSPV_INTEL_debug_module:
66      return "SPV_INTEL_debug_module";
67    case Extension::kSPV_INTEL_device_side_avc_motion_estimation:
68      return "SPV_INTEL_device_side_avc_motion_estimation";
69    case Extension::kSPV_INTEL_float_controls2:
70      return "SPV_INTEL_float_controls2";
71    case Extension::kSPV_INTEL_fp_fast_math_mode:
72      return "SPV_INTEL_fp_fast_math_mode";
73    case Extension::kSPV_INTEL_fpga_buffer_location:
74      return "SPV_INTEL_fpga_buffer_location";
75    case Extension::kSPV_INTEL_fpga_cluster_attributes:
76      return "SPV_INTEL_fpga_cluster_attributes";
77    case Extension::kSPV_INTEL_fpga_loop_controls:
78      return "SPV_INTEL_fpga_loop_controls";
79    case Extension::kSPV_INTEL_fpga_memory_accesses:
80      return "SPV_INTEL_fpga_memory_accesses";
81    case Extension::kSPV_INTEL_fpga_memory_attributes:
82      return "SPV_INTEL_fpga_memory_attributes";
83    case Extension::kSPV_INTEL_fpga_reg:
84      return "SPV_INTEL_fpga_reg";
85    case Extension::kSPV_INTEL_function_pointers:
86      return "SPV_INTEL_function_pointers";
87    case Extension::kSPV_INTEL_inline_assembly:
88      return "SPV_INTEL_inline_assembly";
89    case Extension::kSPV_INTEL_io_pipes:
90      return "SPV_INTEL_io_pipes";
91    case Extension::kSPV_INTEL_kernel_attributes:
92      return "SPV_INTEL_kernel_attributes";
93    case Extension::kSPV_INTEL_long_constant_composite:
94      return "SPV_INTEL_long_constant_composite";
95    case Extension::kSPV_INTEL_loop_fuse:
96      return "SPV_INTEL_loop_fuse";
97    case Extension::kSPV_INTEL_media_block_io:
98      return "SPV_INTEL_media_block_io";
99    case Extension::kSPV_INTEL_memory_access_aliasing:
100      return "SPV_INTEL_memory_access_aliasing";
101    case Extension::kSPV_INTEL_optnone:
102      return "SPV_INTEL_optnone";
103    case Extension::kSPV_INTEL_shader_integer_functions2:
104      return "SPV_INTEL_shader_integer_functions2";
105    case Extension::kSPV_INTEL_split_barrier:
106      return "SPV_INTEL_split_barrier";
107    case Extension::kSPV_INTEL_subgroups:
108      return "SPV_INTEL_subgroups";
109    case Extension::kSPV_INTEL_unstructured_loop_controls:
110      return "SPV_INTEL_unstructured_loop_controls";
111    case Extension::kSPV_INTEL_usm_storage_classes:
112      return "SPV_INTEL_usm_storage_classes";
113    case Extension::kSPV_INTEL_variable_length_array:
114      return "SPV_INTEL_variable_length_array";
115    case Extension::kSPV_INTEL_vector_compute:
116      return "SPV_INTEL_vector_compute";
117    case Extension::kSPV_KHR_16bit_storage:
118      return "SPV_KHR_16bit_storage";
119    case Extension::kSPV_KHR_8bit_storage:
120      return "SPV_KHR_8bit_storage";
121    case Extension::kSPV_KHR_bit_instructions:
122      return "SPV_KHR_bit_instructions";
123    case Extension::kSPV_KHR_device_group:
124      return "SPV_KHR_device_group";
125    case Extension::kSPV_KHR_expect_assume:
126      return "SPV_KHR_expect_assume";
127    case Extension::kSPV_KHR_float_controls:
128      return "SPV_KHR_float_controls";
129    case Extension::kSPV_KHR_fragment_shader_barycentric:
130      return "SPV_KHR_fragment_shader_barycentric";
131    case Extension::kSPV_KHR_fragment_shading_rate:
132      return "SPV_KHR_fragment_shading_rate";
133    case Extension::kSPV_KHR_integer_dot_product:
134      return "SPV_KHR_integer_dot_product";
135    case Extension::kSPV_KHR_linkonce_odr:
136      return "SPV_KHR_linkonce_odr";
137    case Extension::kSPV_KHR_multiview:
138      return "SPV_KHR_multiview";
139    case Extension::kSPV_KHR_no_integer_wrap_decoration:
140      return "SPV_KHR_no_integer_wrap_decoration";
141    case Extension::kSPV_KHR_non_semantic_info:
142      return "SPV_KHR_non_semantic_info";
143    case Extension::kSPV_KHR_physical_storage_buffer:
144      return "SPV_KHR_physical_storage_buffer";
145    case Extension::kSPV_KHR_post_depth_coverage:
146      return "SPV_KHR_post_depth_coverage";
147    case Extension::kSPV_KHR_ray_cull_mask:
148      return "SPV_KHR_ray_cull_mask";
149    case Extension::kSPV_KHR_ray_query:
150      return "SPV_KHR_ray_query";
151    case Extension::kSPV_KHR_ray_tracing:
152      return "SPV_KHR_ray_tracing";
153    case Extension::kSPV_KHR_shader_atomic_counter_ops:
154      return "SPV_KHR_shader_atomic_counter_ops";
155    case Extension::kSPV_KHR_shader_ballot:
156      return "SPV_KHR_shader_ballot";
157    case Extension::kSPV_KHR_shader_clock:
158      return "SPV_KHR_shader_clock";
159    case Extension::kSPV_KHR_shader_draw_parameters:
160      return "SPV_KHR_shader_draw_parameters";
161    case Extension::kSPV_KHR_storage_buffer_storage_class:
162      return "SPV_KHR_storage_buffer_storage_class";
163    case Extension::kSPV_KHR_subgroup_rotate:
164      return "SPV_KHR_subgroup_rotate";
165    case Extension::kSPV_KHR_subgroup_uniform_control_flow:
166      return "SPV_KHR_subgroup_uniform_control_flow";
167    case Extension::kSPV_KHR_subgroup_vote:
168      return "SPV_KHR_subgroup_vote";
169    case Extension::kSPV_KHR_terminate_invocation:
170      return "SPV_KHR_terminate_invocation";
171    case Extension::kSPV_KHR_uniform_group_instructions:
172      return "SPV_KHR_uniform_group_instructions";
173    case Extension::kSPV_KHR_variable_pointers:
174      return "SPV_KHR_variable_pointers";
175    case Extension::kSPV_KHR_vulkan_memory_model:
176      return "SPV_KHR_vulkan_memory_model";
177    case Extension::kSPV_KHR_workgroup_memory_explicit_layout:
178      return "SPV_KHR_workgroup_memory_explicit_layout";
179    case Extension::kSPV_NVX_multiview_per_view_attributes:
180      return "SPV_NVX_multiview_per_view_attributes";
181    case Extension::kSPV_NV_bindless_texture:
182      return "SPV_NV_bindless_texture";
183    case Extension::kSPV_NV_compute_shader_derivatives:
184      return "SPV_NV_compute_shader_derivatives";
185    case Extension::kSPV_NV_cooperative_matrix:
186      return "SPV_NV_cooperative_matrix";
187    case Extension::kSPV_NV_fragment_shader_barycentric:
188      return "SPV_NV_fragment_shader_barycentric";
189    case Extension::kSPV_NV_geometry_shader_passthrough:
190      return "SPV_NV_geometry_shader_passthrough";
191    case Extension::kSPV_NV_mesh_shader:
192      return "SPV_NV_mesh_shader";
193    case Extension::kSPV_NV_ray_tracing:
194      return "SPV_NV_ray_tracing";
195    case Extension::kSPV_NV_ray_tracing_motion_blur:
196      return "SPV_NV_ray_tracing_motion_blur";
197    case Extension::kSPV_NV_sample_mask_override_coverage:
198      return "SPV_NV_sample_mask_override_coverage";
199    case Extension::kSPV_NV_shader_image_footprint:
200      return "SPV_NV_shader_image_footprint";
201    case Extension::kSPV_NV_shader_invocation_reorder:
202      return "kSPV_NV_shader_invocation_reorder";
203    case Extension::kSPV_NV_shader_sm_builtins:
204      return "SPV_NV_shader_sm_builtins";
205    case Extension::kSPV_NV_shader_subgroup_partitioned:
206      return "SPV_NV_shader_subgroup_partitioned";
207    case Extension::kSPV_NV_shading_rate:
208      return "SPV_NV_shading_rate";
209    case Extension::kSPV_NV_stereo_view_rendering:
210      return "SPV_NV_stereo_view_rendering";
211    case Extension::kSPV_NV_viewport_array2:
212      return "SPV_NV_viewport_array2";
213    case Extension::kSPV_VALIDATOR_ignore_type_decl_unique:
214      return "SPV_VALIDATOR_ignore_type_decl_unique";
215  }
216
217  return "";
218}
219
220
221    bool GetExtensionFromString(const char* str, Extension* extension) {
222        static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_early_and_late_fragment_tests", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_demote_to_helper_invocation", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_fragment_invocation_density", "SPV_EXT_fragment_shader_interlock", "SPV_EXT_mesh_shader", "SPV_EXT_physical_storage_buffer", "SPV_EXT_shader_atomic_float16_add", "SPV_EXT_shader_atomic_float_add", "SPV_EXT_shader_atomic_float_min_max", "SPV_EXT_shader_image_int64", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_GOOGLE_user_type", "SPV_INTEL_arbitrary_precision_fixed_point", "SPV_INTEL_arbitrary_precision_floating_point", "SPV_INTEL_arbitrary_precision_integers", "SPV_INTEL_blocking_pipes", "SPV_INTEL_debug_module", "SPV_INTEL_device_side_avc_motion_estimation", "SPV_INTEL_float_controls2", "SPV_INTEL_fp_fast_math_mode", "SPV_INTEL_fpga_buffer_location", "SPV_INTEL_fpga_cluster_attributes", "SPV_INTEL_fpga_loop_controls", "SPV_INTEL_fpga_memory_accesses", "SPV_INTEL_fpga_memory_attributes", "SPV_INTEL_fpga_reg", "SPV_INTEL_function_pointers", "SPV_INTEL_inline_assembly", "SPV_INTEL_io_pipes", "SPV_INTEL_kernel_attributes", "SPV_INTEL_long_constant_composite", "SPV_INTEL_loop_fuse", "SPV_INTEL_media_block_io", "SPV_INTEL_memory_access_aliasing", "SPV_INTEL_optnone", "SPV_INTEL_shader_integer_functions2", "SPV_INTEL_split_barrier", "SPV_INTEL_subgroups", "SPV_INTEL_unstructured_loop_controls", "SPV_INTEL_usm_storage_classes", "SPV_INTEL_variable_length_array", "SPV_INTEL_vector_compute", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_bit_instructions", "SPV_KHR_device_group", "SPV_KHR_expect_assume", "SPV_KHR_float_controls", "SPV_KHR_fragment_shader_barycentric", "SPV_KHR_fragment_shading_rate", "SPV_KHR_integer_dot_product", "SPV_KHR_linkonce_odr", "SPV_KHR_multiview", "SPV_KHR_no_integer_wrap_decoration", "SPV_KHR_non_semantic_info", "SPV_KHR_physical_storage_buffer", "SPV_KHR_post_depth_coverage", "SPV_KHR_ray_cull_mask", "SPV_KHR_ray_query", "SPV_KHR_ray_tracing", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_clock", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_rotate", "SPV_KHR_subgroup_uniform_control_flow", "SPV_KHR_subgroup_vote", "SPV_KHR_terminate_invocation", "SPV_KHR_uniform_group_instructions", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "SPV_KHR_workgroup_memory_explicit_layout", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_bindless_texture", "SPV_NV_compute_shader_derivatives", "SPV_NV_cooperative_matrix", "SPV_NV_fragment_shader_barycentric", "SPV_NV_geometry_shader_passthrough", "SPV_NV_mesh_shader", "SPV_NV_ray_tracing", "SPV_NV_ray_tracing_motion_blur", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_image_footprint", "SPV_NV_shader_sm_builtins", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_shading_rate", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" };
223        static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_early_and_late_fragment_tests, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_demote_to_helper_invocation, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_fragment_invocation_density, Extension::kSPV_EXT_fragment_shader_interlock, Extension::kSPV_EXT_mesh_shader, Extension::kSPV_EXT_physical_storage_buffer, Extension::kSPV_EXT_shader_atomic_float16_add, Extension::kSPV_EXT_shader_atomic_float_add, Extension::kSPV_EXT_shader_atomic_float_min_max, Extension::kSPV_EXT_shader_image_int64, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_GOOGLE_user_type, Extension::kSPV_INTEL_arbitrary_precision_fixed_point, Extension::kSPV_INTEL_arbitrary_precision_floating_point, Extension::kSPV_INTEL_arbitrary_precision_integers, Extension::kSPV_INTEL_blocking_pipes, Extension::kSPV_INTEL_debug_module, Extension::kSPV_INTEL_device_side_avc_motion_estimation, Extension::kSPV_INTEL_float_controls2, Extension::kSPV_INTEL_fp_fast_math_mode, Extension::kSPV_INTEL_fpga_buffer_location, Extension::kSPV_INTEL_fpga_cluster_attributes, Extension::kSPV_INTEL_fpga_loop_controls, Extension::kSPV_INTEL_fpga_memory_accesses, Extension::kSPV_INTEL_fpga_memory_attributes, Extension::kSPV_INTEL_fpga_reg, Extension::kSPV_INTEL_function_pointers, Extension::kSPV_INTEL_inline_assembly, Extension::kSPV_INTEL_io_pipes, Extension::kSPV_INTEL_kernel_attributes, Extension::kSPV_INTEL_long_constant_composite, Extension::kSPV_INTEL_loop_fuse, Extension::kSPV_INTEL_media_block_io, Extension::kSPV_INTEL_memory_access_aliasing, Extension::kSPV_INTEL_optnone, Extension::kSPV_INTEL_shader_integer_functions2, Extension::kSPV_INTEL_split_barrier, Extension::kSPV_INTEL_subgroups, Extension::kSPV_INTEL_unstructured_loop_controls, Extension::kSPV_INTEL_usm_storage_classes, Extension::kSPV_INTEL_variable_length_array, Extension::kSPV_INTEL_vector_compute, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_bit_instructions, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_expect_assume, Extension::kSPV_KHR_float_controls, Extension::kSPV_KHR_fragment_shader_barycentric, Extension::kSPV_KHR_fragment_shading_rate, Extension::kSPV_KHR_integer_dot_product, Extension::kSPV_KHR_linkonce_odr, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_no_integer_wrap_decoration, Extension::kSPV_KHR_non_semantic_info, Extension::kSPV_KHR_physical_storage_buffer, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_ray_cull_mask, Extension::kSPV_KHR_ray_query, Extension::kSPV_KHR_ray_tracing, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_clock, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_rotate, Extension::kSPV_KHR_subgroup_uniform_control_flow, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_terminate_invocation, Extension::kSPV_KHR_uniform_group_instructions, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_KHR_vulkan_memory_model, Extension::kSPV_KHR_workgroup_memory_explicit_layout, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_bindless_texture, Extension::kSPV_NV_compute_shader_derivatives, Extension::kSPV_NV_cooperative_matrix, Extension::kSPV_NV_fragment_shader_barycentric, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_mesh_shader, Extension::kSPV_NV_ray_tracing, Extension::kSPV_NV_ray_tracing_motion_blur, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_image_footprint, Extension::kSPV_NV_shader_sm_builtins, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_shading_rate, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique };
224        const auto b = std::begin(known_ext_strs);
225        const auto e = std::end(known_ext_strs);
226        const auto found = std::equal_range(
227            b, e, str, [](const char* str1, const char* str2) {
228                return std::strcmp(str1, str2) < 0;
229            });
230        if (found.first == e || found.first == found.second) return false;
231
232        *extension = known_ext_ids[found.first - b];
233        return true;
234    }
235
236
237const char* CapabilityToString(spv::Capability capability) {
238  switch (capability) {
239    case spv::Capability::Matrix:
240      return "Matrix";
241    case spv::Capability::Shader:
242      return "Shader";
243    case spv::Capability::Geometry:
244      return "Geometry";
245    case spv::Capability::Tessellation:
246      return "Tessellation";
247    case spv::Capability::Addresses:
248      return "Addresses";
249    case spv::Capability::Linkage:
250      return "Linkage";
251    case spv::Capability::Kernel:
252      return "Kernel";
253    case spv::Capability::Vector16:
254      return "Vector16";
255    case spv::Capability::Float16Buffer:
256      return "Float16Buffer";
257    case spv::Capability::Float16:
258      return "Float16";
259    case spv::Capability::Float64:
260      return "Float64";
261    case spv::Capability::Int64:
262      return "Int64";
263    case spv::Capability::Int64Atomics:
264      return "Int64Atomics";
265    case spv::Capability::ImageBasic:
266      return "ImageBasic";
267    case spv::Capability::ImageReadWrite:
268      return "ImageReadWrite";
269    case spv::Capability::ImageMipmap:
270      return "ImageMipmap";
271    case spv::Capability::Pipes:
272      return "Pipes";
273    case spv::Capability::Groups:
274      return "Groups";
275    case spv::Capability::DeviceEnqueue:
276      return "DeviceEnqueue";
277    case spv::Capability::LiteralSampler:
278      return "LiteralSampler";
279    case spv::Capability::AtomicStorage:
280      return "AtomicStorage";
281    case spv::Capability::Int16:
282      return "Int16";
283    case spv::Capability::TessellationPointSize:
284      return "TessellationPointSize";
285    case spv::Capability::GeometryPointSize:
286      return "GeometryPointSize";
287    case spv::Capability::ImageGatherExtended:
288      return "ImageGatherExtended";
289    case spv::Capability::StorageImageMultisample:
290      return "StorageImageMultisample";
291    case spv::Capability::UniformBufferArrayDynamicIndexing:
292      return "UniformBufferArrayDynamicIndexing";
293    case spv::Capability::SampledImageArrayDynamicIndexing:
294      return "SampledImageArrayDynamicIndexing";
295    case spv::Capability::StorageBufferArrayDynamicIndexing:
296      return "StorageBufferArrayDynamicIndexing";
297    case spv::Capability::StorageImageArrayDynamicIndexing:
298      return "StorageImageArrayDynamicIndexing";
299    case spv::Capability::ClipDistance:
300      return "ClipDistance";
301    case spv::Capability::CullDistance:
302      return "CullDistance";
303    case spv::Capability::ImageCubeArray:
304      return "ImageCubeArray";
305    case spv::Capability::SampleRateShading:
306      return "SampleRateShading";
307    case spv::Capability::ImageRect:
308      return "ImageRect";
309    case spv::Capability::SampledRect:
310      return "SampledRect";
311    case spv::Capability::GenericPointer:
312      return "GenericPointer";
313    case spv::Capability::Int8:
314      return "Int8";
315    case spv::Capability::InputAttachment:
316      return "InputAttachment";
317    case spv::Capability::SparseResidency:
318      return "SparseResidency";
319    case spv::Capability::MinLod:
320      return "MinLod";
321    case spv::Capability::Sampled1D:
322      return "Sampled1D";
323    case spv::Capability::Image1D:
324      return "Image1D";
325    case spv::Capability::SampledCubeArray:
326      return "SampledCubeArray";
327    case spv::Capability::SampledBuffer:
328      return "SampledBuffer";
329    case spv::Capability::ImageBuffer:
330      return "ImageBuffer";
331    case spv::Capability::ImageMSArray:
332      return "ImageMSArray";
333    case spv::Capability::StorageImageExtendedFormats:
334      return "StorageImageExtendedFormats";
335    case spv::Capability::ImageQuery:
336      return "ImageQuery";
337    case spv::Capability::DerivativeControl:
338      return "DerivativeControl";
339    case spv::Capability::InterpolationFunction:
340      return "InterpolationFunction";
341    case spv::Capability::TransformFeedback:
342      return "TransformFeedback";
343    case spv::Capability::GeometryStreams:
344      return "GeometryStreams";
345    case spv::Capability::StorageImageReadWithoutFormat:
346      return "StorageImageReadWithoutFormat";
347    case spv::Capability::StorageImageWriteWithoutFormat:
348      return "StorageImageWriteWithoutFormat";
349    case spv::Capability::MultiViewport:
350      return "MultiViewport";
351    case spv::Capability::SubgroupDispatch:
352      return "SubgroupDispatch";
353    case spv::Capability::NamedBarrier:
354      return "NamedBarrier";
355    case spv::Capability::PipeStorage:
356      return "PipeStorage";
357    case spv::Capability::GroupNonUniform:
358      return "GroupNonUniform";
359    case spv::Capability::GroupNonUniformVote:
360      return "GroupNonUniformVote";
361    case spv::Capability::GroupNonUniformArithmetic:
362      return "GroupNonUniformArithmetic";
363    case spv::Capability::GroupNonUniformBallot:
364      return "GroupNonUniformBallot";
365    case spv::Capability::GroupNonUniformShuffle:
366      return "GroupNonUniformShuffle";
367    case spv::Capability::GroupNonUniformShuffleRelative:
368      return "GroupNonUniformShuffleRelative";
369    case spv::Capability::GroupNonUniformClustered:
370      return "GroupNonUniformClustered";
371    case spv::Capability::GroupNonUniformQuad:
372      return "GroupNonUniformQuad";
373    case spv::Capability::ShaderLayer:
374      return "ShaderLayer";
375    case spv::Capability::ShaderViewportIndex:
376      return "ShaderViewportIndex";
377    case spv::Capability::UniformDecoration:
378      return "UniformDecoration";
379    case spv::Capability::CoreBuiltinsARM:
380      return "CoreBuiltinsARM";
381    case spv::Capability::TileImageColorReadAccessEXT:
382      return "TileImageColorReadAccessEXT";
383    case spv::Capability::TileImageDepthReadAccessEXT:
384      return "TileImageDepthReadAccessEXT";
385    case spv::Capability::TileImageStencilReadAccessEXT:
386      return "TileImageStencilReadAccessEXT";
387    case spv::Capability::FragmentShadingRateKHR:
388      return "FragmentShadingRateKHR";
389    case spv::Capability::SubgroupBallotKHR:
390      return "SubgroupBallotKHR";
391    case spv::Capability::DrawParameters:
392      return "DrawParameters";
393    case spv::Capability::WorkgroupMemoryExplicitLayoutKHR:
394      return "WorkgroupMemoryExplicitLayoutKHR";
395    case spv::Capability::WorkgroupMemoryExplicitLayout8BitAccessKHR:
396      return "WorkgroupMemoryExplicitLayout8BitAccessKHR";
397    case spv::Capability::WorkgroupMemoryExplicitLayout16BitAccessKHR:
398      return "WorkgroupMemoryExplicitLayout16BitAccessKHR";
399    case spv::Capability::SubgroupVoteKHR:
400      return "SubgroupVoteKHR";
401    case spv::Capability::StorageBuffer16BitAccess:
402      return "StorageBuffer16BitAccess";
403    case spv::Capability::UniformAndStorageBuffer16BitAccess:
404      return "UniformAndStorageBuffer16BitAccess";
405    case spv::Capability::StoragePushConstant16:
406      return "StoragePushConstant16";
407    case spv::Capability::StorageInputOutput16:
408      return "StorageInputOutput16";
409    case spv::Capability::DeviceGroup:
410      return "DeviceGroup";
411    case spv::Capability::MultiView:
412      return "MultiView";
413    case spv::Capability::VariablePointersStorageBuffer:
414      return "VariablePointersStorageBuffer";
415    case spv::Capability::VariablePointers:
416      return "VariablePointers";
417    case spv::Capability::AtomicStorageOps:
418      return "AtomicStorageOps";
419    case spv::Capability::SampleMaskPostDepthCoverage:
420      return "SampleMaskPostDepthCoverage";
421    case spv::Capability::StorageBuffer8BitAccess:
422      return "StorageBuffer8BitAccess";
423    case spv::Capability::UniformAndStorageBuffer8BitAccess:
424      return "UniformAndStorageBuffer8BitAccess";
425    case spv::Capability::StoragePushConstant8:
426      return "StoragePushConstant8";
427    case spv::Capability::DenormPreserve:
428      return "DenormPreserve";
429    case spv::Capability::DenormFlushToZero:
430      return "DenormFlushToZero";
431    case spv::Capability::SignedZeroInfNanPreserve:
432      return "SignedZeroInfNanPreserve";
433    case spv::Capability::RoundingModeRTE:
434      return "RoundingModeRTE";
435    case spv::Capability::RoundingModeRTZ:
436      return "RoundingModeRTZ";
437    case spv::Capability::RayQueryProvisionalKHR:
438      return "RayQueryProvisionalKHR";
439    case spv::Capability::RayQueryKHR:
440      return "RayQueryKHR";
441    case spv::Capability::RayTraversalPrimitiveCullingKHR:
442      return "RayTraversalPrimitiveCullingKHR";
443    case spv::Capability::RayTracingKHR:
444      return "RayTracingKHR";
445    case spv::Capability::TextureSampleWeightedQCOM:
446      return "TextureSampleWeightedQCOM";
447    case spv::Capability::TextureBoxFilterQCOM:
448      return "TextureBoxFilterQCOM";
449    case spv::Capability::TextureBlockMatchQCOM:
450      return "TextureBlockMatchQCOM";
451    case spv::Capability::Float16ImageAMD:
452      return "Float16ImageAMD";
453    case spv::Capability::ImageGatherBiasLodAMD:
454      return "ImageGatherBiasLodAMD";
455    case spv::Capability::FragmentMaskAMD:
456      return "FragmentMaskAMD";
457    case spv::Capability::StencilExportEXT:
458      return "StencilExportEXT";
459    case spv::Capability::ImageReadWriteLodAMD:
460      return "ImageReadWriteLodAMD";
461    case spv::Capability::Int64ImageEXT:
462      return "Int64ImageEXT";
463    case spv::Capability::ShaderClockKHR:
464      return "ShaderClockKHR";
465    case spv::Capability::ShaderEnqueueAMDX:
466      return "ShaderEnqueueAMDX";
467    case spv::Capability::SampleMaskOverrideCoverageNV:
468      return "SampleMaskOverrideCoverageNV";
469    case spv::Capability::GeometryShaderPassthroughNV:
470      return "GeometryShaderPassthroughNV";
471    case spv::Capability::ShaderViewportIndexLayerEXT:
472      return "ShaderViewportIndexLayerEXT";
473    case spv::Capability::ShaderViewportMaskNV:
474      return "ShaderViewportMaskNV";
475    case spv::Capability::ShaderStereoViewNV:
476      return "ShaderStereoViewNV";
477    case spv::Capability::PerViewAttributesNV:
478      return "PerViewAttributesNV";
479    case spv::Capability::FragmentFullyCoveredEXT:
480      return "FragmentFullyCoveredEXT";
481    case spv::Capability::MeshShadingNV:
482      return "MeshShadingNV";
483    case spv::Capability::ImageFootprintNV:
484      return "ImageFootprintNV";
485    case spv::Capability::MeshShadingEXT:
486      return "MeshShadingEXT";
487    case spv::Capability::FragmentBarycentricKHR:
488      return "FragmentBarycentricKHR";
489    case spv::Capability::ComputeDerivativeGroupQuadsNV:
490      return "ComputeDerivativeGroupQuadsNV";
491    case spv::Capability::FragmentDensityEXT:
492      return "FragmentDensityEXT";
493    case spv::Capability::GroupNonUniformPartitionedNV:
494      return "GroupNonUniformPartitionedNV";
495    case spv::Capability::ShaderNonUniform:
496      return "ShaderNonUniform";
497    case spv::Capability::RuntimeDescriptorArray:
498      return "RuntimeDescriptorArray";
499    case spv::Capability::InputAttachmentArrayDynamicIndexing:
500      return "InputAttachmentArrayDynamicIndexing";
501    case spv::Capability::UniformTexelBufferArrayDynamicIndexing:
502      return "UniformTexelBufferArrayDynamicIndexing";
503    case spv::Capability::StorageTexelBufferArrayDynamicIndexing:
504      return "StorageTexelBufferArrayDynamicIndexing";
505    case spv::Capability::UniformBufferArrayNonUniformIndexing:
506      return "UniformBufferArrayNonUniformIndexing";
507    case spv::Capability::SampledImageArrayNonUniformIndexing:
508      return "SampledImageArrayNonUniformIndexing";
509    case spv::Capability::StorageBufferArrayNonUniformIndexing:
510      return "StorageBufferArrayNonUniformIndexing";
511    case spv::Capability::StorageImageArrayNonUniformIndexing:
512      return "StorageImageArrayNonUniformIndexing";
513    case spv::Capability::InputAttachmentArrayNonUniformIndexing:
514      return "InputAttachmentArrayNonUniformIndexing";
515    case spv::Capability::UniformTexelBufferArrayNonUniformIndexing:
516      return "UniformTexelBufferArrayNonUniformIndexing";
517    case spv::Capability::StorageTexelBufferArrayNonUniformIndexing:
518      return "StorageTexelBufferArrayNonUniformIndexing";
519    case spv::Capability::RayTracingPositionFetchKHR:
520      return "RayTracingPositionFetchKHR";
521    case spv::Capability::RayTracingNV:
522      return "RayTracingNV";
523    case spv::Capability::RayTracingMotionBlurNV:
524      return "RayTracingMotionBlurNV";
525    case spv::Capability::VulkanMemoryModel:
526      return "VulkanMemoryModel";
527    case spv::Capability::VulkanMemoryModelDeviceScope:
528      return "VulkanMemoryModelDeviceScope";
529    case spv::Capability::PhysicalStorageBufferAddresses:
530      return "PhysicalStorageBufferAddresses";
531    case spv::Capability::ComputeDerivativeGroupLinearNV:
532      return "ComputeDerivativeGroupLinearNV";
533    case spv::Capability::RayTracingProvisionalKHR:
534      return "RayTracingProvisionalKHR";
535    case spv::Capability::CooperativeMatrixNV:
536      return "CooperativeMatrixNV";
537    case spv::Capability::FragmentShaderSampleInterlockEXT:
538      return "FragmentShaderSampleInterlockEXT";
539    case spv::Capability::FragmentShaderShadingRateInterlockEXT:
540      return "FragmentShaderShadingRateInterlockEXT";
541    case spv::Capability::ShaderSMBuiltinsNV:
542      return "ShaderSMBuiltinsNV";
543    case spv::Capability::FragmentShaderPixelInterlockEXT:
544      return "FragmentShaderPixelInterlockEXT";
545    case spv::Capability::DemoteToHelperInvocation:
546      return "DemoteToHelperInvocation";
547    case spv::Capability::DisplacementMicromapNV:
548      return "DisplacementMicromapNV";
549    case spv::Capability::RayTracingOpacityMicromapEXT:
550      return "RayTracingOpacityMicromapEXT";
551    case spv::Capability::ShaderInvocationReorderNV:
552      return "ShaderInvocationReorderNV";
553    case spv::Capability::BindlessTextureNV:
554      return "BindlessTextureNV";
555    case spv::Capability::RayQueryPositionFetchKHR:
556      return "RayQueryPositionFetchKHR";
557    case spv::Capability::RayTracingDisplacementMicromapNV:
558      return "RayTracingDisplacementMicromapNV";
559    case spv::Capability::SubgroupShuffleINTEL:
560      return "SubgroupShuffleINTEL";
561    case spv::Capability::SubgroupBufferBlockIOINTEL:
562      return "SubgroupBufferBlockIOINTEL";
563    case spv::Capability::SubgroupImageBlockIOINTEL:
564      return "SubgroupImageBlockIOINTEL";
565    case spv::Capability::SubgroupImageMediaBlockIOINTEL:
566      return "SubgroupImageMediaBlockIOINTEL";
567    case spv::Capability::RoundToInfinityINTEL:
568      return "RoundToInfinityINTEL";
569    case spv::Capability::FloatingPointModeINTEL:
570      return "FloatingPointModeINTEL";
571    case spv::Capability::IntegerFunctions2INTEL:
572      return "IntegerFunctions2INTEL";
573    case spv::Capability::FunctionPointersINTEL:
574      return "FunctionPointersINTEL";
575    case spv::Capability::IndirectReferencesINTEL:
576      return "IndirectReferencesINTEL";
577    case spv::Capability::AsmINTEL:
578      return "AsmINTEL";
579    case spv::Capability::AtomicFloat32MinMaxEXT:
580      return "AtomicFloat32MinMaxEXT";
581    case spv::Capability::AtomicFloat64MinMaxEXT:
582      return "AtomicFloat64MinMaxEXT";
583    case spv::Capability::AtomicFloat16MinMaxEXT:
584      return "AtomicFloat16MinMaxEXT";
585    case spv::Capability::VectorComputeINTEL:
586      return "VectorComputeINTEL";
587    case spv::Capability::VectorAnyINTEL:
588      return "VectorAnyINTEL";
589    case spv::Capability::ExpectAssumeKHR:
590      return "ExpectAssumeKHR";
591    case spv::Capability::SubgroupAvcMotionEstimationINTEL:
592      return "SubgroupAvcMotionEstimationINTEL";
593    case spv::Capability::SubgroupAvcMotionEstimationIntraINTEL:
594      return "SubgroupAvcMotionEstimationIntraINTEL";
595    case spv::Capability::SubgroupAvcMotionEstimationChromaINTEL:
596      return "SubgroupAvcMotionEstimationChromaINTEL";
597    case spv::Capability::VariableLengthArrayINTEL:
598      return "VariableLengthArrayINTEL";
599    case spv::Capability::FunctionFloatControlINTEL:
600      return "FunctionFloatControlINTEL";
601    case spv::Capability::FPGAMemoryAttributesINTEL:
602      return "FPGAMemoryAttributesINTEL";
603    case spv::Capability::FPFastMathModeINTEL:
604      return "FPFastMathModeINTEL";
605    case spv::Capability::ArbitraryPrecisionIntegersINTEL:
606      return "ArbitraryPrecisionIntegersINTEL";
607    case spv::Capability::ArbitraryPrecisionFloatingPointINTEL:
608      return "ArbitraryPrecisionFloatingPointINTEL";
609    case spv::Capability::UnstructuredLoopControlsINTEL:
610      return "UnstructuredLoopControlsINTEL";
611    case spv::Capability::FPGALoopControlsINTEL:
612      return "FPGALoopControlsINTEL";
613    case spv::Capability::KernelAttributesINTEL:
614      return "KernelAttributesINTEL";
615    case spv::Capability::FPGAKernelAttributesINTEL:
616      return "FPGAKernelAttributesINTEL";
617    case spv::Capability::FPGAMemoryAccessesINTEL:
618      return "FPGAMemoryAccessesINTEL";
619    case spv::Capability::FPGAClusterAttributesINTEL:
620      return "FPGAClusterAttributesINTEL";
621    case spv::Capability::LoopFuseINTEL:
622      return "LoopFuseINTEL";
623    case spv::Capability::FPGADSPControlINTEL:
624      return "FPGADSPControlINTEL";
625    case spv::Capability::MemoryAccessAliasingINTEL:
626      return "MemoryAccessAliasingINTEL";
627    case spv::Capability::FPGAInvocationPipeliningAttributesINTEL:
628      return "FPGAInvocationPipeliningAttributesINTEL";
629    case spv::Capability::FPGABufferLocationINTEL:
630      return "FPGABufferLocationINTEL";
631    case spv::Capability::ArbitraryPrecisionFixedPointINTEL:
632      return "ArbitraryPrecisionFixedPointINTEL";
633    case spv::Capability::USMStorageClassesINTEL:
634      return "USMStorageClassesINTEL";
635    case spv::Capability::RuntimeAlignedAttributeINTEL:
636      return "RuntimeAlignedAttributeINTEL";
637    case spv::Capability::IOPipesINTEL:
638      return "IOPipesINTEL";
639    case spv::Capability::BlockingPipesINTEL:
640      return "BlockingPipesINTEL";
641    case spv::Capability::FPGARegINTEL:
642      return "FPGARegINTEL";
643    case spv::Capability::DotProductInputAll:
644      return "DotProductInputAll";
645    case spv::Capability::DotProductInput4x8Bit:
646      return "DotProductInput4x8Bit";
647    case spv::Capability::DotProductInput4x8BitPacked:
648      return "DotProductInput4x8BitPacked";
649    case spv::Capability::DotProduct:
650      return "DotProduct";
651    case spv::Capability::RayCullMaskKHR:
652      return "RayCullMaskKHR";
653    case spv::Capability::CooperativeMatrixKHR:
654      return "CooperativeMatrixKHR";
655    case spv::Capability::BitInstructions:
656      return "BitInstructions";
657    case spv::Capability::GroupNonUniformRotateKHR:
658      return "GroupNonUniformRotateKHR";
659    case spv::Capability::AtomicFloat32AddEXT:
660      return "AtomicFloat32AddEXT";
661    case spv::Capability::AtomicFloat64AddEXT:
662      return "AtomicFloat64AddEXT";
663    case spv::Capability::LongCompositesINTEL:
664      return "LongCompositesINTEL";
665    case spv::Capability::OptNoneINTEL:
666      return "OptNoneINTEL";
667    case spv::Capability::AtomicFloat16AddEXT:
668      return "AtomicFloat16AddEXT";
669    case spv::Capability::DebugInfoModuleINTEL:
670      return "DebugInfoModuleINTEL";
671    case spv::Capability::BFloat16ConversionINTEL:
672      return "BFloat16ConversionINTEL";
673    case spv::Capability::SplitBarrierINTEL:
674      return "SplitBarrierINTEL";
675    case spv::Capability::FPGAClusterAttributesV2INTEL:
676      return "FPGAClusterAttributesV2INTEL";
677    case spv::Capability::FPGAKernelAttributesv2INTEL:
678      return "FPGAKernelAttributesv2INTEL";
679    case spv::Capability::FPMaxErrorINTEL:
680      return "FPMaxErrorINTEL";
681    case spv::Capability::FPGALatencyControlINTEL:
682      return "FPGALatencyControlINTEL";
683    case spv::Capability::FPGAArgumentInterfacesINTEL:
684      return "FPGAArgumentInterfacesINTEL";
685    case spv::Capability::GlobalVariableHostAccessINTEL:
686      return "GlobalVariableHostAccessINTEL";
687    case spv::Capability::GlobalVariableFPGADecorationsINTEL:
688      return "GlobalVariableFPGADecorationsINTEL";
689    case spv::Capability::GroupUniformArithmeticKHR:
690      return "GroupUniformArithmeticKHR";
691    case spv::Capability::CacheControlsINTEL:
692      return "CacheControlsINTEL";
693    case spv::Capability::Max:
694      assert(0 && "Attempting to convert spv::Capability::Max to string");
695      return "";
696  }
697
698  return "";
699}