Skip to content

Commit c1c202d

Browse files
committed
[ser] enforce minShaderTarget for REORDER_SCOPE BarrierByMemoryHandle opc
1 parent e05dfe1 commit c1c202d

File tree

2 files changed

+25
-118
lines changed

2 files changed

+25
-118
lines changed

lib/DXIL/DxilOperations.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3020,6 +3020,16 @@ bool OP::BarrierRequiresReorder(const llvm::CallInst *CI) {
30203020
}
30213021
return false;
30223022
}
3023+
case OpCode::BarrierByMemoryHandle: {
3024+
DxilInst_BarrierByMemoryHandle barrier(const_cast<CallInst *>(CI));
3025+
if (isa<ConstantInt>(barrier.get_SemanticFlags())) {
3026+
unsigned semanticFlags = barrier.get_SemanticFlags_val();
3027+
return (semanticFlags &
3028+
static_cast<unsigned>(DXIL::BarrierSemanticFlag::ReorderScope)) !=
3029+
0U;
3030+
}
3031+
return false;
3032+
}
30233033
default:
30243034
return false;
30253035
}

tools/clang/test/HLSLFileCheck/d3dreflect/rdat_mintarget/sm69_barriers.hlsl

Lines changed: 15 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -6,87 +6,6 @@
66

77
RWByteAddressBuffer BAB : register(u1, space0);
88

9-
// RDAT-LABEL: UnmangledName: "node_barrier"
10-
// RDAT: FeatureInfo1: 0
11-
// RDAT: FeatureInfo2: (Opt_RequiresGroup)
12-
// RDAT: ShaderStageFlag: (Node)
13-
// RDAT: MinShaderTarget: 0xf0068
14-
15-
[shader("node")]
16-
[NodeLaunch("broadcasting")]
17-
[NodeDispatchGrid(1, 1, 1)]
18-
[NumThreads(1,1,1)]
19-
void node_barrier() {
20-
GroupMemoryBarrierWithGroupSync();
21-
BAB.Store(0, 0);
22-
}
23-
24-
// RDAT-LABEL: UnmangledName: "fn_barrier_device1"
25-
// RDAT: FeatureInfo1: 0
26-
// RDAT: FeatureInfo2: 0
27-
// RDAT: ShaderStageFlag: (Pixel | Vertex | Geometry | Hull | Domain | Compute | Library | RayGeneration | Intersection | AnyHit | ClosestHit | Miss | Callable | Mesh | Amplification | Node)
28-
// RDAT: MinShaderTarget: 0x60060
29-
30-
[noinline] export
31-
void fn_barrier_device1() {
32-
Barrier(UAV_MEMORY, DEVICE_SCOPE);
33-
}
34-
35-
// RDAT-LABEL: UnmangledName: "fn_barrier_device2"
36-
// RDAT: FeatureInfo1: 0
37-
// RDAT: FeatureInfo2: 0
38-
// RDAT: ShaderStageFlag: (Pixel | Vertex | Geometry | Hull | Domain | Compute | Library | RayGeneration | Intersection | AnyHit | ClosestHit | Miss | Callable | Mesh | Amplification | Node)
39-
// RDAT: MinShaderTarget: 0x60068
40-
41-
[noinline] export
42-
void fn_barrier_device2() {
43-
Barrier(BAB, DEVICE_SCOPE);
44-
}
45-
46-
// RDAT-LABEL: UnmangledName: "fn_barrier_group1"
47-
// RDAT: FeatureInfo1: 0
48-
// RDAT: FeatureInfo2: (Opt_RequiresGroup)
49-
// RDAT: ShaderStageFlag: (Compute | Library | Mesh | Amplification | Node)
50-
// RDAT: MinShaderTarget: 0x60060
51-
52-
[noinline] export
53-
void fn_barrier_group1() {
54-
Barrier(GROUP_SHARED_MEMORY, GROUP_SYNC | GROUP_SCOPE);
55-
}
56-
57-
// RDAT-LABEL: UnmangledName: "fn_barrier_group2"
58-
// RDAT: FeatureInfo1: 0
59-
// RDAT: FeatureInfo2: (Opt_RequiresGroup)
60-
// RDAT: ShaderStageFlag: (Compute | Library | Mesh | Amplification | Node)
61-
// RDAT: MinShaderTarget: 0x60068
62-
63-
[noinline] export
64-
void fn_barrier_group2() {
65-
Barrier(BAB, GROUP_SYNC | GROUP_SCOPE);
66-
}
67-
68-
// RDAT-LABEL: UnmangledName: "fn_barrier_node1"
69-
// RDAT: FeatureInfo1: 0
70-
// RDAT: FeatureInfo2: 0
71-
// RDAT: ShaderStageFlag: (Library | Node)
72-
// RDAT: MinShaderTarget: 0x60068
73-
74-
[noinline] export
75-
void fn_barrier_node1() {
76-
Barrier(NODE_INPUT_MEMORY, DEVICE_SCOPE);
77-
}
78-
79-
// RDAT-LABEL: UnmangledName: "fn_barrier_node_group1"
80-
// RDAT: FeatureInfo1: 0
81-
// RDAT: FeatureInfo2: (Opt_RequiresGroup)
82-
// RDAT: ShaderStageFlag: (Library | Node)
83-
// RDAT: MinShaderTarget: 0x60068
84-
85-
[noinline] export
86-
void fn_barrier_node_group1() {
87-
Barrier(NODE_INPUT_MEMORY, GROUP_SYNC | GROUP_SCOPE);
88-
}
89-
909
// RDAT-LABEL: UnmangledName: "fn_barrier_reorder"
9110
// RDAT: FeatureInfo1: 0
9211
// RDAT: FeatureInfo2: 0
@@ -98,59 +17,37 @@ void fn_barrier_reorder() {
9817
Barrier(UAV_MEMORY, REORDER_SCOPE);
9918
}
10019

