@@ -76,36 +76,40 @@ DXContainerYAML::RootSignatureYamlDesc::create(
7676 return std::move (E);
7777
7878 auto Constants = *ConstantsOrErr;
79-
80- NewP.Constants .Num32BitValues = Constants.Num32BitValues ;
81- NewP.Constants .ShaderRegister = Constants.ShaderRegister ;
82- NewP.Constants .RegisterSpace = Constants.RegisterSpace ;
79+ RootConstantsYaml ConstantYaml;
80+ ConstantYaml.Num32BitValues = Constants.Num32BitValues ;
81+ ConstantYaml.ShaderRegister = Constants.ShaderRegister ;
82+ ConstantYaml.RegisterSpace = Constants.RegisterSpace ;
83+ NewP.Data = ConstantYaml;
8384 } else if (auto *RDV =
8485 dyn_cast<object::DirectX::RootDescriptorView>(&ParamView)) {
8586 llvm::Expected<dxbc::RST0::v1::RootDescriptor> DescriptorOrErr =
8687 RDV->read (Version);
8788 if (Error E = DescriptorOrErr.takeError ())
8889 return std::move (E);
8990 auto Descriptor = *DescriptorOrErr;
90- NewP.Descriptor .ShaderRegister = Descriptor.ShaderRegister ;
91- NewP.Descriptor .RegisterSpace = Descriptor.RegisterSpace ;
91+ RootDescriptorYaml YamlDescriptor;
92+ YamlDescriptor.ShaderRegister = Descriptor.ShaderRegister ;
93+ YamlDescriptor.RegisterSpace = Descriptor.RegisterSpace ;
9294 if (Version > 1 ) {
9395#define ROOT_DESCRIPTOR_FLAG (Num, Val ) \
94- NewP. Descriptor .Val = \
96+ YamlDescriptor .Val = \
9597 (Descriptor.Flags & \
9698 llvm::to_underlying (dxbc::RootDescriptorFlag::Val)) > 0 ;
9799#include " llvm/BinaryFormat/DXContainerConstants.def"
98100 }
101+ NewP.Data = YamlDescriptor;
99102 } else if (auto *TDV = dyn_cast<object::DirectX::DescriptorTableView<
100- dxbc::RST0::v1 ::DescriptorRange>>(&ParamView)) {
103+ dxbc::RST0::v0 ::DescriptorRange>>(&ParamView)) {
101104 llvm::Expected<
102- object::DirectX::DescriptorTable<dxbc::RST0::v1 ::DescriptorRange>>
105+ object::DirectX::DescriptorTable<dxbc::RST0::v0 ::DescriptorRange>>
103106 TableOrErr = TDV->read ();
104107 if (Error E = TableOrErr.takeError ())
105108 return std::move (E);
106109 auto Table = *TableOrErr;
107- NewP.Table .NumRanges = Table.NumRanges ;
108- NewP.Table .RangesOffset = Table.RangesOffset ;
110+ DescriptorTableYaml YamlTable;
111+ YamlTable.NumRanges = Table.NumRanges ;
112+ YamlTable.RangesOffset = Table.RangesOffset ;
109113
110114 for (const auto &R : Table) {
111115 DescriptorRangeYaml NewR;
@@ -116,22 +120,21 @@ DXContainerYAML::RootSignatureYamlDesc::create(
116120 NewR.BaseShaderRegister = R.BaseShaderRegister ;
117121 NewR.RegisterSpace = R.RegisterSpace ;
118122 NewR.RangeType = R.RangeType ;
119- #define DESCRIPTOR_RANGE_FLAG (Num, Val ) \
120- NewR.Val = \
121- (R.Flags & llvm::to_underlying (dxbc::DescriptorRangeFlag::Val)) > 0 ;
122- #include " llvm/BinaryFormat/DXContainerConstants.def"
123- NewP.Table .Ranges .push_back (NewR);
123+
124+ YamlTable.Ranges .push_back (NewR);
124125 }
126+ NewP.Data = YamlTable;
125127 } else if (auto *TDV = dyn_cast<object::DirectX::DescriptorTableView<
126- dxbc::RST0::v0 ::DescriptorRange>>(&ParamView)) {
128+ dxbc::RST0::v1 ::DescriptorRange>>(&ParamView)) {
127129 llvm::Expected<
128- object::DirectX::DescriptorTable<dxbc::RST0::v0 ::DescriptorRange>>
130+ object::DirectX::DescriptorTable<dxbc::RST0::v1 ::DescriptorRange>>
129131 TableOrErr = TDV->read ();
130132 if (Error E = TableOrErr.takeError ())
131133 return std::move (E);
132134 auto Table = *TableOrErr;
133- NewP.Table .NumRanges = Table.NumRanges ;
134- NewP.Table .RangesOffset = Table.RangesOffset ;
135+ DescriptorTableYaml YamlTable;
136+ YamlTable.NumRanges = Table.NumRanges ;
137+ YamlTable.RangesOffset = Table.RangesOffset ;
135138
136139 for (const auto &R : Table) {
137140 DescriptorRangeYaml NewR;
@@ -142,9 +145,13 @@ DXContainerYAML::RootSignatureYamlDesc::create(
142145 NewR.BaseShaderRegister = R.BaseShaderRegister ;
143146 NewR.RegisterSpace = R.RegisterSpace ;
144147 NewR.RangeType = R.RangeType ;
145-
146- NewP.Table .Ranges .push_back (NewR);
148+ #define DESCRIPTOR_RANGE_FLAG (Num, Val ) \
149+ NewR.Val = \
150+ (R.Flags & llvm::to_underlying (dxbc::DescriptorRangeFlag::Val)) > 0 ;
151+ #include " llvm/BinaryFormat/DXContainerConstants.def"
152+ YamlTable.Ranges .push_back (NewR);
147153 }
154+ NewP.Data = YamlTable;
148155 }
149156
150157 RootSigDesc.Parameters .push_back (NewP);
@@ -394,18 +401,29 @@ void MappingTraits<llvm::DXContainerYAML::RootParameterYamlDesc>::mapping(
394401 IO.mapRequired (" ShaderVisibility" , P.Visibility );
395402
396403 switch (P.Type ) {
397- case llvm::to_underlying (dxbc::RootParameterType::Constants32Bit):
398- IO.mapRequired (" Constants" , P.Constants );
399- break ;
404+ case llvm::to_underlying (dxbc::RootParameterType::Constants32Bit): {
405+ DXContainerYAML::RootConstantsYaml Constants;
406+ if (IO.outputting ())
407+ Constants = std::get<DXContainerYAML::RootConstantsYaml>(P.Data );
408+ IO.mapRequired (" Constants" , Constants);
409+ P.Data = Constants;
410+ } break ;
400411 case llvm::to_underlying (dxbc::RootParameterType::CBV):
401412 case llvm::to_underlying (dxbc::RootParameterType::SRV):
402- case llvm::to_underlying (dxbc::RootParameterType::UAV):
403- IO.mapRequired (" Descriptor" , P.Descriptor );
404- break ;
405- case llvm::to_underlying (dxbc::RootParameterType::DescriptorTable):
406- IO.mapRequired (" Table" , P.Table );
407- break ;
408- break ;
413+ case llvm::to_underlying (dxbc::RootParameterType::UAV):{
414+ DXContainerYAML::RootDescriptorYaml Descriptor;
415+ if (IO.outputting ())
416+ Descriptor = std::get<DXContainerYAML::RootDescriptorYaml>(P.Data );
417+ IO.mapRequired (" Descriptor" , Descriptor);
418+ P.Data = Descriptor;
419+ } break ;
420+ case llvm::to_underlying (dxbc::RootParameterType::DescriptorTable): {
421+ DXContainerYAML::DescriptorTableYaml Table;
422+ if (IO.outputting ())
423+ Table = std::get<DXContainerYAML::DescriptorTableYaml>(P.Data );
424+ IO.mapRequired (" Table" , Table);
425+ P.Data = Table;
426+ } break ;
409427 }
410428}
411429
0 commit comments