@@ -76,26 +76,29 @@ DXContainerYAML::RootSignatureYamlDesc::create(
76
76
return std::move (E);
77
77
78
78
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;
83
84
} else if (auto *RDV =
84
85
dyn_cast<object::DirectX::RootDescriptorView>(&ParamView)) {
85
86
llvm::Expected<dxbc::RST0::v1::RootDescriptor> DescriptorOrErr =
86
87
RDV->read (Version);
87
88
if (Error E = DescriptorOrErr.takeError ())
88
89
return std::move (E);
89
90
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 ;
92
94
if (Version > 1 ) {
93
95
#define ROOT_DESCRIPTOR_FLAG (Num, Val ) \
94
- NewP. Descriptor .Val = \
96
+ YamlDescriptor .Val = \
95
97
(Descriptor.Flags & \
96
98
llvm::to_underlying (dxbc::RootDescriptorFlag::Val)) > 0 ;
97
99
#include " llvm/BinaryFormat/DXContainerConstants.def"
98
100
}
101
+ NewP.Data = YamlDescriptor;
99
102
} else if (auto *TDV = dyn_cast<object::DirectX::DescriptorTableView<
100
103
dxbc::RST0::v0::DescriptorRange>>(&ParamView)) {
101
104
llvm::Expected<
@@ -104,8 +107,9 @@ DXContainerYAML::RootSignatureYamlDesc::create(
104
107
if (Error E = TableOrErr.takeError ())
105
108
return std::move (E);
106
109
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 ;
109
113
110
114
for (const auto &R : Table) {
111
115
DescriptorRangeYaml NewR;
@@ -117,8 +121,9 @@ DXContainerYAML::RootSignatureYamlDesc::create(
117
121
NewR.RegisterSpace = R.RegisterSpace ;
118
122
NewR.RangeType = R.RangeType ;
119
123
120
- NewP. Table .Ranges .push_back (NewR);
124
+ YamlTable .Ranges .push_back (NewR);
121
125
}
126
+ NewP.Data = YamlTable;
122
127
} else if (auto *TDV = dyn_cast<object::DirectX::DescriptorTableView<
123
128
dxbc::RST0::v1::DescriptorRange>>(&ParamView)) {
124
129
llvm::Expected<
@@ -127,8 +132,9 @@ DXContainerYAML::RootSignatureYamlDesc::create(
127
132
if (Error E = TableOrErr.takeError ())
128
133
return std::move (E);
129
134
auto Table = *TableOrErr;
130
- NewP.Table .NumRanges = Table.NumRanges ;
131
- NewP.Table .RangesOffset = Table.RangesOffset ;
135
+ DescriptorTableYaml YamlTable;
136
+ YamlTable.NumRanges = Table.NumRanges ;
137
+ YamlTable.RangesOffset = Table.RangesOffset ;
132
138
133
139
for (const auto &R : Table) {
134
140
DescriptorRangeYaml NewR;
@@ -143,8 +149,9 @@ DXContainerYAML::RootSignatureYamlDesc::create(
143
149
NewR.Val = \
144
150
(R.Flags & llvm::to_underlying (dxbc::DescriptorRangeFlag::Val)) > 0 ;
145
151
#include " llvm/BinaryFormat/DXContainerConstants.def"
146
- NewP. Table .Ranges .push_back (NewR);
152
+ YamlTable .Ranges .push_back (NewR);
147
153
}
154
+ NewP.Data = YamlTable;
148
155
}
149
156
150
157
RootSigDesc.Parameters .push_back (NewP);
@@ -394,18 +401,29 @@ void MappingTraits<llvm::DXContainerYAML::RootParameterYamlDesc>::mapping(
394
401
IO.mapRequired (" ShaderVisibility" , P.Visibility );
395
402
396
403
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 ;
400
411
case llvm::to_underlying (dxbc::RootParameterType::CBV):
401
412
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 ;
409
427
}
410
428
}
411
429
0 commit comments