Skip to content

Commit 931a684

Browse files
author
Cooper Partin
committed
Added more tests and updated logic
1 parent 0d820cc commit 931a684

File tree

6 files changed

+115
-26
lines changed

6 files changed

+115
-26
lines changed

llvm/lib/Target/DirectX/DXILShaderFlags.cpp

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,37 @@ static void updateResourceFlags(ComputedShaderFlags &Flags, Module &M,
4848
if (DRM.empty())
4949
return;
5050

51-
const dxil::ModuleMetadataInfo &MMDI = AM->getResult<DXILMetadataAnalysis>(M);
52-
VersionTuple SM = MMDI.ShaderModelVersion;
53-
Triple::EnvironmentType SP = MMDI.ShaderProfile;
54-
55-
// RWBuffer
5651
for (const ResourceInfo &RI : DRM.uavs()) {
57-
if (RI.getResourceKind() == ResourceKind::TypedBuffer) {
52+
switch (RI.getResourceKind()) {
53+
case ResourceKind::RawBuffer:
54+
case ResourceKind::StructuredBuffer:
5855
Flags.EnableRawAndStructuredBuffers = true;
59-
Flags.ComputeShadersPlusRawAndStructuredBuffers =
60-
(SP == Triple::EnvironmentType::Compute && SM.getMajor() == 4);
56+
break;
57+
default:
6158
break;
6259
}
6360
}
61+
62+
for (const ResourceInfo &RI : DRM.srvs()) {
63+
switch (RI.getResourceKind()) {
64+
case ResourceKind::RawBuffer:
65+
case ResourceKind::StructuredBuffer:
66+
Flags.EnableRawAndStructuredBuffers = true;
67+
break;
68+
default:
69+
break;
70+
}
71+
}
72+
73+
if (Flags.EnableRawAndStructuredBuffers) {
74+
const dxil::ModuleMetadataInfo &MMDI =
75+
AM->getResult<DXILMetadataAnalysis>(M);
76+
VersionTuple SM = MMDI.ShaderModelVersion;
77+
Triple::EnvironmentType SP = MMDI.ShaderProfile;
78+
79+
Flags.ComputeShadersPlusRawAndStructuredBuffers =
80+
(SP == Triple::EnvironmentType::Compute && SM.getMajor() == 4);
81+
}
6482
}
6583

6684
ComputedShaderFlags

llvm/test/CodeGen/DirectX/ShaderFlags/buffers.ll renamed to llvm/test/CodeGen/DirectX/ShaderFlags/buffer.ll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ target triple = "dxil-pc-shadermodel6.3-compute"
66

77
define void @test_bufferflags() {
88

9-
; RWBuffer<int> Buf : register(u7, space2)
10-
%uav0 = call target("dx.TypedBuffer", i32, 1, 0, 1)
11-
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_i32_1_0t(
12-
i32 2, i32 7, i32 1, i32 0, i1 false)
9+
; ByteAddressBuffer Buf : register(t8, space1)
10+
%srv0 = call target("dx.RawBuffer", i8, 0, 0)
11+
@llvm.dx.handle.fromBinding.tdx.RawBuffer_i8_0_0t(
12+
i32 1, i32 8, i32 1, i32 0, i1 false)
13+
14+
ret void
15+
}
16+
17+
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
1318

1419
; CHECK: ; Shader Flags Value: 0x00000010
1520
; CHECK: ; Note: shader requires additional functionality:
1621
; CHECK-NEXT: ; Note: extra DXIL module flags:
1722
; CHECK-NEXT: ; D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
1823
; CHECK-NEXT: {{^;$}}
19-
20-
ret void
21-
}
22-
23-
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }

llvm/test/CodeGen/DirectX/ShaderFlags/buffers_cs4.ll renamed to llvm/test/CodeGen/DirectX/ShaderFlags/buffer_cs4.ll

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ target triple = "dxil-pc-shadermodel4.0-compute"
66

