Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 10 additions & 23 deletions llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -385,12 +385,6 @@ Error MetadataParser::parseRootDescriptors(
return createRSError(RSErrorKind::InvalidMetadataValue,
StringRef("RegisterSpace"));

if (RSD.Version == 1) {
RSD.ParametersContainer.addParameter(Type, *Visibility, Descriptor);
return Error::success();
}
assert(RSD.Version > 1);

if (std::optional<uint32_t> Val = extractMdIntValue(RootDescriptorNode, 4))
Descriptor.Flags = *Val;
else
Expand Down Expand Up @@ -589,12 +583,6 @@ Error MetadataParser::parseStaticSampler(mcdxbc::RootSignatureDesc &RSD,
return Error(std::move(E));
Sampler.ShaderVisibility = *Visibility;

if (RSD.Version < 3) {
RSD.StaticSamplers.push_back(Sampler);
return Error::success();
}
assert(RSD.Version >= 3);

if (std::optional<uint32_t> Val = extractMdIntValue(StaticSamplerNode, 14))
Sampler.Flags = *Val;
else
Expand Down Expand Up @@ -738,17 +726,16 @@ Error MetadataParser::validateRootSignature(
StringRef("RegisterSpace"),
Descriptor.RegisterSpace));

if (RSD.Version > 1) {
bool IsValidFlag =
dxbc::isValidRootDesciptorFlags(Descriptor.Flags) &&
hlsl::rootsig::verifyRootDescriptorFlag(
RSD.Version, dxbc::RootDescriptorFlags(Descriptor.Flags));
if (!IsValidFlag)
DeferredErrs = joinErrors(
std::move(DeferredErrs),
createRSError(RSErrorKind::Validation,
StringRef("RootDescriptorFlag"), Descriptor.Flags));
}
bool IsValidFlag =
dxbc::isValidRootDesciptorFlags(Descriptor.Flags) &&
hlsl::rootsig::verifyRootDescriptorFlag(
RSD.Version, dxbc::RootDescriptorFlags(Descriptor.Flags));
if (!IsValidFlag)
DeferredErrs = joinErrors(
std::move(DeferredErrs),
createRSError(RSErrorKind::Validation,
StringRef("RootDescriptorFlag"), Descriptor.Flags));

break;
}
case dxbc::RootParameterType::DescriptorTable: {
Expand Down
3 changes: 0 additions & 3 deletions llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,6 @@ bool verifyRootDescriptorFlag(uint32_t Version,
if (Version == 1)
return Flags == FlagT::DataVolatile;

assert((Version <= 3) && "Provided invalid root signature version");

// The data-specific flags are mutually exclusive.
FlagT DataFlags = FlagT::DataVolatile | FlagT::DataStatic |
FlagT::DataStaticWhileSetAtExecute;
Expand Down Expand Up @@ -118,7 +116,6 @@ bool verifyStaticSamplerFlags(uint32_t Version,
if (Version <= 2)
return Flags == dxbc::StaticSamplerFlags::None;

assert(Version == 3 && "Provided invalid root signature version");

dxbc::StaticSamplerFlags Mask =
dxbc::StaticSamplerFlags::NonNormalizedCoordinates |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
; RUN: not opt -passes='print<dxil-root-signature>' %s -S -o - 2>&1 | FileCheck %s
; On Version 1, the only valid flag is DataVolatile (2).
target triple = "dxil-unknown-shadermodel6.0-compute"


; CHECK: error: Invalid value for RootDescriptorFlag: 4
; 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 1 } ; function, root signature
!3 = !{ !5 } ; list of root signature elements
!5 = !{ !"RootCBV", i32 0, i32 1, i32 2, i32 4 }
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
; 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 value for Static Sampler Flag: 1
; 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 1 } ; function, root signature
!3 = !{ !5 } ; list of root signature elements
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0, i32 1 }
Loading