@@ -325,19 +325,25 @@ Error MetadataParser::parseDescriptorRange(mcdxbc::DescriptorTable &Table,
325325 if (RangeDescriptorNode->getNumOperands () != 6 )
326326 return make_error<InvalidRSMetadataFormat>(" Descriptor Range" );
327327
328- mcdxbc ::DescriptorRange Range;
328+ dxbc::RTS0::v2 ::DescriptorRange Range;
329329
330330 std::optional<StringRef> ElementText =
331331 extractMdStringValue (RangeDescriptorNode, 0 );
332332
333333 if (!ElementText.has_value ())
334334 return make_error<InvalidRSMetadataFormat>(" Descriptor Range" );
335335
336- Range.RangeType = StringSwitch<dxbc::DescriptorRangeType>(*ElementText)
337- .Case (" CBV" , dxbc::DescriptorRangeType::CBV)
338- .Case (" SRV" , dxbc::DescriptorRangeType::SRV)
339- .Case (" UAV" , dxbc::DescriptorRangeType::UAV)
340- .Case (" Sampler" , dxbc::DescriptorRangeType::Sampler);
336+ Range.RangeType =
337+ StringSwitch<uint32_t >(*ElementText)
338+ .Case (" CBV" , to_underlying (dxbc::DescriptorRangeType::CBV))
339+ .Case (" SRV" , to_underlying (dxbc::DescriptorRangeType::SRV))
340+ .Case (" UAV" , to_underlying (dxbc::DescriptorRangeType::UAV))
341+ .Case (" Sampler" , to_underlying (dxbc::DescriptorRangeType::Sampler))
342+ .Default (~0U );
343+
344+ if (Range.RangeType == ~0U )
345+ return make_error<GenericRSMetadataError>(" Invalid Descriptor Range type." ,
346+ RangeDescriptorNode);
341347
342348 if (std::optional<uint32_t > Val = extractMdIntValue (RangeDescriptorNode, 1 ))
343349 Range.NumDescriptors = *Val;
@@ -565,7 +571,12 @@ Error MetadataParser::validateRootSignature(
565571 case dxbc::RootParameterType::DescriptorTable: {
566572 const mcdxbc::DescriptorTable &Table =
567573 RSD.ParametersContainer .getDescriptorTable (Info.Location );
568- for (const mcdxbc::DescriptorRange &Range : Table) {
574+ for (const dxbc::RTS0::v2::DescriptorRange &Range : Table) {
575+ if (!hlsl::rootsig::verifyRangeType (Range.RangeType ))
576+ DeferredErrs =
577+ joinErrors (std::move (DeferredErrs),
578+ make_error<RootSignatureValidationError<uint32_t >>(
579+ " RangeType" , Range.RangeType ));
569580
570581 if (!hlsl::rootsig::verifyRegisterSpace (Range.RegisterSpace ))
571582 DeferredErrs =
0 commit comments