77
define void @test_bufferflags() {
88

9-
; RWBuffer<int> Buf : register(u7, space2)
10-
%uav0 = call target("dx.TypedBuffer", i32, 1, 0, 1)
11-
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_i32_1_0t(
12-
i32 2, i32 7, i32 1, i32 0, i1 false)
9+
; ByteAddressBuffer Buf : register(t8, space1)
10+
%srv0 = call target("dx.RawBuffer", i8, 0, 0)
11+
@llvm.dx.handle.fromBinding.tdx.RawBuffer_i8_0_0t(
12+
i32 1, i32 8, i32 1, i32 0, i1 false)
13+
14+
ret void
15+
}
16+
17+
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
1318

1419
; CHECK: ; Shader Flags Value: 0x00020010
1520
; CHECK: ; Note: shader requires additional functionality:
1621
; CHECK-NEXT: ; Raw and Structured buffers
1722
; CHECK-NEXT: ; Note: extra DXIL module flags:
1823
; CHECK-NEXT: ; D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
1924
; CHECK-NEXT: {{^;$}}
20-
21-
ret void
22-
}
23-
24-
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
; RUN: opt -S --passes="print-dx-shader-flags" 2>&1 %s | FileCheck %s
2+
3+
target triple = "dxil-pc-shadermodel6.3-compute"
4+
5+
@G = external constant <4 x float>, align 4
6+
7+
define void @test_bufferflags() {
8+
9+
; RWByteAddressBuffer Buf : register(u8, space1)
10+
%uav0 = call target("dx.RawBuffer", i8, 1, 0)
11+
@llvm.dx.handle.fromBinding.tdx.RawBuffer_i8_0_0t(
12+
i32 1, i32 8, i32 1, i32 0, i1 false)
13+
14+
ret void
15+
}
16+
17+
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
18+
19+
; CHECK: ; Shader Flags Value: 0x00000010
20+
; CHECK: ; Note: shader requires additional functionality:
21+
; CHECK-NEXT: ; Note: extra DXIL module flags:
22+
; CHECK-NEXT: ; D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
23+
; CHECK-NEXT: {{^;$}}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
; RUN: opt -S --passes="print-dx-shader-flags" 2>&1 %s | FileCheck %s
2+
3+
target triple = "dxil-pc-shadermodel6.7-library"
4+
5+
@G = external constant <4 x float>, align 4
6+
7+
define void @test_bufferflags() {
8+
9+
; struct S { float4 a; uint4 b; };
10+
; RWStructuredBuffer<S> Buf : register(u2, space4)
11+
%struct0 = call target("dx.RawBuffer", {<4 x float>, <4 x i32>}, 1, 0)
12+
@llvm.dx.handle.fromBinding.tdx.RawBuffer_sl_v4f32v4i32s_0_0t(
13+
i32 4, i32 2, i32 1, i32 10, i1 true)
14+
15+
ret void
16+
}
17+
18+
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
19+
20+
; CHECK: ; Shader Flags Value: 0x00000010
21+
; CHECK: ; Note: shader requires additional functionality:
22+
; CHECK-NEXT: ; Note: extra DXIL module flags:
23+
; CHECK-NEXT: ; D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
24+
; CHECK-NEXT: {{^;$}}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
; RUN: opt -S --passes="print-dx-shader-flags" 2>&1 %s | FileCheck %s
2+
3+
target triple = "dxil-pc-shadermodel6.7-library"
4+
5+
@G = external constant <4 x float>, align 4
6+
7+
define void @test_bufferflags() {
8+
9+
; struct S { float4 a; uint4 b; };
10+
; StructuredBuffer<S> Buf : register(t2, space4)
11+
%struct0 = call target("dx.RawBuffer", {<4 x float>, <4 x i32>}, 0, 0)
12+
@llvm.dx.handle.fromBinding.tdx.RawBuffer_sl_v4f32v4i32s_0_0t(
13+
i32 4, i32 2, i32 1, i32 10, i1 true)
14+
15+
ret void
16+
}
17+
18+
attributes #0 = { nocallback nofree nosync nounwind willreturn memory(none) }
19+
20+
; CHECK: ; Shader Flags Value: 0x00000010
21+
; CHECK: ; Note: shader requires additional functionality:
22+
; CHECK-NEXT: ; Note: extra DXIL module flags:
23+
; CHECK-NEXT: ; D3D11_SB_GLOBAL_FLAG_ENABLE_RAW_AND_STRUCTURED_BUFFERS
24+
; CHECK-NEXT: {{^;$}}

0 commit comments

Comments
 (0)