[llvm] [NFC] Refactoring MCDXBC to support out of order storage of root parameters (PR #137284)
Sarah Spall via llvm-commits
llvm-commits at lists.llvm.org
Mon May 12 09:28:03 PDT 2025
================
@@ -274,27 +274,39 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
RS.StaticSamplersOffset = P.RootSignature->StaticSamplersOffset;
for (const auto &Param : P.RootSignature->Parameters) {
- mcdxbc::RootParameter NewParam;
- NewParam.Header = dxbc::RootParameterHeader{
- Param.Type, Param.Visibility, Param.Offset};
+ auto Header = dxbc::RootParameterHeader{Param.Type, Param.Visibility,
+ Param.Offset};
switch (Param.Type) {
case llvm::to_underlying(dxbc::RootParameterType::Constants32Bit):
- NewParam.Constants.Num32BitValues = Param.Constants.Num32BitValues;
- NewParam.Constants.RegisterSpace = Param.Constants.RegisterSpace;
- NewParam.Constants.ShaderRegister = Param.Constants.ShaderRegister;
+ dxbc::RootConstants Constants;
+ Constants.Num32BitValues = Param.Constants.Num32BitValues;
+ Constants.RegisterSpace = Param.Constants.RegisterSpace;
+ Constants.ShaderRegister = Param.Constants.ShaderRegister;
+ RS.ParametersContainer.addParameter(Header, Constants);
break;
case llvm::to_underlying(dxbc::RootParameterType::SRV):
case llvm::to_underlying(dxbc::RootParameterType::UAV):
case llvm::to_underlying(dxbc::RootParameterType::CBV):
- NewParam.Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace;
- NewParam.Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister;
- if (P.RootSignature->Version > 1)
- NewParam.Descriptor.Flags = Param.Descriptor.getEncodedFlags();
+ if (RS.Version == 1) {
+ dxbc::RTS0::v1::RootDescriptor Descriptor;
+ Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace;
+ Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister;
+ RS.ParametersContainer.addParameter(Header, Descriptor);
+ } else {
+ dxbc::RTS0::v2::RootDescriptor Descriptor;
+ Descriptor.RegisterSpace = Param.Descriptor.RegisterSpace;
+ Descriptor.ShaderRegister = Param.Descriptor.ShaderRegister;
+ Descriptor.Flags = Param.Descriptor.getEncodedFlags();
+ RS.ParametersContainer.addParameter(Header, Descriptor);
+ }
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.addInfo(Header, -1);
----------------
spall wrote:
Is there a chance the loop on line 35 of DXContainerRootSignature.cpp will loop over this RootParameterInfo and attempt to access a vector at index -1?
https://github.com/llvm/llvm-project/pull/137284
More information about the llvm-commits
mailing list