101-
// RDAT-LABEL: UnmangledName: "node_barrier_device_in_call"
20+
// RDAT-LABEL: UnmangledName: "fn_barrier_reorder2"
10221
// RDAT: FeatureInfo1: 0
10322
// RDAT: FeatureInfo2: 0
104-
// RDAT: ShaderStageFlag: (Node)
105-
// RDAT: MinShaderTarget: 0xf0068
23+
// RDAT: ShaderStageFlag: (Library | RayGeneration)
24+
// RDAT: MinShaderTarget: 0x60069
10625

107-
[shader("node")]
108-
[NodeLaunch("broadcasting")]
109-
[NodeDispatchGrid(1, 1, 1)]
110-
[NumThreads(1,1,1)]
111-
void node_barrier_device_in_call() {
112-
fn_barrier_device1();
113-
BAB.Store(0, 0);
26+
[noinline] export
27+
void fn_barrier_reorder2() {
28+
Barrier(BAB, REORDER_SCOPE);
11429
}
11530

116-
// RDAT-LABEL: UnmangledName: "node_barrier_node_in_call"
31+
// RDAT-LABEL: UnmangledName: "rg_barrier_reorder_in_call"
11732
// RDAT: FeatureInfo1: 0
11833
// RDAT: FeatureInfo2: 0
119-
// RDAT: ShaderStageFlag: (Node)
120-
// RDAT: MinShaderTarget: 0xf0068
121-
122-
[shader("node")]
123-
[NodeLaunch("broadcasting")]
124-
[NodeDispatchGrid(1, 1, 1)]
125-
[NumThreads(1,1,1)]
126-
void node_barrier_node_in_call() {
127-
fn_barrier_node1();
128-
BAB.Store(0, 0);
129-
}
130-
131-
// RDAT-LABEL: UnmangledName: "node_barrier_node_group_in_call"
132-
// RDAT: FeatureInfo1: 0
133-
// RDAT: FeatureInfo2: (Opt_RequiresGroup)
134-
// RDAT: ShaderStageFlag: (Node)
135-
// RDAT: MinShaderTarget: 0xf0068
34+
// RDAT: ShaderStageFlag: (RayGeneration)
35+
// RDAT: MinShaderTarget: 0x70069
13636

137-
[shader("node")]
138-
[NodeLaunch("broadcasting")]
139-
[NodeDispatchGrid(1, 1, 1)]
140-
[NumThreads(1,1,1)]
141-
void node_barrier_node_group_in_call() {
142-
fn_barrier_node_group1();
37+
[shader("raygeneration")]
38+
void rg_barrier_reorder_in_call() {
39+
fn_barrier_reorder();
14340
BAB.Store(0, 0);
14441
}
14542

146-
// RDAT-LABEL: UnmangledName: "rg_barrier_reorder_in_call"
43+
// RDAT-LABEL: UnmangledName: "rg_barrier_reorder_in_call2"
14744
// RDAT: FeatureInfo1: 0
14845
// RDAT: FeatureInfo2: 0
14946
// RDAT: ShaderStageFlag: (RayGeneration)
15047
// RDAT: MinShaderTarget: 0x70069
15148

15249
[shader("raygeneration")]
153-
void rg_barrier_reorder_in_call() {
154-
fn_barrier_reorder();
50+
void rg_barrier_reorder_in_call2() {
51+
fn_barrier_reorder2();
15552
BAB.Store(0, 0);
15653
}

0 commit comments

Comments
 (0)