python3kgae created this revision.
python3kgae added reviewers: pow2clk, beanz, bogner.
Herald added a subscriber: Anastasia.
Herald added a project: All.
python3kgae requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay.
Herald added a project: clang.
Two new options are added.
no-legacy-cbuf-layout for dxc mode to match dxc.
hlsl-no-legacy-cbuffer-layout for cc1 mode and save the information will saved
in TargetOptions::HLSLNoLegacyCBufferLayout.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D134998
Files:
clang/include/clang/Basic/TargetOptions.h
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Driver/ToolChains/HLSL.cpp
clang/lib/Frontend/CompilerInvocation.cpp
clang/test/Driver/dxc_no_legacy_cbuf_layout.hlsl
clang/unittests/Driver/DXCModeTest.cpp
Index: clang/unittests/Driver/DXCModeTest.cpp
===================================================================
--- clang/unittests/Driver/DXCModeTest.cpp
+++ clang/unittests/Driver/DXCModeTest.cpp
@@ -237,3 +237,32 @@
// Make sure "-E" will set entry.
EXPECT_STREQ(CInvok->getTargetOpts().HLSLEntry.c_str(), "bar");
}
+
+TEST(DxcModeTest, NoLegacyCBufLayout) {
+ IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem(
+ new llvm::vfs::InMemoryFileSystem);
+
+ InMemoryFileSystem->addFile("foo.hlsl", 0,
+ llvm::MemoryBuffer::getMemBuffer("\n"));
+
+ const char *Args[] = {"clang", "--driver-mode=dxc", "-Tcs_6_7",
+ "-no-legacy-cbuf-layout", "foo.hlsl"};
+
+ IntrusiveRefCntPtr<DiagnosticsEngine> Diags =
+ CompilerInstance::createDiagnostics(new DiagnosticOptions());
+
+ CreateInvocationOptions CIOpts;
+ CIOpts.Diags = Diags;
+ std::unique_ptr<CompilerInvocation> CInvok =
+ createInvocation(Args, std::move(CIOpts));
+ EXPECT_TRUE(CInvok);
+ // Make sure HLSLNoLegacyCBufferLayout is enabled.
+ EXPECT_TRUE(CInvok->getTargetOpts().HLSLNoLegacyCBufferLayout);
+
+ const char *DefaultArgs[] = {"clang", "--driver-mode=dxc", "-Tcs_6_7",
+ "foo.hlsl"};
+ CInvok = createInvocation(DefaultArgs, std::move(CIOpts));
+ EXPECT_TRUE(CInvok);
+ // Make sure HLSLNoLegacyCBufferLayout is disabled.
+ EXPECT_FALSE(CInvok->getTargetOpts().HLSLNoLegacyCBufferLayout);
+}
Index: clang/test/Driver/dxc_no_legacy_cbuf_layout.hlsl
===================================================================
--- /dev/null
+++ clang/test/Driver/dxc_no_legacy_cbuf_layout.hlsl
@@ -0,0 +1,10 @@
+// RUN: %clang_dxc -T lib_6_7 -no-legacy-cbuf-layout -### %s 2>&1 | FileCheck %s
+// RUN: %clang_dxc -T lib_6_7 -### %s 2>&1 | FileCheck %s --check-prefix=LEGACY
+
+// Make sure hlsl-no-legacy-cbuffer-layout is enabled.
+// CHECK: "-hlsl-no-legacy-cbuffer-layout"
+
+// Make sure hlsl-no-legacy-cbuffer-layout is not enabled.
+// LEGACY-NOT: "-hlsl-no-legacy-cbuffer-layout"
+
+
Index: clang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -514,6 +514,10 @@
Diags.Report(diag::err_drv_argument_not_allowed_with)
<< "-hlsl-entry" << GetInputKindName(IK);
+ if (Args.hasArg(OPT_hlsl_disable_legacy_cbuffer_layout) && !LangOpts.HLSL)
+ Diags.Report(diag::err_drv_argument_not_allowed_with)
+ << "-hlsl-no-legacy-cbuffer-layout" << GetInputKindName(IK);
+
if (Args.hasArg(OPT_fgpu_allow_device_init) && !LangOpts.HIP)
Diags.Report(diag::warn_ignored_hip_only_option)
<< Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);
Index: clang/lib/Driver/ToolChains/HLSL.cpp
===================================================================
--- clang/lib/Driver/ToolChains/HLSL.cpp
+++ clang/lib/Driver/ToolChains/HLSL.cpp
@@ -164,6 +164,13 @@
A->claim();
continue;
}
+ if (A->getOption().getID() == options::OPT_dxc_no_legacy_cbuf_layout) {
+ DAL->AddFlagArg(
+ nullptr,
+ Opts.getOption(options::OPT_hlsl_disable_legacy_cbuffer_layout));
+ A->claim();
+ continue;
+ }
if (A->getOption().getID() == options::OPT__SLASH_O) {
StringRef OStr = A->getValue();
if (OStr == "d") {
Index: clang/lib/Driver/ToolChains/Clang.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -3521,16 +3521,18 @@
static void RenderHLSLOptions(const ArgList &Args, ArgStringList &CmdArgs,
types::ID InputType) {
- const unsigned ForwardedArguments[] = {options::OPT_dxil_validator_version,
- options::OPT_D,
- options::OPT_I,
- options::OPT_S,
- options::OPT_O,
- options::OPT_emit_llvm,
- options::OPT_emit_obj,
- options::OPT_disable_llvm_passes,
- options::OPT_fnative_half_type,
- options::OPT_hlsl_entrypoint};
+ const unsigned ForwardedArguments[] = {
+ options::OPT_dxil_validator_version,
+ options::OPT_D,
+ options::OPT_I,
+ options::OPT_S,
+ options::OPT_O,
+ options::OPT_emit_llvm,
+ options::OPT_emit_obj,
+ options::OPT_disable_llvm_passes,
+ options::OPT_fnative_half_type,
+ options::OPT_hlsl_entrypoint,
+ options::OPT_hlsl_disable_legacy_cbuffer_layout};
if (!types::isHLSL(InputType))
return;
for (const auto &Arg : ForwardedArguments)
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -6981,3 +6981,10 @@
Group<dxc_Group>,
Flags<[DXCOption, NoXarchOption]>,
HelpText<"Entry point name">;
+def hlsl_disable_legacy_cbuffer_layout : Option<["-"], "hlsl-no-legacy-cbuffer-layout", KIND_FLAG>,
+ Group<dxc_Group>,
+ Flags<[CC1Option]>,
+ MarshallingInfoFlag<TargetOpts<"HLSLNoLegacyCBufferLayout">>,
+ HelpText<"Do not use legacy cbuffer layout">;
+def dxc_no_legacy_cbuf_layout : DXCFlag<"no-legacy-cbuf-layout">,
+ HelpText<"Do not use legacy cbuffer layout">;
Index: clang/include/clang/Basic/TargetOptions.h
===================================================================
--- clang/include/clang/Basic/TargetOptions.h
+++ clang/include/clang/Basic/TargetOptions.h
@@ -116,6 +116,9 @@
/// The entry point name for HLSL shader being compiled as specified by -E.
std::string HLSLEntry;
+
+ /// Not using legacy cbuffer layout for HLSL cbuffer.
+ unsigned HLSLNoLegacyCBufferLayout : 1;
};
} // end namespace clang
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits