Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions clang/include/clang/Driver/Options.td
Original file line number Diff line number Diff line change
Expand Up @@ -9418,6 +9418,8 @@ def dxc_Fo : DXCJoinedOrSeparate<"Fo">,
HelpText<"Output object file">;
def dxc_Fc : DXCJoinedOrSeparate<"Fc">,
HelpText<"Output assembly listing file">;
def dxc_Frs : DXCJoinedOrSeparate<"Frs">,
HelpText<"Output additional root signature object file">;
def dxil_validator_version : Option<["/", "-"], "validator-version", KIND_SEPARATE>,
Group<dxc_Group>, Flags<[HelpHidden]>,
Visibility<[DXCOption, ClangOption, CC1Option]>,
Expand Down
9 changes: 8 additions & 1 deletion clang/lib/Driver/ToolChains/HLSL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,13 @@ void tools::hlsl::LLVMObjcopy::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back(Output.getFilename());

if (Args.hasArg(options::OPT_dxc_strip_rootsignature)) {
const char *Frs = Args.MakeArgString("--remove-section=RTS0");
const char *StripRS = Args.MakeArgString("--remove-section=RTS0");
CmdArgs.push_back(StripRS);
}

if (Arg *Arg = Args.getLastArg(options::OPT_dxc_Frs)) {
const char *Frs =
Args.MakeArgString("--extract-section=RTS0=" + Twine(Arg->getValue()));
CmdArgs.push_back(Frs);
}

Expand Down Expand Up @@ -524,6 +530,7 @@ bool HLSLToolChain::requiresBinaryTranslation(DerivedArgList &Args) const {
bool HLSLToolChain::requiresObjcopy(DerivedArgList &Args) const {
return Args.hasArg(options::OPT_dxc_Fo) &&
(Args.hasArg(options::OPT_dxc_strip_rootsignature) ||
Args.hasArg(options::OPT_dxc_Frs) ||
isRootSignatureTarget(Args));
}

Expand Down
10 changes: 10 additions & 0 deletions clang/test/Driver/dxc_frs.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// RUN: %clang_dxc -T cs_6_0 /Fo %t.dxo /Frs %t.rs.dxo -### %s 2>&1 | FileCheck %s

// Test to demonstrate extracting the root signature to the specified
// output file with /Frs.

// CHECK: "{{.*}}llvm-objcopy{{(.exe)?}}" "{{.*}}.obj" "{{.*}}.dxo" "--extract-section=RTS0={{.*}}.rs.dxo"

[shader("compute"), RootSignature("")]
[numthreads(1,1,1)]
void EmptyEntry() {}
Loading