[llvm] [DirectX] adding support to read/write descriptor table data using obj2yaml/yaml2obj (PR #138315)
Justin Bogner via llvm-commits
llvm-commits at lists.llvm.org
Thu May 22 09:48:53 PDT 2025
================
@@ -295,16 +295,33 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
Descriptor.Flags = Param.Descriptor.getEncodedFlags();
RS.ParametersContainer.addParameter(Header, Descriptor);
break;
+ case llvm::to_underlying(dxbc::RootParameterType::DescriptorTable): {
+ mcdxbc::DescriptorTable Table;
+ for (const auto &R : Param.Table.Ranges) {
+
+ dxbc::RTS0::v2::DescriptorRange Range;
+ Range.RangeType = R.RangeType;
+ Range.NumDescriptors = R.NumDescriptors;
+ Range.BaseShaderRegister = R.BaseShaderRegister;
+ Range.RegisterSpace = R.RegisterSpace;
+ Range.OffsetInDescriptorsFromTableStart =
+ R.OffsetInDescriptorsFromTableStart;
+ if (RS.Version > 1)
+ Range.Flags = R.getEncodedFlags();
+ Table.Ranges.push_back(Range);
+ }
+ RS.ParametersContainer.addParameter(Header, Table);
+ } break;
default:
// Handling invalid parameter type edge case. We intentionally let
// obj2yaml/yaml2obj parse and emit invalid dxcontainer data, in order
// for that to be used as a testing tool more effectively.
RS.ParametersContainer.addInvalidParameter(Header);
+ break;
}
}
RS.write(OS);
- break;
----------------
bogner wrote:
Why remove this break? Isn't this the break for the outer `switch (PT)`?
Aside: as a follow up we should really consider breaking this function up into smaller parts - it's getting very hard to follow.
https://github.com/llvm/llvm-project/pull/138315
More information about the llvm-commits
mailing list