https://github.com/s-perron updated https://github.com/llvm/llvm-project/pull/151554
>From 900c99b8b3f317adcb8d897dbdc5f90fb91b4ddf Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Thu, 31 Jul 2025 12:16:43 -0400 Subject: [PATCH 01/11] [SPIRV][HLSL] Add DXC compatibility option for extension The default behaviour in DXC is to allow all extesions the compiler knows about. We did the same in clang: all extensions that clang knows about. However, this causes the shader to use different extensions because the two compilers have different sets of extensions. To avoid using a new extension when moving from DXC to Clang, we add the special DXC suboptions to `-fspv-extension". If `-fspv-extension=DXC` is used, then the available extensions will be those available in DXC. --- clang/include/clang/Driver/Options.td | 8 ++- clang/lib/Driver/ToolChains/HLSL.cpp | 66 ++++++++++++++++++++-- clang/test/Driver/dxc_fspv_extension.hlsl | 8 +++ llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp | 42 ++++++++++++++ 4 files changed, 116 insertions(+), 8 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index eb53821bbf4d5..9471e9edcfd76 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -9428,8 +9428,12 @@ def fspv_target_env_EQ : Joined<["-"], "fspv-target-env=">, Group<dxc_Group>, def fspv_extension_EQ : Joined<["-"], "fspv-extension=">, Group<dxc_Group>, - HelpText<"Specify the available SPIR-V extensions. If this option is not " - "specified, then all extensions are available.">; + HelpText< + "Specify the available SPIR-V extensions. If this option is not " + "specified, then all extensions are available. If KHR is specified, " + "then all KHR extensions will be available. If DXC is specified, " + "then all extensions implemented by the DirectXShader compiler will " + "be available. This option is useful for moving from DXC to Clang.">; def fvk_use_dx_layout : DXCFlag<"fvk-use-dx-layout">, HelpText<"Use DirectX memory layout for Vulkan resources.">; diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 38f4643abad98..48761c254dfd8 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -173,24 +173,78 @@ bool isLegalValidatorVersion(StringRef ValVersionStr, const Driver &D) { return true; } +std::string getSpirvExtOperand(llvm::StringRef SpvExtensionArg) { + // The extensions that are commented out are supported in DXC, but the SPIR-V + // backend does not know about them yet. + static const std::vector<std::string> DxcSupportedExtensions = { + "SPV_KHR_16bit_storage", + "SPV_KHR_device_group", + "SPV_KHR_fragment_shading_rate", + "SPV_KHR_multiview", + "SPV_KHR_post_depth_coverage", + "SPV_KHR_non_semantic_info", + "SPV_KHR_shader_draw_parameters", + "SPV_KHR_ray_tracing", + "SPV_KHR_shader_clock", + "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_shader_stencil_export", + "SPV_EXT_shader_viewport_index_layer", + // "SPV_AMD_shader_early_and_late_fragment_tests", + "SPV_GOOGLE_hlsl_functionality1", + "SPV_GOOGLE_user_type", + "SPV_KHR_ray_query", + "SPV_EXT_shader_image_int64", + "SPV_KHR_fragment_shader_barycentric", + "SPV_KHR_physical_storage_buffer", + "SPV_KHR_vulkan_memory_model", + // "SPV_KHR_compute_shader_derivatives", + // "SPV_KHR_maximal_reconvergence", + "SPV_KHR_float_controls", + "SPV_NV_shader_subgroup_partitioned", + // "SPV_KHR_quad_control" + }; + + if (SpvExtensionArg.starts_with("SPV_")) { + return ("+" + SpvExtensionArg).str(); + } + if (SpvExtensionArg.compare_insensitive("DXC") == 0) { + bool first = true; + std::string Operand; + for (llvm::StringRef E : DxcSupportedExtensions) { + if (first) { + Operand = (Operand + "+" + E).str(); + first = false; + continue; + } + Operand = (Operand + ",+" + E).str(); + } + return Operand; + } + return SpvExtensionArg.str(); +} + std::string getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { if (SpvExtensionArgs.empty()) { return "-spirv-ext=all"; } std::string LlvmOption = - (Twine("-spirv-ext=+") + SpvExtensionArgs.front()).str(); + "-spirv-ext=" + getSpirvExtOperand(SpvExtensionArgs[0]); SpvExtensionArgs = SpvExtensionArgs.slice(1); - for (auto Extension : SpvExtensionArgs) { - if (Extension != "KHR") - Extension = (Twine("+") + Extension).str(); - LlvmOption = (Twine(LlvmOption) + "," + Extension).str(); + for (llvm::StringRef Extension : SpvExtensionArgs) { + LlvmOption = + (Twine(LlvmOption) + "," + getSpirvExtOperand(Extension)).str(); } return LlvmOption; } bool isValidSPIRVExtensionName(const std::string &str) { - std::regex pattern("KHR|SPV_[a-zA-Z0-9_]+"); + std::regex pattern("dxc|DXC|KHR|SPV_[a-zA-Z0-9_]+"); return std::regex_match(str, pattern); } diff --git a/clang/test/Driver/dxc_fspv_extension.hlsl b/clang/test/Driver/dxc_fspv_extension.hlsl index f09f21e8a72c9..0c9d3f5409984 100644 --- a/clang/test/Driver/dxc_fspv_extension.hlsl +++ b/clang/test/Driver/dxc_fspv_extension.hlsl @@ -14,6 +14,14 @@ // RUN: %clang_dxc -spirv -Tlib_6_7 -### %s -fspv-extension=SPV_TEST1 -fspv-extension=KHR -fspv-extension=SPV_TEST2 2>&1 | FileCheck %s -check-prefix=TEST3 // TEST3: "-spirv-ext=+SPV_TEST1,KHR,+SPV_TEST2" +// Merge KHR with other extensions. +// RUN: %clang_dxc -spirv -Tlib_6_7 -### %s -fspv-extension=KHR -fspv-extension=SPV_TEST2 2>&1 | FileCheck %s -check-prefix=TEST4 +// TEST4: "-spirv-ext=KHR,+SPV_TEST2" + +// Merge KHR with other extensions. +// RUN: %clang_dxc -spirv -Tlib_6_7 -### %s -fspv-extension=DXC 2>&1 | FileCheck %s -check-prefix=TEST5 +// TEST5: "-spirv-ext={{(\+SPV_[a-zA-Z0-9_]+,?)+}}" + // Check for the error message if the extension name is not properly formed. // RUN: not %clang_dxc -spirv -Tlib_6_7 -### %s -fspv-extension=KHR_BAD -fspv-extension=TEST1 -fspv-extension=SPV_GOOD -fspv-extension=TEST2 2>&1 | FileCheck %s -check-prefix=FAIL // FAIL: invalid value 'KHR_BAD' in '-fspv-extension' diff --git a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp index 2726203d253ad..08fe8111a15b7 100644 --- a/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp @@ -32,6 +32,24 @@ static const std::map<std::string, SPIRV::Extension::Extension, std::less<>> SPIRV::Extension::Extension::SPV_EXT_arithmetic_fence}, {"SPV_EXT_demote_to_helper_invocation", SPIRV::Extension::Extension::SPV_EXT_demote_to_helper_invocation}, + {"SPV_EXT_descriptor_indexing", + SPIRV::Extension::Extension::SPV_EXT_descriptor_indexing}, + {"SPV_EXT_fragment_fully_covered", + SPIRV::Extension::Extension::SPV_EXT_fragment_fully_covered}, + {"SPV_EXT_fragment_invocation_density", + SPIRV::Extension::Extension::SPV_EXT_fragment_invocation_density}, + {"SPV_EXT_fragment_shader_interlock", + SPIRV::Extension::Extension::SPV_EXT_fragment_shader_interlock}, + {"SPV_EXT_mesh_shader", + SPIRV::Extension::Extension::SPV_EXT_mesh_shader}, + {"SPV_EXT_shader_stencil_export", + SPIRV::Extension::Extension::SPV_EXT_shader_stencil_export}, + {"SPV_EXT_shader_viewport_index_layer", + SPIRV::Extension::Extension::SPV_EXT_shader_viewport_index_layer}, + {"SPV_GOOGLE_hlsl_functionality1", + SPIRV::Extension::Extension::SPV_GOOGLE_hlsl_functionality1}, + {"SPV_GOOGLE_user_type", + SPIRV::Extension::Extension::SPV_GOOGLE_user_type}, {"SPV_INTEL_arbitrary_precision_integers", SPIRV::Extension::Extension::SPV_INTEL_arbitrary_precision_integers}, {"SPV_INTEL_cache_controls", @@ -57,6 +75,19 @@ static const std::map<std::string, SPIRV::Extension::Extension, std::less<>> SPIRV::Extension::Extension::SPV_INTEL_memory_access_aliasing}, {"SPV_INTEL_joint_matrix", SPIRV::Extension::Extension::SPV_INTEL_joint_matrix}, + {"SPV_KHR_16bit_storage", + SPIRV::Extension::Extension::SPV_KHR_16bit_storage}, + {"SPV_KHR_device_group", + SPIRV::Extension::Extension::SPV_KHR_device_group}, + {"SPV_KHR_fragment_shading_rate", + SPIRV::Extension::Extension::SPV_KHR_fragment_shading_rate}, + {"SPV_KHR_multiview", SPIRV::Extension::Extension::SPV_KHR_multiview}, + {"SPV_KHR_post_depth_coverage", + SPIRV::Extension::Extension::SPV_KHR_post_depth_coverage}, + {"SPV_KHR_shader_draw_parameters", + SPIRV::Extension::Extension::SPV_KHR_shader_draw_parameters}, + {"SPV_KHR_ray_tracing", + SPIRV::Extension::Extension::SPV_KHR_ray_tracing}, {"SPV_KHR_uniform_group_instructions", SPIRV::Extension::Extension::SPV_KHR_uniform_group_instructions}, {"SPV_KHR_no_integer_wrap_decoration", @@ -89,6 +120,17 @@ static const std::map<std::string, SPIRV::Extension::Extension, std::less<>> SPIRV::Extension::Extension::SPV_KHR_cooperative_matrix}, {"SPV_KHR_non_semantic_info", SPIRV::Extension::Extension::SPV_KHR_non_semantic_info}, + {"SPV_KHR_ray_query", SPIRV::Extension::Extension::SPV_KHR_ray_query}, + {"SPV_EXT_shader_image_int64", + SPIRV::Extension::Extension::SPV_EXT_shader_image_int64}, + {"SPV_KHR_fragment_shader_barycentric", + SPIRV::Extension::Extension::SPV_KHR_fragment_shader_barycentric}, + {"SPV_KHR_physical_storage_buffer", + SPIRV::Extension::Extension::SPV_KHR_physical_storage_buffer}, + {"SPV_KHR_vulkan_memory_model", + SPIRV::Extension::Extension::SPV_KHR_vulkan_memory_model}, + {"SPV_NV_shader_subgroup_partitioned", + SPIRV::Extension::Extension::SPV_NV_shader_subgroup_partitioned}, {"SPV_INTEL_long_composites", SPIRV::Extension::Extension::SPV_INTEL_long_composites}, {"SPV_INTEL_fp_max_error", >From 82730ee8c8ba3f8efcd7ff78bf462dd605d323d2 Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Thu, 31 Jul 2025 21:39:50 -0400 Subject: [PATCH 02/11] Use ostream to build strings. --- clang/include/clang/Driver/Options.td | 4 +-- clang/lib/Driver/ToolChains/HLSL.cpp | 40 +++++++++++++++------------ 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 9471e9edcfd76..e9d25e70b7ab6 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -9431,8 +9431,8 @@ def fspv_extension_EQ HelpText< "Specify the available SPIR-V extensions. If this option is not " "specified, then all extensions are available. If KHR is specified, " - "then all KHR extensions will be available. If DXC is specified, " - "then all extensions implemented by the DirectXShader compiler will " + "then all KHR extensions will be available. If DXC is specifided, " + "then all extensions implemented by the DirectX Shader compiler will " "be available. This option is useful for moving from DXC to Clang.">; def fvk_use_dx_layout : DXCFlag<"fvk-use-dx-layout">, diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 48761c254dfd8..1572ab87f7491 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -173,10 +173,10 @@ bool isLegalValidatorVersion(StringRef ValVersionStr, const Driver &D) { return true; } -std::string getSpirvExtOperand(llvm::StringRef SpvExtensionArg) { +void getSpirvExtOperand(llvm::StringRef SpvExtensionArg, raw_ostream &out) { // The extensions that are commented out are supported in DXC, but the SPIR-V // backend does not know about them yet. - static const std::vector<std::string> DxcSupportedExtensions = { + static const std::vector<StringRef> DxcSupportedExtensions = { "SPV_KHR_16bit_storage", "SPV_KHR_device_group", "SPV_KHR_fragment_shading_rate", @@ -210,35 +210,41 @@ std::string getSpirvExtOperand(llvm::StringRef SpvExtensionArg) { }; if (SpvExtensionArg.starts_with("SPV_")) { - return ("+" + SpvExtensionArg).str(); + out << "+" << SpvExtensionArg; + return; } + if (SpvExtensionArg.compare_insensitive("DXC") == 0) { bool first = true; std::string Operand; for (llvm::StringRef E : DxcSupportedExtensions) { - if (first) { - Operand = (Operand + "+" + E).str(); + if (!first) + out << ","; + else first = false; - continue; - } - Operand = (Operand + ",+" + E).str(); + out << "+" << E; } - return Operand; + return; } - return SpvExtensionArg.str(); + out << SpvExtensionArg; + return; } -std::string getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { +llvm::SmallString<1024> getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { if (SpvExtensionArgs.empty()) { - return "-spirv-ext=all"; + return llvm::StringRef("-spirv-ext=all"); } - std::string LlvmOption = - "-spirv-ext=" + getSpirvExtOperand(SpvExtensionArgs[0]); + llvm::SmallString<1024> LlvmOption; + raw_svector_ostream out(LlvmOption); + + out << "-spirv-ext="; + getSpirvExtOperand(SpvExtensionArgs[0], out); + SpvExtensionArgs = SpvExtensionArgs.slice(1); for (llvm::StringRef Extension : SpvExtensionArgs) { - LlvmOption = - (Twine(LlvmOption) + "," + getSpirvExtOperand(Extension)).str(); + out << ","; + getSpirvExtOperand(Extension, out); } return LlvmOption; } @@ -425,7 +431,7 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, std::vector<std::string> SpvExtensionArgs = Args.getAllArgValues(options::OPT_fspv_extension_EQ); if (checkExtensionArgsAreValid(SpvExtensionArgs, getDriver())) { - std::string LlvmOption = getSpirvExtArg(SpvExtensionArgs); + llvm::SmallString<1024> LlvmOption = getSpirvExtArg(SpvExtensionArgs); DAL->AddSeparateArg(nullptr, Opts.getOption(options::OPT_mllvm), LlvmOption); } >From 96b944fc8b50715f1c8cf42176d4b6cfca905de7 Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Fri, 1 Aug 2025 11:10:45 -0400 Subject: [PATCH 03/11] Update clang/lib/Driver/ToolChains/HLSL.cpp Co-authored-by: Chris B <be...@abolishcrlf.org> --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 1572ab87f7491..b751471a16274 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -217,7 +217,7 @@ void getSpirvExtOperand(llvm::StringRef SpvExtensionArg, raw_ostream &out) { if (SpvExtensionArg.compare_insensitive("DXC") == 0) { bool first = true; std::string Operand; - for (llvm::StringRef E : DxcSupportedExtensions) { + for (StringRef E : DxcSupportedExtensions) { if (!first) out << ","; else >From 0049bac6e2d136454370c4a879d814db500f056a Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Fri, 1 Aug 2025 11:11:08 -0400 Subject: [PATCH 04/11] Update clang/lib/Driver/ToolChains/HLSL.cpp Co-authored-by: Chris B <be...@abolishcrlf.org> --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index b751471a16274..9022bbdd635f9 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -173,7 +173,7 @@ bool isLegalValidatorVersion(StringRef ValVersionStr, const Driver &D) { return true; } -void getSpirvExtOperand(llvm::StringRef SpvExtensionArg, raw_ostream &out) { +void getSpirvExtOperand(StringRef SpvExtensionArg, raw_ostream &out) { // The extensions that are commented out are supported in DXC, but the SPIR-V // backend does not know about them yet. static const std::vector<StringRef> DxcSupportedExtensions = { >From ea2db605a0881c93e863d3c1bf79c8339d23be71 Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Fri, 1 Aug 2025 11:11:22 -0400 Subject: [PATCH 05/11] Update clang/lib/Driver/ToolChains/HLSL.cpp Co-authored-by: Chris B <be...@abolishcrlf.org> --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 9022bbdd635f9..82974701a4859 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -230,7 +230,7 @@ void getSpirvExtOperand(StringRef SpvExtensionArg, raw_ostream &out) { return; } -llvm::SmallString<1024> getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { +SmallString<1024> getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { if (SpvExtensionArgs.empty()) { return llvm::StringRef("-spirv-ext=all"); } >From 4371f50dd7dbc32da14a6d2b24586f77de38636e Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Fri, 1 Aug 2025 11:11:31 -0400 Subject: [PATCH 06/11] Update clang/lib/Driver/ToolChains/HLSL.cpp Co-authored-by: Chris B <be...@abolishcrlf.org> --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 82974701a4859..79b49d1fad549 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -232,7 +232,7 @@ void getSpirvExtOperand(StringRef SpvExtensionArg, raw_ostream &out) { SmallString<1024> getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { if (SpvExtensionArgs.empty()) { - return llvm::StringRef("-spirv-ext=all"); + return StringRef("-spirv-ext=all"); } llvm::SmallString<1024> LlvmOption; >From 78e60e695b0550351c500d9521a4fbfea62d1c8e Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Fri, 1 Aug 2025 11:11:49 -0400 Subject: [PATCH 07/11] Update clang/lib/Driver/ToolChains/HLSL.cpp Co-authored-by: Chris B <be...@abolishcrlf.org> --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 79b49d1fad549..0a39ab1352bdb 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -242,7 +242,7 @@ SmallString<1024> getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { getSpirvExtOperand(SpvExtensionArgs[0], out); SpvExtensionArgs = SpvExtensionArgs.slice(1); - for (llvm::StringRef Extension : SpvExtensionArgs) { + for (StringRef Extension : SpvExtensionArgs) { out << ","; getSpirvExtOperand(Extension, out); } >From 20ab96a681a6c5506dd3d624192c54e588bf3555 Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Fri, 1 Aug 2025 11:12:00 -0400 Subject: [PATCH 08/11] Update clang/lib/Driver/ToolChains/HLSL.cpp Co-authored-by: Chris B <be...@abolishcrlf.org> --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 0a39ab1352bdb..bc51d7f37d5f9 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -431,7 +431,7 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, std::vector<std::string> SpvExtensionArgs = Args.getAllArgValues(options::OPT_fspv_extension_EQ); if (checkExtensionArgsAreValid(SpvExtensionArgs, getDriver())) { - llvm::SmallString<1024> LlvmOption = getSpirvExtArg(SpvExtensionArgs); + SmallString<1024> LlvmOption = getSpirvExtArg(SpvExtensionArgs); DAL->AddSeparateArg(nullptr, Opts.getOption(options::OPT_mllvm), LlvmOption); } >From 3746b6028673dc147fb3ea52adc6490df3142987 Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Thu, 21 Aug 2025 09:55:46 -0400 Subject: [PATCH 09/11] Add khr as an option. --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index bc51d7f37d5f9..018fa43508899 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -250,7 +250,7 @@ SmallString<1024> getSpirvExtArg(ArrayRef<std::string> SpvExtensionArgs) { } bool isValidSPIRVExtensionName(const std::string &str) { - std::regex pattern("dxc|DXC|KHR|SPV_[a-zA-Z0-9_]+"); + std::regex pattern("dxc|DXC|khr|KHR|SPV_[a-zA-Z0-9_]+"); return std::regex_match(str, pattern); } >From 3e655e37a311f6311d1b87a6fc7db0e27b19bec8 Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Thu, 21 Aug 2025 09:56:18 -0400 Subject: [PATCH 10/11] Fix format --- clang/lib/Driver/ToolChains/HLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/HLSL.cpp b/clang/lib/Driver/ToolChains/HLSL.cpp index 018fa43508899..62df56d9817a6 100644 --- a/clang/lib/Driver/ToolChains/HLSL.cpp +++ b/clang/lib/Driver/ToolChains/HLSL.cpp @@ -431,7 +431,7 @@ HLSLToolChain::TranslateArgs(const DerivedArgList &Args, StringRef BoundArch, std::vector<std::string> SpvExtensionArgs = Args.getAllArgValues(options::OPT_fspv_extension_EQ); if (checkExtensionArgsAreValid(SpvExtensionArgs, getDriver())) { - SmallString<1024> LlvmOption = getSpirvExtArg(SpvExtensionArgs); + SmallString<1024> LlvmOption = getSpirvExtArg(SpvExtensionArgs); DAL->AddSeparateArg(nullptr, Opts.getOption(options::OPT_mllvm), LlvmOption); } >From bf89a58992f199f0f65a922a0048a145b68fd0b1 Mon Sep 17 00:00:00 2001 From: Steven Perron <stevenper...@google.com> Date: Thu, 21 Aug 2025 10:00:55 -0400 Subject: [PATCH 11/11] Fix comment --- clang/test/Driver/dxc_fspv_extension.hlsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Driver/dxc_fspv_extension.hlsl b/clang/test/Driver/dxc_fspv_extension.hlsl index 0c9d3f5409984..aeba9f56463f8 100644 --- a/clang/test/Driver/dxc_fspv_extension.hlsl +++ b/clang/test/Driver/dxc_fspv_extension.hlsl @@ -18,7 +18,7 @@ // RUN: %clang_dxc -spirv -Tlib_6_7 -### %s -fspv-extension=KHR -fspv-extension=SPV_TEST2 2>&1 | FileCheck %s -check-prefix=TEST4 // TEST4: "-spirv-ext=KHR,+SPV_TEST2" -// Merge KHR with other extensions. +// Convert DXC to a list of SPV extensions. // RUN: %clang_dxc -spirv -Tlib_6_7 -### %s -fspv-extension=DXC 2>&1 | FileCheck %s -check-prefix=TEST5 // TEST5: "-spirv-ext={{(\+SPV_[a-zA-Z0-9_]+,?)+}}" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits