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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to