Skip to content

Commit 5303d29

Browse files
committed
subgroup: added tests for group-op instructions
1 parent 51d691c commit 5303d29

10 files changed

+135
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// build-pass
2+
// compile-flags: -C target-feature=+GroupNonUniform,+GroupNonUniformBallot,+ext:SPV_KHR_vulkan_memory_model
3+
// compile-flags: -C llvm-args=--disassemble-fn=subgroup_non_uniform_ballot_bit_count::subgroup_non_uniform_ballot_bit_count
4+
5+
use spirv_std::arch::{GroupOperation, SubgroupMask};
6+
use spirv_std::spirv;
7+
8+
unsafe fn subgroup_non_uniform_ballot_bit_count(ballot: SubgroupMask) -> u32 {
9+
spirv_std::arch::subgroup_non_uniform_ballot_bit_count::<{ GroupOperation::Reduce as u32 }>(
10+
ballot,
11+
)
12+
}
13+
14+
#[spirv(compute(threads(1, 1, 1)))]
15+
pub fn main() {
16+
unsafe {
17+
subgroup_non_uniform_ballot_bit_count(spirv_std::arch::subgroup_non_uniform_ballot(true));
18+
}
19+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
%1 = OpFunction %2 None %3
2+
%4 = OpFunctionParameter %5
3+
%6 = OpLabel
4+
OpLine %7 493 8
5+
%8 = OpGroupNonUniformBallotBitCount %2 %9 Reduce %4
6+
OpNoLine
7+
OpReturnValue %8
8+
OpFunctionEnd
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// build-pass
2+
// compile-flags: -C target-feature=+GroupNonUniform,+GroupNonUniformArithmetic,+GroupNonUniformClustered,+ext:SPV_KHR_vulkan_memory_model
3+
// compile-flags: -C llvm-args=--disassemble-fn=subgroup_non_uniform_i_add_clustered::subgroup_non_uniform_i_add_clustered
4+
5+
use glam::UVec3;
6+
use spirv_std::arch::{GroupOperation, SubgroupMask};
7+
use spirv_std::spirv;
8+
9+
unsafe fn subgroup_non_uniform_i_add_clustered(value: u32) -> u32 {
10+
spirv_std::arch::subgroup_non_uniform_i_add_clustered::<8, _>(value)
11+
}
12+
13+
#[spirv(compute(threads(32, 1, 1)))]
14+
pub fn main(#[spirv(local_invocation_id)] local_invocation_id: UVec3) {
15+
unsafe {
16+
subgroup_non_uniform_i_add_clustered(local_invocation_id.x);
17+
}
18+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
%1 = OpFunction %2 None %3
2+
%4 = OpFunctionParameter %2
3+
%5 = OpLabel
4+
OpLine %6 787 8
5+
%7 = OpGroupNonUniformIAdd %2 %8 ClusteredReduce %4 %9
6+
OpNoLine
7+
OpReturnValue %7
8+
OpFunctionEnd
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// build-pass
2+
// compile-flags: -C target-feature=+GroupNonUniform,+GroupNonUniformArithmetic,+ext:SPV_KHR_vulkan_memory_model
3+
// compile-flags: -C llvm-args=--disassemble-fn=subgroup_non_uniform_i_add_exclusive_scan::subgroup_non_uniform_i_add_exclusive_scan
4+
5+
use glam::UVec3;
6+
use spirv_std::arch::{GroupOperation, SubgroupMask};
7+
use spirv_std::spirv;
8+
9+
unsafe fn subgroup_non_uniform_i_add_exclusive_scan(value: u32) -> u32 {
10+
spirv_std::arch::subgroup_non_uniform_i_add::<{ GroupOperation::ExclusiveScan as u32 }, _>(
11+
value,
12+
)
13+
}
14+
15+
#[spirv(compute(threads(32, 1, 1)))]
16+
pub fn main(#[spirv(local_invocation_id)] local_invocation_id: UVec3) {
17+
unsafe {
18+
subgroup_non_uniform_i_add_exclusive_scan(local_invocation_id.x);
19+
}
20+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
%1 = OpFunction %2 None %3
2+
%4 = OpFunctionParameter %2
3+
%5 = OpLabel
4+
OpLine %6 746 8
5+
%7 = OpGroupNonUniformIAdd %2 %8 ExclusiveScan %4
6+
OpNoLine
7+
OpReturnValue %7
8+
OpFunctionEnd
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// build-pass
2+
// compile-flags: -C target-feature=+GroupNonUniform,+GroupNonUniformArithmetic,+ext:SPV_KHR_vulkan_memory_model
3+
// compile-flags: -C llvm-args=--disassemble-fn=subgroup_non_uniform_i_add_inclusive_scan::subgroup_non_uniform_i_add_inclusive_scan
4+
5+
use glam::UVec3;
6+
use spirv_std::arch::{GroupOperation, SubgroupMask};
7+
use spirv_std::spirv;
8+
9+
unsafe fn subgroup_non_uniform_i_add_inclusive_scan(value: u32) -> u32 {
10+
spirv_std::arch::subgroup_non_uniform_i_add::<{ GroupOperation::InclusiveScan as u32 }, _>(
11+
value,
12+
)
13+
}
14+
15+
#[spirv(compute(threads(32, 1, 1)))]
16+
pub fn main(#[spirv(local_invocation_id)] local_invocation_id: UVec3) {
17+
unsafe {
18+
subgroup_non_uniform_i_add_inclusive_scan(local_invocation_id.x);
19+
}
20+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
%1 = OpFunction %2 None %3
2+
%4 = OpFunctionParameter %2
3+
%5 = OpLabel
4+
OpLine %6 746 8
5+
%7 = OpGroupNonUniformIAdd %2 %8 InclusiveScan %4
6+
OpNoLine
7+
OpReturnValue %7
8+
OpFunctionEnd
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// build-pass
2+
// compile-flags: -C target-feature=+GroupNonUniform,+GroupNonUniformArithmetic,+ext:SPV_KHR_vulkan_memory_model
3+
// compile-flags: -C llvm-args=--disassemble-fn=subgroup_non_uniform_i_add_reduce::subgroup_non_uniform_i_add_reduce
4+
5+
use glam::UVec3;
6+
use spirv_std::arch::{GroupOperation, SubgroupMask};
7+
use spirv_std::spirv;
8+
9+
unsafe fn subgroup_non_uniform_i_add_reduce(value: u32) -> u32 {
10+
spirv_std::arch::subgroup_non_uniform_i_add::<{ GroupOperation::Reduce as u32 }, _>(value)
11+
}
12+
13+
#[spirv(compute(threads(32, 1, 1)))]
14+
pub fn main(#[spirv(local_invocation_id)] local_invocation_id: UVec3) {
15+
unsafe {
16+
subgroup_non_uniform_i_add_reduce(local_invocation_id.x);
17+
}
18+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
%1 = OpFunction %2 None %3
2+
%4 = OpFunctionParameter %2
3+
%5 = OpLabel
4+
OpLine %6 746 8
5+
%7 = OpGroupNonUniformIAdd %2 %8 Reduce %4
6+
OpNoLine
7+
OpReturnValue %7
8+
OpFunctionEnd

0 commit comments

Comments
 (0)