@@ -269,27 +269,11 @@ Error DXContainerWriter::writeParts(raw_ostream &OS) {
269269 mcdxbc::RootSignatureDesc RS;
270270 RS.Flags = P.RootSignature ->getEncodedFlags ();
271271 RS.Version = P.RootSignature ->Version ;
272-
273- // Handling of RootParameters
274- const uint32_t RootHeaderSize =
275- sizeof (dxbc::RTS0::v1::RootSignatureHeader);
276- if (P.RootSignature ->RootParametersOffset &&
277- P.RootSignature ->RootParametersOffset .value () != RootHeaderSize) {
278- return createStringError (
279- errc::invalid_argument,
280- " Specified RootParametersOffset does not match required value: %d." ,
281- RootHeaderSize);
282- }
283-
284- uint32_t Offset = RootHeaderSize;
285- RS.RootParameterOffset = Offset;
272+ RS.NumStaticSamplers = P.RootSignature ->NumStaticSamplers ;
286273
287274 for (DXContainerYAML::RootParameterLocationYaml &L :
288275 P.RootSignature ->Parameters .Locations ) {
289276
290- // Offset RootParameterHeader
291- Offset += sizeof (dxbc::RTS0::v1::RootParameterHeader);
292-
293277 assert (dxbc::isValidParameterType (L.Header .Type ) &&
294278 " invalid DXContainer YAML" );
295279 assert (dxbc::isValidShaderVisibility (L.Header .Visibility ) &&
@@ -308,8 +292,6 @@ Error DXContainerWriter::writeParts(raw_ostream &OS) {
308292 Constants.RegisterSpace = ConstantYaml.RegisterSpace ;
309293 Constants.ShaderRegister = ConstantYaml.ShaderRegister ;
310294 RS.ParametersContainer .addParameter (Type, Visibility, Constants);
311-
312- Offset += sizeof (dxbc::RTS0::v1::RootConstants);
313295 break ;
314296 }
315297 case dxbc::RootParameterType::CBV:
@@ -321,11 +303,8 @@ Error DXContainerWriter::writeParts(raw_ostream &OS) {
321303 dxbc::RTS0::v2::RootDescriptor Descriptor;
322304 Descriptor.RegisterSpace = DescriptorYaml.RegisterSpace ;
323305 Descriptor.ShaderRegister = DescriptorYaml.ShaderRegister ;
324- if (RS.Version > 1 ) {
306+ if (RS.Version > 1 )
325307 Descriptor.Flags = DescriptorYaml.getEncodedFlags ();
326- Offset += sizeof (dxbc::RTS0::v2::RootDescriptor);
327- } else
328- Offset += sizeof (dxbc::RTS0::v1::RootDescriptor);
329308
330309 RS.ParametersContainer .addParameter (Type, Visibility, Descriptor);
331310 break ;
@@ -334,8 +313,6 @@ Error DXContainerWriter::writeParts(raw_ostream &OS) {
334313 const DXContainerYAML::DescriptorTableYaml &TableYaml =
335314 P.RootSignature ->Parameters .getOrInsertTable (L);
336315 mcdxbc::DescriptorTable Table;
337- Offset +=
338- 2 * sizeof (uint32_t ); // DescriptorTable NumRanges and Offset
339316 for (const auto &R : TableYaml.Ranges ) {
340317
341318 dxbc::RTS0::v2::DescriptorRange Range;
@@ -346,11 +323,8 @@ Error DXContainerWriter::writeParts(raw_ostream &OS) {
346323 Range.OffsetInDescriptorsFromTableStart =
347324 R.OffsetInDescriptorsFromTableStart ;
348325
349- if (RS.Version > 1 ) {
350- Offset += sizeof (dxbc::RTS0::v2::DescriptorRange);
326+ if (RS.Version > 1 )
351327 Range.Flags = R.getEncodedFlags ();
352- } else
353- Offset += sizeof (dxbc::RTS0::v1::DescriptorRange);
354328
355329 Table.Ranges .push_back (Range);
356330 }
@@ -360,19 +334,6 @@ Error DXContainerWriter::writeParts(raw_ostream &OS) {
360334 }
361335 }
362336
363- // Handling of StaticSamplers
364- RS.NumStaticSamplers = P.RootSignature ->NumStaticSamplers ;
365-
366- if (P.RootSignature ->StaticSamplersOffset &&
367- P.RootSignature ->StaticSamplersOffset .value () != Offset) {
368- return createStringError (
369- errc::invalid_argument,
370- " Specified StaticSamplersOffset does not match computed value: %d." ,
371- Offset);
372- }
373-
374- RS.StaticSamplersOffset = Offset;
375-
376337 for (const auto &Param : P.RootSignature ->samplers ()) {
377338 dxbc::RTS0::v1::StaticSampler NewSampler;
378339 NewSampler.Filter = Param.Filter ;
@@ -392,6 +353,27 @@ Error DXContainerWriter::writeParts(raw_ostream &OS) {
392353 RS.StaticSamplers .push_back (NewSampler);
393354 }
394355
356+ // Handling of offsets
357+ RS.RootParameterOffset = RS.computeRootParametersOffset ();
358+ if (P.RootSignature ->RootParametersOffset &&
359+ P.RootSignature ->RootParametersOffset .value () !=
360+ RS.RootParameterOffset ) {
361+ return createStringError (
362+ errc::invalid_argument,
363+ " Specified RootParametersOffset does not match required value: %d." ,
364+ RS.RootParameterOffset );
365+ }
366+
367+ RS.StaticSamplersOffset = RS.computeStaticSamplersOffset ();
368+ if (P.RootSignature ->StaticSamplersOffset &&
369+ P.RootSignature ->StaticSamplersOffset .value () !=
370+ RS.StaticSamplersOffset ) {
371+ return createStringError (
372+ errc::invalid_argument,
373+ " Specified StaticSamplersOffset does not match computed value: %d." ,
374+ RS.StaticSamplersOffset );
375+ }
376+
395377 RS.write (OS);
396378 break ;
397379 }
0 commit comments