Revert "removing binary format descriptor range dependency"
This reverts commit 8c143ba0ce00b198244ff9f598c4ce905e9f10cd.
This commit is contained in:
parent
8c143ba0ce
commit
a4d77d7340
@ -1268,34 +1268,11 @@ bool SemaHLSL::handleRootSignatureElements(
|
||||
// value
|
||||
ReportError(Loc, 1, 0xfffffffe);
|
||||
}
|
||||
switch (Clause->Type) {
|
||||
|
||||
case llvm::dxil::ResourceClass::SRV:
|
||||
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
|
||||
Version, llvm::dxbc::DescriptorRangeType::SRV,
|
||||
llvm::to_underlying(Clause->Flags)))
|
||||
ReportFlagError(Loc);
|
||||
break;
|
||||
case llvm::dxil::ResourceClass::UAV:
|
||||
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
|
||||
Version, llvm::dxbc::DescriptorRangeType::UAV,
|
||||
llvm::to_underlying(Clause->Flags)))
|
||||
ReportFlagError(Loc);
|
||||
break;
|
||||
case llvm::dxil::ResourceClass::CBuffer:
|
||||
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
|
||||
Version, llvm::dxbc::DescriptorRangeType::CBV,
|
||||
llvm::to_underlying(Clause->Flags)))
|
||||
ReportFlagError(Loc);
|
||||
break;
|
||||
case llvm::dxil::ResourceClass::Sampler:
|
||||
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
|
||||
Version, llvm::dxbc::DescriptorRangeType::Sampler,
|
||||
llvm::to_underlying(Clause->Flags)))
|
||||
ReportFlagError(Loc);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
if (!llvm::hlsl::rootsig::verifyDescriptorRangeFlag(
|
||||
Version, llvm::to_underlying(Clause->Type),
|
||||
llvm::to_underlying(Clause->Flags)))
|
||||
ReportFlagError(Loc);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -209,16 +209,6 @@ inline bool isValidParameterType(uint32_t V) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#define DESCRIPTOR_RANGE(Val, Enum) \
|
||||
case Val: \
|
||||
return true;
|
||||
inline bool isValidRangeType(uint32_t V) {
|
||||
switch (V) {
|
||||
#include "DXContainerConstants.def"
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
#define SHADER_VISIBILITY(Val, Enum) Enum = Val,
|
||||
enum class ShaderVisibility : uint32_t {
|
||||
#include "DXContainerConstants.def"
|
||||
|
@ -30,8 +30,7 @@ LLVM_ABI bool verifyRegisterValue(uint32_t RegisterValue);
|
||||
LLVM_ABI bool verifyRegisterSpace(uint32_t RegisterSpace);
|
||||
LLVM_ABI bool verifyRootDescriptorFlag(uint32_t Version, uint32_t FlagsVal);
|
||||
LLVM_ABI bool verifyRangeType(uint32_t Type);
|
||||
LLVM_ABI bool verifyDescriptorRangeFlag(uint32_t Version,
|
||||
dxbc::DescriptorRangeType Type,
|
||||
LLVM_ABI bool verifyDescriptorRangeFlag(uint32_t Version, uint32_t Type,
|
||||
uint32_t FlagsVal);
|
||||
LLVM_ABI bool verifyNumDescriptors(uint32_t NumDescriptors);
|
||||
LLVM_ABI bool verifySamplerFilter(uint32_t Value);
|
||||
|
@ -31,15 +31,6 @@ struct RootDescriptor {
|
||||
uint32_t Flags;
|
||||
};
|
||||
|
||||
struct DescriptorRange {
|
||||
dxbc::DescriptorRangeType RangeType;
|
||||
uint32_t NumDescriptors;
|
||||
uint32_t BaseShaderRegister;
|
||||
uint32_t RegisterSpace;
|
||||
uint32_t Flags;
|
||||
uint32_t OffsetInDescriptorsFromTableStart;
|
||||
};
|
||||
|
||||
struct RootParameterInfo {
|
||||
dxbc::RootParameterType Type;
|
||||
dxbc::ShaderVisibility Visibility;
|
||||
@ -51,11 +42,11 @@ struct RootParameterInfo {
|
||||
};
|
||||
|
||||
struct DescriptorTable {
|
||||
SmallVector<DescriptorRange> Ranges;
|
||||
SmallVector<DescriptorRange>::const_iterator begin() const {
|
||||
SmallVector<dxbc::RTS0::v2::DescriptorRange> Ranges;
|
||||
SmallVector<dxbc::RTS0::v2::DescriptorRange>::const_iterator begin() const {
|
||||
return Ranges.begin();
|
||||
}
|
||||
SmallVector<DescriptorRange>::const_iterator end() const {
|
||||
SmallVector<dxbc::RTS0::v2::DescriptorRange>::const_iterator end() const {
|
||||
return Ranges.end();
|
||||
}
|
||||
};
|
||||
|
@ -149,16 +149,6 @@ ArrayRef<EnumEntry<RootParameterType>> dxbc::getRootParameterTypes() {
|
||||
return ArrayRef(RootParameterTypes);
|
||||
}
|
||||
|
||||
#define DESCRIPTOR_RANGE(Val, Enum) {#Enum, DescriptorRangeType::Enum},
|
||||
|
||||
static const EnumEntry<DescriptorRangeType> DescriptorRangeTypes[] = {
|
||||
#include "llvm/BinaryFormat/DXContainerConstants.def"
|
||||
};
|
||||
|
||||
ArrayRef<EnumEntry<DescriptorRangeType>> dxbc::getDescriptorRangeTypes() {
|
||||
return ArrayRef(DescriptorRangeTypes);
|
||||
}
|
||||
|
||||
#define SEMANTIC_KIND(Val, Enum) {#Enum, PSV::SemanticKind::Enum},
|
||||
|
||||
static const EnumEntry<PSV::SemanticKind> SemanticKindNames[] = {
|
||||
|
@ -325,7 +325,7 @@ Error MetadataParser::parseDescriptorRange(mcdxbc::DescriptorTable &Table,
|
||||
if (RangeDescriptorNode->getNumOperands() != 6)
|
||||
return make_error<InvalidRSMetadataFormat>("Descriptor Range");
|
||||
|
||||
mcdxbc::DescriptorRange Range;
|
||||
dxbc::RTS0::v2::DescriptorRange Range;
|
||||
|
||||
std::optional<StringRef> ElementText =
|
||||
extractMdStringValue(RangeDescriptorNode, 0);
|
||||
@ -333,11 +333,17 @@ Error MetadataParser::parseDescriptorRange(mcdxbc::DescriptorTable &Table,
|
||||
if (!ElementText.has_value())
|
||||
return make_error<InvalidRSMetadataFormat>("Descriptor Range");
|
||||
|
||||
Range.RangeType = StringSwitch<dxbc::DescriptorRangeType>(*ElementText)
|
||||
.Case("CBV", dxbc::DescriptorRangeType::CBV)
|
||||
.Case("SRV", dxbc::DescriptorRangeType::SRV)
|
||||
.Case("UAV", dxbc::DescriptorRangeType::UAV)
|
||||
.Case("Sampler", dxbc::DescriptorRangeType::Sampler);
|
||||
Range.RangeType =
|
||||
StringSwitch<uint32_t>(*ElementText)
|
||||
.Case("CBV", to_underlying(dxbc::DescriptorRangeType::CBV))
|
||||
.Case("SRV", to_underlying(dxbc::DescriptorRangeType::SRV))
|
||||
.Case("UAV", to_underlying(dxbc::DescriptorRangeType::UAV))
|
||||
.Case("Sampler", to_underlying(dxbc::DescriptorRangeType::Sampler))
|
||||
.Default(~0U);
|
||||
|
||||
if (Range.RangeType == ~0U)
|
||||
return make_error<GenericRSMetadataError>("Invalid Descriptor Range type.",
|
||||
RangeDescriptorNode);
|
||||
|
||||
if (std::optional<uint32_t> Val = extractMdIntValue(RangeDescriptorNode, 1))
|
||||
Range.NumDescriptors = *Val;
|
||||
@ -565,7 +571,12 @@ Error MetadataParser::validateRootSignature(
|
||||
case dxbc::RootParameterType::DescriptorTable: {
|
||||
const mcdxbc::DescriptorTable &Table =
|
||||
RSD.ParametersContainer.getDescriptorTable(Info.Location);
|
||||
for (const mcdxbc::DescriptorRange &Range : Table) {
|
||||
for (const dxbc::RTS0::v2::DescriptorRange &Range : Table) {
|
||||
if (!hlsl::rootsig::verifyRangeType(Range.RangeType))
|
||||
DeferredErrs =
|
||||
joinErrors(std::move(DeferredErrs),
|
||||
make_error<RootSignatureValidationError<uint32_t>>(
|
||||
"RangeType", Range.RangeType));
|
||||
|
||||
if (!hlsl::rootsig::verifyRegisterSpace(Range.RegisterSpace))
|
||||
DeferredErrs =
|
||||
|
@ -63,12 +63,13 @@ bool verifyRangeType(uint32_t Type) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool verifyDescriptorRangeFlag(uint32_t Version, dxbc::DescriptorRangeType Type,
|
||||
bool verifyDescriptorRangeFlag(uint32_t Version, uint32_t Type,
|
||||
uint32_t FlagsVal) {
|
||||
using FlagT = dxbc::DescriptorRangeFlags;
|
||||
FlagT Flags = FlagT(FlagsVal);
|
||||
|
||||
const bool IsSampler = (Type == dxbc::DescriptorRangeType::Sampler);
|
||||
const bool IsSampler =
|
||||
(Type == llvm::to_underlying(dxbc::DescriptorRangeType::Sampler));
|
||||
|
||||
if (Version == 1) {
|
||||
// Since the metadata is unversioned, we expect to explicitly see the values
|
||||
|
@ -315,10 +315,9 @@ void DXContainerWriter::writeParts(raw_ostream &OS) {
|
||||
P.RootSignature->Parameters.getOrInsertTable(L);
|
||||
mcdxbc::DescriptorTable Table;
|
||||
for (const auto &R : TableYaml.Ranges) {
|
||||
assert(dxbc::isValidRangeType(R.RangeType) &&
|
||||
"Invalid Descriptor Range Type");
|
||||
mcdxbc::DescriptorRange Range;
|
||||
Range.RangeType = dxbc::DescriptorRangeType(R.RangeType);
|
||||
|
||||
dxbc::RTS0::v2::DescriptorRange Range;
|
||||
Range.RangeType = R.RangeType;
|
||||
Range.NumDescriptors = R.NumDescriptors;
|
||||
Range.BaseShaderRegister = R.BaseShaderRegister;
|
||||
Range.RegisterSpace = R.RegisterSpace;
|
||||
|
@ -194,7 +194,7 @@ static void validateRootSignature(Module &M,
|
||||
const mcdxbc::DescriptorTable &Table =
|
||||
RSD.ParametersContainer.getDescriptorTable(ParamInfo.Location);
|
||||
|
||||
for (const mcdxbc::DescriptorRange &Range : Table.Ranges) {
|
||||
for (const dxbc::RTS0::v2::DescriptorRange &Range : Table.Ranges) {
|
||||
uint32_t UpperBound =
|
||||
Range.NumDescriptors == ~0U
|
||||
? Range.BaseShaderRegister
|
||||
|
@ -205,11 +205,8 @@ PreservedAnalyses RootSignatureAnalysisPrinter::run(Module &M,
|
||||
RS.ParametersContainer.getDescriptorTable(Loc);
|
||||
OS << " NumRanges: " << Table.Ranges.size() << "\n";
|
||||
|
||||
for (const mcdxbc::DescriptorRange Range : Table) {
|
||||
OS << " - Range Type: "
|
||||
<< enumToStringRef(Range.RangeType,
|
||||
dxbc::getDescriptorRangeTypes())
|
||||
<< "\n"
|
||||
for (const dxbc::RTS0::v2::DescriptorRange Range : Table) {
|
||||
OS << " - Range Type: " << Range.RangeType << "\n"
|
||||
<< " Register Space: " << Range.RegisterSpace << "\n"
|
||||
<< " Base Shader Register: " << Range.BaseShaderRegister << "\n"
|
||||
<< " Num Descriptors: " << Range.NumDescriptors << "\n"
|
||||
|
@ -0,0 +1,20 @@
|
||||
; RUN: not opt -passes='print<dxil-root-signature>' %s -S -o - 2>&1 | FileCheck %s
|
||||
|
||||
target triple = "dxil-unknown-shadermodel6.0-compute"
|
||||
|
||||
; CHECK: error: Invalid Descriptor Range type
|
||||
; CHECK-NOT: Root Signature Definitions
|
||||
|
||||
define void @main() #0 {
|
||||
entry:
|
||||
ret void
|
||||
}
|
||||
attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }
|
||||
|
||||
|
||||
!dx.rootsignatures = !{!2} ; list of function/root signature pairs
|
||||
!2 = !{ ptr @main, !3, i32 2 } ; function, root signature
|
||||
!3 = !{ !5 } ; list of root signature elements
|
||||
!5 = !{ !"DescriptorTable", i32 0, !6, !7 }
|
||||
!6 = !{ !"Invalid", i32 1, i32 0, i32 -1, i32 -1, i32 4 }
|
||||
!7 = !{ !"UAV", i32 5, i32 1, i32 10, i32 5, i32 2 }
|
@ -38,13 +38,13 @@ attributes #0 = { "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" }
|
||||
;CHECK-NEXT: - Parameter Type: DescriptorTable
|
||||
;CHECK-NEXT: Shader Visibility: All
|
||||
;CHECK-NEXT: NumRanges: 2
|
||||
;CHECK-NEXT: - Range Type: SRV
|
||||
;CHECK-NEXT: - Range Type: 0
|
||||
;CHECK-NEXT: Register Space: 0
|
||||
;CHECK-NEXT: Base Shader Register: 1
|
||||
;CHECK-NEXT: Num Descriptors: 1
|
||||
;CHECK-NEXT: Offset In Descriptors From Table Start: 4294967295
|
||||
;CHECK-NEXT: Flags: 4
|
||||
;CHECK-NEXT: - Range Type: UAV
|
||||
;CHECK-NEXT: - Range Type: 1
|
||||
;CHECK-NEXT: Register Space: 10
|
||||
;CHECK-NEXT: Base Shader Register: 1
|
||||
;CHECK-NEXT: Num Descriptors: 5
|
||||
|
Loading…
x
Reference in New Issue
Block a user