• 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_explicit_vertex_parameter:
14      return "SPV_AMD_shader_explicit_vertex_parameter";
15    case Extension::kSPV_AMD_shader_fragment_mask:
16      return "SPV_AMD_shader_fragment_mask";
17    case Extension::kSPV_AMD_shader_image_load_store_lod:
18      return "SPV_AMD_shader_image_load_store_lod";
19    case Extension::kSPV_AMD_shader_trinary_minmax:
20      return "SPV_AMD_shader_trinary_minmax";
21    case Extension::kSPV_AMD_texture_gather_bias_lod:
22      return "SPV_AMD_texture_gather_bias_lod";
23    case Extension::kSPV_EXT_demote_to_helper_invocation:
24      return "SPV_EXT_demote_to_helper_invocation";
25    case Extension::kSPV_EXT_descriptor_indexing:
26      return "SPV_EXT_descriptor_indexing";
27    case Extension::kSPV_EXT_fragment_fully_covered:
28      return "SPV_EXT_fragment_fully_covered";
29    case Extension::kSPV_EXT_fragment_invocation_density:
30      return "SPV_EXT_fragment_invocation_density";
31    case Extension::kSPV_EXT_fragment_shader_interlock:
32      return "SPV_EXT_fragment_shader_interlock";
33    case Extension::kSPV_EXT_physical_storage_buffer:
34      return "SPV_EXT_physical_storage_buffer";
35    case Extension::kSPV_EXT_shader_atomic_float16_add:
36      return "SPV_EXT_shader_atomic_float16_add";
37    case Extension::kSPV_EXT_shader_atomic_float_add:
38      return "SPV_EXT_shader_atomic_float_add";
39    case Extension::kSPV_EXT_shader_atomic_float_min_max:
40      return "SPV_EXT_shader_atomic_float_min_max";
41    case Extension::kSPV_EXT_shader_image_int64:
42      return "SPV_EXT_shader_image_int64";
43    case Extension::kSPV_EXT_shader_stencil_export:
44      return "SPV_EXT_shader_stencil_export";
45    case Extension::kSPV_EXT_shader_viewport_index_layer:
46      return "SPV_EXT_shader_viewport_index_layer";
47    case Extension::kSPV_GOOGLE_decorate_string:
48      return "SPV_GOOGLE_decorate_string";
49    case Extension::kSPV_GOOGLE_hlsl_functionality1:
50      return "SPV_GOOGLE_hlsl_functionality1";
51    case Extension::kSPV_GOOGLE_user_type:
52      return "SPV_GOOGLE_user_type";
53    case Extension::kSPV_INTEL_arbitrary_precision_fixed_point:
54      return "SPV_INTEL_arbitrary_precision_fixed_point";
55    case Extension::kSPV_INTEL_arbitrary_precision_floating_point:
56      return "SPV_INTEL_arbitrary_precision_floating_point";
57    case Extension::kSPV_INTEL_arbitrary_precision_integers:
58      return "SPV_INTEL_arbitrary_precision_integers";
59    case Extension::kSPV_INTEL_blocking_pipes:
60      return "SPV_INTEL_blocking_pipes";
61    case Extension::kSPV_INTEL_debug_module:
62      return "SPV_INTEL_debug_module";
63    case Extension::kSPV_INTEL_device_side_avc_motion_estimation:
64      return "SPV_INTEL_device_side_avc_motion_estimation";
65    case Extension::kSPV_INTEL_float_controls2:
66      return "SPV_INTEL_float_controls2";
67    case Extension::kSPV_INTEL_fp_fast_math_mode:
68      return "SPV_INTEL_fp_fast_math_mode";
69    case Extension::kSPV_INTEL_fpga_buffer_location:
70      return "SPV_INTEL_fpga_buffer_location";
71    case Extension::kSPV_INTEL_fpga_cluster_attributes:
72      return "SPV_INTEL_fpga_cluster_attributes";
73    case Extension::kSPV_INTEL_fpga_loop_controls:
74      return "SPV_INTEL_fpga_loop_controls";
75    case Extension::kSPV_INTEL_fpga_memory_accesses:
76      return "SPV_INTEL_fpga_memory_accesses";
77    case Extension::kSPV_INTEL_fpga_memory_attributes:
78      return "SPV_INTEL_fpga_memory_attributes";
79    case Extension::kSPV_INTEL_fpga_reg:
80      return "SPV_INTEL_fpga_reg";
81    case Extension::kSPV_INTEL_function_pointers:
82      return "SPV_INTEL_function_pointers";
83    case Extension::kSPV_INTEL_inline_assembly:
84      return "SPV_INTEL_inline_assembly";
85    case Extension::kSPV_INTEL_io_pipes:
86      return "SPV_INTEL_io_pipes";
87    case Extension::kSPV_INTEL_kernel_attributes:
88      return "SPV_INTEL_kernel_attributes";
89    case Extension::kSPV_INTEL_long_constant_composite:
90      return "SPV_INTEL_long_constant_composite";
91    case Extension::kSPV_INTEL_loop_fuse:
92      return "SPV_INTEL_loop_fuse";
93    case Extension::kSPV_INTEL_media_block_io:
94      return "SPV_INTEL_media_block_io";
95    case Extension::kSPV_INTEL_optnone:
96      return "SPV_INTEL_optnone";
97    case Extension::kSPV_INTEL_shader_integer_functions2:
98      return "SPV_INTEL_shader_integer_functions2";
99    case Extension::kSPV_INTEL_subgroups:
100      return "SPV_INTEL_subgroups";
101    case Extension::kSPV_INTEL_unstructured_loop_controls:
102      return "SPV_INTEL_unstructured_loop_controls";
103    case Extension::kSPV_INTEL_usm_storage_classes:
104      return "SPV_INTEL_usm_storage_classes";
105    case Extension::kSPV_INTEL_variable_length_array:
106      return "SPV_INTEL_variable_length_array";
107    case Extension::kSPV_INTEL_vector_compute:
108      return "SPV_INTEL_vector_compute";
109    case Extension::kSPV_KHR_16bit_storage:
110      return "SPV_KHR_16bit_storage";
111    case Extension::kSPV_KHR_8bit_storage:
112      return "SPV_KHR_8bit_storage";
113    case Extension::kSPV_KHR_bit_instructions:
114      return "SPV_KHR_bit_instructions";
115    case Extension::kSPV_KHR_device_group:
116      return "SPV_KHR_device_group";
117    case Extension::kSPV_KHR_expect_assume:
118      return "SPV_KHR_expect_assume";
119    case Extension::kSPV_KHR_float_controls:
120      return "SPV_KHR_float_controls";
121    case Extension::kSPV_KHR_fragment_shading_rate:
122      return "SPV_KHR_fragment_shading_rate";
123    case Extension::kSPV_KHR_integer_dot_product:
124      return "SPV_KHR_integer_dot_product";
125    case Extension::kSPV_KHR_linkonce_odr:
126      return "SPV_KHR_linkonce_odr";
127    case Extension::kSPV_KHR_multiview:
128      return "SPV_KHR_multiview";
129    case Extension::kSPV_KHR_no_integer_wrap_decoration:
130      return "SPV_KHR_no_integer_wrap_decoration";
131    case Extension::kSPV_KHR_non_semantic_info:
132      return "SPV_KHR_non_semantic_info";
133    case Extension::kSPV_KHR_physical_storage_buffer:
134      return "SPV_KHR_physical_storage_buffer";
135    case Extension::kSPV_KHR_post_depth_coverage:
136      return "SPV_KHR_post_depth_coverage";
137    case Extension::kSPV_KHR_ray_query:
138      return "SPV_KHR_ray_query";
139    case Extension::kSPV_KHR_ray_tracing:
140      return "SPV_KHR_ray_tracing";
141    case Extension::kSPV_KHR_shader_atomic_counter_ops:
142      return "SPV_KHR_shader_atomic_counter_ops";
143    case Extension::kSPV_KHR_shader_ballot:
144      return "SPV_KHR_shader_ballot";
145    case Extension::kSPV_KHR_shader_clock:
146      return "SPV_KHR_shader_clock";
147    case Extension::kSPV_KHR_shader_draw_parameters:
148      return "SPV_KHR_shader_draw_parameters";
149    case Extension::kSPV_KHR_storage_buffer_storage_class:
150      return "SPV_KHR_storage_buffer_storage_class";
151    case Extension::kSPV_KHR_subgroup_uniform_control_flow:
152      return "SPV_KHR_subgroup_uniform_control_flow";
153    case Extension::kSPV_KHR_subgroup_vote:
154      return "SPV_KHR_subgroup_vote";
155    case Extension::kSPV_KHR_terminate_invocation:
156      return "SPV_KHR_terminate_invocation";
157    case Extension::kSPV_KHR_variable_pointers:
158      return "SPV_KHR_variable_pointers";
159    case Extension::kSPV_KHR_vulkan_memory_model:
160      return "SPV_KHR_vulkan_memory_model";
161    case Extension::kSPV_KHR_workgroup_memory_explicit_layout:
162      return "SPV_KHR_workgroup_memory_explicit_layout";
163    case Extension::kSPV_NVX_multiview_per_view_attributes:
164      return "SPV_NVX_multiview_per_view_attributes";
165    case Extension::kSPV_NV_compute_shader_derivatives:
166      return "SPV_NV_compute_shader_derivatives";
167    case Extension::kSPV_NV_cooperative_matrix:
168      return "SPV_NV_cooperative_matrix";
169    case Extension::kSPV_NV_fragment_shader_barycentric:
170      return "SPV_NV_fragment_shader_barycentric";
171    case Extension::kSPV_NV_geometry_shader_passthrough:
172      return "SPV_NV_geometry_shader_passthrough";
173    case Extension::kSPV_NV_mesh_shader:
174      return "SPV_NV_mesh_shader";
175    case Extension::kSPV_NV_ray_tracing:
176      return "SPV_NV_ray_tracing";
177    case Extension::kSPV_NV_ray_tracing_motion_blur:
178      return "SPV_NV_ray_tracing_motion_blur";
179    case Extension::kSPV_NV_sample_mask_override_coverage:
180      return "SPV_NV_sample_mask_override_coverage";
181    case Extension::kSPV_NV_shader_image_footprint:
182      return "SPV_NV_shader_image_footprint";
183    case Extension::kSPV_NV_shader_sm_builtins:
184      return "SPV_NV_shader_sm_builtins";
185    case Extension::kSPV_NV_shader_subgroup_partitioned:
186      return "SPV_NV_shader_subgroup_partitioned";
187    case Extension::kSPV_NV_shading_rate:
188      return "SPV_NV_shading_rate";
189    case Extension::kSPV_NV_stereo_view_rendering:
190      return "SPV_NV_stereo_view_rendering";
191    case Extension::kSPV_NV_viewport_array2:
192      return "SPV_NV_viewport_array2";
193    case Extension::kSPV_VALIDATOR_ignore_type_decl_unique:
194      return "SPV_VALIDATOR_ignore_type_decl_unique";
195  }
196
197  return "";
198}
199
200
201    bool GetExtensionFromString(const char* str, Extension* extension) {
202        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_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_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_optnone", "SPV_INTEL_shader_integer_functions2", "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_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_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_uniform_control_flow", "SPV_KHR_subgroup_vote", "SPV_KHR_terminate_invocation", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "SPV_KHR_workgroup_memory_explicit_layout", "SPV_NVX_multiview_per_view_attributes", "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" };
203        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_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_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_optnone, Extension::kSPV_INTEL_shader_integer_functions2, 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_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_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_uniform_control_flow, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_terminate_invocation, 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_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 };
204        const auto b = std::begin(known_ext_strs);
205        const auto e = std::end(known_ext_strs);
206        const auto found = std::equal_range(
207            b, e, str, [](const char* str1, const char* str2) {
208                return std::strcmp(str1, str2) < 0;
209            });
210        if (found.first == e || found.first == found.second) return false;
211
212        *extension = known_ext_ids[found.first - b];
213        return true;
214    }
215
216
217const char* CapabilityToString(SpvCapability capability) {
218  switch (capability) {
219    case SpvCapabilityMatrix:
220      return "Matrix";
221    case SpvCapabilityShader:
222      return "Shader";
223    case SpvCapabilityGeometry:
224      return "Geometry";
225    case SpvCapabilityTessellation:
226      return "Tessellation";
227    case SpvCapabilityAddresses:
228      return "Addresses";
229    case SpvCapabilityLinkage:
230      return "Linkage";
231    case SpvCapabilityKernel:
232      return "Kernel";
233    case SpvCapabilityVector16:
234      return "Vector16";
235    case SpvCapabilityFloat16Buffer:
236      return "Float16Buffer";
237    case SpvCapabilityFloat16:
238      return "Float16";
239    case SpvCapabilityFloat64:
240      return "Float64";
241    case SpvCapabilityInt64:
242      return "Int64";
243    case SpvCapabilityInt64Atomics:
244      return "Int64Atomics";
245    case SpvCapabilityImageBasic:
246      return "ImageBasic";
247    case SpvCapabilityImageReadWrite:
248      return "ImageReadWrite";
249    case SpvCapabilityImageMipmap:
250      return "ImageMipmap";
251    case SpvCapabilityPipes:
252      return "Pipes";
253    case SpvCapabilityGroups:
254      return "Groups";
255    case SpvCapabilityDeviceEnqueue:
256      return "DeviceEnqueue";
257    case SpvCapabilityLiteralSampler:
258      return "LiteralSampler";
259    case SpvCapabilityAtomicStorage:
260      return "AtomicStorage";
261    case SpvCapabilityInt16:
262      return "Int16";
263    case SpvCapabilityTessellationPointSize:
264      return "TessellationPointSize";
265    case SpvCapabilityGeometryPointSize:
266      return "GeometryPointSize";
267    case SpvCapabilityImageGatherExtended:
268      return "ImageGatherExtended";
269    case SpvCapabilityStorageImageMultisample:
270      return "StorageImageMultisample";
271    case SpvCapabilityUniformBufferArrayDynamicIndexing:
272      return "UniformBufferArrayDynamicIndexing";
273    case SpvCapabilitySampledImageArrayDynamicIndexing:
274      return "SampledImageArrayDynamicIndexing";
275    case SpvCapabilityStorageBufferArrayDynamicIndexing:
276      return "StorageBufferArrayDynamicIndexing";
277    case SpvCapabilityStorageImageArrayDynamicIndexing:
278      return "StorageImageArrayDynamicIndexing";
279    case SpvCapabilityClipDistance:
280      return "ClipDistance";
281    case SpvCapabilityCullDistance:
282      return "CullDistance";
283    case SpvCapabilityImageCubeArray:
284      return "ImageCubeArray";
285    case SpvCapabilitySampleRateShading:
286      return "SampleRateShading";
287    case SpvCapabilityImageRect:
288      return "ImageRect";
289    case SpvCapabilitySampledRect:
290      return "SampledRect";
291    case SpvCapabilityGenericPointer:
292      return "GenericPointer";
293    case SpvCapabilityInt8:
294      return "Int8";
295    case SpvCapabilityInputAttachment:
296      return "InputAttachment";
297    case SpvCapabilitySparseResidency:
298      return "SparseResidency";
299    case SpvCapabilityMinLod:
300      return "MinLod";
301    case SpvCapabilitySampled1D:
302      return "Sampled1D";
303    case SpvCapabilityImage1D:
304      return "Image1D";
305    case SpvCapabilitySampledCubeArray:
306      return "SampledCubeArray";
307    case SpvCapabilitySampledBuffer:
308      return "SampledBuffer";
309    case SpvCapabilityImageBuffer:
310      return "ImageBuffer";
311    case SpvCapabilityImageMSArray:
312      return "ImageMSArray";
313    case SpvCapabilityStorageImageExtendedFormats:
314      return "StorageImageExtendedFormats";
315    case SpvCapabilityImageQuery:
316      return "ImageQuery";
317    case SpvCapabilityDerivativeControl:
318      return "DerivativeControl";
319    case SpvCapabilityInterpolationFunction:
320      return "InterpolationFunction";
321    case SpvCapabilityTransformFeedback:
322      return "TransformFeedback";
323    case SpvCapabilityGeometryStreams:
324      return "GeometryStreams";
325    case SpvCapabilityStorageImageReadWithoutFormat:
326      return "StorageImageReadWithoutFormat";
327    case SpvCapabilityStorageImageWriteWithoutFormat:
328      return "StorageImageWriteWithoutFormat";
329    case SpvCapabilityMultiViewport:
330      return "MultiViewport";
331    case SpvCapabilitySubgroupDispatch:
332      return "SubgroupDispatch";
333    case SpvCapabilityNamedBarrier:
334      return "NamedBarrier";
335    case SpvCapabilityPipeStorage:
336      return "PipeStorage";
337    case SpvCapabilityGroupNonUniform:
338      return "GroupNonUniform";
339    case SpvCapabilityGroupNonUniformVote:
340      return "GroupNonUniformVote";
341    case SpvCapabilityGroupNonUniformArithmetic:
342      return "GroupNonUniformArithmetic";
343    case SpvCapabilityGroupNonUniformBallot:
344      return "GroupNonUniformBallot";
345    case SpvCapabilityGroupNonUniformShuffle:
346      return "GroupNonUniformShuffle";
347    case SpvCapabilityGroupNonUniformShuffleRelative:
348      return "GroupNonUniformShuffleRelative";
349    case SpvCapabilityGroupNonUniformClustered:
350      return "GroupNonUniformClustered";
351    case SpvCapabilityGroupNonUniformQuad:
352      return "GroupNonUniformQuad";
353    case SpvCapabilityShaderLayer:
354      return "ShaderLayer";
355    case SpvCapabilityShaderViewportIndex:
356      return "ShaderViewportIndex";
357    case SpvCapabilityFragmentShadingRateKHR:
358      return "FragmentShadingRateKHR";
359    case SpvCapabilitySubgroupBallotKHR:
360      return "SubgroupBallotKHR";
361    case SpvCapabilityDrawParameters:
362      return "DrawParameters";
363    case SpvCapabilityWorkgroupMemoryExplicitLayoutKHR:
364      return "WorkgroupMemoryExplicitLayoutKHR";
365    case SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR:
366      return "WorkgroupMemoryExplicitLayout8BitAccessKHR";
367    case SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR:
368      return "WorkgroupMemoryExplicitLayout16BitAccessKHR";
369    case SpvCapabilitySubgroupVoteKHR:
370      return "SubgroupVoteKHR";
371    case SpvCapabilityStorageBuffer16BitAccess:
372      return "StorageBuffer16BitAccess";
373    case SpvCapabilityUniformAndStorageBuffer16BitAccess:
374      return "UniformAndStorageBuffer16BitAccess";
375    case SpvCapabilityStoragePushConstant16:
376      return "StoragePushConstant16";
377    case SpvCapabilityStorageInputOutput16:
378      return "StorageInputOutput16";
379    case SpvCapabilityDeviceGroup:
380      return "DeviceGroup";
381    case SpvCapabilityMultiView:
382      return "MultiView";
383    case SpvCapabilityVariablePointersStorageBuffer:
384      return "VariablePointersStorageBuffer";
385    case SpvCapabilityVariablePointers:
386      return "VariablePointers";
387    case SpvCapabilityAtomicStorageOps:
388      return "AtomicStorageOps";
389    case SpvCapabilitySampleMaskPostDepthCoverage:
390      return "SampleMaskPostDepthCoverage";
391    case SpvCapabilityStorageBuffer8BitAccess:
392      return "StorageBuffer8BitAccess";
393    case SpvCapabilityUniformAndStorageBuffer8BitAccess:
394      return "UniformAndStorageBuffer8BitAccess";
395    case SpvCapabilityStoragePushConstant8:
396      return "StoragePushConstant8";
397    case SpvCapabilityDenormPreserve:
398      return "DenormPreserve";
399    case SpvCapabilityDenormFlushToZero:
400      return "DenormFlushToZero";
401    case SpvCapabilitySignedZeroInfNanPreserve:
402      return "SignedZeroInfNanPreserve";
403    case SpvCapabilityRoundingModeRTE:
404      return "RoundingModeRTE";
405    case SpvCapabilityRoundingModeRTZ:
406      return "RoundingModeRTZ";
407    case SpvCapabilityRayQueryProvisionalKHR:
408      return "RayQueryProvisionalKHR";
409    case SpvCapabilityRayQueryKHR:
410      return "RayQueryKHR";
411    case SpvCapabilityRayTraversalPrimitiveCullingKHR:
412      return "RayTraversalPrimitiveCullingKHR";
413    case SpvCapabilityRayTracingKHR:
414      return "RayTracingKHR";
415    case SpvCapabilityFloat16ImageAMD:
416      return "Float16ImageAMD";
417    case SpvCapabilityImageGatherBiasLodAMD:
418      return "ImageGatherBiasLodAMD";
419    case SpvCapabilityFragmentMaskAMD:
420      return "FragmentMaskAMD";
421    case SpvCapabilityStencilExportEXT:
422      return "StencilExportEXT";
423    case SpvCapabilityImageReadWriteLodAMD:
424      return "ImageReadWriteLodAMD";
425    case SpvCapabilityInt64ImageEXT:
426      return "Int64ImageEXT";
427    case SpvCapabilityShaderClockKHR:
428      return "ShaderClockKHR";
429    case SpvCapabilitySampleMaskOverrideCoverageNV:
430      return "SampleMaskOverrideCoverageNV";
431    case SpvCapabilityGeometryShaderPassthroughNV:
432      return "GeometryShaderPassthroughNV";
433    case SpvCapabilityShaderViewportIndexLayerEXT:
434      return "ShaderViewportIndexLayerEXT";
435    case SpvCapabilityShaderViewportMaskNV:
436      return "ShaderViewportMaskNV";
437    case SpvCapabilityShaderStereoViewNV:
438      return "ShaderStereoViewNV";
439    case SpvCapabilityPerViewAttributesNV:
440      return "PerViewAttributesNV";
441    case SpvCapabilityFragmentFullyCoveredEXT:
442      return "FragmentFullyCoveredEXT";
443    case SpvCapabilityMeshShadingNV:
444      return "MeshShadingNV";
445    case SpvCapabilityImageFootprintNV:
446      return "ImageFootprintNV";
447    case SpvCapabilityFragmentBarycentricNV:
448      return "FragmentBarycentricNV";
449    case SpvCapabilityComputeDerivativeGroupQuadsNV:
450      return "ComputeDerivativeGroupQuadsNV";
451    case SpvCapabilityFragmentDensityEXT:
452      return "FragmentDensityEXT";
453    case SpvCapabilityGroupNonUniformPartitionedNV:
454      return "GroupNonUniformPartitionedNV";
455    case SpvCapabilityShaderNonUniform:
456      return "ShaderNonUniform";
457    case SpvCapabilityRuntimeDescriptorArray:
458      return "RuntimeDescriptorArray";
459    case SpvCapabilityInputAttachmentArrayDynamicIndexing:
460      return "InputAttachmentArrayDynamicIndexing";
461    case SpvCapabilityUniformTexelBufferArrayDynamicIndexing:
462      return "UniformTexelBufferArrayDynamicIndexing";
463    case SpvCapabilityStorageTexelBufferArrayDynamicIndexing:
464      return "StorageTexelBufferArrayDynamicIndexing";
465    case SpvCapabilityUniformBufferArrayNonUniformIndexing:
466      return "UniformBufferArrayNonUniformIndexing";
467    case SpvCapabilitySampledImageArrayNonUniformIndexing:
468      return "SampledImageArrayNonUniformIndexing";
469    case SpvCapabilityStorageBufferArrayNonUniformIndexing:
470      return "StorageBufferArrayNonUniformIndexing";
471    case SpvCapabilityStorageImageArrayNonUniformIndexing:
472      return "StorageImageArrayNonUniformIndexing";
473    case SpvCapabilityInputAttachmentArrayNonUniformIndexing:
474      return "InputAttachmentArrayNonUniformIndexing";
475    case SpvCapabilityUniformTexelBufferArrayNonUniformIndexing:
476      return "UniformTexelBufferArrayNonUniformIndexing";
477    case SpvCapabilityStorageTexelBufferArrayNonUniformIndexing:
478      return "StorageTexelBufferArrayNonUniformIndexing";
479    case SpvCapabilityRayTracingNV:
480      return "RayTracingNV";
481    case SpvCapabilityRayTracingMotionBlurNV:
482      return "RayTracingMotionBlurNV";
483    case SpvCapabilityVulkanMemoryModel:
484      return "VulkanMemoryModel";
485    case SpvCapabilityVulkanMemoryModelDeviceScope:
486      return "VulkanMemoryModelDeviceScope";
487    case SpvCapabilityPhysicalStorageBufferAddresses:
488      return "PhysicalStorageBufferAddresses";
489    case SpvCapabilityComputeDerivativeGroupLinearNV:
490      return "ComputeDerivativeGroupLinearNV";
491    case SpvCapabilityRayTracingProvisionalKHR:
492      return "RayTracingProvisionalKHR";
493    case SpvCapabilityCooperativeMatrixNV:
494      return "CooperativeMatrixNV";
495    case SpvCapabilityFragmentShaderSampleInterlockEXT:
496      return "FragmentShaderSampleInterlockEXT";
497    case SpvCapabilityFragmentShaderShadingRateInterlockEXT:
498      return "FragmentShaderShadingRateInterlockEXT";
499    case SpvCapabilityShaderSMBuiltinsNV:
500      return "ShaderSMBuiltinsNV";
501    case SpvCapabilityFragmentShaderPixelInterlockEXT:
502      return "FragmentShaderPixelInterlockEXT";
503    case SpvCapabilityDemoteToHelperInvocationEXT:
504      return "DemoteToHelperInvocationEXT";
505    case SpvCapabilitySubgroupShuffleINTEL:
506      return "SubgroupShuffleINTEL";
507    case SpvCapabilitySubgroupBufferBlockIOINTEL:
508      return "SubgroupBufferBlockIOINTEL";
509    case SpvCapabilitySubgroupImageBlockIOINTEL:
510      return "SubgroupImageBlockIOINTEL";
511    case SpvCapabilitySubgroupImageMediaBlockIOINTEL:
512      return "SubgroupImageMediaBlockIOINTEL";
513    case SpvCapabilityRoundToInfinityINTEL:
514      return "RoundToInfinityINTEL";
515    case SpvCapabilityFloatingPointModeINTEL:
516      return "FloatingPointModeINTEL";
517    case SpvCapabilityIntegerFunctions2INTEL:
518      return "IntegerFunctions2INTEL";
519    case SpvCapabilityFunctionPointersINTEL:
520      return "FunctionPointersINTEL";
521    case SpvCapabilityIndirectReferencesINTEL:
522      return "IndirectReferencesINTEL";
523    case SpvCapabilityAsmINTEL:
524      return "AsmINTEL";
525    case SpvCapabilityAtomicFloat32MinMaxEXT:
526      return "AtomicFloat32MinMaxEXT";
527    case SpvCapabilityAtomicFloat64MinMaxEXT:
528      return "AtomicFloat64MinMaxEXT";
529    case SpvCapabilityAtomicFloat16MinMaxEXT:
530      return "AtomicFloat16MinMaxEXT";
531    case SpvCapabilityVectorComputeINTEL:
532      return "VectorComputeINTEL";
533    case SpvCapabilityVectorAnyINTEL:
534      return "VectorAnyINTEL";
535    case SpvCapabilityExpectAssumeKHR:
536      return "ExpectAssumeKHR";
537    case SpvCapabilitySubgroupAvcMotionEstimationINTEL:
538      return "SubgroupAvcMotionEstimationINTEL";
539    case SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL:
540      return "SubgroupAvcMotionEstimationIntraINTEL";
541    case SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL:
542      return "SubgroupAvcMotionEstimationChromaINTEL";
543    case SpvCapabilityVariableLengthArrayINTEL:
544      return "VariableLengthArrayINTEL";
545    case SpvCapabilityFunctionFloatControlINTEL:
546      return "FunctionFloatControlINTEL";
547    case SpvCapabilityFPGAMemoryAttributesINTEL:
548      return "FPGAMemoryAttributesINTEL";
549    case SpvCapabilityFPFastMathModeINTEL:
550      return "FPFastMathModeINTEL";
551    case SpvCapabilityArbitraryPrecisionIntegersINTEL:
552      return "ArbitraryPrecisionIntegersINTEL";
553    case SpvCapabilityArbitraryPrecisionFloatingPointINTEL:
554      return "ArbitraryPrecisionFloatingPointINTEL";
555    case SpvCapabilityUnstructuredLoopControlsINTEL:
556      return "UnstructuredLoopControlsINTEL";
557    case SpvCapabilityFPGALoopControlsINTEL:
558      return "FPGALoopControlsINTEL";
559    case SpvCapabilityKernelAttributesINTEL:
560      return "KernelAttributesINTEL";
561    case SpvCapabilityFPGAKernelAttributesINTEL:
562      return "FPGAKernelAttributesINTEL";
563    case SpvCapabilityFPGAMemoryAccessesINTEL:
564      return "FPGAMemoryAccessesINTEL";
565    case SpvCapabilityFPGAClusterAttributesINTEL:
566      return "FPGAClusterAttributesINTEL";
567    case SpvCapabilityLoopFuseINTEL:
568      return "LoopFuseINTEL";
569    case SpvCapabilityFPGABufferLocationINTEL:
570      return "FPGABufferLocationINTEL";
571    case SpvCapabilityArbitraryPrecisionFixedPointINTEL:
572      return "ArbitraryPrecisionFixedPointINTEL";
573    case SpvCapabilityUSMStorageClassesINTEL:
574      return "USMStorageClassesINTEL";
575    case SpvCapabilityIOPipesINTEL:
576      return "IOPipesINTEL";
577    case SpvCapabilityBlockingPipesINTEL:
578      return "BlockingPipesINTEL";
579    case SpvCapabilityFPGARegINTEL:
580      return "FPGARegINTEL";
581    case SpvCapabilityDotProductInputAllKHR:
582      return "DotProductInputAllKHR";
583    case SpvCapabilityDotProductInput4x8BitKHR:
584      return "DotProductInput4x8BitKHR";
585    case SpvCapabilityDotProductInput4x8BitPackedKHR:
586      return "DotProductInput4x8BitPackedKHR";
587    case SpvCapabilityDotProductKHR:
588      return "DotProductKHR";
589    case SpvCapabilityBitInstructions:
590      return "BitInstructions";
591    case SpvCapabilityAtomicFloat32AddEXT:
592      return "AtomicFloat32AddEXT";
593    case SpvCapabilityAtomicFloat64AddEXT:
594      return "AtomicFloat64AddEXT";
595    case SpvCapabilityLongConstantCompositeINTEL:
596      return "LongConstantCompositeINTEL";
597    case SpvCapabilityOptNoneINTEL:
598      return "OptNoneINTEL";
599    case SpvCapabilityAtomicFloat16AddEXT:
600      return "AtomicFloat16AddEXT";
601    case SpvCapabilityDebugInfoModuleINTEL:
602      return "DebugInfoModuleINTEL";
603    case SpvCapabilityMax:
604      assert(0 && "Attempting to convert SpvCapabilityMax to string");
605      return "";
606  }
607
608  return "";
609}