Skip to content

Commit 0fc84f8

Browse files
committed
move mod: move arch::subgroup to subgroup
1 parent c9fc9bf commit 0fc84f8

39 files changed

+66
-51
lines changed

crates/spirv-std/src/arch.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@ mod atomics;
1414
mod barrier;
1515
mod demote_to_helper_invocation_ext;
1616
mod derivative;
17-
mod subgroup;
1817

1918
pub use atomics::*;
2019
pub use barrier::*;
2120
pub use demote_to_helper_invocation_ext::*;
2221
pub use derivative::*;
23-
pub use subgroup::*;
2422

2523
/// Result is true if any component of `vector` is true, otherwise result is
2624
/// false.

crates/spirv-std/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ mod runtime_array;
105105
mod sampler;
106106
mod scalar;
107107
mod scalar_or_vector;
108+
pub mod subgroup;
108109
pub mod task;
109110
mod typed_buffer;
110111
mod vector;

crates/spirv-std/src/scalar_or_vector.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ pub unsafe trait ScalarOrVector: ScalarComposite + Default {
4343
/// features on the [`num_enum`] crate, or it won't compile on SPIR-V.
4444
///
4545
/// [`Integer`]: crate::Integer
46-
/// [safe subgroup operations]: crate::arch::subgroup_shuffle
46+
/// [safe subgroup operations]: crate::subgroup::subgroup_shuffle
4747
/// [`FromPrimitive`]: https://docs.rs/num_enum/latest/num_enum/derive.FromPrimitive.html
4848
/// [`IntoPrimitive`]: https://docs.rs/num_enum/latest/num_enum/derive.IntoPrimitive.html
4949
/// [`num_enum`]: https://crates.io/crates/num_enum
Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,26 @@
1+
//! Intrinsics for `subgroup` operations.
2+
//!
3+
//! The glsl equivalents are `subgroup*()` functions, see [`GL_KHR_shader_subgroup`]. Most of these translate to the
4+
//! SPIR-V [Non-Uniform Instructions], which have an opname starting with `OpGroupNonUniform*`. There's also some
5+
//! barrier operations and built-in input variables exposed in this module, similarly to glsl.
6+
//!
7+
//! Not to be confused with the [Group and Subgroup Instructions] starting with `OpGroup*`, which are unavailable in
8+
//! vulkan with many ops still undocumented. It seems to have fallen out of favor, never gaining glsl adoption, so
9+
//! we're only exposing the non-uniform variants.
10+
//!
11+
//! [`GL_KHR_shader_subgroup`]: https://github.com/KhronosGroup/GLSL/blob/main/extensions/khr/GL_KHR_shader_subgroup.txt
12+
//! [Non-Uniform Instructions]: https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_non_uniform_instructions
13+
//! [Group and Subgroup Instructions]: https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_group_and_subgroup_instructions
14+
115
#[cfg(target_arch = "spirv")]
216
use crate::ScalarOrVectorTransform;
317
#[cfg(target_arch = "spirv")]
4-
use crate::arch::{asm, barrier};
18+
use crate::arch::{control_barrier, memory_barrier};
519
#[cfg(target_arch = "spirv")]
620
use crate::memory::{Scope, Semantics};
721
use crate::{Float, Integer, ScalarComposite, ScalarOrVector, SignedInteger, UnsignedInteger};
22+
#[cfg(target_arch = "spirv")]
23+
use core::arch::asm;
824

925
#[cfg(target_arch = "spirv")]
1026
const SUBGROUP: u32 = Scope::Subgroup as u32;
@@ -59,7 +75,7 @@ pub enum GroupOperation {
5975
#[doc(alias = "subgroupBarrier")]
6076
#[inline]
6177
pub fn subgroup_barrier() {
62-
barrier::control_barrier::<
78+
control_barrier::<
6379
SUBGROUP,
6480
SUBGROUP,
6581
{
@@ -80,7 +96,7 @@ pub fn subgroup_barrier() {
8096
#[doc(alias = "subgroupMemoryBarrier")]
8197
#[inline]
8298
pub fn subgroup_memory_barrier() {
83-
barrier::memory_barrier::<
99+
memory_barrier::<
84100
SUBGROUP,
85101
{
86102
Semantics::ACQUIRE_RELEASE.bits()
@@ -100,7 +116,7 @@ pub fn subgroup_memory_barrier() {
100116
#[doc(alias = "subgroupMemoryBarrierBuffer")]
101117
#[inline]
102118
pub fn subgroup_memory_barrier_buffer() {
103-
barrier::memory_barrier::<
119+
memory_barrier::<
104120
SUBGROUP,
105121
{ Semantics::ACQUIRE_RELEASE.bits() | Semantics::UNIFORM_MEMORY.bits() },
106122
>();
@@ -117,7 +133,7 @@ pub fn subgroup_memory_barrier_buffer() {
117133
#[doc(alias = "subgroupMemoryBarrierShared")]
118134
#[inline]
119135
pub fn subgroup_memory_barrier_shared() {
120-
barrier::memory_barrier::<
136+
memory_barrier::<
121137
SUBGROUP,
122138
{ Semantics::ACQUIRE_RELEASE.bits() | Semantics::WORKGROUP_MEMORY.bits() },
123139
>();
@@ -132,7 +148,7 @@ pub fn subgroup_memory_barrier_shared() {
132148
#[doc(alias = "subgroupMemoryBarrierImage")]
133149
#[inline]
134150
pub fn subgroup_memory_barrier_image() {
135-
barrier::memory_barrier::<
151+
memory_barrier::<
136152
SUBGROUP,
137153
{ Semantics::ACQUIRE_RELEASE.bits() | Semantics::IMAGE_MEMORY.bits() },
138154
>();

tests/compiletests/ui/glam/offsets_vec3_vec3a.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
// ignore-vulkan1.0
1010
// ignore-vulkan1.1
1111

12-
use spirv_std::arch::subgroup_shuffle_up;
1312
use spirv_std::spirv;
13+
use spirv_std::subgroup::subgroup_shuffle_up;
1414

1515
#[repr(C)]
1616
#[derive(Copy, Clone, Default)]

tests/compiletests/ui/arch/subgroup/subgroup_ballot.rs renamed to tests/compiletests/ui/subgroup/subgroup_ballot.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
use spirv_std::spirv;
77

88
unsafe fn subgroup_ballot(predicate: bool) -> bool {
9-
let ballot = spirv_std::arch::subgroup_ballot(predicate);
10-
spirv_std::arch::subgroup_inverse_ballot(ballot)
9+
let ballot = spirv_std::subgroup::subgroup_ballot(predicate);
10+
spirv_std::subgroup::subgroup_inverse_ballot(ballot)
1111
}
1212

1313
#[spirv(compute(threads(1, 1, 1)))]

tests/compiletests/ui/arch/subgroup/subgroup_ballot.stderr renamed to tests/compiletests/ui/subgroup/subgroup_ballot.stderr

File renamed without changes.

tests/compiletests/ui/arch/subgroup/subgroup_ballot_bit_count.rs renamed to tests/compiletests/ui/subgroup/subgroup_ballot_bit_count.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
// compile-flags: -C llvm-args=--disassemble-fn=subgroup_ballot_bit_count::subgroup_ballot_bit_count
44
// normalize-stderr-test "OpLine .*\n" -> ""
55

6-
use spirv_std::arch::{GroupOperation, SubgroupMask};
76
use spirv_std::spirv;
7+
use spirv_std::subgroup::{GroupOperation, SubgroupMask};
88

99
unsafe fn subgroup_ballot_bit_count(ballot: SubgroupMask) -> u32 {
10-
spirv_std::arch::subgroup_ballot_bit_count(ballot)
10+
spirv_std::subgroup::subgroup_ballot_bit_count(ballot)
1111
}
1212

1313
#[spirv(compute(threads(1, 1, 1)))]
1414
pub fn main() {
1515
unsafe {
16-
subgroup_ballot_bit_count(spirv_std::arch::subgroup_ballot(true));
16+
subgroup_ballot_bit_count(spirv_std::subgroup::subgroup_ballot(true));
1717
}
1818
}

tests/compiletests/ui/arch/subgroup/subgroup_ballot_bit_count.stderr renamed to tests/compiletests/ui/subgroup/subgroup_ballot_bit_count.stderr

File renamed without changes.

tests/compiletests/ui/arch/subgroup/subgroup_broadcast.rs renamed to tests/compiletests/ui/subgroup/subgroup_broadcast.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
// ignore-spv1.3
1111
// ignore-spv1.4
1212

13-
use spirv_std::arch::{GroupOperation, SubgroupMask};
1413
use spirv_std::spirv;
14+
use spirv_std::subgroup::{GroupOperation, SubgroupMask};
1515

1616
unsafe fn disassembly(value: i32, id: u32) -> i32 {
17-
spirv_std::arch::subgroup_broadcast(value, id)
17+
spirv_std::subgroup::subgroup_broadcast(value, id)
1818
}
1919

2020
#[spirv(compute(threads(32, 1, 1)))]

0 commit comments

Comments
 (0)