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_stencil_export:
36 return "SPV_EXT_shader_stencil_export";
37 case Extension::kSPV_EXT_shader_viewport_index_layer:
38 return "SPV_EXT_shader_viewport_index_layer";
39 case Extension::kSPV_GOOGLE_decorate_string:
40 return "SPV_GOOGLE_decorate_string";
41 case Extension::kSPV_GOOGLE_hlsl_functionality1:
42 return "SPV_GOOGLE_hlsl_functionality1";
43 case Extension::kSPV_GOOGLE_user_type:
44 return "SPV_GOOGLE_user_type";
45 case Extension::kSPV_INTEL_device_side_avc_motion_estimation:
46 return "SPV_INTEL_device_side_avc_motion_estimation";
47 case Extension::kSPV_INTEL_media_block_io:
48 return "SPV_INTEL_media_block_io";
49 case Extension::kSPV_INTEL_shader_integer_functions2:
50 return "SPV_INTEL_shader_integer_functions2";
51 case Extension::kSPV_INTEL_subgroups:
52 return "SPV_INTEL_subgroups";
53 case Extension::kSPV_KHR_16bit_storage:
54 return "SPV_KHR_16bit_storage";
55 case Extension::kSPV_KHR_8bit_storage:
56 return "SPV_KHR_8bit_storage";
57 case Extension::kSPV_KHR_device_group:
58 return "SPV_KHR_device_group";
59 case Extension::kSPV_KHR_float_controls:
60 return "SPV_KHR_float_controls";
61 case Extension::kSPV_KHR_multiview:
62 return "SPV_KHR_multiview";
63 case Extension::kSPV_KHR_no_integer_wrap_decoration:
64 return "SPV_KHR_no_integer_wrap_decoration";
65 case Extension::kSPV_KHR_non_semantic_info:
66 return "SPV_KHR_non_semantic_info";
67 case Extension::kSPV_KHR_physical_storage_buffer:
68 return "SPV_KHR_physical_storage_buffer";
69 case Extension::kSPV_KHR_post_depth_coverage:
70 return "SPV_KHR_post_depth_coverage";
71 case Extension::kSPV_KHR_ray_query:
72 return "SPV_KHR_ray_query";
73 case Extension::kSPV_KHR_ray_tracing:
74 return "SPV_KHR_ray_tracing";
75 case Extension::kSPV_KHR_shader_atomic_counter_ops:
76 return "SPV_KHR_shader_atomic_counter_ops";
77 case Extension::kSPV_KHR_shader_ballot:
78 return "SPV_KHR_shader_ballot";
79 case Extension::kSPV_KHR_shader_clock:
80 return "SPV_KHR_shader_clock";
81 case Extension::kSPV_KHR_shader_draw_parameters:
82 return "SPV_KHR_shader_draw_parameters";
83 case Extension::kSPV_KHR_storage_buffer_storage_class:
84 return "SPV_KHR_storage_buffer_storage_class";
85 case Extension::kSPV_KHR_subgroup_vote:
86 return "SPV_KHR_subgroup_vote";
87 case Extension::kSPV_KHR_variable_pointers:
88 return "SPV_KHR_variable_pointers";
89 case Extension::kSPV_KHR_vulkan_memory_model:
90 return "SPV_KHR_vulkan_memory_model";
91 case Extension::kSPV_NVX_multiview_per_view_attributes:
92 return "SPV_NVX_multiview_per_view_attributes";
93 case Extension::kSPV_NV_compute_shader_derivatives:
94 return "SPV_NV_compute_shader_derivatives";
95 case Extension::kSPV_NV_cooperative_matrix:
96 return "SPV_NV_cooperative_matrix";
97 case Extension::kSPV_NV_fragment_shader_barycentric:
98 return "SPV_NV_fragment_shader_barycentric";
99 case Extension::kSPV_NV_geometry_shader_passthrough:
100 return "SPV_NV_geometry_shader_passthrough";
101 case Extension::kSPV_NV_mesh_shader:
102 return "SPV_NV_mesh_shader";
103 case Extension::kSPV_NV_ray_tracing:
104 return "SPV_NV_ray_tracing";
105 case Extension::kSPV_NV_sample_mask_override_coverage:
106 return "SPV_NV_sample_mask_override_coverage";
107 case Extension::kSPV_NV_shader_image_footprint:
108 return "SPV_NV_shader_image_footprint";
109 case Extension::kSPV_NV_shader_sm_builtins:
110 return "SPV_NV_shader_sm_builtins";
111 case Extension::kSPV_NV_shader_subgroup_partitioned:
112 return "SPV_NV_shader_subgroup_partitioned";
113 case Extension::kSPV_NV_shading_rate:
114 return "SPV_NV_shading_rate";
115 case Extension::kSPV_NV_stereo_view_rendering:
116 return "SPV_NV_stereo_view_rendering";
117 case Extension::kSPV_NV_viewport_array2:
118 return "SPV_NV_viewport_array2";
119 case Extension::kSPV_VALIDATOR_ignore_type_decl_unique:
120 return "SPV_VALIDATOR_ignore_type_decl_unique";
121 };
122
123 return "";
124}
125
126
127 bool GetExtensionFromString(const char* str, Extension* extension) {
128 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_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_GOOGLE_user_type", "SPV_INTEL_device_side_avc_motion_estimation", "SPV_INTEL_media_block_io", "SPV_INTEL_shader_integer_functions2", "SPV_INTEL_subgroups", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_device_group", "SPV_KHR_float_controls", "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_vote", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "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_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" };
129 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_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_device_side_avc_motion_estimation, Extension::kSPV_INTEL_media_block_io, Extension::kSPV_INTEL_shader_integer_functions2, Extension::kSPV_INTEL_subgroups, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_float_controls, 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_vote, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_KHR_vulkan_memory_model, 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_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 };
130 const auto b = std::begin(known_ext_strs);
131 const auto e = std::end(known_ext_strs);
132 const auto found = std::equal_range(
133 b, e, str, [](const char* str1, const char* str2) {
134 return std::strcmp(str1, str2) < 0;
135 });
136 if (found.first == e || found.first == found.second) return false;
137
138 *extension = known_ext_ids[found.first - b];
139 return true;
140 }
141
142
143const char* CapabilityToString(SpvCapability capability) {
144 switch (capability) {
145 case SpvCapabilityMatrix:
146 return "Matrix";
147 case SpvCapabilityShader:
148 return "Shader";
149 case SpvCapabilityGeometry:
150 return "Geometry";
151 case SpvCapabilityTessellation:
152 return "Tessellation";
153 case SpvCapabilityAddresses:
154 return "Addresses";
155 case SpvCapabilityLinkage:
156 return "Linkage";
157 case SpvCapabilityKernel:
158 return "Kernel";
159 case SpvCapabilityVector16:
160 return "Vector16";
161 case SpvCapabilityFloat16Buffer:
162 return "Float16Buffer";
163 case SpvCapabilityFloat16:
164 return "Float16";
165 case SpvCapabilityFloat64:
166 return "Float64";
167 case SpvCapabilityInt64:
168 return "Int64";
169 case SpvCapabilityInt64Atomics:
170 return "Int64Atomics";
171 case SpvCapabilityImageBasic:
172 return "ImageBasic";
173 case SpvCapabilityImageReadWrite:
174 return "ImageReadWrite";
175 case SpvCapabilityImageMipmap:
176 return "ImageMipmap";
177 case SpvCapabilityPipes:
178 return "Pipes";
179 case SpvCapabilityGroups:
180 return "Groups";
181 case SpvCapabilityDeviceEnqueue:
182 return "DeviceEnqueue";
183 case SpvCapabilityLiteralSampler:
184 return "LiteralSampler";
185 case SpvCapabilityAtomicStorage:
186 return "AtomicStorage";
187 case SpvCapabilityInt16:
188 return "Int16";
189 case SpvCapabilityTessellationPointSize:
190 return "TessellationPointSize";
191 case SpvCapabilityGeometryPointSize:
192 return "GeometryPointSize";
193 case SpvCapabilityImageGatherExtended:
194 return "ImageGatherExtended";
195 case SpvCapabilityStorageImageMultisample:
196 return "StorageImageMultisample";
197 case SpvCapabilityUniformBufferArrayDynamicIndexing:
198 return "UniformBufferArrayDynamicIndexing";
199 case SpvCapabilitySampledImageArrayDynamicIndexing:
200 return "SampledImageArrayDynamicIndexing";
201 case SpvCapabilityStorageBufferArrayDynamicIndexing:
202 return "StorageBufferArrayDynamicIndexing";
203 case SpvCapabilityStorageImageArrayDynamicIndexing:
204 return "StorageImageArrayDynamicIndexing";
205 case SpvCapabilityClipDistance:
206 return "ClipDistance";
207 case SpvCapabilityCullDistance:
208 return "CullDistance";
209 case SpvCapabilityImageCubeArray:
210 return "ImageCubeArray";
211 case SpvCapabilitySampleRateShading:
212 return "SampleRateShading";
213 case SpvCapabilityImageRect:
214 return "ImageRect";
215 case SpvCapabilitySampledRect:
216 return "SampledRect";
217 case SpvCapabilityGenericPointer:
218 return "GenericPointer";
219 case SpvCapabilityInt8:
220 return "Int8";
221 case SpvCapabilityInputAttachment:
222 return "InputAttachment";
223 case SpvCapabilitySparseResidency:
224 return "SparseResidency";
225 case SpvCapabilityMinLod:
226 return "MinLod";
227 case SpvCapabilitySampled1D:
228 return "Sampled1D";
229 case SpvCapabilityImage1D:
230 return "Image1D";
231 case SpvCapabilitySampledCubeArray:
232 return "SampledCubeArray";
233 case SpvCapabilitySampledBuffer:
234 return "SampledBuffer";
235 case SpvCapabilityImageBuffer:
236 return "ImageBuffer";
237 case SpvCapabilityImageMSArray:
238 return "ImageMSArray";
239 case SpvCapabilityStorageImageExtendedFormats:
240 return "StorageImageExtendedFormats";
241 case SpvCapabilityImageQuery:
242 return "ImageQuery";
243 case SpvCapabilityDerivativeControl:
244 return "DerivativeControl";
245 case SpvCapabilityInterpolationFunction:
246 return "InterpolationFunction";
247 case SpvCapabilityTransformFeedback:
248 return "TransformFeedback";
249 case SpvCapabilityGeometryStreams:
250 return "GeometryStreams";
251 case SpvCapabilityStorageImageReadWithoutFormat:
252 return "StorageImageReadWithoutFormat";
253 case SpvCapabilityStorageImageWriteWithoutFormat:
254 return "StorageImageWriteWithoutFormat";
255 case SpvCapabilityMultiViewport:
256 return "MultiViewport";
257 case SpvCapabilitySubgroupDispatch:
258 return "SubgroupDispatch";
259 case SpvCapabilityNamedBarrier:
260 return "NamedBarrier";
261 case SpvCapabilityPipeStorage:
262 return "PipeStorage";
263 case SpvCapabilityGroupNonUniform:
264 return "GroupNonUniform";
265 case SpvCapabilityGroupNonUniformVote:
266 return "GroupNonUniformVote";
267 case SpvCapabilityGroupNonUniformArithmetic:
268 return "GroupNonUniformArithmetic";
269 case SpvCapabilityGroupNonUniformBallot:
270 return "GroupNonUniformBallot";
271 case SpvCapabilityGroupNonUniformShuffle:
272 return "GroupNonUniformShuffle";
273 case SpvCapabilityGroupNonUniformShuffleRelative:
274 return "GroupNonUniformShuffleRelative";
275 case SpvCapabilityGroupNonUniformClustered:
276 return "GroupNonUniformClustered";
277 case SpvCapabilityGroupNonUniformQuad:
278 return "GroupNonUniformQuad";
279 case SpvCapabilityShaderLayer:
280 return "ShaderLayer";
281 case SpvCapabilityShaderViewportIndex:
282 return "ShaderViewportIndex";
283 case SpvCapabilitySubgroupBallotKHR:
284 return "SubgroupBallotKHR";
285 case SpvCapabilityDrawParameters:
286 return "DrawParameters";
287 case SpvCapabilitySubgroupVoteKHR:
288 return "SubgroupVoteKHR";
289 case SpvCapabilityStorageBuffer16BitAccess:
290 return "StorageBuffer16BitAccess";
291 case SpvCapabilityUniformAndStorageBuffer16BitAccess:
292 return "UniformAndStorageBuffer16BitAccess";
293 case SpvCapabilityStoragePushConstant16:
294 return "StoragePushConstant16";
295 case SpvCapabilityStorageInputOutput16:
296 return "StorageInputOutput16";
297 case SpvCapabilityDeviceGroup:
298 return "DeviceGroup";
299 case SpvCapabilityMultiView:
300 return "MultiView";
301 case SpvCapabilityVariablePointersStorageBuffer:
302 return "VariablePointersStorageBuffer";
303 case SpvCapabilityVariablePointers:
304 return "VariablePointers";
305 case SpvCapabilityAtomicStorageOps:
306 return "AtomicStorageOps";
307 case SpvCapabilitySampleMaskPostDepthCoverage:
308 return "SampleMaskPostDepthCoverage";
309 case SpvCapabilityStorageBuffer8BitAccess:
310 return "StorageBuffer8BitAccess";
311 case SpvCapabilityUniformAndStorageBuffer8BitAccess:
312 return "UniformAndStorageBuffer8BitAccess";
313 case SpvCapabilityStoragePushConstant8:
314 return "StoragePushConstant8";
315 case SpvCapabilityDenormPreserve:
316 return "DenormPreserve";
317 case SpvCapabilityDenormFlushToZero:
318 return "DenormFlushToZero";
319 case SpvCapabilitySignedZeroInfNanPreserve:
320 return "SignedZeroInfNanPreserve";
321 case SpvCapabilityRoundingModeRTE:
322 return "RoundingModeRTE";
323 case SpvCapabilityRoundingModeRTZ:
324 return "RoundingModeRTZ";
325 case SpvCapabilityRayQueryProvisionalKHR:
326 return "RayQueryProvisionalKHR";
327 case SpvCapabilityRayTraversalPrimitiveCullingProvisionalKHR:
328 return "RayTraversalPrimitiveCullingProvisionalKHR";
329 case SpvCapabilityFloat16ImageAMD:
330 return "Float16ImageAMD";
331 case SpvCapabilityImageGatherBiasLodAMD:
332 return "ImageGatherBiasLodAMD";
333 case SpvCapabilityFragmentMaskAMD:
334 return "FragmentMaskAMD";
335 case SpvCapabilityStencilExportEXT:
336 return "StencilExportEXT";
337 case SpvCapabilityImageReadWriteLodAMD:
338 return "ImageReadWriteLodAMD";
339 case SpvCapabilityShaderClockKHR:
340 return "ShaderClockKHR";
341 case SpvCapabilitySampleMaskOverrideCoverageNV:
342 return "SampleMaskOverrideCoverageNV";
343 case SpvCapabilityGeometryShaderPassthroughNV:
344 return "GeometryShaderPassthroughNV";
345 case SpvCapabilityShaderViewportIndexLayerEXT:
346 return "ShaderViewportIndexLayerEXT";
347 case SpvCapabilityShaderViewportMaskNV:
348 return "ShaderViewportMaskNV";
349 case SpvCapabilityShaderStereoViewNV:
350 return "ShaderStereoViewNV";
351 case SpvCapabilityPerViewAttributesNV:
352 return "PerViewAttributesNV";
353 case SpvCapabilityFragmentFullyCoveredEXT:
354 return "FragmentFullyCoveredEXT";
355 case SpvCapabilityMeshShadingNV:
356 return "MeshShadingNV";
357 case SpvCapabilityImageFootprintNV:
358 return "ImageFootprintNV";
359 case SpvCapabilityFragmentBarycentricNV:
360 return "FragmentBarycentricNV";
361 case SpvCapabilityComputeDerivativeGroupQuadsNV:
362 return "ComputeDerivativeGroupQuadsNV";
363 case SpvCapabilityFragmentDensityEXT:
364 return "FragmentDensityEXT";
365 case SpvCapabilityGroupNonUniformPartitionedNV:
366 return "GroupNonUniformPartitionedNV";
367 case SpvCapabilityShaderNonUniform:
368 return "ShaderNonUniform";
369 case SpvCapabilityRuntimeDescriptorArray:
370 return "RuntimeDescriptorArray";
371 case SpvCapabilityInputAttachmentArrayDynamicIndexing:
372 return "InputAttachmentArrayDynamicIndexing";
373 case SpvCapabilityUniformTexelBufferArrayDynamicIndexing:
374 return "UniformTexelBufferArrayDynamicIndexing";
375 case SpvCapabilityStorageTexelBufferArrayDynamicIndexing:
376 return "StorageTexelBufferArrayDynamicIndexing";
377 case SpvCapabilityUniformBufferArrayNonUniformIndexing:
378 return "UniformBufferArrayNonUniformIndexing";
379 case SpvCapabilitySampledImageArrayNonUniformIndexing:
380 return "SampledImageArrayNonUniformIndexing";
381 case SpvCapabilityStorageBufferArrayNonUniformIndexing:
382 return "StorageBufferArrayNonUniformIndexing";
383 case SpvCapabilityStorageImageArrayNonUniformIndexing:
384 return "StorageImageArrayNonUniformIndexing";
385 case SpvCapabilityInputAttachmentArrayNonUniformIndexing:
386 return "InputAttachmentArrayNonUniformIndexing";
387 case SpvCapabilityUniformTexelBufferArrayNonUniformIndexing:
388 return "UniformTexelBufferArrayNonUniformIndexing";
389 case SpvCapabilityStorageTexelBufferArrayNonUniformIndexing:
390 return "StorageTexelBufferArrayNonUniformIndexing";
391 case SpvCapabilityRayTracingNV:
392 return "RayTracingNV";
393 case SpvCapabilityVulkanMemoryModel:
394 return "VulkanMemoryModel";
395 case SpvCapabilityVulkanMemoryModelDeviceScope:
396 return "VulkanMemoryModelDeviceScope";
397 case SpvCapabilityPhysicalStorageBufferAddresses:
398 return "PhysicalStorageBufferAddresses";
399 case SpvCapabilityComputeDerivativeGroupLinearNV:
400 return "ComputeDerivativeGroupLinearNV";
401 case SpvCapabilityRayTracingProvisionalKHR:
402 return "RayTracingProvisionalKHR";
403 case SpvCapabilityCooperativeMatrixNV:
404 return "CooperativeMatrixNV";
405 case SpvCapabilityFragmentShaderSampleInterlockEXT:
406 return "FragmentShaderSampleInterlockEXT";
407 case SpvCapabilityFragmentShaderShadingRateInterlockEXT:
408 return "FragmentShaderShadingRateInterlockEXT";
409 case SpvCapabilityShaderSMBuiltinsNV:
410 return "ShaderSMBuiltinsNV";
411 case SpvCapabilityFragmentShaderPixelInterlockEXT:
412 return "FragmentShaderPixelInterlockEXT";
413 case SpvCapabilityDemoteToHelperInvocationEXT:
414 return "DemoteToHelperInvocationEXT";
415 case SpvCapabilitySubgroupShuffleINTEL:
416 return "SubgroupShuffleINTEL";
417 case SpvCapabilitySubgroupBufferBlockIOINTEL:
418 return "SubgroupBufferBlockIOINTEL";
419 case SpvCapabilitySubgroupImageBlockIOINTEL:
420 return "SubgroupImageBlockIOINTEL";
421 case SpvCapabilitySubgroupImageMediaBlockIOINTEL:
422 return "SubgroupImageMediaBlockIOINTEL";
423 case SpvCapabilityIntegerFunctions2INTEL:
424 return "IntegerFunctions2INTEL";
425 case SpvCapabilitySubgroupAvcMotionEstimationINTEL:
426 return "SubgroupAvcMotionEstimationINTEL";
427 case SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL:
428 return "SubgroupAvcMotionEstimationIntraINTEL";
429 case SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL:
430 return "SubgroupAvcMotionEstimationChromaINTEL";
431 case SpvCapabilityMax:
432 assert(0 && "Attempting to convert SpvCapabilityMax to string");
433 return "";
434 };
435
436 return "";
437}