enum_string_mapping.inc 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. const 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_descriptor_indexing:
  24. return "SPV_EXT_descriptor_indexing";
  25. case Extension::kSPV_EXT_fragment_fully_covered:
  26. return "SPV_EXT_fragment_fully_covered";
  27. case Extension::kSPV_EXT_fragment_invocation_density:
  28. return "SPV_EXT_fragment_invocation_density";
  29. case Extension::kSPV_EXT_shader_stencil_export:
  30. return "SPV_EXT_shader_stencil_export";
  31. case Extension::kSPV_EXT_shader_viewport_index_layer:
  32. return "SPV_EXT_shader_viewport_index_layer";
  33. case Extension::kSPV_GOOGLE_decorate_string:
  34. return "SPV_GOOGLE_decorate_string";
  35. case Extension::kSPV_GOOGLE_hlsl_functionality1:
  36. return "SPV_GOOGLE_hlsl_functionality1";
  37. case Extension::kSPV_INTEL_subgroups:
  38. return "SPV_INTEL_subgroups";
  39. case Extension::kSPV_KHR_16bit_storage:
  40. return "SPV_KHR_16bit_storage";
  41. case Extension::kSPV_KHR_8bit_storage:
  42. return "SPV_KHR_8bit_storage";
  43. case Extension::kSPV_KHR_device_group:
  44. return "SPV_KHR_device_group";
  45. case Extension::kSPV_KHR_float_controls:
  46. return "SPV_KHR_float_controls";
  47. case Extension::kSPV_KHR_multiview:
  48. return "SPV_KHR_multiview";
  49. case Extension::kSPV_KHR_no_integer_wrap_decoration:
  50. return "SPV_KHR_no_integer_wrap_decoration";
  51. case Extension::kSPV_KHR_post_depth_coverage:
  52. return "SPV_KHR_post_depth_coverage";
  53. case Extension::kSPV_KHR_shader_atomic_counter_ops:
  54. return "SPV_KHR_shader_atomic_counter_ops";
  55. case Extension::kSPV_KHR_shader_ballot:
  56. return "SPV_KHR_shader_ballot";
  57. case Extension::kSPV_KHR_shader_draw_parameters:
  58. return "SPV_KHR_shader_draw_parameters";
  59. case Extension::kSPV_KHR_storage_buffer_storage_class:
  60. return "SPV_KHR_storage_buffer_storage_class";
  61. case Extension::kSPV_KHR_subgroup_vote:
  62. return "SPV_KHR_subgroup_vote";
  63. case Extension::kSPV_KHR_variable_pointers:
  64. return "SPV_KHR_variable_pointers";
  65. case Extension::kSPV_KHR_vulkan_memory_model:
  66. return "SPV_KHR_vulkan_memory_model";
  67. case Extension::kSPV_NVX_multiview_per_view_attributes:
  68. return "SPV_NVX_multiview_per_view_attributes";
  69. case Extension::kSPV_NV_compute_shader_derivatives:
  70. return "SPV_NV_compute_shader_derivatives";
  71. case Extension::kSPV_NV_fragment_shader_barycentric:
  72. return "SPV_NV_fragment_shader_barycentric";
  73. case Extension::kSPV_NV_geometry_shader_passthrough:
  74. return "SPV_NV_geometry_shader_passthrough";
  75. case Extension::kSPV_NV_mesh_shader:
  76. return "SPV_NV_mesh_shader";
  77. case Extension::kSPV_NV_ray_tracing:
  78. return "SPV_NV_ray_tracing";
  79. case Extension::kSPV_NV_sample_mask_override_coverage:
  80. return "SPV_NV_sample_mask_override_coverage";
  81. case Extension::kSPV_NV_shader_image_footprint:
  82. return "SPV_NV_shader_image_footprint";
  83. case Extension::kSPV_NV_shader_subgroup_partitioned:
  84. return "SPV_NV_shader_subgroup_partitioned";
  85. case Extension::kSPV_NV_shading_rate:
  86. return "SPV_NV_shading_rate";
  87. case Extension::kSPV_NV_stereo_view_rendering:
  88. return "SPV_NV_stereo_view_rendering";
  89. case Extension::kSPV_NV_viewport_array2:
  90. return "SPV_NV_viewport_array2";
  91. case Extension::kSPV_VALIDATOR_ignore_type_decl_unique:
  92. return "SPV_VALIDATOR_ignore_type_decl_unique";
  93. };
  94. return "";
  95. }
  96. bool GetExtensionFromString(const char* str, Extension* extension) {
  97. 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_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_fragment_invocation_density", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "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_post_depth_coverage", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "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_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_subgroup_partitioned", "SPV_NV_shading_rate", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" };
  98. 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_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_fragment_invocation_density, 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_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_post_depth_coverage, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, 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_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_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 };
  99. const auto b = std::begin(known_ext_strs);
  100. const auto e = std::end(known_ext_strs);
  101. const auto found = std::equal_range(
  102. b, e, str, [](const char* str1, const char* str2) {
  103. return std::strcmp(str1, str2) < 0;
  104. });
  105. if (found.first == e || found.first == found.second) return false;
  106. *extension = known_ext_ids[found.first - b];
  107. return true;
  108. }
  109. const char* CapabilityToString(SpvCapability capability) {
  110. switch (capability) {
  111. case SpvCapabilityMatrix:
  112. return "Matrix";
  113. case SpvCapabilityShader:
  114. return "Shader";
  115. case SpvCapabilityGeometry:
  116. return "Geometry";
  117. case SpvCapabilityTessellation:
  118. return "Tessellation";
  119. case SpvCapabilityAddresses:
  120. return "Addresses";
  121. case SpvCapabilityLinkage:
  122. return "Linkage";
  123. case SpvCapabilityKernel:
  124. return "Kernel";
  125. case SpvCapabilityVector16:
  126. return "Vector16";
  127. case SpvCapabilityFloat16Buffer:
  128. return "Float16Buffer";
  129. case SpvCapabilityFloat16:
  130. return "Float16";
  131. case SpvCapabilityFloat64:
  132. return "Float64";
  133. case SpvCapabilityInt64:
  134. return "Int64";
  135. case SpvCapabilityInt64Atomics:
  136. return "Int64Atomics";
  137. case SpvCapabilityImageBasic:
  138. return "ImageBasic";
  139. case SpvCapabilityImageReadWrite:
  140. return "ImageReadWrite";
  141. case SpvCapabilityImageMipmap:
  142. return "ImageMipmap";
  143. case SpvCapabilityPipes:
  144. return "Pipes";
  145. case SpvCapabilityGroups:
  146. return "Groups";
  147. case SpvCapabilityDeviceEnqueue:
  148. return "DeviceEnqueue";
  149. case SpvCapabilityLiteralSampler:
  150. return "LiteralSampler";
  151. case SpvCapabilityAtomicStorage:
  152. return "AtomicStorage";
  153. case SpvCapabilityInt16:
  154. return "Int16";
  155. case SpvCapabilityTessellationPointSize:
  156. return "TessellationPointSize";
  157. case SpvCapabilityGeometryPointSize:
  158. return "GeometryPointSize";
  159. case SpvCapabilityImageGatherExtended:
  160. return "ImageGatherExtended";
  161. case SpvCapabilityStorageImageMultisample:
  162. return "StorageImageMultisample";
  163. case SpvCapabilityUniformBufferArrayDynamicIndexing:
  164. return "UniformBufferArrayDynamicIndexing";
  165. case SpvCapabilitySampledImageArrayDynamicIndexing:
  166. return "SampledImageArrayDynamicIndexing";
  167. case SpvCapabilityStorageBufferArrayDynamicIndexing:
  168. return "StorageBufferArrayDynamicIndexing";
  169. case SpvCapabilityStorageImageArrayDynamicIndexing:
  170. return "StorageImageArrayDynamicIndexing";
  171. case SpvCapabilityClipDistance:
  172. return "ClipDistance";
  173. case SpvCapabilityCullDistance:
  174. return "CullDistance";
  175. case SpvCapabilityImageCubeArray:
  176. return "ImageCubeArray";
  177. case SpvCapabilitySampleRateShading:
  178. return "SampleRateShading";
  179. case SpvCapabilityImageRect:
  180. return "ImageRect";
  181. case SpvCapabilitySampledRect:
  182. return "SampledRect";
  183. case SpvCapabilityGenericPointer:
  184. return "GenericPointer";
  185. case SpvCapabilityInt8:
  186. return "Int8";
  187. case SpvCapabilityInputAttachment:
  188. return "InputAttachment";
  189. case SpvCapabilitySparseResidency:
  190. return "SparseResidency";
  191. case SpvCapabilityMinLod:
  192. return "MinLod";
  193. case SpvCapabilitySampled1D:
  194. return "Sampled1D";
  195. case SpvCapabilityImage1D:
  196. return "Image1D";
  197. case SpvCapabilitySampledCubeArray:
  198. return "SampledCubeArray";
  199. case SpvCapabilitySampledBuffer:
  200. return "SampledBuffer";
  201. case SpvCapabilityImageBuffer:
  202. return "ImageBuffer";
  203. case SpvCapabilityImageMSArray:
  204. return "ImageMSArray";
  205. case SpvCapabilityStorageImageExtendedFormats:
  206. return "StorageImageExtendedFormats";
  207. case SpvCapabilityImageQuery:
  208. return "ImageQuery";
  209. case SpvCapabilityDerivativeControl:
  210. return "DerivativeControl";
  211. case SpvCapabilityInterpolationFunction:
  212. return "InterpolationFunction";
  213. case SpvCapabilityTransformFeedback:
  214. return "TransformFeedback";
  215. case SpvCapabilityGeometryStreams:
  216. return "GeometryStreams";
  217. case SpvCapabilityStorageImageReadWithoutFormat:
  218. return "StorageImageReadWithoutFormat";
  219. case SpvCapabilityStorageImageWriteWithoutFormat:
  220. return "StorageImageWriteWithoutFormat";
  221. case SpvCapabilityMultiViewport:
  222. return "MultiViewport";
  223. case SpvCapabilitySubgroupDispatch:
  224. return "SubgroupDispatch";
  225. case SpvCapabilityNamedBarrier:
  226. return "NamedBarrier";
  227. case SpvCapabilityPipeStorage:
  228. return "PipeStorage";
  229. case SpvCapabilityGroupNonUniform:
  230. return "GroupNonUniform";
  231. case SpvCapabilityGroupNonUniformVote:
  232. return "GroupNonUniformVote";
  233. case SpvCapabilityGroupNonUniformArithmetic:
  234. return "GroupNonUniformArithmetic";
  235. case SpvCapabilityGroupNonUniformBallot:
  236. return "GroupNonUniformBallot";
  237. case SpvCapabilityGroupNonUniformShuffle:
  238. return "GroupNonUniformShuffle";
  239. case SpvCapabilityGroupNonUniformShuffleRelative:
  240. return "GroupNonUniformShuffleRelative";
  241. case SpvCapabilityGroupNonUniformClustered:
  242. return "GroupNonUniformClustered";
  243. case SpvCapabilityGroupNonUniformQuad:
  244. return "GroupNonUniformQuad";
  245. case SpvCapabilitySubgroupBallotKHR:
  246. return "SubgroupBallotKHR";
  247. case SpvCapabilityDrawParameters:
  248. return "DrawParameters";
  249. case SpvCapabilitySubgroupVoteKHR:
  250. return "SubgroupVoteKHR";
  251. case SpvCapabilityStorageBuffer16BitAccess:
  252. return "StorageBuffer16BitAccess";
  253. case SpvCapabilityUniformAndStorageBuffer16BitAccess:
  254. return "UniformAndStorageBuffer16BitAccess";
  255. case SpvCapabilityStoragePushConstant16:
  256. return "StoragePushConstant16";
  257. case SpvCapabilityStorageInputOutput16:
  258. return "StorageInputOutput16";
  259. case SpvCapabilityDeviceGroup:
  260. return "DeviceGroup";
  261. case SpvCapabilityMultiView:
  262. return "MultiView";
  263. case SpvCapabilityVariablePointersStorageBuffer:
  264. return "VariablePointersStorageBuffer";
  265. case SpvCapabilityVariablePointers:
  266. return "VariablePointers";
  267. case SpvCapabilityAtomicStorageOps:
  268. return "AtomicStorageOps";
  269. case SpvCapabilitySampleMaskPostDepthCoverage:
  270. return "SampleMaskPostDepthCoverage";
  271. case SpvCapabilityStorageBuffer8BitAccess:
  272. return "StorageBuffer8BitAccess";
  273. case SpvCapabilityUniformAndStorageBuffer8BitAccess:
  274. return "UniformAndStorageBuffer8BitAccess";
  275. case SpvCapabilityStoragePushConstant8:
  276. return "StoragePushConstant8";
  277. case SpvCapabilityDenormPreserve:
  278. return "DenormPreserve";
  279. case SpvCapabilityDenormFlushToZero:
  280. return "DenormFlushToZero";
  281. case SpvCapabilitySignedZeroInfNanPreserve:
  282. return "SignedZeroInfNanPreserve";
  283. case SpvCapabilityRoundingModeRTE:
  284. return "RoundingModeRTE";
  285. case SpvCapabilityRoundingModeRTZ:
  286. return "RoundingModeRTZ";
  287. case SpvCapabilityFloat16ImageAMD:
  288. return "Float16ImageAMD";
  289. case SpvCapabilityImageGatherBiasLodAMD:
  290. return "ImageGatherBiasLodAMD";
  291. case SpvCapabilityFragmentMaskAMD:
  292. return "FragmentMaskAMD";
  293. case SpvCapabilityStencilExportEXT:
  294. return "StencilExportEXT";
  295. case SpvCapabilityImageReadWriteLodAMD:
  296. return "ImageReadWriteLodAMD";
  297. case SpvCapabilitySampleMaskOverrideCoverageNV:
  298. return "SampleMaskOverrideCoverageNV";
  299. case SpvCapabilityGeometryShaderPassthroughNV:
  300. return "GeometryShaderPassthroughNV";
  301. case SpvCapabilityShaderViewportIndexLayerEXT:
  302. return "ShaderViewportIndexLayerEXT";
  303. case SpvCapabilityShaderViewportMaskNV:
  304. return "ShaderViewportMaskNV";
  305. case SpvCapabilityShaderStereoViewNV:
  306. return "ShaderStereoViewNV";
  307. case SpvCapabilityPerViewAttributesNV:
  308. return "PerViewAttributesNV";
  309. case SpvCapabilityFragmentFullyCoveredEXT:
  310. return "FragmentFullyCoveredEXT";
  311. case SpvCapabilityMeshShadingNV:
  312. return "MeshShadingNV";
  313. case SpvCapabilityShaderNonUniformEXT:
  314. return "ShaderNonUniformEXT";
  315. case SpvCapabilityRuntimeDescriptorArrayEXT:
  316. return "RuntimeDescriptorArrayEXT";
  317. case SpvCapabilityInputAttachmentArrayDynamicIndexingEXT:
  318. return "InputAttachmentArrayDynamicIndexingEXT";
  319. case SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT:
  320. return "UniformTexelBufferArrayDynamicIndexingEXT";
  321. case SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT:
  322. return "StorageTexelBufferArrayDynamicIndexingEXT";
  323. case SpvCapabilityUniformBufferArrayNonUniformIndexingEXT:
  324. return "UniformBufferArrayNonUniformIndexingEXT";
  325. case SpvCapabilitySampledImageArrayNonUniformIndexingEXT:
  326. return "SampledImageArrayNonUniformIndexingEXT";
  327. case SpvCapabilityStorageBufferArrayNonUniformIndexingEXT:
  328. return "StorageBufferArrayNonUniformIndexingEXT";
  329. case SpvCapabilityStorageImageArrayNonUniformIndexingEXT:
  330. return "StorageImageArrayNonUniformIndexingEXT";
  331. case SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT:
  332. return "InputAttachmentArrayNonUniformIndexingEXT";
  333. case SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT:
  334. return "UniformTexelBufferArrayNonUniformIndexingEXT";
  335. case SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT:
  336. return "StorageTexelBufferArrayNonUniformIndexingEXT";
  337. case SpvCapabilityRayTracingNV:
  338. return "RayTracingNV";
  339. case SpvCapabilitySubgroupShuffleINTEL:
  340. return "SubgroupShuffleINTEL";
  341. case SpvCapabilitySubgroupBufferBlockIOINTEL:
  342. return "SubgroupBufferBlockIOINTEL";
  343. case SpvCapabilitySubgroupImageBlockIOINTEL:
  344. return "SubgroupImageBlockIOINTEL";
  345. case SpvCapabilityGroupNonUniformPartitionedNV:
  346. return "GroupNonUniformPartitionedNV";
  347. case SpvCapabilityVulkanMemoryModelKHR:
  348. return "VulkanMemoryModelKHR";
  349. case SpvCapabilityVulkanMemoryModelDeviceScopeKHR:
  350. return "VulkanMemoryModelDeviceScopeKHR";
  351. case SpvCapabilityImageFootprintNV:
  352. return "ImageFootprintNV";
  353. case SpvCapabilityFragmentBarycentricNV:
  354. return "FragmentBarycentricNV";
  355. case SpvCapabilityComputeDerivativeGroupQuadsNV:
  356. return "ComputeDerivativeGroupQuadsNV";
  357. case SpvCapabilityComputeDerivativeGroupLinearNV:
  358. return "ComputeDerivativeGroupLinearNV";
  359. case SpvCapabilityFragmentDensityEXT:
  360. return "FragmentDensityEXT";
  361. case SpvCapabilityMax:
  362. assert(0 && "Attempting to convert SpvCapabilityMax to string");
  363. return "";
  364. };
  365. return "";
  366. }