diff --git a/llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp b/llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp index 63189f458d12c..132a280c659a1 100644 --- a/llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp +++ b/llvm/lib/Frontend/HLSL/RootSignatureMetadata.cpp @@ -337,12 +337,6 @@ Error MetadataParser::parseRootDescriptors( else return makeRSError("Invalid value for RegisterSpace"); - if (RSD.Version == 1) { - RSD.ParametersContainer.addParameter(Type, *Visibility, Descriptor); - return Error::success(); - } - assert(RSD.Version > 1); - if (std::optional Val = extractMdIntValue(RootDescriptorNode, 4)) Descriptor.Flags = *Val; else @@ -523,12 +517,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 Val = extractMdIntValue(StaticSamplerNode, 14)) Sampler.Flags = *Val; else @@ -673,17 +661,15 @@ Error MetadataParser::validateRootSignature( makeRSError(formatv("Invalid value for RegisterSpace: {0}", 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), - makeRSError(formatv("Invalid value for RootDescriptorFlag: {0}", - Descriptor.Flags))); - } + bool IsValidFlag = + dxbc::isValidRootDesciptorFlags(Descriptor.Flags) && + hlsl::rootsig::verifyRootDescriptorFlag( + RSD.Version, dxbc::RootDescriptorFlags(Descriptor.Flags)); + if (!IsValidFlag) + DeferredErrs = joinErrors( + std::move(DeferredErrs), + makeRSError(formatv("Invalid value for RootDescriptorFlag: {0}", + Descriptor.Flags))); break; } case dxbc::RootParameterType::DescriptorTable: { diff --git a/llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp b/llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp index 30408dfda940d..1735751de96a6 100644 --- a/llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp +++ b/llvm/lib/Frontend/HLSL/RootSignatureValidations.cpp @@ -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; @@ -118,8 +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 | dxbc::StaticSamplerFlags::UintBorderColor | diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Flags_V1.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Flags_V1.ll new file mode 100644 index 0000000000000..610ce4f4617d0 --- /dev/null +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-RootDescriptor-Invalid-Flags_V1.ll @@ -0,0 +1,18 @@ +; RUN: not opt -passes='print' %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 } diff --git a/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-Flag_V1.ll b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-Flag_V1.ll new file mode 100644 index 0000000000000..76b60b82db852 --- /dev/null +++ b/llvm/test/CodeGen/DirectX/ContainerData/RootSignature-StaticSamplers-Invalid-Flag_V1.ll @@ -0,0 +1,19 @@ +; RUN: not opt -passes='print' %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 }