Skip to content

Commit c867f55

Browse files
committed
[naga spv] Split workgroup and subgroup memory semantics in Control Barriers
1 parent 2b2a917 commit c867f55

File tree

3 files changed

+46
-41
lines changed

3 files changed

+46
-41
lines changed

naga/src/back/spv/writer.rs

+6
Original file line numberDiff line numberDiff line change
@@ -1644,6 +1644,8 @@ impl Writer {
16441644
pub(super) fn write_control_barrier(&mut self, flags: crate::Barrier, block: &mut Block) {
16451645
let memory_scope = if flags.contains(crate::Barrier::STORAGE) {
16461646
spirv::Scope::Device
1647+
} else if flags.contains(crate::Barrier::SUB_GROUP) {
1648+
spirv::Scope::Subgroup
16471649
} else {
16481650
spirv::Scope::Workgroup
16491651
};
@@ -1656,6 +1658,10 @@ impl Writer {
16561658
spirv::MemorySemantics::WORKGROUP_MEMORY,
16571659
flags.contains(crate::Barrier::WORK_GROUP),
16581660
);
1661+
semantics.set(
1662+
spirv::MemorySemantics::SUBGROUP_MEMORY,
1663+
flags.contains(crate::Barrier::SUB_GROUP),
1664+
);
16591665
semantics.set(
16601666
spirv::MemorySemantics::IMAGE_MEMORY,
16611667
flags.contains(crate::Barrier::TEXTURE),

naga/src/front/spv/mod.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3858,11 +3858,11 @@ impl<I: Iterator<Item = u32>> Frontend<I> {
38583858
);
38593859
flags.set(
38603860
crate::Barrier::WORK_GROUP,
3861-
semantics
3862-
& (spirv::MemorySemantics::SUBGROUP_MEMORY
3863-
| spirv::MemorySemantics::WORKGROUP_MEMORY)
3864-
.bits()
3865-
!= 0,
3861+
semantics & (spirv::MemorySemantics::WORKGROUP_MEMORY).bits() != 0,
3862+
);
3863+
flags.set(
3864+
crate::Barrier::SUB_GROUP,
3865+
semantics & spirv::MemorySemantics::SUBGROUP_MEMORY.bits() != 0,
38663866
);
38673867
flags.set(
38683868
crate::Barrier::TEXTURE,
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; SPIR-V
22
; Version: 1.3
33
; Generator: rspirv
4-
; Bound: 58
4+
; Bound: 57
55
OpCapability Shader
66
OpCapability GroupNonUniform
77
OpCapability GroupNonUniformBallot
@@ -33,10 +33,9 @@ OpDecorate %15 BuiltIn SubgroupLocalInvocationId
3333
%20 = OpConstant %3 0
3434
%21 = OpConstant %3 4
3535
%23 = OpConstant %3 3
36-
%24 = OpConstant %3 2
37-
%25 = OpConstant %3 8
38-
%28 = OpTypeVector %3 4
39-
%30 = OpConstantTrue %5
36+
%24 = OpConstant %3 136
37+
%27 = OpTypeVector %3 4
38+
%29 = OpConstantTrue %5
4039
%17 = OpFunction %2 None %18
4140
%6 = OpLabel
4241
%10 = OpLoad %3 %8
@@ -46,36 +45,36 @@ OpDecorate %15 BuiltIn SubgroupLocalInvocationId
4645
%16 = OpLoad %3 %15
4746
OpBranch %22
4847
%22 = OpLabel
49-
OpControlBarrier %23 %24 %25
50-
%26 = OpBitwiseAnd %3 %16 %19
51-
%27 = OpIEqual %5 %26 %19
52-
%29 = OpGroupNonUniformBallot %28 %23 %27
53-
%31 = OpGroupNonUniformBallot %28 %23 %30
54-
%32 = OpINotEqual %5 %16 %20
55-
%33 = OpGroupNonUniformAll %5 %23 %32
56-
%34 = OpIEqual %5 %16 %20
57-
%35 = OpGroupNonUniformAny %5 %23 %34
58-
%36 = OpGroupNonUniformIAdd %3 %23 Reduce %16
59-
%37 = OpGroupNonUniformIMul %3 %23 Reduce %16
60-
%38 = OpGroupNonUniformUMin %3 %23 Reduce %16
61-
%39 = OpGroupNonUniformUMax %3 %23 Reduce %16
62-
%40 = OpGroupNonUniformBitwiseAnd %3 %23 Reduce %16
63-
%41 = OpGroupNonUniformBitwiseOr %3 %23 Reduce %16
64-
%42 = OpGroupNonUniformBitwiseXor %3 %23 Reduce %16
65-
%43 = OpGroupNonUniformIAdd %3 %23 ExclusiveScan %16
66-
%44 = OpGroupNonUniformIMul %3 %23 ExclusiveScan %16
67-
%45 = OpGroupNonUniformIAdd %3 %23 InclusiveScan %16
68-
%46 = OpGroupNonUniformIMul %3 %23 InclusiveScan %16
69-
%47 = OpGroupNonUniformBroadcastFirst %3 %23 %16
70-
%48 = OpGroupNonUniformShuffle %3 %23 %16 %21
71-
%49 = OpCompositeExtract %3 %7 1
72-
%50 = OpISub %3 %49 %19
73-
%51 = OpISub %3 %50 %16
74-
%52 = OpGroupNonUniformShuffle %3 %23 %16 %51
75-
%53 = OpGroupNonUniformShuffleDown %3 %23 %16 %19
76-
%54 = OpGroupNonUniformShuffleUp %3 %23 %16 %19
77-
%55 = OpCompositeExtract %3 %7 1
78-
%56 = OpISub %3 %55 %19
79-
%57 = OpGroupNonUniformShuffleXor %3 %23 %16 %56
48+
OpControlBarrier %23 %23 %24
49+
%25 = OpBitwiseAnd %3 %16 %19
50+
%26 = OpIEqual %5 %25 %19
51+
%28 = OpGroupNonUniformBallot %27 %23 %26
52+
%30 = OpGroupNonUniformBallot %27 %23 %29
53+
%31 = OpINotEqual %5 %16 %20
54+
%32 = OpGroupNonUniformAll %5 %23 %31
55+
%33 = OpIEqual %5 %16 %20
56+
%34 = OpGroupNonUniformAny %5 %23 %33
57+
%35 = OpGroupNonUniformIAdd %3 %23 Reduce %16
58+
%36 = OpGroupNonUniformIMul %3 %23 Reduce %16
59+
%37 = OpGroupNonUniformUMin %3 %23 Reduce %16
60+
%38 = OpGroupNonUniformUMax %3 %23 Reduce %16
61+
%39 = OpGroupNonUniformBitwiseAnd %3 %23 Reduce %16
62+
%40 = OpGroupNonUniformBitwiseOr %3 %23 Reduce %16
63+
%41 = OpGroupNonUniformBitwiseXor %3 %23 Reduce %16
64+
%42 = OpGroupNonUniformIAdd %3 %23 ExclusiveScan %16
65+
%43 = OpGroupNonUniformIMul %3 %23 ExclusiveScan %16
66+
%44 = OpGroupNonUniformIAdd %3 %23 InclusiveScan %16
67+
%45 = OpGroupNonUniformIMul %3 %23 InclusiveScan %16
68+
%46 = OpGroupNonUniformBroadcastFirst %3 %23 %16
69+
%47 = OpGroupNonUniformShuffle %3 %23 %16 %21
70+
%48 = OpCompositeExtract %3 %7 1
71+
%49 = OpISub %3 %48 %19
72+
%50 = OpISub %3 %49 %16
73+
%51 = OpGroupNonUniformShuffle %3 %23 %16 %50
74+
%52 = OpGroupNonUniformShuffleDown %3 %23 %16 %19
75+
%53 = OpGroupNonUniformShuffleUp %3 %23 %16 %19
76+
%54 = OpCompositeExtract %3 %7 1
77+
%55 = OpISub %3 %54 %19
78+
%56 = OpGroupNonUniformShuffleXor %3 %23 %16 %55
8079
OpReturn
8180
OpFunctionEnd

0 commit comments

Comments
 (0)