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