[DirectX] Updating Root Signature Metadata to contain Static Sampler flags (#160210)
Root Signature 1.2 adds flags to static samplers. This requires us to change the metadata representation to account for it when being generated. This patch focus on the metadata changes required in the backend, frontend changes will come in a future PR.
This commit is contained in:
parent
71365c0b6b
commit
56ca23c46d
@ -82,8 +82,8 @@ void RootDescriptorsEntry() {}
|
||||
// checking minLOD, maxLOD
|
||||
// CHECK-SAME: float -1.280000e+02, float 1.280000e+02,
|
||||
|
||||
// checking register, space and visibility
|
||||
// CHECK-SAME: i32 42, i32 0, i32 0}
|
||||
// checking register, space, visibility and flags
|
||||
// CHECK-SAME: i32 42, i32 0, i32 0, i32 0}
|
||||
|
||||
#define SampleStaticSampler \
|
||||
"StaticSampler(s42, " \
|
||||
|
||||
@ -131,6 +131,7 @@ struct StaticSampler {
|
||||
float MaxLOD = std::numeric_limits<float>::max();
|
||||
uint32_t Space = 0;
|
||||
dxbc::ShaderVisibility Visibility = dxbc::ShaderVisibility::All;
|
||||
dxbc::StaticSamplerFlags Flags = dxbc::StaticSamplerFlags::None;
|
||||
};
|
||||
|
||||
/// Models RootElement : RootFlags | RootConstants | RootParam
|
||||
|
||||
@ -218,6 +218,7 @@ MDNode *MetadataBuilder::BuildStaticSampler(const StaticSampler &Sampler) {
|
||||
ConstantAsMetadata::get(Builder.getInt32(Sampler.Space)),
|
||||
ConstantAsMetadata::get(
|
||||
Builder.getInt32(to_underlying(Sampler.Visibility))),
|
||||
ConstantAsMetadata::get(Builder.getInt32(to_underlying(Sampler.Flags))),
|
||||
};
|
||||
return MDNode::get(Ctx, Operands);
|
||||
}
|
||||
@ -417,7 +418,7 @@ Error MetadataParser::parseDescriptorTable(mcdxbc::RootSignatureDesc &RSD,
|
||||
|
||||
Error MetadataParser::parseStaticSampler(mcdxbc::RootSignatureDesc &RSD,
|
||||
MDNode *StaticSamplerNode) {
|
||||
if (StaticSamplerNode->getNumOperands() != 14)
|
||||
if (StaticSamplerNode->getNumOperands() != 15)
|
||||
return make_error<InvalidRSMetadataFormat>("Static Sampler");
|
||||
|
||||
mcdxbc::StaticSampler Sampler;
|
||||
@ -501,6 +502,17 @@ 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
|
||||
return make_error<InvalidRSMetadataValue>("Static Sampler Flags");
|
||||
|
||||
RSD.StaticSamplers.push_back(Sampler);
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 666, 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 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 666, 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 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 666, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 666, 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 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 666, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 666, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 666, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 666, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 666, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 666, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 45, 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 }
|
||||
!5 = !{ !"StaticSampler", i32 45, 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 0 }
|
||||
|
||||
@ -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: 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 3 } ; 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 4 }
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 666, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 666, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 0x7FF8000000000000, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float -1.280000e+02, float 0x7FF8000000000000, i32 42, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float 0x7FF8000000000000, float 1.280000e+02, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 0x3FF6CCCCC0000000, i32 9, i32 3, i32 2, float 0x7FF8000000000000, float 1.280000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 6.660000e+02, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0 }
|
||||
!5 = !{ !"StaticSampler", i32 4, i32 2, i32 3, i32 5, float 6.660000e+02, i32 9, i32 3, i32 2, float -1.280000e+02, float 1.280000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"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 4294967280, i32 0 }
|
||||
!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 4294967280, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"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 4294967295, i32 0, i32 0 }
|
||||
!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 4294967295, i32 0, i32 0, i32 0 }
|
||||
|
||||
@ -16,4 +16,4 @@ 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 = !{ !"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 666 }
|
||||
!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 666, i32 0 }
|
||||
|
||||
@ -15,7 +15,7 @@ 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 = !{ !"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 }
|
||||
!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 0 }
|
||||
|
||||
; DXC: - Name: RTS0
|
||||
; DXC-NEXT: Size: 76
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
; RUN: opt %s -dxil-embed -dxil-globals -S -o - | FileCheck %s
|
||||
; RUN: llc %s --filetype=obj -o - | obj2yaml | FileCheck %s --check-prefix=DXC
|
||||
|
||||
target triple = "dxil-unknown-shadermodel6.0-compute"
|
||||
|
||||
; CHECK: @dx.rts0 = private constant [248 x i8] c"{{.*}}", section "RTS0", align 4
|
||||
|
||||
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 3 } ; function, root signature
|
||||
!3 = !{ !5, !6, !7, !8 } ; 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 }
|
||||
!6 = !{ !"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 43, i32 0, i32 0, i32 2 }
|
||||
!7 = !{ !"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 44, i32 0, i32 0, i32 0 }
|
||||
!8 = !{ !"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 45, i32 0, i32 0, i32 3 }
|
||||
|
||||
; DXC: - Name: RTS0
|
||||
; DXC-NEXT: Size: 248
|
||||
; DXC-NEXT: RootSignature:
|
||||
; DXC-NEXT: Version: 3
|
||||
; DXC-NEXT: NumRootParameters: 0
|
||||
; DXC-NEXT: RootParametersOffset: 24
|
||||
; DXC-NEXT: NumStaticSamplers: 4
|
||||
; DXC-NEXT: StaticSamplersOffset: 24
|
||||
; DXC-NEXT: Parameters: []
|
||||
; DXC-NEXT: Samplers:
|
||||
; DXC-LABEL: ShaderRegister: 42
|
||||
; DXC: SAMPLER_FLAG_UINT_BORDER_COLOR: true
|
||||
; DXC-LABEL: ShaderRegister: 43
|
||||
; DXC: SAMPLER_FLAG_NON_NORMALIZED_COORDINATES: true
|
||||
; DXC-LABEL: ShaderRegister: 44
|
||||
; DXC-NOT: SAMPLER_FLAG_NON_NORMALIZED_COORDINATES:
|
||||
; DXC-NOT: SAMPLER_FLAG_UINT_BORDER_COLOR:
|
||||
; DXC-LABEL: ShaderRegister: 45
|
||||
; DXC: SAMPLER_FLAG_UINT_BORDER_COLOR: true
|
||||
; DXC-NEXT: SAMPLER_FLAG_NON_NORMALIZED_COORDINATES: true
|
||||
@ -10,6 +10,6 @@ entry:
|
||||
|
||||
!0 = !{ptr @CSMain, !1, i32 2}
|
||||
!1 = !{!2, !3}
|
||||
!2 = !{ !"StaticSampler", i32 5, i32 4, i32 5, i32 3, float 0x3FF7CCCCC0000000, i32 10, i32 2, i32 1, float -1.270000e+02, float 1.220000e+02, i32 42, i32 0, i32 0 }
|
||||
!2 = !{ !"StaticSampler", i32 5, i32 4, i32 5, i32 3, float 0x3FF7CCCCC0000000, i32 10, i32 2, i32 1, float -1.270000e+02, float 1.220000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
!3 = !{!"DescriptorTable", i32 0, !4}
|
||||
!4 = !{!"Sampler", i32 1, i32 42, i32 0, i32 -1, i32 0}
|
||||
|
||||
@ -10,5 +10,5 @@ entry:
|
||||
|
||||
!0 = !{ptr @CSMain, !1, i32 2}
|
||||
!1 = !{!2, !3}
|
||||
!2 = !{ !"StaticSampler", i32 5, i32 4, i32 5, i32 3, float 0x3FF7CCCCC0000000, i32 10, i32 2, i32 1, float -1.270000e+02, float 1.220000e+02, i32 42, i32 0, i32 0 }
|
||||
!3 = !{ !"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 }
|
||||
!2 = !{ !"StaticSampler", i32 5, i32 4, i32 5, i32 3, float 0x3FF7CCCCC0000000, i32 10, i32 2, i32 1, float -1.270000e+02, float 1.220000e+02, i32 42, i32 0, i32 0, i32 0 }
|
||||
!3 = !{ !"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 0 }
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user