enum_string_mapping.inc 37 KB

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