@@ -10446,16 +10446,84 @@ static void getSPIRVBackendOpts(const llvm::opt::ArgList &TCArgs,
1044610446 TCArgs.MakeArgString (" --avoid-spirv-capabilities=Shader" ));
1044710447 BackendArgs.push_back (
1044810448 TCArgs.MakeArgString (" --translator-compatibility-mode" ));
10449- // TODO: A list of SPIR-V extensions that are supported by the SPIR-V backend
10450- // is growing. Let's postpone the decision on which extensions to enable until
10451- // - the list is stable, and
10452- // - we decide on a mapping of user requested extensions into backend's ones.
10453- // Meanwhile we enable all the SPIR-V backend extensions.
10454- BackendArgs.push_back (TCArgs.MakeArgString (" --spirv-ext=all" ));
10455- // TODO:
10456- // - handle -Xspirv-translator option to avoid "argument unused during
10457- // compilation" error
10458- // - handle --spirv-ext=+<extension> and --spirv-ext=-<extension> options
10449+
10450+ // SPIR-V backend recently started to support extensions not supported by
10451+ // drivers (e.g. SPV_KHR_float_controls2). At the same time, SPIR-V backend
10452+ // doesn't support the syntax for disabling specific extensions (i.e.
10453+ // --spirv-ext=-<extension>). We need to come up with a list of SPIR-V
10454+ // extensions that are supported by the backend, but also by the driver. While
10455+ // we work on that, let's manually do the equivalent of
10456+ // "--spirv-ext=+all,-SPV_KHR_float_controls2", which is the only unsupported
10457+ // extension by the driver so far.
10458+ std::string ExtArg (" -spirv-ext=" );
10459+ std::string DefaultExtArg = " +SPV_EXT_arithmetic_fence"
10460+ " ,+SPV_EXT_demote_to_helper_invocation"
10461+ " ,+SPV_EXT_descriptor_indexing"
10462+ " ,+SPV_EXT_fragment_fully_covered"
10463+ " ,+SPV_EXT_fragment_invocation_density"
10464+ " ,+SPV_EXT_fragment_shader_interlock"
10465+ " ,+SPV_EXT_mesh_shader"
10466+ " ,+SPV_EXT_optnone"
10467+ " ,+SPV_EXT_relaxed_printf_string_address_space"
10468+ " ,+SPV_EXT_shader_atomic_float16_add"
10469+ " ,+SPV_EXT_shader_atomic_float_add"
10470+ " ,+SPV_EXT_shader_atomic_float_min_max"
10471+ " ,+SPV_EXT_shader_image_int64"
10472+ " ,+SPV_EXT_shader_stencil_export"
10473+ " ,+SPV_EXT_shader_viewport_index_layer" ;
10474+ std::string GoogleExtArg = " ,+SPV_GOOGLE_hlsl_functionality1"
10475+ " ,+SPV_GOOGLE_user_type" ;
10476+ std::string IntelExtArg = " ,+SPV_INTEL_2d_block_io"
10477+ " ,+SPV_INTEL_arbitrary_precision_integers"
10478+ " ,+SPV_INTEL_bfloat16_conversion"
10479+ " ,+SPV_INTEL_bindless_images"
10480+ " ,+SPV_INTEL_cache_controls"
10481+ " ,+SPV_INTEL_float_controls2"
10482+ " ,+SPV_INTEL_fp_max_error"
10483+ " ,+SPV_INTEL_function_pointers"
10484+ " ,+SPV_INTEL_global_variable_fpga_decorations"
10485+ " ,+SPV_INTEL_global_variable_host_access"
10486+ " ,+SPV_INTEL_inline_assembly"
10487+ " ,+SPV_INTEL_int4"
10488+ " ,+SPV_INTEL_joint_matrix"
10489+ " ,+SPV_INTEL_long_composites"
10490+ " ,+SPV_INTEL_media_block_io"
10491+ " ,+SPV_INTEL_memory_access_aliasing"
10492+ " ,+SPV_INTEL_optnone"
10493+ " ,+SPV_INTEL_split_barrier"
10494+ " ,+SPV_INTEL_subgroup_matrix_multiply_accumulate"
10495+ " ,+SPV_INTEL_subgroups"
10496+ " ,+SPV_INTEL_tensor_float32_conversion"
10497+ " ,+SPV_INTEL_ternary_bitwise_function"
10498+ " ,+SPV_INTEL_usm_storage_classes"
10499+ " ,+SPV_INTEL_variable_length_array" ;
10500+ std::string KHRExtArg = " ,+SPV_KHR_16bit_storage"
10501+ " ,+SPV_KHR_bfloat16"
10502+ " ,+SPV_KHR_bit_instructions"
10503+ " ,+SPV_KHR_cooperative_matrix"
10504+ " ,+SPV_KHR_device_group"
10505+ " ,+SPV_KHR_expect_assume"
10506+ " ,+SPV_KHR_float_controls"
10507+ " ,+SPV_KHR_fragment_shader_barycentric"
10508+ " ,+SPV_KHR_fragment_shading_rate"
10509+ " ,+SPV_KHR_integer_dot_product"
10510+ " ,+SPV_KHR_linkonce_odr"
10511+ " ,+SPV_KHR_multiview"
10512+ " ,+SPV_KHR_no_integer_wrap_decoration"
10513+ " ,+SPV_KHR_non_semantic_info"
10514+ " ,+SPV_KHR_physical_storage_buffer"
10515+ " ,+SPV_KHR_post_depth_coverage"
10516+ " ,+SPV_KHR_ray_query"
10517+ " ,+SPV_KHR_ray_tracing"
10518+ " ,+SPV_KHR_shader_clock"
10519+ " ,+SPV_KHR_shader_draw_parameters"
10520+ " ,+SPV_KHR_subgroup_rotate"
10521+ " ,+SPV_KHR_uniform_group_instructions"
10522+ " ,+SPV_KHR_vulkan_memory_model" ;
10523+ std::string NVExtArg = " ,+SPV_NV_shader_subgroup_partitioned" ;
10524+ ExtArg = ExtArg + DefaultExtArg + GoogleExtArg + IntelExtArg + KHRExtArg +
10525+ NVExtArg;
10526+ BackendArgs.push_back (TCArgs.MakeArgString (ExtArg));
1045910527}
1046010528
1046110529// Utility function to gather all llvm-spirv options.
0 commit comments