diff --git a/crates/spirv-std/src/arch.rs b/crates/spirv-std/src/arch.rs index fe12b8ef562..a1ba58299fd 100644 --- a/crates/spirv-std/src/arch.rs +++ b/crates/spirv-std/src/arch.rs @@ -8,25 +8,6 @@ use crate::Integer; use crate::{Scalar, SignedInteger, UnsignedInteger, Vector}; #[cfg(target_arch = "spirv")] use core::arch::asm; -use glam::UVec2; - -mod atomics; -mod barrier; -mod demote_to_helper_invocation_ext; -mod derivative; -mod mesh_shading; -mod primitive; -mod ray_tracing; -mod subgroup; - -pub use atomics::*; -pub use barrier::*; -pub use demote_to_helper_invocation_ext::*; -pub use derivative::*; -pub use mesh_shading::*; -pub use primitive::*; -pub use ray_tracing::*; -pub use subgroup::*; /// Result is true if any component of `vector` is true, otherwise result is /// false. @@ -132,63 +113,6 @@ pub unsafe fn vector_insert_dynamic, const N: usize>( } } -/// Fragment-shader discard. Equivalvent to `discard()` from GLSL -/// -/// Ceases all further processing in any invocation that executes it: Only -/// instructions these invocations executed before [kill] have observable side -/// effects. -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpKill", alias = "discard")] -#[allow(clippy::empty_loop)] -pub fn kill() -> ! { - unsafe { asm!("OpKill", options(noreturn)) } -} - -/// Read from the shader clock with either the `Subgroup` or `Device` scope. -/// -/// See: -/// -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpReadClockKHR")] -pub fn read_clock_khr() -> u64 { - unsafe { - let mut result: u64; - - asm! { - "%uint = OpTypeInt 32 0", - "%scope = OpConstant %uint {scope}", - "{result} = OpReadClockKHR typeof*{result} %scope", - result = out(reg) result, - scope = const SCOPE, - }; - - result - } -} - -/// Like `read_clock_khr` but returns a vector to avoid requiring the `Int64` -/// capability. It returns a 'vector of two-components of 32-bit unsigned -/// integer type with the first component containing the 32 least significant -/// bits and the second component containing the 32 most significant bits.' -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpReadClockKHR")] -pub fn read_clock_uvec2_khr() -> UVec2 { - unsafe { - let mut result = UVec2::default(); - - asm! { - "%uint = OpTypeInt 32 0", - "%scope = OpConstant %uint {scope}", - "%result = OpReadClockKHR typeof*{result} %scope", - "OpStore {result} %result", - result = in(reg) &mut result, - scope = const SCOPE, - }; - - result - } -} - #[cfg(target_arch = "spirv")] unsafe fn call_glsl_op_with_ints(a: T, b: T) -> T { unsafe { diff --git a/crates/spirv-std/src/arch/ray_tracing.rs b/crates/spirv-std/src/arch/ray_tracing.rs deleted file mode 100644 index ccfd5402225..00000000000 --- a/crates/spirv-std/src/arch/ray_tracing.rs +++ /dev/null @@ -1,92 +0,0 @@ -#[cfg(target_arch = "spirv")] -use core::arch::asm; - -/// Reports an intersection back to the traversal infrastructure. -/// -/// If the intersection occurred within the current ray interval, the -/// intersection confirmation is performed (see the API specification for more -/// details). If the value of Hit falls outside the current ray interval, the -/// hit is rejected. -/// -/// Returns True if the hit was accepted by the ray interval and the intersection was confirmed. Returns False otherwise. -/// -/// - `hit` is the floating point parametric value along ray for the intersection. -/// - `hit_kind` is the integer hit kind reported back to other shaders and -/// accessible by the `hit kind` builtin. -/// -/// This instruction is allowed only in `IntersectionKHR` execution model. -/// -/// This instruction is a shader call instruction which may invoke shaders with -/// the `any_hit` execution model. -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpReportIntersectionKHR")] -#[inline] -pub unsafe fn report_intersection(hit: f32, hit_kind: u32) -> bool { - unsafe { - let mut result = false; - - asm! { - "%bool = OpTypeBool", - "%result = OpReportIntersectionKHR %bool {hit} {hit_kind}", - "OpStore {result} %result", - result = in(reg) &mut result, - hit = in(reg) hit, - hit_kind = in(reg) hit_kind, - }; - - result - } -} - -/// Ignores the current potential intersection, terminating the invocation that -/// executes it, and continues the ray traversal. This instruction is allowed -/// only in `any_hit` execution model. -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpIgnoreIntersectionKHR")] -#[inline] -pub unsafe fn ignore_intersection() -> ! { - unsafe { - asm!("OpIgnoreIntersectionKHR", options(noreturn)); - } -} - -/// Terminates the invocation that executes it, stops the ray traversal, accepts -/// the current hit, and invokes the `closest_hit` execution model -/// (if active). This instruction is allowed only in the `any_hit` -/// execution model. -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpTerminateRayKHR")] -#[inline] -pub unsafe fn terminate_ray() -> ! { - unsafe { - asm!("OpTerminateRayKHR", options(noreturn)); - } -} - -/// Invoke a callable shader. -/// -/// - `INDEX` is the index into the SBT table to select callable shader -/// to execute. -/// - `data` is a pointer to the callable data to pass into the called shader. -/// `data` must have a storage class of `callable_data` -/// or `incoming_callable_data`. -/// -/// This instruction is allowed only in `ray_generation`, `closest_hit`, -/// `miss` and `callable` execution models. -/// -/// This instruction is a shader call instruction which will invoke a shader -/// with the `callable` execution model. -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpExecuteCallableKHR")] -#[inline] -pub unsafe fn execute_callable(data: &T) { - unsafe { - asm! { - "%u32 = OpTypeInt 32 0", - "%id = OpConstant %u32 {id}", - "OpExecuteCallableKHR %id {data}", - id = const ID, - data = in(reg) data, - }; - } -} diff --git a/crates/spirv-std/src/arch/atomics.rs b/crates/spirv-std/src/atomic.rs similarity index 99% rename from crates/spirv-std/src/arch/atomics.rs rename to crates/spirv-std/src/atomic.rs index 584e6fb1648..16156314e28 100644 --- a/crates/spirv-std/src/arch/atomics.rs +++ b/crates/spirv-std/src/atomic.rs @@ -1,3 +1,5 @@ +//! Intrinsics for atomic operations + #[cfg(target_arch = "spirv")] use core::arch::asm; diff --git a/crates/spirv-std/src/arch/barrier.rs b/crates/spirv-std/src/barrier.rs similarity index 99% rename from crates/spirv-std/src/arch/barrier.rs rename to crates/spirv-std/src/barrier.rs index 4d08e17cb2a..6c4a9cf5b85 100644 --- a/crates/spirv-std/src/arch/barrier.rs +++ b/crates/spirv-std/src/barrier.rs @@ -1,3 +1,5 @@ +//! Intrinsics for barrier operations + #[cfg(target_arch = "spirv")] use core::arch::asm; diff --git a/crates/spirv-std/src/arch/demote_to_helper_invocation_ext.rs b/crates/spirv-std/src/fragment/demote_to_helper_invocation.rs similarity index 100% rename from crates/spirv-std/src/arch/demote_to_helper_invocation_ext.rs rename to crates/spirv-std/src/fragment/demote_to_helper_invocation.rs diff --git a/crates/spirv-std/src/arch/derivative.rs b/crates/spirv-std/src/fragment/derivative.rs similarity index 100% rename from crates/spirv-std/src/arch/derivative.rs rename to crates/spirv-std/src/fragment/derivative.rs diff --git a/crates/spirv-std/src/fragment/mod.rs b/crates/spirv-std/src/fragment/mod.rs new file mode 100644 index 00000000000..612bd1aaffa --- /dev/null +++ b/crates/spirv-std/src/fragment/mod.rs @@ -0,0 +1,22 @@ +//! Intrinsics for fragment shaders + +#[cfg(target_arch = "spirv")] +use core::arch::asm; + +mod demote_to_helper_invocation; +mod derivative; + +pub use demote_to_helper_invocation::*; +pub use derivative::*; + +/// Fragment-shader discard. Equivalent to `discard()` from GLSL +/// +/// Ceases all further processing in any invocation that executes it: Only +/// instructions these invocations executed before [kill] have observable side +/// effects. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpKill", alias = "discard")] +#[allow(clippy::empty_loop)] +pub fn kill() -> ! { + unsafe { asm!("OpKill", options(noreturn)) } +} diff --git a/crates/spirv-std/src/arch/primitive.rs b/crates/spirv-std/src/geometry.rs similarity index 98% rename from crates/spirv-std/src/arch/primitive.rs rename to crates/spirv-std/src/geometry.rs index c8d108522ae..4de1568e23e 100644 --- a/crates/spirv-std/src/arch/primitive.rs +++ b/crates/spirv-std/src/geometry.rs @@ -1,3 +1,5 @@ +//! Intrinsics for geometry shaders + #[cfg(target_arch = "spirv")] use core::arch::asm; diff --git a/crates/spirv-std/src/image.rs b/crates/spirv-std/src/image.rs index 4800e523ea9..56a6a151598 100644 --- a/crates/spirv-std/src/image.rs +++ b/crates/spirv-std/src/image.rs @@ -446,7 +446,7 @@ impl< coordinate = in(reg) &coordinate, depth_reference = in(reg) &depth_reference, lod = in(reg) &lod, - ) + ); } result } @@ -698,7 +698,7 @@ impl< coordinate = in(reg) &coordinate, depth_reference = in(reg) &depth_reference, lod = in(reg) &lod, - ) + ); } result } diff --git a/crates/spirv-std/src/lib.rs b/crates/spirv-std/src/lib.rs index 6e178fe8749..c4e84d97050 100644 --- a/crates/spirv-std/src/lib.rs +++ b/crates/spirv-std/src/lib.rs @@ -92,18 +92,25 @@ pub use macros::spirv; pub use macros::{debug_printf, debug_printfln}; pub mod arch; +pub mod atomic; +pub mod barrier; pub mod byte_addressable_buffer; pub mod debug_printf; pub mod float; +pub mod fragment; +pub mod geometry; pub mod image; pub mod indirect_command; -pub mod matrix; pub mod memory; +pub mod mesh; pub mod ray_tracing; mod runtime_array; mod sampler; mod scalar; mod scalar_or_vector; +pub mod shader_clock; +pub mod subgroup; +pub mod task; mod typed_buffer; mod vector; diff --git a/crates/spirv-std/src/mesh.rs b/crates/spirv-std/src/mesh.rs new file mode 100644 index 00000000000..8cac65e7586 --- /dev/null +++ b/crates/spirv-std/src/mesh.rs @@ -0,0 +1,38 @@ +//! Intrinsics for mesh shaders + +#[cfg(target_arch = "spirv")] +use core::arch::asm; + +/// Sets the actual output size of the primitives and vertices that the mesh shader +/// workgroup will emit upon completion. +/// +/// 'Vertex Count' must be a 32-bit unsigned integer value. +/// It defines the array size of per-vertex outputs. +/// +/// 'Primitive Count' must a 32-bit unsigned integer value. +/// It defines the array size of per-primitive outputs. +/// +/// The arguments are taken from the first invocation in each workgroup. +/// Any invocation must execute this instruction no more than once and under +/// uniform control flow. +/// There must not be any control flow path to an output write that is not preceded +/// by this instruction. +/// +/// This instruction is only valid in the *`MeshEXT`* Execution Model. +/// +/// # Safety +/// * Must be called **exactly once** in mesh shaders +/// * Must be called in uniform control flow +/// * Must not write any output before this instruction in invoked +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpSetMeshOutputsEXT")] +#[inline] +pub unsafe fn set_mesh_outputs_ext(vertex_count: u32, primitive_count: u32) { + unsafe { + asm! { + "OpSetMeshOutputsEXT {vertex_count} {primitive_count}", + vertex_count = in(reg) vertex_count, + primitive_count = in(reg) primitive_count, + } + } +} diff --git a/crates/spirv-std/src/ray_tracing/acceleration_structure.rs b/crates/spirv-std/src/ray_tracing/acceleration_structure.rs new file mode 100644 index 00000000000..380ff286b28 --- /dev/null +++ b/crates/spirv-std/src/ray_tracing/acceleration_structure.rs @@ -0,0 +1,112 @@ +//! Provides the [`AccelerationStructure`] type and [`RayFlags`], as defined by the [`ray_pipeline`] and [`ray_query`] +//! extensions. +//! +//! Unlike the vulkan [`VK_KHR_acceleration_structure`] extension, there is no shared SPIR-V extension for acceleration +//! structures. Instead, both [`SPV_KHR_ray_tracing`] and [`SPV_KHR_ray_query`] specify (slightly adjusted): +//! > [`AccelerationStructure`], [`RayFlags`] and the `RayTraversalPrimitiveCullingKHR` capability are added by both +//! > [`ray_pipeline`] and [`ray_query`]; they are intended to have identical definitions, and can be enabled by either +//! > extension’s capability, for use with the instructions under that same capability. +//! +//! [`ray_pipeline`]: super::ray_pipeline +//! [`ray_query`]: super::ray_query +//! [`VK_KHR_acceleration_structure`]: https://docs.vulkan.org/refpages/latest/refpages/source/VK_KHR_acceleration_structure.html +//! [`SPV_KHR_ray_tracing`]: https://github.khronos.org/SPIRV-Registry/extensions/KHR/SPV_KHR_ray_tracing.html +//! [`SPV_KHR_ray_query`]: https://github.khronos.org/SPIRV-Registry/extensions/KHR/SPV_KHR_ray_query.html + +#[cfg(target_arch = "spirv")] +use core::arch::asm; +use glam::UVec2; + +/// An acceleration structure type which is an opaque reference to an +/// acceleration structure handle as defined in the client API specification. +#[spirv(acceleration_structure)] +#[derive(Copy, Clone)] +// HACK(eddyb) avoids "transparent newtype of `_anti_zst_padding`" misinterpretation. +#[repr(C)] +pub struct AccelerationStructure { + // HACK(eddyb) avoids the layout becoming ZST (and being elided in one way + // or another, before `#[spirv(acceleration_structure)]` can special-case it). + _anti_zst_padding: core::mem::MaybeUninit, +} + +impl AccelerationStructure { + /// Converts a 64-bit integer into an [`AccelerationStructure`]. + /// # Safety + /// The 64-bit integer must point to a valid acceleration structure. + #[spirv_std_macros::gpu_only] + #[doc(alias = "OpConvertUToAccelerationStructureKHR")] + #[inline] + pub unsafe fn from_u64(id: u64) -> AccelerationStructure { + unsafe { + // FIXME(eddyb) `let mut result = T::default()` uses (for `asm!`), with this. + let mut result_slot = core::mem::MaybeUninit::uninit(); + asm! { + "%ret = OpTypeAccelerationStructureKHR", + "%result = OpConvertUToAccelerationStructureKHR %ret {id}", + "OpStore {result_slot} %result", + id = in(reg) id, + result_slot = in(reg) result_slot.as_mut_ptr(), + } + result_slot.assume_init() + } + } + + /// Converts a vector of two 32 bit integers into an [`AccelerationStructure`]. + /// # Safety + /// The combination must point to a valid acceleration structure. + #[spirv_std_macros::gpu_only] + #[doc(alias = "OpConvertUToAccelerationStructureKHR")] + #[inline] + pub unsafe fn from_vec(id: UVec2) -> AccelerationStructure { + unsafe { + // FIXME(eddyb) `let mut result = T::default()` uses (for `asm!`), with this. + let mut result_slot = core::mem::MaybeUninit::uninit(); + asm! { + "%ret = OpTypeAccelerationStructureKHR", + "%id = OpLoad _ {id}", + "%result = OpConvertUToAccelerationStructureKHR %ret %id", + "OpStore {result_slot} %result", + id = in(reg) &id, + result_slot = in(reg) result_slot.as_mut_ptr(), + } + result_slot.assume_init() + } + } +} + +bitflags::bitflags! { + /// Flags controlling the properties of an OpTraceRayKHR instruction. + /// Despite being a mask and allowing multiple bits to be combined, it is + /// invalid for more than one of these four bits to be set: `OPAQUE`, + /// `NO_OPAQUE`, `CULL_OPAQUE`, `CULL_NO_OPAQUE`, only one of + /// `CULL_BACK_FACING_TRIANGLES` and `CULL_FRONT_FACING_TRIANGLES` may + /// be set. + #[repr(transparent)] + #[cfg_attr(feature = "bytemuck", derive(bytemuck::Zeroable, bytemuck::Pod))] + pub struct RayFlags: u32 { + /// No flags specified. + const NONE = 0; + /// Force all intersections with the trace to be opaque. + const OPAQUE = 1; + /// Force all intersections with the trace to be non-opaque. + const NO_OPAQUE = 2; + /// Accept the first hit discovered. + const TERMINATE_ON_FIRST_HIT = 4; + /// Do not execute a closest hit shader. + const SKIP_CLOSEST_HIT_SHADER = 8; + /// Do not intersect with the back face of triangles. + const CULL_BACK_FACING_TRIANGLES = 16; + /// Do not intersect with the front face of triangles. + const CULL_FRONT_FACING_TRIANGLES = 32; + /// Do not intersect with opaque geometry. + const CULL_OPAQUE = 64; + /// Do not intersect with non-opaque geometry. + const CULL_NO_OPAQUE = 128; + /// Do not intersect with any triangle geometries. + /// Requires `RayTraversalPrimitiveCullingKHR`. + const SKIP_TRIANGLES = 256; + /// Do not intersect with any AABB (Axis Aligned Bounding Box) geometries. + /// Requires `RayTraversalPrimitiveCullingKHR`. + const SKIP_AABBS = 512; + } +} diff --git a/crates/spirv-std/src/matrix.rs b/crates/spirv-std/src/ray_tracing/matrix.rs similarity index 97% rename from crates/spirv-std/src/matrix.rs rename to crates/spirv-std/src/ray_tracing/matrix.rs index 1ae2f52d78d..58cb16501e3 100644 --- a/crates/spirv-std/src/matrix.rs +++ b/crates/spirv-std/src/ray_tracing/matrix.rs @@ -1,4 +1,4 @@ -//! a set of common SPIR-V Matrices, used for intrinsics +//! [`Matrix4x3`] is a matrix with a special layout for ray tracing use core::fmt::{Debug, Display, Formatter}; use glam::{Affine3A, Mat3, Mat3A, Mat4, Vec3, Vec3A}; diff --git a/crates/spirv-std/src/ray_tracing/mod.rs b/crates/spirv-std/src/ray_tracing/mod.rs new file mode 100644 index 00000000000..51622ce9970 --- /dev/null +++ b/crates/spirv-std/src/ray_tracing/mod.rs @@ -0,0 +1,18 @@ +//! Intrinsics for the different ray tracing related extensions. +//! +//! Provides the following modules: +//! * [`ray_pipeline`]: intrinsics for ray **pipelines** +//! * [`ray_query`]: intrinsics for ray **query** +//! +//! And the following types shared between them: +//! * [`AccelerationStructure`] +//! * [`RayFlags`] +//! * [`Matrix4x3`] + +mod acceleration_structure; +mod matrix; +pub mod ray_pipeline; +pub mod ray_query; + +pub use acceleration_structure::*; +pub use matrix::*; diff --git a/crates/spirv-std/src/ray_tracing/ray_pipeline.rs b/crates/spirv-std/src/ray_tracing/ray_pipeline.rs new file mode 100644 index 00000000000..defdaf7769f --- /dev/null +++ b/crates/spirv-std/src/ray_tracing/ray_pipeline.rs @@ -0,0 +1,178 @@ +//! Intrinsics for ray tracing **pipelines**, for ray queries see [`super::ray_query`]. +//! +//! Provides intrinsics as defined by the [`SPV_KHR_ray_tracing`] extension, used by the [`VK_KHR_ray_tracing_pipeline`] +//! Vulkan extension. +//! +//! [`SPV_KHR_ray_tracing`]: https://github.khronos.org/SPIRV-Registry/extensions/KHR/SPV_KHR_ray_tracing.html +//! [`VK_KHR_ray_tracing_pipeline`]: https://docs.vulkan.org/refpages/latest/refpages/source/VK_KHR_ray_tracing_pipeline.html + +use crate::ray_tracing::{AccelerationStructure, RayFlags}; +#[cfg(target_arch = "spirv")] +use core::arch::asm; +use glam::Vec3; + +/// Trace a ray into the acceleration structure. +/// +/// - `structure` is the descriptor for the acceleration structure to trace into. +/// - `ray_flags` contains one or more of the Ray Flag values. +/// - `cull_mask` is the mask to test against the instance mask. Only the 8 +/// least-significant bits of are used by this instruction - other bits +/// are ignored. +/// - `sbt_offset` and `sbt_stride` control indexing into the SBT (Shader +/// Binding Table) for hit shaders called from this trace. Only the 4 +/// least-significant bits of `sbt_offset` and `sbt_stride` are used by this +/// instruction - other bits are ignored. +/// - `miss_index` is the index of the miss shader to be called from this +/// trace call. Only the 16 least-significant bits are used by this +/// instruction - other bits are ignored. +/// - `ray_origin`, `ray_tmin`, `ray_direction`, and `ray_tmax` control the +/// basic parameters of the ray to be traced. +/// +/// - `payload` is a pointer to the ray payload structure to use for this trace. +/// `payload` must have a storage class of `ray_payload` +/// or `incoming_ray_payload`. +/// +/// This instruction is allowed only in `ray_generation`, `closest_hit` and +/// `miss` execution models. +/// +/// This instruction is a shader call instruction which may invoke shaders with +/// the `intersection`, `any_hit`, `closest_hit`, and `miss` +/// execution models. +#[doc(alias = "OpTraceRayKHR")] +#[inline] +#[allow(clippy::too_many_arguments)] +#[spirv_std_macros::gpu_only] +pub unsafe fn trace_ray( + acceleration_structure: AccelerationStructure, + ray_flags: RayFlags, + cull_mask: i32, + sbt_offset: i32, + sbt_stride: i32, + miss_index: i32, + ray_origin: Vec3, + ray_tmin: f32, + ray_direction: Vec3, + ray_tmax: f32, + payload: &mut T, +) { + unsafe { + asm! { + "%acceleration_structure = OpLoad _ {acceleration_structure}", + "%ray_origin = OpLoad _ {ray_origin}", + "%ray_direction = OpLoad _ {ray_direction}", + "OpTraceRayKHR \ + %acceleration_structure \ + {ray_flags} \ + {cull_mask} \ + {sbt_offset} \ + {sbt_stride} \ + {miss_index} \ + %ray_origin \ + {ray_tmin} \ + %ray_direction \ + {ray_tmax} \ + {payload}", + acceleration_structure = in(reg) &acceleration_structure, + ray_flags = in(reg) ray_flags.bits(), + cull_mask = in(reg) cull_mask, + sbt_offset = in(reg) sbt_offset, + sbt_stride = in(reg) sbt_stride, + miss_index = in(reg) miss_index, + ray_origin = in(reg) &ray_origin, + ray_tmin = in(reg) ray_tmin, + ray_direction = in(reg) &ray_direction, + ray_tmax = in(reg) ray_tmax, + payload = in(reg) payload, + } + } +} + +/// Reports an intersection back to the traversal infrastructure. +/// +/// If the intersection occurred within the current ray interval, the +/// intersection confirmation is performed (see the API specification for more +/// details). If the value of Hit falls outside the current ray interval, the +/// hit is rejected. +/// +/// Returns True if the hit was accepted by the ray interval and the intersection was confirmed. Returns False otherwise. +/// +/// - `hit` is the floating point parametric value along ray for the intersection. +/// - `hit_kind` is the integer hit kind reported back to other shaders and +/// accessible by the `hit kind` builtin. +/// +/// This instruction is allowed only in `IntersectionKHR` execution model. +/// +/// This instruction is a shader call instruction which may invoke shaders with +/// the `any_hit` execution model. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpReportIntersectionKHR")] +#[inline] +pub unsafe fn report_intersection(hit: f32, hit_kind: u32) -> bool { + unsafe { + let mut result = false; + + asm! { + "%bool = OpTypeBool", + "%result = OpReportIntersectionKHR %bool {hit} {hit_kind}", + "OpStore {result} %result", + result = in(reg) &mut result, + hit = in(reg) hit, + hit_kind = in(reg) hit_kind, + }; + + result + } +} + +/// Ignores the current potential intersection, terminating the invocation that +/// executes it, and continues the ray traversal. This instruction is allowed +/// only in `any_hit` execution model. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpIgnoreIntersectionKHR")] +#[inline] +pub unsafe fn ignore_intersection() -> ! { + unsafe { + asm!("OpIgnoreIntersectionKHR", options(noreturn)); + } +} + +/// Terminates the invocation that executes it, stops the ray traversal, accepts +/// the current hit, and invokes the `closest_hit` execution model +/// (if active). This instruction is allowed only in the `any_hit` +/// execution model. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpTerminateRayKHR")] +#[inline] +pub unsafe fn terminate_ray() -> ! { + unsafe { + asm!("OpTerminateRayKHR", options(noreturn)); + } +} + +/// Invoke a callable shader. +/// +/// - `INDEX` is the index into the SBT table to select callable shader +/// to execute. +/// - `data` is a pointer to the callable data to pass into the called shader. +/// `data` must have a storage class of `callable_data` +/// or `incoming_callable_data`. +/// +/// This instruction is allowed only in `ray_generation`, `closest_hit`, +/// `miss` and `callable` execution models. +/// +/// This instruction is a shader call instruction which will invoke a shader +/// with the `callable` execution model. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpExecuteCallableKHR")] +#[inline] +pub unsafe fn execute_callable(data: &T) { + unsafe { + asm! { + "%u32 = OpTypeInt 32 0", + "%id = OpConstant %u32 {id}", + "OpExecuteCallableKHR %id {data}", + id = const ID, + data = in(reg) data, + }; + } +} diff --git a/crates/spirv-std/src/ray_tracing.rs b/crates/spirv-std/src/ray_tracing/ray_query.rs similarity index 81% rename from crates/spirv-std/src/ray_tracing.rs rename to crates/spirv-std/src/ray_tracing/ray_query.rs index 24ddc016f31..f68e56c1ddb 100644 --- a/crates/spirv-std/src/ray_tracing.rs +++ b/crates/spirv-std/src/ray_tracing/ray_query.rs @@ -1,180 +1,16 @@ -//! Ray-tracing data types - -// NOTE(eddyb) "&-masking with zero", likely due to `NONE = 0` in `bitflags!`. -#![allow(clippy::bad_bit_mask)] - -use crate::matrix::Matrix4x3; +//! Intrinsics for ray **query**, for ray pipelines see [`super::ray_pipeline`]. +//! +//! Provides intrinsics as defined by the [`SPV_KHR_ray_query`] extension, used by the [`VK_KHR_ray_query`] +//! Vulkan extension. +//! +//! [`SPV_KHR_ray_query`]: https://github.khronos.org/SPIRV-Registry/extensions/KHR/SPV_KHR_ray_query.html +//! [`VK_KHR_ray_query`]: https://docs.vulkan.org/refpages/latest/refpages/source/VK_KHR_ray_query.html + +use crate::ray_tracing::matrix::Matrix4x3; +use crate::ray_tracing::{AccelerationStructure, RayFlags}; #[cfg(target_arch = "spirv")] use core::arch::asm; -use glam::{UVec2, Vec2, Vec3}; - -/// An acceleration structure type which is an opaque reference to an -/// acceleration structure handle as defined in the client API specification. -#[spirv(acceleration_structure)] -#[derive(Copy, Clone)] -// HACK(eddyb) avoids "transparent newtype of `_anti_zst_padding`" misinterpretation. -#[repr(C)] -pub struct AccelerationStructure { - // HACK(eddyb) avoids the layout becoming ZST (and being elided in one way - // or another, before `#[spirv(acceleration_structure)]` can special-case it). - _anti_zst_padding: core::mem::MaybeUninit, -} - -impl AccelerationStructure { - /// Converts a 64-bit integer into an [`AccelerationStructure`]. - /// # Safety - /// The 64-bit integer must point to a valid acceleration structure. - #[spirv_std_macros::gpu_only] - #[doc(alias = "OpConvertUToAccelerationStructureKHR")] - #[inline] - pub unsafe fn from_u64(id: u64) -> AccelerationStructure { - unsafe { - // FIXME(eddyb) `let mut result = T::default()` uses (for `asm!`), with this. - let mut result_slot = core::mem::MaybeUninit::uninit(); - asm! { - "%ret = OpTypeAccelerationStructureKHR", - "%result = OpConvertUToAccelerationStructureKHR %ret {id}", - "OpStore {result_slot} %result", - id = in(reg) id, - result_slot = in(reg) result_slot.as_mut_ptr(), - } - result_slot.assume_init() - } - } - - /// Converts a vector of two 32 bit integers into an [`AccelerationStructure`]. - /// # Safety - /// The combination must point to a valid acceleration structure. - #[spirv_std_macros::gpu_only] - #[doc(alias = "OpConvertUToAccelerationStructureKHR")] - #[inline] - pub unsafe fn from_vec(id: UVec2) -> AccelerationStructure { - unsafe { - // FIXME(eddyb) `let mut result = T::default()` uses (for `asm!`), with this. - let mut result_slot = core::mem::MaybeUninit::uninit(); - asm! { - "%ret = OpTypeAccelerationStructureKHR", - "%id = OpLoad _ {id}", - "%result = OpConvertUToAccelerationStructureKHR %ret %id", - "OpStore {result_slot} %result", - id = in(reg) &id, - result_slot = in(reg) result_slot.as_mut_ptr(), - } - result_slot.assume_init() - } - } - - #[spirv_std_macros::gpu_only] - /// Trace a ray into the acceleration structure. - /// - /// - `structure` is the descriptor for the acceleration structure to trace into. - /// - `ray_flags` contains one or more of the Ray Flag values. - /// - `cull_mask` is the mask to test against the instance mask. Only the 8 - /// least-significant bits of are used by this instruction - other bits - /// are ignored. - /// - `sbt_offset` and `sbt_stride` control indexing into the SBT (Shader - /// Binding Table) for hit shaders called from this trace. Only the 4 - /// least-significant bits of `sbt_offset` and `sbt_stride` are used by this - /// instruction - other bits are ignored. - /// - `miss_index` is the index of the miss shader to be called from this - /// trace call. Only the 16 least-significant bits are used by this - /// instruction - other bits are ignored. - /// - `ray_origin`, `ray_tmin`, `ray_direction`, and `ray_tmax` control the - /// basic parameters of the ray to be traced. - /// - /// - `payload` is a pointer to the ray payload structure to use for this trace. - /// `payload` must have a storage class of `ray_payload` - /// or `incoming_ray_payload`. - /// - /// This instruction is allowed only in `ray_generation`, `closest_hit` and - /// `miss` execution models. - /// - /// This instruction is a shader call instruction which may invoke shaders with - /// the `intersection`, `any_hit`, `closest_hit`, and `miss` - /// execution models. - #[doc(alias = "OpTraceRayKHR")] - #[inline] - #[allow(clippy::too_many_arguments)] - pub unsafe fn trace_ray( - &self, - ray_flags: RayFlags, - cull_mask: i32, - sbt_offset: i32, - sbt_stride: i32, - miss_index: i32, - ray_origin: Vec3, - ray_tmin: f32, - ray_direction: Vec3, - ray_tmax: f32, - payload: &mut T, - ) { - unsafe { - asm! { - "%acceleration_structure = OpLoad _ {acceleration_structure}", - "%ray_origin = OpLoad _ {ray_origin}", - "%ray_direction = OpLoad _ {ray_direction}", - "OpTraceRayKHR \ - %acceleration_structure \ - {ray_flags} \ - {cull_mask} \ - {sbt_offset} \ - {sbt_stride} \ - {miss_index} \ - %ray_origin \ - {ray_tmin} \ - %ray_direction \ - {ray_tmax} \ - {payload}", - acceleration_structure = in(reg) self, - ray_flags = in(reg) ray_flags.bits(), - cull_mask = in(reg) cull_mask, - sbt_offset = in(reg) sbt_offset, - sbt_stride = in(reg) sbt_stride, - miss_index = in(reg) miss_index, - ray_origin = in(reg) &ray_origin, - ray_tmin = in(reg) ray_tmin, - ray_direction = in(reg) &ray_direction, - ray_tmax = in(reg) ray_tmax, - payload = in(reg) payload, - } - } - } -} - -bitflags::bitflags! { - /// Flags controlling the properties of an OpTraceRayKHR instruction. - /// Despite being a mask and allowing multiple bits to be combined, it is - /// invalid for more than one of these four bits to be set: `OPAQUE`, - /// `NO_OPAQUE`, `CULL_OPAQUE`, `CULL_NO_OPAQUE`, only one of - /// `CULL_BACK_FACING_TRIANGLES` and `CULL_FRONT_FACING_TRIANGLES` may - /// be set. - #[repr(transparent)] - #[cfg_attr(feature = "bytemuck", derive(bytemuck::Zeroable, bytemuck::Pod))] - pub struct RayFlags: u32 { - /// No flags specified. - const NONE = 0; - /// Force all intersections with the trace to be opaque. - const OPAQUE = 1; - /// Force all intersections with the trace to be non-opaque. - const NO_OPAQUE = 2; - /// Accept the first hit discovered. - const TERMINATE_ON_FIRST_HIT = 4; - /// Do not execute a closest hit shader. - const SKIP_CLOSEST_HIT_SHADER = 8; - /// Do not intersect with the back face of triangles. - const CULL_BACK_FACING_TRIANGLES = 16; - /// Do not intersect with the front face of triangles. - const CULL_FRONT_FACING_TRIANGLES = 32; - /// Do not intersect with opaque geometry. - const CULL_OPAQUE = 64; - /// Do not intersect with non-opaque geometry. - const CULL_NO_OPAQUE = 128; - /// Do not intersect with any triangle geometries. - const SKIP_TRIANGLES = 256; - /// Do not intersect with any AABB (Axis Aligned Bounding Box) geometries. - const SKIP_AABBS = 512; - } -} +use glam::{Vec2, Vec3}; /// Describes the type of the intersection which is currently the candidate in a ray query, /// returned by [`RayQuery::get_candidate_intersection_type`]. @@ -357,6 +193,7 @@ impl RayQuery { result = out(reg) result, } + #[allow(clippy::match_same_arms)] match result { 0 => CandidateIntersection::Triangle, 1 => CandidateIntersection::AABB, @@ -381,6 +218,7 @@ impl RayQuery { result = out(reg) result, } + #[allow(clippy::match_same_arms)] match result { 0 => CommittedIntersection::None, 1 => CommittedIntersection::Triangle, diff --git a/crates/spirv-std/src/scalar_or_vector.rs b/crates/spirv-std/src/scalar_or_vector.rs index 43ad56d455b..c4fe867c7cf 100644 --- a/crates/spirv-std/src/scalar_or_vector.rs +++ b/crates/spirv-std/src/scalar_or_vector.rs @@ -43,7 +43,7 @@ pub unsafe trait ScalarOrVector: ScalarComposite + Default { /// features on the [`num_enum`] crate, or it won't compile on SPIR-V. /// /// [`Integer`]: crate::Integer -/// [safe subgroup operations]: crate::arch::subgroup_shuffle +/// [safe subgroup operations]: crate::subgroup::subgroup_shuffle /// [`FromPrimitive`]: https://docs.rs/num_enum/latest/num_enum/derive.FromPrimitive.html /// [`IntoPrimitive`]: https://docs.rs/num_enum/latest/num_enum/derive.IntoPrimitive.html /// [`num_enum`]: https://crates.io/crates/num_enum diff --git a/crates/spirv-std/src/shader_clock.rs b/crates/spirv-std/src/shader_clock.rs new file mode 100644 index 00000000000..fdfa99334c4 --- /dev/null +++ b/crates/spirv-std/src/shader_clock.rs @@ -0,0 +1,55 @@ +//! Intrinsics for reading the shader clock. +//! +//! GLSL: [`GL_EXT_shader_realtime_clock`](https://github.com/KhronosGroup/GLSL/blob/main/extensions/ext/GL_EXT_shader_realtime_clock.txt) +//! SPIRV: [`SPV_KHR_shader_clock`](https://github.khronos.org/SPIRV-Registry/extensions/KHR/SPV_KHR_shader_clock.html) + +#[cfg(target_arch = "spirv")] +use crate::memory::Scope; +#[cfg(target_arch = "spirv")] +use core::arch::asm; +use glam::UVec2; + +/// The [`read_clock`] function returns a 64-bit value representing a real-time clock that is globally coherent by +/// all invocations on the GPU. See [`read_clock_uvec2`] for a variant that doesn't require 64-bit support. +/// +/// The units of time are not defined for either of these operations and will wrap after exceeding the maximum value +/// representable in 64 bits. These functions serve as code motion barriers. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpReadClockKHR")] +pub fn read_clock() -> u64 { + unsafe { + let mut result = Default::default(); + asm! { + "%uint = OpTypeInt 32 0", + "%scope = OpConstant %uint {scope}", + "%result = OpReadClockKHR typeof*{result} %scope", + "OpStore {result} %result", + result = in(reg) &mut result, + scope = const (Scope::Device as u32), + }; + result + } +} + +/// [`read_clock_uvec2`] returns the same value encoded as a two-component vector of 32-bit unsigned integers with the +/// first component containing the 32 least significant bits and the second component containing the 32 most significant +/// bits. See [`read_clock`] for a variant that returns a single `u64`. +/// +/// The units of time are not defined for either of these operations and will wrap after exceeding the maximum value +/// representable in 64 bits. These functions serve as code motion barriers. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpReadClockKHR")] +pub fn read_clock_uvec2() -> UVec2 { + unsafe { + let mut result = Default::default(); + asm! { + "%uint = OpTypeInt 32 0", + "%scope = OpConstant %uint {scope}", + "%result = OpReadClockKHR typeof*{result} %scope", + "OpStore {result} %result", + result = in(reg) &mut result, + scope = const (Scope::Device as u32), + }; + result + } +} diff --git a/crates/spirv-std/src/arch/subgroup.rs b/crates/spirv-std/src/subgroup.rs similarity index 98% rename from crates/spirv-std/src/arch/subgroup.rs rename to crates/spirv-std/src/subgroup.rs index 6b92b992592..e55406947d6 100644 --- a/crates/spirv-std/src/arch/subgroup.rs +++ b/crates/spirv-std/src/subgroup.rs @@ -1,10 +1,26 @@ +//! Intrinsics for `subgroup` operations. +//! +//! The glsl equivalents are `subgroup*()` functions, see [`GL_KHR_shader_subgroup`]. Most of these translate to the +//! SPIR-V [Non-Uniform Instructions], which have an opname starting with `OpGroupNonUniform*`. There's also some +//! barrier operations and built-in input variables exposed in this module, similarly to glsl. +//! +//! Not to be confused with the [Group and Subgroup Instructions] starting with `OpGroup*`, which are unavailable in +//! vulkan with many ops still undocumented. It seems to have fallen out of favor, never gaining glsl adoption, so +//! we're only exposing the non-uniform variants. +//! +//! [`GL_KHR_shader_subgroup`]: https://github.com/KhronosGroup/GLSL/blob/main/extensions/khr/GL_KHR_shader_subgroup.txt +//! [Non-Uniform Instructions]: https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_non_uniform_instructions +//! [Group and Subgroup Instructions]: https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_group_and_subgroup_instructions + #[cfg(target_arch = "spirv")] use crate::ScalarOrVectorTransform; #[cfg(target_arch = "spirv")] -use crate::arch::{asm, barrier}; +use crate::barrier::{control_barrier, memory_barrier}; #[cfg(target_arch = "spirv")] use crate::memory::{Scope, Semantics}; use crate::{Float, Integer, ScalarComposite, ScalarOrVector, SignedInteger, UnsignedInteger}; +#[cfg(target_arch = "spirv")] +use core::arch::asm; #[cfg(target_arch = "spirv")] const SUBGROUP: u32 = Scope::Subgroup as u32; @@ -59,7 +75,7 @@ pub enum GroupOperation { #[doc(alias = "subgroupBarrier")] #[inline] pub fn subgroup_barrier() { - barrier::control_barrier::< + control_barrier::< SUBGROUP, SUBGROUP, { @@ -80,7 +96,7 @@ pub fn subgroup_barrier() { #[doc(alias = "subgroupMemoryBarrier")] #[inline] pub fn subgroup_memory_barrier() { - barrier::memory_barrier::< + memory_barrier::< SUBGROUP, { Semantics::ACQUIRE_RELEASE.bits() @@ -100,7 +116,7 @@ pub fn subgroup_memory_barrier() { #[doc(alias = "subgroupMemoryBarrierBuffer")] #[inline] pub fn subgroup_memory_barrier_buffer() { - barrier::memory_barrier::< + memory_barrier::< SUBGROUP, { Semantics::ACQUIRE_RELEASE.bits() | Semantics::UNIFORM_MEMORY.bits() }, >(); @@ -117,7 +133,7 @@ pub fn subgroup_memory_barrier_buffer() { #[doc(alias = "subgroupMemoryBarrierShared")] #[inline] pub fn subgroup_memory_barrier_shared() { - barrier::memory_barrier::< + memory_barrier::< SUBGROUP, { Semantics::ACQUIRE_RELEASE.bits() | Semantics::WORKGROUP_MEMORY.bits() }, >(); @@ -132,7 +148,7 @@ pub fn subgroup_memory_barrier_shared() { #[doc(alias = "subgroupMemoryBarrierImage")] #[inline] pub fn subgroup_memory_barrier_image() { - barrier::memory_barrier::< + memory_barrier::< SUBGROUP, { Semantics::ACQUIRE_RELEASE.bits() | Semantics::IMAGE_MEMORY.bits() }, >(); diff --git a/crates/spirv-std/src/arch/mesh_shading.rs b/crates/spirv-std/src/task.rs similarity index 76% rename from crates/spirv-std/src/arch/mesh_shading.rs rename to crates/spirv-std/src/task.rs index c9fadf118a6..f6c05c0afaa 100644 --- a/crates/spirv-std/src/arch/mesh_shading.rs +++ b/crates/spirv-std/src/task.rs @@ -1,40 +1,8 @@ +//! Intrinsics for task shaders + #[cfg(target_arch = "spirv")] use core::arch::asm; -/// Sets the actual output size of the primitives and vertices that the mesh shader -/// workgroup will emit upon completion. -/// -/// 'Vertex Count' must be a 32-bit unsigned integer value. -/// It defines the array size of per-vertex outputs. -/// -/// 'Primitive Count' must a 32-bit unsigned integer value. -/// It defines the array size of per-primitive outputs. -/// -/// The arguments are taken from the first invocation in each workgroup. -/// Any invocation must execute this instruction no more than once and under -/// uniform control flow. -/// There must not be any control flow path to an output write that is not preceded -/// by this instruction. -/// -/// This instruction is only valid in the *`MeshEXT`* Execution Model. -/// -/// # Safety -/// * Must be called **exactly once** in mesh shaders -/// * Must be called in uniform control flow -/// * Must not write any output before this instruction in invoked -#[spirv_std_macros::gpu_only] -#[doc(alias = "OpSetMeshOutputsEXT")] -#[inline] -pub unsafe fn set_mesh_outputs_ext(vertex_count: u32, primitive_count: u32) { - unsafe { - asm! { - "OpSetMeshOutputsEXT {vertex_count} {primitive_count}", - vertex_count = in(reg) vertex_count, - primitive_count = in(reg) primitive_count, - } - } -} - /// Defines the grid size of subsequent mesh shader workgroups to generate /// upon completion of the task shader workgroup. /// diff --git a/examples/shaders/reduce/src/lib.rs b/examples/shaders/reduce/src/lib.rs index a100ac5359a..dfe3bf48b39 100644 --- a/examples/shaders/reduce/src/lib.rs +++ b/examples/shaders/reduce/src/lib.rs @@ -54,7 +54,7 @@ pub fn main( if subgroup_local_invocation_id == 0 { shared[subgroup_id as usize] = sum; } - spirv_std::arch::workgroup_memory_barrier_with_group_sync(); + spirv_std::barrier::workgroup_memory_barrier_with_group_sync(); let mut sum = 0; if subgroup_id == 0 { if subgroup_local_invocation_id < num_subgroups { diff --git a/tests/compiletests/ui/arch/all_memory_barrier.rs b/tests/compiletests/ui/arch/all_memory_barrier.rs index b3f6d2f374a..5bdf8fa6124 100644 --- a/tests/compiletests/ui/arch/all_memory_barrier.rs +++ b/tests/compiletests/ui/arch/all_memory_barrier.rs @@ -1,11 +1,12 @@ // build-pass // compile-flags: -C target-feature=+VulkanMemoryModelDeviceScopeKHR,+ext:SPV_KHR_vulkan_memory_model // compile-flags: -C llvm-args=--disassemble-fn=all_memory_barrier::all_memory_barrier +// normalize-stderr-test "OpLine .*\n" -> "" use spirv_std::spirv; unsafe fn all_memory_barrier() { - spirv_std::arch::all_memory_barrier(); + spirv_std::barrier::all_memory_barrier(); } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/all_memory_barrier.stderr b/tests/compiletests/ui/arch/all_memory_barrier.stderr index 852d6e5748b..f00aaed0fe1 100644 --- a/tests/compiletests/ui/arch/all_memory_barrier.stderr +++ b/tests/compiletests/ui/arch/all_memory_barrier.stderr @@ -1,6 +1,5 @@ %1 = OpFunction %2 None %3 %4 = OpLabel -OpLine %5 82 13 OpMemoryBarrier %6 %7 OpNoLine OpReturn diff --git a/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.rs b/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.rs index dc49dffd18f..bd4ad1d6514 100644 --- a/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.rs +++ b/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.rs @@ -1,11 +1,12 @@ // build-pass // compile-flags: -C target-feature=+VulkanMemoryModelDeviceScopeKHR,+ext:SPV_KHR_vulkan_memory_model // compile-flags: -C llvm-args=--disassemble-fn=all_memory_barrier_with_group_sync::all_memory_barrier_with_group_sync +// normalize-stderr-test "OpLine .*\n" -> "" use spirv_std::spirv; unsafe fn all_memory_barrier_with_group_sync() { - spirv_std::arch::all_memory_barrier_with_group_sync(); + spirv_std::barrier::all_memory_barrier_with_group_sync(); } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.stderr b/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.stderr index e84b4d58a5b..ab5bc18f928 100644 --- a/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.stderr +++ b/tests/compiletests/ui/arch/all_memory_barrier_with_group_sync.stderr @@ -1,6 +1,5 @@ %1 = OpFunction %2 None %3 %4 = OpLabel -OpLine %5 47 13 OpControlBarrier %6 %7 %8 OpNoLine OpReturn diff --git a/tests/compiletests/ui/arch/atomic_i_increment.rs b/tests/compiletests/ui/arch/atomic_i_increment.rs index d4dd7482c24..d68b40af584 100644 --- a/tests/compiletests/ui/arch/atomic_i_increment.rs +++ b/tests/compiletests/ui/arch/atomic_i_increment.rs @@ -8,7 +8,7 @@ pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &m let reference = unsafe { buffer.index_unchecked_mut(0) }; let old = unsafe { - spirv_std::arch::atomic_i_increment::< + spirv_std::atomic::atomic_i_increment::< _, { spirv_std::memory::Scope::Workgroup as u32 }, { spirv_std::memory::Semantics::NONE.bits() as u32 }, diff --git a/tests/compiletests/ui/arch/control_barrier.rs b/tests/compiletests/ui/arch/control_barrier.rs index 4947f4f19ec..c23fb86c183 100644 --- a/tests/compiletests/ui/arch/control_barrier.rs +++ b/tests/compiletests/ui/arch/control_barrier.rs @@ -9,7 +9,7 @@ use spirv_std::spirv; #[spirv(fragment)] pub fn main() { unsafe { - spirv_std::arch::control_barrier::< + spirv_std::barrier::control_barrier::< { Scope::Subgroup as u32 }, { Scope::Subgroup as u32 }, { Semantics::NONE.bits() }, diff --git a/tests/compiletests/ui/arch/device_memory_barrier.rs b/tests/compiletests/ui/arch/device_memory_barrier.rs index e43db6d777c..47ff0e12f2e 100644 --- a/tests/compiletests/ui/arch/device_memory_barrier.rs +++ b/tests/compiletests/ui/arch/device_memory_barrier.rs @@ -1,11 +1,12 @@ // build-pass // compile-flags: -C target-feature=+VulkanMemoryModelDeviceScopeKHR,+ext:SPV_KHR_vulkan_memory_model // compile-flags: -C llvm-args=--disassemble-fn=device_memory_barrier::device_memory_barrier +// normalize-stderr-test "OpLine .*\n" -> "" use spirv_std::spirv; unsafe fn device_memory_barrier() { - spirv_std::arch::device_memory_barrier(); + spirv_std::barrier::device_memory_barrier(); } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/device_memory_barrier.stderr b/tests/compiletests/ui/arch/device_memory_barrier.stderr index 852d6e5748b..f00aaed0fe1 100644 --- a/tests/compiletests/ui/arch/device_memory_barrier.stderr +++ b/tests/compiletests/ui/arch/device_memory_barrier.stderr @@ -1,6 +1,5 @@ %1 = OpFunction %2 None %3 %4 = OpLabel -OpLine %5 82 13 OpMemoryBarrier %6 %7 OpNoLine OpReturn diff --git a/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.rs b/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.rs index 294dc458700..8e9b74eb71c 100644 --- a/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.rs +++ b/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.rs @@ -1,11 +1,12 @@ // build-pass // compile-flags: -C target-feature=+VulkanMemoryModelDeviceScopeKHR,+ext:SPV_KHR_vulkan_memory_model // compile-flags: -C llvm-args=--disassemble-fn=device_memory_barrier_with_group_sync::device_memory_barrier_with_group_sync +// normalize-stderr-test "OpLine .*\n" -> "" use spirv_std::spirv; unsafe fn device_memory_barrier_with_group_sync() { - spirv_std::arch::device_memory_barrier_with_group_sync(); + spirv_std::barrier::device_memory_barrier_with_group_sync(); } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.stderr b/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.stderr index e84b4d58a5b..ab5bc18f928 100644 --- a/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.stderr +++ b/tests/compiletests/ui/arch/device_memory_barrier_with_group_sync.stderr @@ -1,6 +1,5 @@ %1 = OpFunction %2 None %3 %4 = OpLabel -OpLine %5 47 13 OpControlBarrier %6 %7 %8 OpNoLine OpReturn diff --git a/tests/compiletests/ui/arch/memory_barrier.rs b/tests/compiletests/ui/arch/memory_barrier.rs index 3c6033b910f..3f966e5f99e 100644 --- a/tests/compiletests/ui/arch/memory_barrier.rs +++ b/tests/compiletests/ui/arch/memory_barrier.rs @@ -9,7 +9,7 @@ use spirv_std::spirv; #[spirv(fragment)] pub fn main() { unsafe { - spirv_std::arch::memory_barrier::< + spirv_std::barrier::memory_barrier::< { Scope::Subgroup as u32 }, { Semantics::ACQUIRE_RELEASE.bits() | Semantics::UNIFORM_MEMORY.bits() }, >(); diff --git a/tests/compiletests/ui/arch/read_clock_khr.rs b/tests/compiletests/ui/arch/read_clock_khr.rs index 5222d57fa85..c11183d7e3a 100644 --- a/tests/compiletests/ui/arch/read_clock_khr.rs +++ b/tests/compiletests/ui/arch/read_clock_khr.rs @@ -4,13 +4,15 @@ use glam::UVec2; use spirv_std::spirv; use spirv_std::{ - arch::{read_clock_khr, read_clock_uvec2_khr}, memory::Scope, + shader_clock::{read_clock, read_clock_uvec2}, }; #[spirv(fragment)] -pub fn main() { - let clock_time = unsafe { read_clock_khr::<{ Scope::Subgroup as u32 }>() }; - - let clock_time_uvec2: UVec2 = unsafe { read_clock_uvec2_khr::<{ Scope::Subgroup as u32 }>() }; +pub fn main(out: &mut u32) { + unsafe { + let clock_time: u64 = read_clock(); + let clock_time_uvec2: UVec2 = read_clock_uvec2(); + *out = clock_time as u32 + clock_time_uvec2.x; + } } diff --git a/tests/compiletests/ui/arch/shared/dce_shared.rs b/tests/compiletests/ui/arch/shared/dce_shared.rs index f06aa6bbcc3..1c8ae21187f 100644 --- a/tests/compiletests/ui/arch/shared/dce_shared.rs +++ b/tests/compiletests/ui/arch/shared/dce_shared.rs @@ -11,7 +11,7 @@ // ignore-vulkan1.0 // ignore-vulkan1.1 -use spirv_std::arch::workgroup_memory_barrier_with_group_sync; +use spirv_std::barrier::workgroup_memory_barrier_with_group_sync; use spirv_std::glam::*; use spirv_std::spirv; diff --git a/tests/compiletests/ui/arch/shared/reduction_array.rs b/tests/compiletests/ui/arch/shared/reduction_array.rs index a9a4238abb7..f863cdcb89b 100644 --- a/tests/compiletests/ui/arch/shared/reduction_array.rs +++ b/tests/compiletests/ui/arch/shared/reduction_array.rs @@ -5,7 +5,7 @@ // ignore-vulkan1.0 use core::ops::{Add, AddAssign, Deref, DerefMut}; -use spirv_std::arch::workgroup_memory_barrier_with_group_sync; +use spirv_std::barrier::workgroup_memory_barrier_with_group_sync; use spirv_std::glam::*; use spirv_std::spirv; diff --git a/tests/compiletests/ui/arch/shared/reduction_big_struct.rs b/tests/compiletests/ui/arch/shared/reduction_big_struct.rs index 5e651cfb9dc..9d1655511d3 100644 --- a/tests/compiletests/ui/arch/shared/reduction_big_struct.rs +++ b/tests/compiletests/ui/arch/shared/reduction_big_struct.rs @@ -5,7 +5,7 @@ // ignore-vulkan1.0 use core::ops::{Add, AddAssign}; -use spirv_std::arch::workgroup_memory_barrier_with_group_sync; +use spirv_std::barrier::workgroup_memory_barrier_with_group_sync; use spirv_std::glam::*; use spirv_std::spirv; diff --git a/tests/compiletests/ui/arch/shared/reduction_u32.rs b/tests/compiletests/ui/arch/shared/reduction_u32.rs index 7e114bb0935..6de91035588 100644 --- a/tests/compiletests/ui/arch/shared/reduction_u32.rs +++ b/tests/compiletests/ui/arch/shared/reduction_u32.rs @@ -4,7 +4,7 @@ // ignore-spv1.2 // ignore-vulkan1.0 -use spirv_std::arch::workgroup_memory_barrier_with_group_sync; +use spirv_std::barrier::workgroup_memory_barrier_with_group_sync; use spirv_std::glam::*; use spirv_std::spirv; diff --git a/tests/compiletests/ui/arch/shared/reduction_vec.rs b/tests/compiletests/ui/arch/shared/reduction_vec.rs index 10f851268d1..d01fe4fb9e9 100644 --- a/tests/compiletests/ui/arch/shared/reduction_vec.rs +++ b/tests/compiletests/ui/arch/shared/reduction_vec.rs @@ -4,7 +4,7 @@ // ignore-spv1.2 // ignore-vulkan1.0 -use spirv_std::arch::workgroup_memory_barrier_with_group_sync; +use spirv_std::barrier::workgroup_memory_barrier_with_group_sync; use spirv_std::glam::*; use spirv_std::spirv; diff --git a/tests/compiletests/ui/arch/workgroup_memory_barrier.rs b/tests/compiletests/ui/arch/workgroup_memory_barrier.rs index 1a4b6de6685..73f24dcff19 100644 --- a/tests/compiletests/ui/arch/workgroup_memory_barrier.rs +++ b/tests/compiletests/ui/arch/workgroup_memory_barrier.rs @@ -1,10 +1,11 @@ // build-pass // compile-flags: -C llvm-args=--disassemble-fn=workgroup_memory_barrier::workgroup_memory_barrier +// normalize-stderr-test "OpLine .*\n" -> "" use spirv_std::spirv; unsafe fn workgroup_memory_barrier() { - spirv_std::arch::workgroup_memory_barrier(); + spirv_std::barrier::workgroup_memory_barrier(); } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/workgroup_memory_barrier.stderr b/tests/compiletests/ui/arch/workgroup_memory_barrier.stderr index 852d6e5748b..f00aaed0fe1 100644 --- a/tests/compiletests/ui/arch/workgroup_memory_barrier.stderr +++ b/tests/compiletests/ui/arch/workgroup_memory_barrier.stderr @@ -1,6 +1,5 @@ %1 = OpFunction %2 None %3 %4 = OpLabel -OpLine %5 82 13 OpMemoryBarrier %6 %7 OpNoLine OpReturn diff --git a/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.rs b/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.rs index 125df880d65..d3c0a0c7d39 100644 --- a/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.rs +++ b/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.rs @@ -1,10 +1,11 @@ // build-pass // compile-flags: -C llvm-args=--disassemble-fn=workgroup_memory_barrier_with_group_sync::workgroup_memory_barrier_with_group_sync +// normalize-stderr-test "OpLine .*\n" -> "" use spirv_std::spirv; unsafe fn workgroup_memory_barrier_with_group_sync() { - spirv_std::arch::workgroup_memory_barrier_with_group_sync(); + spirv_std::barrier::workgroup_memory_barrier_with_group_sync(); } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.stderr b/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.stderr index 684400ba6fc..943857f0ee4 100644 --- a/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.stderr +++ b/tests/compiletests/ui/arch/workgroup_memory_barrier_with_group_sync.stderr @@ -1,6 +1,5 @@ %1 = OpFunction %2 None %3 %4 = OpLabel -OpLine %5 47 13 OpControlBarrier %6 %6 %7 OpNoLine OpReturn diff --git a/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.rs b/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.rs index 981d271e251..ce9dcc6345a 100644 --- a/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.rs +++ b/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.rs @@ -18,7 +18,7 @@ use spirv_std::glam::*; use spirv_std::spirv; pub fn main() { - spirv_std::arch::kill() + spirv_std::fragment::kill() } pub fn entry() { diff --git a/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.stderr b/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.stderr index ffd9f209899..ec77eb5746e 100644 --- a/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.stderr +++ b/tests/compiletests/ui/entry/asm/entry_fragment_global_asm.stderr @@ -4,7 +4,7 @@ OpEntryPoint Fragment %1 "main" OpExecutionMode %1 OriginUpperLeft OpName %1 "entry_fragment_global_asm::entry" OpName %3 "entry_fragment_global_asm::main" -OpName %4 "spirv_std::arch::kill" +OpName %4 "spirv_std::fragment::kill" %5 = OpTypeVoid %6 = OpTypeFunction %5 %1 = OpFunction %5 None %6 diff --git a/tests/compiletests/ui/entry/asm/entry_fragment_reference.rs b/tests/compiletests/ui/entry/asm/entry_fragment_reference.rs index e4bb8593fa2..72a74d5d25f 100644 --- a/tests/compiletests/ui/entry/asm/entry_fragment_reference.rs +++ b/tests/compiletests/ui/entry/asm/entry_fragment_reference.rs @@ -18,5 +18,5 @@ use spirv_std::spirv; #[spirv(fragment)] pub fn main() { - spirv_std::arch::kill() + spirv_std::fragment::kill() } diff --git a/tests/compiletests/ui/entry/asm/entry_fragment_reference.stderr b/tests/compiletests/ui/entry/asm/entry_fragment_reference.stderr index d33c00a7b13..06daf818d04 100644 --- a/tests/compiletests/ui/entry/asm/entry_fragment_reference.stderr +++ b/tests/compiletests/ui/entry/asm/entry_fragment_reference.stderr @@ -3,7 +3,7 @@ OpMemoryModel Logical Simple OpEntryPoint Fragment %1 "main" OpExecutionMode %1 OriginUpperLeft OpName %3 "entry_fragment_reference::main" -OpName %4 "spirv_std::arch::kill" +OpName %4 "spirv_std::fragment::kill" %5 = OpTypeVoid %6 = OpTypeFunction %5 %1 = OpFunction %5 None %6 diff --git a/tests/compiletests/ui/arch/demote_to_helper_invocation.rs b/tests/compiletests/ui/entry/fragment/demote_to_helper_invocation.rs similarity index 59% rename from tests/compiletests/ui/arch/demote_to_helper_invocation.rs rename to tests/compiletests/ui/entry/fragment/demote_to_helper_invocation.rs index 862b1f4a6b8..0bbf97b5871 100644 --- a/tests/compiletests/ui/arch/demote_to_helper_invocation.rs +++ b/tests/compiletests/ui/entry/fragment/demote_to_helper_invocation.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(fragment)] pub fn main() { - unsafe { spirv_std::arch::demote_to_helper_invocation() }; - assert!(spirv_std::arch::is_helper_invocation()); + unsafe { spirv_std::fragment::demote_to_helper_invocation() }; + assert!(spirv_std::fragment::is_helper_invocation()); } diff --git a/tests/compiletests/ui/arch/derivative.rs b/tests/compiletests/ui/entry/fragment/derivative.rs similarity index 87% rename from tests/compiletests/ui/arch/derivative.rs rename to tests/compiletests/ui/entry/fragment/derivative.rs index 06b63ab154d..c74ab949059 100644 --- a/tests/compiletests/ui/arch/derivative.rs +++ b/tests/compiletests/ui/entry/fragment/derivative.rs @@ -1,7 +1,7 @@ // build-pass // compile-flags: -C llvm-args=--disassemble-fn=derivative::derivative -use spirv_std::arch::Derivative; +use spirv_std::fragment::Derivative; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/derivative.stderr b/tests/compiletests/ui/entry/fragment/derivative.stderr similarity index 100% rename from tests/compiletests/ui/arch/derivative.stderr rename to tests/compiletests/ui/entry/fragment/derivative.stderr diff --git a/tests/compiletests/ui/arch/derivative_control.rs b/tests/compiletests/ui/entry/fragment/derivative_control.rs similarity index 92% rename from tests/compiletests/ui/arch/derivative_control.rs rename to tests/compiletests/ui/entry/fragment/derivative_control.rs index 3ff44dc4b42..f8cd36918d2 100644 --- a/tests/compiletests/ui/arch/derivative_control.rs +++ b/tests/compiletests/ui/entry/fragment/derivative_control.rs @@ -2,7 +2,7 @@ // compile-flags: -C target-feature=+DerivativeControl // compile-flags: -C llvm-args=--disassemble-fn=derivative_control::derivative -use spirv_std::arch::Derivative; +use spirv_std::fragment::Derivative; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/derivative_control.stderr b/tests/compiletests/ui/entry/fragment/derivative_control.stderr similarity index 100% rename from tests/compiletests/ui/arch/derivative_control.stderr rename to tests/compiletests/ui/entry/fragment/derivative_control.stderr diff --git a/tests/compiletests/ui/arch/kill.rs b/tests/compiletests/ui/entry/fragment/kill.rs similarity index 69% rename from tests/compiletests/ui/arch/kill.rs rename to tests/compiletests/ui/entry/fragment/kill.rs index 62b2c9b1c26..e075189815c 100644 --- a/tests/compiletests/ui/arch/kill.rs +++ b/tests/compiletests/ui/entry/fragment/kill.rs @@ -4,5 +4,5 @@ use spirv_std::spirv; #[spirv(fragment)] pub fn main() { - spirv_std::arch::kill(); + spirv_std::fragment::kill(); } diff --git a/tests/compiletests/ui/arch/emit_stream_vertex.rs b/tests/compiletests/ui/entry/geometry/emit_stream_vertex.rs similarity index 78% rename from tests/compiletests/ui/arch/emit_stream_vertex.rs rename to tests/compiletests/ui/entry/geometry/emit_stream_vertex.rs index 8f25b102d67..72e4df9fbcb 100644 --- a/tests/compiletests/ui/arch/emit_stream_vertex.rs +++ b/tests/compiletests/ui/entry/geometry/emit_stream_vertex.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(geometry(input_lines = 2, output_points = 2))] pub fn main() { unsafe { - spirv_std::arch::emit_stream_vertex::<2>(); + spirv_std::geometry::emit_stream_vertex::<2>(); }; } diff --git a/tests/compiletests/ui/arch/emit_vertex.rs b/tests/compiletests/ui/entry/geometry/emit_vertex.rs similarity index 80% rename from tests/compiletests/ui/arch/emit_vertex.rs rename to tests/compiletests/ui/entry/geometry/emit_vertex.rs index c8fa3fe7814..40e979d700a 100644 --- a/tests/compiletests/ui/arch/emit_vertex.rs +++ b/tests/compiletests/ui/entry/geometry/emit_vertex.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(geometry(input_lines = 2, output_points = 2))] pub fn main() { unsafe { - spirv_std::arch::emit_vertex(); + spirv_std::geometry::emit_vertex(); }; } diff --git a/tests/compiletests/ui/arch/end_primitive.rs b/tests/compiletests/ui/entry/geometry/end_primitive.rs similarity index 79% rename from tests/compiletests/ui/arch/end_primitive.rs rename to tests/compiletests/ui/entry/geometry/end_primitive.rs index 0749ecd1e21..d4d6afcd082 100644 --- a/tests/compiletests/ui/arch/end_primitive.rs +++ b/tests/compiletests/ui/entry/geometry/end_primitive.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(geometry(input_lines = 2, output_points = 2))] pub fn main() { unsafe { - spirv_std::arch::end_primitive(); + spirv_std::geometry::end_primitive(); }; } diff --git a/tests/compiletests/ui/arch/end_stream_primitive.rs b/tests/compiletests/ui/entry/geometry/end_stream_primitive.rs similarity index 77% rename from tests/compiletests/ui/arch/end_stream_primitive.rs rename to tests/compiletests/ui/entry/geometry/end_stream_primitive.rs index 96959840222..2df34a5879d 100644 --- a/tests/compiletests/ui/arch/end_stream_primitive.rs +++ b/tests/compiletests/ui/entry/geometry/end_stream_primitive.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(geometry(input_lines = 2, output_points = 2))] pub fn main() { unsafe { - spirv_std::arch::end_stream_primitive::<2>(); + spirv_std::geometry::end_stream_primitive::<2>(); }; } diff --git a/tests/compiletests/ui/entry/geometry/geometry_shader.rs b/tests/compiletests/ui/entry/geometry/geometry_shader.rs new file mode 100644 index 00000000000..4dd5f25cde6 --- /dev/null +++ b/tests/compiletests/ui/entry/geometry/geometry_shader.rs @@ -0,0 +1,32 @@ +// build-pass +// compile-flags: -Ctarget-feature=+Geometry +// compile-flags: -C llvm-args=--disassemble +// normalize-stderr-test "OpSource .*\n" -> "" +// normalize-stderr-test "OpLine .*\n" -> "" +// normalize-stderr-test "%\d+ = OpString .*\n" -> "" +// normalize-stderr-test "; .*\n" -> "" +// normalize-stderr-test "OpCapability VulkanMemoryModel\n" -> "" +// normalize-stderr-test "OpMemoryModel Logical Vulkan" -> "OpMemoryModel Logical Simple" +// ignore-spv1.0 +// ignore-spv1.1 +// ignore-spv1.2 +// ignore-spv1.3 +// ignore-vulkan1.0 +// ignore-vulkan1.1 + +use spirv_std::geometry::{emit_vertex, end_primitive}; +use spirv_std::glam::*; +use spirv_std::spirv; + +#[spirv(geometry(input_points = 2, output_triangle_strip = 1))] +pub fn main(#[spirv(position)] position_in: [Vec4; 2], #[spirv(position)] position_out: &mut Vec4) { + unsafe { + *position_out = position_in[0] + vec4(-0.1, 0.0, 0.0, 0.0); + emit_vertex(); + *position_out = position_in[1] + vec4(0.1, 0.0, 0.0, 0.0); + emit_vertex(); + *position_out = position_in[1] + vec4(0.0, 0.1, 0.0, 0.0); + emit_vertex(); + end_primitive(); + }; +} diff --git a/tests/compiletests/ui/entry/geometry/geometry_shader.stderr b/tests/compiletests/ui/entry/geometry/geometry_shader.stderr new file mode 100644 index 00000000000..06950b638a0 --- /dev/null +++ b/tests/compiletests/ui/entry/geometry/geometry_shader.stderr @@ -0,0 +1,51 @@ +OpCapability Shader +OpCapability Geometry +OpMemoryModel Logical Simple +OpEntryPoint Geometry %1 "main" %2 %3 +OpExecutionMode %1 InputPoints +OpExecutionMode %1 OutputTriangleStrip +OpName %2 "position_in" +OpName %3 "position_out" +OpDecorate %2 BuiltIn Position +OpDecorate %8 ArrayStride 16 +OpDecorate %3 BuiltIn Position +%9 = OpTypeFloat 32 +%10 = OpTypeVector %9 4 +%11 = OpTypeInt 32 0 +%12 = OpConstant %11 2 +%13 = OpTypeArray %10 %12 +%14 = OpTypePointer Input %13 +%15 = OpTypePointer Output %10 +%16 = OpTypeVoid +%17 = OpTypeFunction %16 +%2 = OpVariable %14 Input +%8 = OpTypeArray %10 %12 +%18 = OpConstant %9 -0.1 +%19 = OpConstant %9 0 +%3 = OpVariable %15 Output +%20 = OpConstant %9 0.1 +%1 = OpFunction %16 None %17 +%21 = OpLabel +%22 = OpLoad %13 %2 +%23 = OpCompositeExtract %10 %22 0 +%24 = OpCompositeExtract %10 %22 1 +%25 = OpCompositeConstruct %8 %23 %24 +%26 = OpCompositeExtract %10 %25 0 +%27 = OpCompositeConstruct %10 %18 %19 %19 %19 +%28 = OpFAdd %10 %26 %27 +OpStore %3 %28 +OpEmitVertex +%29 = OpCompositeExtract %10 %25 1 +%30 = OpCompositeConstruct %10 %20 %19 %19 %19 +%31 = OpFAdd %10 %29 %30 +OpStore %3 %31 +OpEmitVertex +%32 = OpCompositeExtract %10 %25 1 +%33 = OpCompositeConstruct %10 %19 %20 %19 %19 +%34 = OpFAdd %10 %32 %33 +OpStore %3 %34 +OpEmitVertex +OpEndPrimitive +OpNoLine +OpReturn +OpFunctionEnd diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/array_f32.rs b/tests/compiletests/ui/entry/location_assignment/array_f32.rs similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/array_f32.rs rename to tests/compiletests/ui/entry/location_assignment/array_f32.rs diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/array_f32.stderr b/tests/compiletests/ui/entry/location_assignment/array_f32.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/array_f32.stderr rename to tests/compiletests/ui/entry/location_assignment/array_f32.stderr diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/explicit_overlap.rs b/tests/compiletests/ui/entry/location_assignment/explicit_overlap.rs similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/explicit_overlap.rs rename to tests/compiletests/ui/entry/location_assignment/explicit_overlap.rs diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/explicit_overlap.stderr b/tests/compiletests/ui/entry/location_assignment/explicit_overlap.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/explicit_overlap.stderr rename to tests/compiletests/ui/entry/location_assignment/explicit_overlap.stderr diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/explict.rs b/tests/compiletests/ui/entry/location_assignment/explict.rs similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/explict.rs rename to tests/compiletests/ui/entry/location_assignment/explict.rs diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/explict.stderr b/tests/compiletests/ui/entry/location_assignment/explict.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/explict.stderr rename to tests/compiletests/ui/entry/location_assignment/explict.stderr diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/geometry_shader.rs b/tests/compiletests/ui/entry/location_assignment/geometry_shader.rs similarity index 96% rename from tests/compiletests/ui/spirv-attr/location_assignment/geometry_shader.rs rename to tests/compiletests/ui/entry/location_assignment/geometry_shader.rs index cda93b86269..dab8e9c1ec8 100644 --- a/tests/compiletests/ui/spirv-attr/location_assignment/geometry_shader.rs +++ b/tests/compiletests/ui/entry/location_assignment/geometry_shader.rs @@ -14,7 +14,7 @@ // ignore-vulkan1.0 // ignore-vulkan1.1 -use spirv_std::arch::{emit_vertex, end_primitive}; +use spirv_std::geometry::{emit_vertex, end_primitive}; use spirv_std::glam::*; use spirv_std::spirv; diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/geometry_shader.stderr b/tests/compiletests/ui/entry/location_assignment/geometry_shader.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/geometry_shader.stderr rename to tests/compiletests/ui/entry/location_assignment/geometry_shader.stderr diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/many_f32_struct.rs b/tests/compiletests/ui/entry/location_assignment/many_f32_struct.rs similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/many_f32_struct.rs rename to tests/compiletests/ui/entry/location_assignment/many_f32_struct.rs diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/many_f32_struct.stderr b/tests/compiletests/ui/entry/location_assignment/many_f32_struct.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/many_f32_struct.stderr rename to tests/compiletests/ui/entry/location_assignment/many_f32_struct.stderr diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/mesh_shader.rs b/tests/compiletests/ui/entry/location_assignment/mesh_shader.rs similarity index 97% rename from tests/compiletests/ui/spirv-attr/location_assignment/mesh_shader.rs rename to tests/compiletests/ui/entry/location_assignment/mesh_shader.rs index 3c464be35f9..43124654510 100644 --- a/tests/compiletests/ui/spirv-attr/location_assignment/mesh_shader.rs +++ b/tests/compiletests/ui/entry/location_assignment/mesh_shader.rs @@ -14,8 +14,8 @@ // ignore-vulkan1.0 // ignore-vulkan1.1 -use spirv_std::arch::set_mesh_outputs_ext; use spirv_std::glam::{UVec3, Vec4}; +use spirv_std::mesh::set_mesh_outputs_ext; use spirv_std::spirv; #[spirv(mesh_ext( diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/mesh_shader.stderr b/tests/compiletests/ui/entry/location_assignment/mesh_shader.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/mesh_shader.stderr rename to tests/compiletests/ui/entry/location_assignment/mesh_shader.stderr diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/struct.rs b/tests/compiletests/ui/entry/location_assignment/struct.rs similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/struct.rs rename to tests/compiletests/ui/entry/location_assignment/struct.rs diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/struct.stderr b/tests/compiletests/ui/entry/location_assignment/struct.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/struct.stderr rename to tests/compiletests/ui/entry/location_assignment/struct.stderr diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/vec3_f32.rs b/tests/compiletests/ui/entry/location_assignment/vec3_f32.rs similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/vec3_f32.rs rename to tests/compiletests/ui/entry/location_assignment/vec3_f32.rs diff --git a/tests/compiletests/ui/spirv-attr/location_assignment/vec3_f32.stderr b/tests/compiletests/ui/entry/location_assignment/vec3_f32.stderr similarity index 100% rename from tests/compiletests/ui/spirv-attr/location_assignment/vec3_f32.stderr rename to tests/compiletests/ui/entry/location_assignment/vec3_f32.stderr diff --git a/tests/compiletests/ui/arch/mesh_shader_output_lines.rs b/tests/compiletests/ui/entry/mesh/mesh_shader_output_lines.rs similarity index 93% rename from tests/compiletests/ui/arch/mesh_shader_output_lines.rs rename to tests/compiletests/ui/entry/mesh/mesh_shader_output_lines.rs index e2e83694c12..07ff5968e83 100644 --- a/tests/compiletests/ui/arch/mesh_shader_output_lines.rs +++ b/tests/compiletests/ui/entry/mesh/mesh_shader_output_lines.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::set_mesh_outputs_ext; use spirv_std::glam::{UVec2, Vec4}; +use spirv_std::mesh::set_mesh_outputs_ext; use spirv_std::spirv; #[spirv(mesh_ext( diff --git a/tests/compiletests/ui/arch/mesh_shader_output_points.rs b/tests/compiletests/ui/entry/mesh/mesh_shader_output_points.rs similarity index 92% rename from tests/compiletests/ui/arch/mesh_shader_output_points.rs rename to tests/compiletests/ui/entry/mesh/mesh_shader_output_points.rs index 1cc7662ca97..f588a386e51 100644 --- a/tests/compiletests/ui/arch/mesh_shader_output_points.rs +++ b/tests/compiletests/ui/entry/mesh/mesh_shader_output_points.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::set_mesh_outputs_ext; use spirv_std::glam::{UVec2, Vec4}; +use spirv_std::mesh::set_mesh_outputs_ext; use spirv_std::spirv; #[spirv(mesh_ext( diff --git a/tests/compiletests/ui/arch/mesh_shader_output_triangles.rs b/tests/compiletests/ui/entry/mesh/mesh_shader_output_triangles.rs similarity index 94% rename from tests/compiletests/ui/arch/mesh_shader_output_triangles.rs rename to tests/compiletests/ui/entry/mesh/mesh_shader_output_triangles.rs index 289f1faf62d..d6f9b4af9ca 100644 --- a/tests/compiletests/ui/arch/mesh_shader_output_triangles.rs +++ b/tests/compiletests/ui/entry/mesh/mesh_shader_output_triangles.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::set_mesh_outputs_ext; use spirv_std::glam::{UVec3, Vec4}; +use spirv_std::mesh::set_mesh_outputs_ext; use spirv_std::spirv; #[spirv(mesh_ext( diff --git a/tests/compiletests/ui/arch/mesh_shader_payload.rs b/tests/compiletests/ui/entry/mesh/mesh_shader_payload.rs similarity index 95% rename from tests/compiletests/ui/arch/mesh_shader_payload.rs rename to tests/compiletests/ui/entry/mesh/mesh_shader_payload.rs index 3fdf11f683f..70092644544 100644 --- a/tests/compiletests/ui/arch/mesh_shader_payload.rs +++ b/tests/compiletests/ui/entry/mesh/mesh_shader_payload.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::set_mesh_outputs_ext; use spirv_std::glam::{UVec3, Vec4}; +use spirv_std::mesh::set_mesh_outputs_ext; use spirv_std::spirv; pub struct Payload { diff --git a/tests/compiletests/ui/arch/mesh_shader_per_primitive.rs b/tests/compiletests/ui/entry/mesh/mesh_shader_per_primitive.rs similarity index 95% rename from tests/compiletests/ui/arch/mesh_shader_per_primitive.rs rename to tests/compiletests/ui/entry/mesh/mesh_shader_per_primitive.rs index 29a060cbc0e..19369812477 100644 --- a/tests/compiletests/ui/arch/mesh_shader_per_primitive.rs +++ b/tests/compiletests/ui/entry/mesh/mesh_shader_per_primitive.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::set_mesh_outputs_ext; use spirv_std::glam::{UVec3, Vec4}; +use spirv_std::mesh::set_mesh_outputs_ext; use spirv_std::spirv; #[spirv(mesh_ext( diff --git a/tests/compiletests/ui/arch/convert_u_to_acceleration_structure_khr.rs b/tests/compiletests/ui/entry/ray_pipeline/convert_u_to_acceleration_structure_khr.rs similarity index 69% rename from tests/compiletests/ui/arch/convert_u_to_acceleration_structure_khr.rs rename to tests/compiletests/ui/entry/ray_pipeline/convert_u_to_acceleration_structure_khr.rs index 1a38c779801..9ddc98a5f78 100644 --- a/tests/compiletests/ui/arch/convert_u_to_acceleration_structure_khr.rs +++ b/tests/compiletests/ui/entry/ray_pipeline/convert_u_to_acceleration_structure_khr.rs @@ -1,16 +1,18 @@ // build-pass // compile-flags: -Ctarget-feature=+Int64,+RayTracingKHR,+ext:SPV_KHR_ray_tracing +use spirv_std::ray_tracing::AccelerationStructure; +use spirv_std::ray_tracing::ray_pipeline::trace_ray; use spirv_std::spirv; #[spirv(ray_generation)] pub fn main(#[spirv(ray_payload)] payload: &mut glam::Vec3) { unsafe { - let handle = spirv_std::ray_tracing::AccelerationStructure::from_u64(0xffff_ffff); - let handle2 = - spirv_std::ray_tracing::AccelerationStructure::from_vec(glam::UVec2::new(0, 0)); + let handle = AccelerationStructure::from_u64(0xffff_ffff); + let handle2 = AccelerationStructure::from_vec(glam::UVec2::new(0, 0)); - handle.trace_ray( + trace_ray( + handle, spirv_std::ray_tracing::RayFlags::NONE, 0, 0, @@ -23,7 +25,8 @@ pub fn main(#[spirv(ray_payload)] payload: &mut glam::Vec3) { payload, ); - handle2.trace_ray( + trace_ray( + handle2, spirv_std::ray_tracing::RayFlags::NONE, 0, 0, diff --git a/tests/compiletests/ui/arch/execute_callable.rs b/tests/compiletests/ui/entry/ray_pipeline/execute_callable.rs similarity index 81% rename from tests/compiletests/ui/arch/execute_callable.rs rename to tests/compiletests/ui/entry/ray_pipeline/execute_callable.rs index 41375a5153d..b7b646e8abc 100644 --- a/tests/compiletests/ui/arch/execute_callable.rs +++ b/tests/compiletests/ui/entry/ray_pipeline/execute_callable.rs @@ -10,6 +10,6 @@ pub fn main( #[spirv(callable_data)] payload: &glam::Vec3, ) { unsafe { - spirv_std::arch::execute_callable::<_, 5>(payload); + spirv_std::ray_tracing::ray_pipeline::execute_callable::<_, 5>(payload); } } diff --git a/tests/compiletests/ui/arch/ignore_intersection_khr.rs b/tests/compiletests/ui/entry/ray_pipeline/ignore_intersection_khr.rs similarity index 70% rename from tests/compiletests/ui/arch/ignore_intersection_khr.rs rename to tests/compiletests/ui/entry/ray_pipeline/ignore_intersection_khr.rs index c7c68f7fb19..977aef7b566 100644 --- a/tests/compiletests/ui/arch/ignore_intersection_khr.rs +++ b/tests/compiletests/ui/entry/ray_pipeline/ignore_intersection_khr.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(any_hit)] pub fn main() { unsafe { - spirv_std::arch::ignore_intersection(); + spirv_std::ray_tracing::ray_pipeline::ignore_intersection(); } } diff --git a/tests/compiletests/ui/arch/report_intersection_khr.rs b/tests/compiletests/ui/entry/ray_pipeline/report_intersection_khr.rs similarity index 69% rename from tests/compiletests/ui/arch/report_intersection_khr.rs rename to tests/compiletests/ui/entry/ray_pipeline/report_intersection_khr.rs index a7d3cca8c81..bf7599ba0b7 100644 --- a/tests/compiletests/ui/arch/report_intersection_khr.rs +++ b/tests/compiletests/ui/entry/ray_pipeline/report_intersection_khr.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(intersection)] pub fn main() { unsafe { - spirv_std::arch::report_intersection(2.0, 4); + spirv_std::ray_tracing::ray_pipeline::report_intersection(2.0, 4); } } diff --git a/tests/compiletests/ui/arch/terminate_ray_khr.rs b/tests/compiletests/ui/entry/ray_pipeline/terminate_ray_khr.rs similarity index 72% rename from tests/compiletests/ui/arch/terminate_ray_khr.rs rename to tests/compiletests/ui/entry/ray_pipeline/terminate_ray_khr.rs index 5d986dfa1c3..6174417f0f9 100644 --- a/tests/compiletests/ui/arch/terminate_ray_khr.rs +++ b/tests/compiletests/ui/entry/ray_pipeline/terminate_ray_khr.rs @@ -6,6 +6,6 @@ use spirv_std::spirv; #[spirv(any_hit)] pub fn main() { unsafe { - spirv_std::arch::terminate_ray(); + spirv_std::ray_tracing::ray_pipeline::terminate_ray(); } } diff --git a/tests/compiletests/ui/arch/trace_ray_khr.rs b/tests/compiletests/ui/entry/ray_pipeline/trace_ray_khr.rs similarity index 86% rename from tests/compiletests/ui/arch/trace_ray_khr.rs rename to tests/compiletests/ui/entry/ray_pipeline/trace_ray_khr.rs index f210a65c984..814ba58fa3e 100644 --- a/tests/compiletests/ui/arch/trace_ray_khr.rs +++ b/tests/compiletests/ui/entry/ray_pipeline/trace_ray_khr.rs @@ -10,7 +10,8 @@ pub fn main( #[spirv(ray_payload)] payload: &mut glam::Vec3, ) { unsafe { - acceleration_structure.trace_ray( + spirv_std::ray_tracing::ray_pipeline::trace_ray( + *acceleration_structure, spirv_std::ray_tracing::RayFlags::NONE, 0, 0, diff --git a/tests/compiletests/ui/arch/ray_query_confirm_intersection_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_confirm_intersection_khr.rs similarity index 80% rename from tests/compiletests/ui/arch/ray_query_confirm_intersection_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_confirm_intersection_khr.rs index d75c69878c4..328f8c3efcc 100644 --- a/tests/compiletests/ui/arch/ray_query_confirm_intersection_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_confirm_intersection_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_barycentrics_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_barycentrics_khr.rs similarity index 83% rename from tests/compiletests/ui/arch/ray_query_get_intersection_barycentrics_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_barycentrics_khr.rs index 4e859c6fea3..503ac547a76 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_barycentrics_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_barycentrics_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_candidate_aabb_opaque_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_candidate_aabb_opaque_khr.rs similarity index 79% rename from tests/compiletests/ui/arch/ray_query_get_intersection_candidate_aabb_opaque_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_candidate_aabb_opaque_khr.rs index 87376f005cd..afa85f3e9c4 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_candidate_aabb_opaque_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_candidate_aabb_opaque_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_front_face_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_front_face_khr.rs similarity index 82% rename from tests/compiletests/ui/arch/ray_query_get_intersection_front_face_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_front_face_khr.rs index ba6006988ee..fe69d094a78 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_front_face_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_front_face_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_geometry_index_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_geometry_index_khr.rs similarity index 82% rename from tests/compiletests/ui/arch/ray_query_get_intersection_geometry_index_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_geometry_index_khr.rs index 69323141d3b..46d969b57f3 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_geometry_index_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_geometry_index_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_instance_custom_index_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_instance_custom_index_khr.rs similarity index 82% rename from tests/compiletests/ui/arch/ray_query_get_intersection_instance_custom_index_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_instance_custom_index_khr.rs index 2dfc5bb17e6..347583548b8 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_instance_custom_index_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_instance_custom_index_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_instance_id_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_instance_id_khr.rs similarity index 82% rename from tests/compiletests/ui/arch/ray_query_get_intersection_instance_id_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_instance_id_khr.rs index 20b413deec2..acae66dd173 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_instance_id_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_instance_id_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_object_ray_direction_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_ray_direction_khr.rs similarity index 83% rename from tests/compiletests/ui/arch/ray_query_get_intersection_object_ray_direction_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_ray_direction_khr.rs index 177490b1b2a..06606f243a1 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_object_ray_direction_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_ray_direction_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_object_ray_origin_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_ray_origin_khr.rs similarity index 83% rename from tests/compiletests/ui/arch/ray_query_get_intersection_object_ray_origin_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_ray_origin_khr.rs index a0ea175b89e..b762717cf0e 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_object_ray_origin_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_ray_origin_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_object_to_world_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_to_world_khr.rs similarity index 81% rename from tests/compiletests/ui/arch/ray_query_get_intersection_object_to_world_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_to_world_khr.rs index 20b8fc5b2f5..a88f206c1ed 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_object_to_world_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_object_to_world_khr.rs @@ -2,8 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::matrix::Matrix4x3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, Matrix4x3, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_primitive_index_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_primitive_index_khr.rs similarity index 81% rename from tests/compiletests/ui/arch/ray_query_get_intersection_primitive_index_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_primitive_index_khr.rs index a4f9ab84cc2..51963e79e57 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_primitive_index_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_primitive_index_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_shader_binding_table_record_offset_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_shader_binding_table_record_offset_khr.rs similarity index 83% rename from tests/compiletests/ui/arch/ray_query_get_intersection_shader_binding_table_record_offset_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_shader_binding_table_record_offset_khr.rs index 159c4aa16d5..41fe177779a 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_shader_binding_table_record_offset_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_shader_binding_table_record_offset_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_t_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_t_khr.rs similarity index 81% rename from tests/compiletests/ui/arch/ray_query_get_intersection_t_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_t_khr.rs index 39cd3dde591..bce11d9cd8f 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_t_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_t_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_triangle_vertex_positions.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_triangle_vertex_positions.rs similarity index 88% rename from tests/compiletests/ui/arch/ray_query_get_intersection_triangle_vertex_positions.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_triangle_vertex_positions.rs index 669d92c6440..bf66c930b9e 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_triangle_vertex_positions.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_triangle_vertex_positions.rs @@ -3,7 +3,8 @@ // compile-flags: -Ctarget-feature=+RayQueryPositionFetchKHR,+ext:SPV_KHR_ray_tracing_position_fetch use glam::{Vec3, Vec4}; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_intersection_type_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_type_khr.rs similarity index 81% rename from tests/compiletests/ui/arch/ray_query_get_intersection_type_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_type_khr.rs index 39b848003e1..790123e7ba4 100644 --- a/tests/compiletests/ui/arch/ray_query_get_intersection_type_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_intersection_type_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_ray_flags_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_ray_flags_khr.rs similarity index 79% rename from tests/compiletests/ui/arch/ray_query_get_ray_flags_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_ray_flags_khr.rs index 816e808b93d..01d36069ce1 100644 --- a/tests/compiletests/ui/arch/ray_query_get_ray_flags_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_ray_flags_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_ray_t_min_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_ray_t_min_khr.rs similarity index 79% rename from tests/compiletests/ui/arch/ray_query_get_ray_t_min_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_ray_t_min_khr.rs index b5c0d82c3f4..86b272c0234 100644 --- a/tests/compiletests/ui/arch/ray_query_get_ray_t_min_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_ray_t_min_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_world_ray_direction_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_world_ray_direction_khr.rs similarity index 80% rename from tests/compiletests/ui/arch/ray_query_get_world_ray_direction_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_world_ray_direction_khr.rs index 1f579e38b53..04deb12f29b 100644 --- a/tests/compiletests/ui/arch/ray_query_get_world_ray_direction_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_world_ray_direction_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_get_world_ray_origin_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_get_world_ray_origin_khr.rs similarity index 80% rename from tests/compiletests/ui/arch/ray_query_get_world_ray_origin_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_get_world_ray_origin_khr.rs index f56a47e67b1..bad3ac0c794 100644 --- a/tests/compiletests/ui/arch/ray_query_get_world_ray_origin_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_get_world_ray_origin_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_initialize_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_initialize_khr.rs similarity index 85% rename from tests/compiletests/ui/arch/ray_query_initialize_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_initialize_khr.rs index ac2e5f0fab5..99f5bb5c035 100644 --- a/tests/compiletests/ui/arch/ray_query_initialize_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_initialize_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayTracingKHR,+RayQueryKHR,+ext:SPV_KHR_ray_tracing,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/ray_query_terminate_khr.rs b/tests/compiletests/ui/entry/ray_query/ray_query_terminate_khr.rs similarity index 80% rename from tests/compiletests/ui/arch/ray_query_terminate_khr.rs rename to tests/compiletests/ui/entry/ray_query/ray_query_terminate_khr.rs index 02c5b4fde65..82893b766d6 100644 --- a/tests/compiletests/ui/arch/ray_query_terminate_khr.rs +++ b/tests/compiletests/ui/entry/ray_query/ray_query_terminate_khr.rs @@ -2,7 +2,8 @@ // compile-flags: -Ctarget-feature=+RayQueryKHR,+ext:SPV_KHR_ray_query use glam::Vec3; -use spirv_std::ray_tracing::{AccelerationStructure, RayFlags, RayQuery}; +use spirv_std::ray_tracing::ray_query::RayQuery; +use spirv_std::ray_tracing::{AccelerationStructure, RayFlags}; use spirv_std::spirv; #[spirv(fragment)] diff --git a/tests/compiletests/ui/arch/task_shader.rs b/tests/compiletests/ui/entry/task/task_shader.rs similarity index 85% rename from tests/compiletests/ui/arch/task_shader.rs rename to tests/compiletests/ui/entry/task/task_shader.rs index ea23516869a..29b2a30fa35 100644 --- a/tests/compiletests/ui/arch/task_shader.rs +++ b/tests/compiletests/ui/entry/task/task_shader.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::emit_mesh_tasks_ext; use spirv_std::spirv; +use spirv_std::task::emit_mesh_tasks_ext; #[spirv(task_ext(threads(1)))] pub fn main() { diff --git a/tests/compiletests/ui/arch/task_shader_mispile.rs b/tests/compiletests/ui/entry/task/task_shader_mispile.rs similarity index 87% rename from tests/compiletests/ui/arch/task_shader_mispile.rs rename to tests/compiletests/ui/entry/task/task_shader_mispile.rs index ec012789f6b..31ec907f8f2 100644 --- a/tests/compiletests/ui/arch/task_shader_mispile.rs +++ b/tests/compiletests/ui/entry/task/task_shader_mispile.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::emit_mesh_tasks_ext; use spirv_std::spirv; +use spirv_std::task::emit_mesh_tasks_ext; #[spirv(task_ext(threads(1)))] pub fn main(#[spirv(push_constant)] push: &u32) { diff --git a/tests/compiletests/ui/arch/task_shader_payload.rs b/tests/compiletests/ui/entry/task/task_shader_payload.rs similarity index 89% rename from tests/compiletests/ui/arch/task_shader_payload.rs rename to tests/compiletests/ui/entry/task/task_shader_payload.rs index 30f72a094a2..76296337d56 100644 --- a/tests/compiletests/ui/arch/task_shader_payload.rs +++ b/tests/compiletests/ui/entry/task/task_shader_payload.rs @@ -2,8 +2,8 @@ // only-vulkan1.2 // compile-flags: -Ctarget-feature=+MeshShadingEXT,+ext:SPV_EXT_mesh_shader -use spirv_std::arch::emit_mesh_tasks_ext_payload; use spirv_std::spirv; +use spirv_std::task::emit_mesh_tasks_ext_payload; pub struct Payload { pub first: u32, diff --git a/tests/compiletests/ui/glam/offsets_vec3_vec3a.rs b/tests/compiletests/ui/glam/offsets_vec3_vec3a.rs index 6d1e56cf843..50b8849ec32 100644 --- a/tests/compiletests/ui/glam/offsets_vec3_vec3a.rs +++ b/tests/compiletests/ui/glam/offsets_vec3_vec3a.rs @@ -9,8 +9,8 @@ // ignore-vulkan1.0 // ignore-vulkan1.1 -use spirv_std::arch::subgroup_shuffle_up; use spirv_std::spirv; +use spirv_std::subgroup::subgroup_shuffle_up; #[repr(C)] #[derive(Copy, Clone, Default)] diff --git a/tests/compiletests/ui/lang/asm/fn_ptr_call_void.rs b/tests/compiletests/ui/lang/asm/fn_ptr_call_void.rs index 833819a13b6..01fac5f6340 100644 --- a/tests/compiletests/ui/lang/asm/fn_ptr_call_void.rs +++ b/tests/compiletests/ui/lang/asm/fn_ptr_call_void.rs @@ -18,7 +18,7 @@ use spirv_std::glam::*; use spirv_std::spirv; pub fn my_func() { - spirv_std::arch::kill() + spirv_std::fragment::kill() } #[spirv(fragment)] diff --git a/tests/compiletests/ui/lang/asm/fn_ptr_call_void.stderr b/tests/compiletests/ui/lang/asm/fn_ptr_call_void.stderr index 5c537c6915c..2c43a29f2ad 100644 --- a/tests/compiletests/ui/lang/asm/fn_ptr_call_void.stderr +++ b/tests/compiletests/ui/lang/asm/fn_ptr_call_void.stderr @@ -4,7 +4,7 @@ OpEntryPoint Fragment %1 "main" OpExecutionMode %1 OriginUpperLeft OpName %3 "fn_ptr_call_void::main" OpName %4 "fn_ptr_call_void::my_func" -OpName %5 "spirv_std::arch::kill" +OpName %5 "spirv_std::fragment::kill" %6 = OpTypeVoid %7 = OpTypeFunction %6 %1 = OpFunction %6 None %7 diff --git a/tests/compiletests/ui/lang/control_flow/closure_multi.rs b/tests/compiletests/ui/lang/control_flow/closure_multi.rs index 0bedf85361a..2f4a6c1858d 100644 --- a/tests/compiletests/ui/lang/control_flow/closure_multi.rs +++ b/tests/compiletests/ui/lang/control_flow/closure_multi.rs @@ -13,7 +13,7 @@ fn closure_user(ptr: &u32, xmax: u32, mut callback: F) { pub fn main(ptr: &mut u32) { closure_user(ptr, 10, |ptr, i| { if *ptr == i { - spirv_std::arch::kill(); + spirv_std::fragment::kill(); } }); } diff --git a/tests/compiletests/ui/spirv-attr/all-builtins.rs b/tests/compiletests/ui/spirv-attr/all-builtins.rs index 4f5475d9969..732ececc989 100644 --- a/tests/compiletests/ui/spirv-attr/all-builtins.rs +++ b/tests/compiletests/ui/spirv-attr/all-builtins.rs @@ -3,7 +3,7 @@ // compile-flags: -Ctarget-feature=+DeviceGroup,+DrawParameters,+FragmentBarycentricNV,+FragmentBarycentricKHR,+FragmentDensityEXT,+FragmentFullyCoveredEXT,+Geometry,+GroupNonUniform,+GroupNonUniformBallot,+MeshShadingNV,+MultiView,+MultiViewport,+RayTracingKHR,+SampleRateShading,+ShaderSMBuiltinsNV,+ShaderStereoViewNV,+StencilExportEXT,+Tessellation,+ext:SPV_AMD_shader_explicit_vertex_parameter,+ext:SPV_EXT_fragment_fully_covered,+ext:SPV_EXT_fragment_invocation_density,+ext:SPV_EXT_shader_stencil_export,+ext:SPV_KHR_ray_tracing,+ext:SPV_NV_fragment_shader_barycentric,+ext:SPV_NV_mesh_shader,+ext:SPV_NV_shader_sm_builtins,+ext:SPV_NV_stereo_view_rendering use spirv_std::glam::*; -use spirv_std::matrix::Matrix4x3; +use spirv_std::ray_tracing::Matrix4x3; use spirv_std::spirv; #[spirv(tessellation_control)] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_ballot.rs b/tests/compiletests/ui/subgroup/subgroup_ballot.rs similarity index 77% rename from tests/compiletests/ui/arch/subgroup/subgroup_ballot.rs rename to tests/compiletests/ui/subgroup/subgroup_ballot.rs index ce2acb18bcd..e245b2f6ebd 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_ballot.rs +++ b/tests/compiletests/ui/subgroup/subgroup_ballot.rs @@ -6,8 +6,8 @@ use spirv_std::spirv; unsafe fn subgroup_ballot(predicate: bool) -> bool { - let ballot = spirv_std::arch::subgroup_ballot(predicate); - spirv_std::arch::subgroup_inverse_ballot(ballot) + let ballot = spirv_std::subgroup::subgroup_ballot(predicate); + spirv_std::subgroup::subgroup_inverse_ballot(ballot) } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_ballot.stderr b/tests/compiletests/ui/subgroup/subgroup_ballot.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_ballot.stderr rename to tests/compiletests/ui/subgroup/subgroup_ballot.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_ballot_bit_count.rs b/tests/compiletests/ui/subgroup/subgroup_ballot_bit_count.rs similarity index 69% rename from tests/compiletests/ui/arch/subgroup/subgroup_ballot_bit_count.rs rename to tests/compiletests/ui/subgroup/subgroup_ballot_bit_count.rs index 8d624af138d..e85c260d887 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_ballot_bit_count.rs +++ b/tests/compiletests/ui/subgroup/subgroup_ballot_bit_count.rs @@ -3,16 +3,16 @@ // compile-flags: -C llvm-args=--disassemble-fn=subgroup_ballot_bit_count::subgroup_ballot_bit_count // normalize-stderr-test "OpLine .*\n" -> "" -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn subgroup_ballot_bit_count(ballot: SubgroupMask) -> u32 { - spirv_std::arch::subgroup_ballot_bit_count(ballot) + spirv_std::subgroup::subgroup_ballot_bit_count(ballot) } #[spirv(compute(threads(1, 1, 1)))] pub fn main() { unsafe { - subgroup_ballot_bit_count(spirv_std::arch::subgroup_ballot(true)); + subgroup_ballot_bit_count(spirv_std::subgroup::subgroup_ballot(true)); } } diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_ballot_bit_count.stderr b/tests/compiletests/ui/subgroup/subgroup_ballot_bit_count.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_ballot_bit_count.stderr rename to tests/compiletests/ui/subgroup/subgroup_ballot_bit_count.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast.rs b/tests/compiletests/ui/subgroup/subgroup_broadcast.rs similarity index 83% rename from tests/compiletests/ui/arch/subgroup/subgroup_broadcast.rs rename to tests/compiletests/ui/subgroup/subgroup_broadcast.rs index 4d65f6b294b..cbb6b24a2e2 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast.rs +++ b/tests/compiletests/ui/subgroup/subgroup_broadcast.rs @@ -10,11 +10,11 @@ // ignore-spv1.3 // ignore-spv1.4 -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn disassembly(value: i32, id: u32) -> i32 { - spirv_std::arch::subgroup_broadcast(value, id) + spirv_std::subgroup::subgroup_broadcast(value, id) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast.stderr b/tests/compiletests/ui/subgroup/subgroup_broadcast.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_broadcast.stderr rename to tests/compiletests/ui/subgroup/subgroup_broadcast.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast_const.rs b/tests/compiletests/ui/subgroup/subgroup_broadcast_const.rs similarity index 77% rename from tests/compiletests/ui/arch/subgroup/subgroup_broadcast_const.rs rename to tests/compiletests/ui/subgroup/subgroup_broadcast_const.rs index eb9a66dd3d9..c153542d3b9 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast_const.rs +++ b/tests/compiletests/ui/subgroup/subgroup_broadcast_const.rs @@ -3,11 +3,11 @@ // compile-flags: -C llvm-args=--disassemble-fn=subgroup_broadcast_const::disassembly // normalize-stderr-test "OpLine .*\n" -> "" -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn disassembly(value: i32) -> i32 { - spirv_std::arch::subgroup_broadcast_const::<_, 5>(value) + spirv_std::subgroup::subgroup_broadcast_const::<_, 5>(value) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast_const.stderr b/tests/compiletests/ui/subgroup/subgroup_broadcast_const.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_broadcast_const.stderr rename to tests/compiletests/ui/subgroup/subgroup_broadcast_const.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast_first.rs b/tests/compiletests/ui/subgroup/subgroup_broadcast_first.rs similarity index 88% rename from tests/compiletests/ui/arch/subgroup/subgroup_broadcast_first.rs rename to tests/compiletests/ui/subgroup/subgroup_broadcast_first.rs index 53efc5d0bea..4e9676b5d20 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast_first.rs +++ b/tests/compiletests/ui/subgroup/subgroup_broadcast_first.rs @@ -7,7 +7,7 @@ use glam::Vec3; use spirv_std::spirv; unsafe fn subgroup_broadcast_first(vec: Vec3) -> Vec3 { - spirv_std::arch::subgroup_broadcast_first::(vec) + spirv_std::subgroup::subgroup_broadcast_first::(vec) } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_broadcast_first.stderr b/tests/compiletests/ui/subgroup/subgroup_broadcast_first.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_broadcast_first.stderr rename to tests/compiletests/ui/subgroup/subgroup_broadcast_first.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_builtins.rs b/tests/compiletests/ui/subgroup/subgroup_builtins.rs similarity index 94% rename from tests/compiletests/ui/arch/subgroup/subgroup_builtins.rs rename to tests/compiletests/ui/subgroup/subgroup_builtins.rs index c7a4d1e8c44..620d9e798b6 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_builtins.rs +++ b/tests/compiletests/ui/subgroup/subgroup_builtins.rs @@ -1,8 +1,8 @@ // build-pass // compile-flags: -C target-feature=+GroupNonUniform,+GroupNonUniformBallot,+ext:SPV_KHR_vulkan_memory_model -use spirv_std::arch::SubgroupMask; use spirv_std::spirv; +use spirv_std::subgroup::SubgroupMask; #[spirv(compute(threads(1, 1, 1)))] pub fn main( diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_0_fail.rs b/tests/compiletests/ui/subgroup/subgroup_cluster_size_0_fail.rs similarity index 80% rename from tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_0_fail.rs rename to tests/compiletests/ui/subgroup/subgroup_cluster_size_0_fail.rs index 4fec2a3db51..0745f15e779 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_0_fail.rs +++ b/tests/compiletests/ui/subgroup/subgroup_cluster_size_0_fail.rs @@ -3,11 +3,11 @@ // normalize-stderr-test "\S*/crates/spirv-std/src/" -> "$$SPIRV_STD_SRC/" use glam::UVec3; -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn subgroup_test_fail(value: u32) -> u32 { - spirv_std::arch::subgroup_clustered_i_add::<0, _>(value) + spirv_std::subgroup::subgroup_clustered_i_add::<0, _>(value) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_0_fail.stderr b/tests/compiletests/ui/subgroup/subgroup_cluster_size_0_fail.stderr similarity index 82% rename from tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_0_fail.stderr rename to tests/compiletests/ui/subgroup/subgroup_cluster_size_0_fail.stderr index d5f06bdb4b2..84dd1ada535 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_0_fail.stderr +++ b/tests/compiletests/ui/subgroup/subgroup_cluster_size_0_fail.stderr @@ -1,5 +1,5 @@ error[E0080]: evaluation panicked: `ClusterSize` must be at least 1 - --> $SPIRV_STD_SRC/arch/subgroup.rs:937:1 + --> $SPIRV_STD_SRC/subgroup.rs:953:1 | LL | / macro_subgroup_op_clustered!(impl Integer, "OpGroupNonUniformIAdd", subgroup_clustered_i_add; r" LL | | An integer add group operation of all `value` operands contributed by active invocations in the group. @@ -8,12 +8,12 @@ LL | | Result Type must be a scalar or vector of integer type. ... | LL | | * `ClusterSize` must not be greater than the size of the group LL | | "); - | |__^ evaluation of `spirv_std::arch::subgroup_clustered_i_add::<0, u32, u32>::{constant#0}` failed here + | |__^ evaluation of `spirv_std::subgroup::subgroup_clustered_i_add::<0, u32, u32>::{constant#0}` failed here | = note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `macro_subgroup_op_clustered` (in Nightly builds, run with -Z macro-backtrace for more info) note: erroneous constant encountered - --> $SPIRV_STD_SRC/arch/subgroup.rs:937:1 + --> $SPIRV_STD_SRC/subgroup.rs:953:1 | LL | / macro_subgroup_op_clustered!(impl Integer, "OpGroupNonUniformIAdd", subgroup_clustered_i_add; r" LL | | An integer add group operation of all `value` operands contributed by active invocations in the group. @@ -26,11 +26,11 @@ LL | | "); | = note: this note originates in the macro `macro_subgroup_op_clustered` (in Nightly builds, run with -Z macro-backtrace for more info) -note: the above error was encountered while instantiating `fn spirv_std::arch::subgroup_clustered_i_add::<0, u32, u32>` +note: the above error was encountered while instantiating `fn spirv_std::subgroup::subgroup_clustered_i_add::<0, u32, u32>` --> $DIR/subgroup_cluster_size_0_fail.rs:10:5 | -LL | spirv_std::arch::subgroup_clustered_i_add::<0, _>(value) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | spirv_std::subgroup::subgroup_clustered_i_add::<0, _>(value) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 1 previous error diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_non_power_of_two_fail.rs b/tests/compiletests/ui/subgroup/subgroup_cluster_size_non_power_of_two_fail.rs similarity index 80% rename from tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_non_power_of_two_fail.rs rename to tests/compiletests/ui/subgroup/subgroup_cluster_size_non_power_of_two_fail.rs index 9184cc25b1b..95a1d33c61e 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_non_power_of_two_fail.rs +++ b/tests/compiletests/ui/subgroup/subgroup_cluster_size_non_power_of_two_fail.rs @@ -3,11 +3,11 @@ // normalize-stderr-test "\S*/crates/spirv-std/src/" -> "$$SPIRV_STD_SRC/" use glam::UVec3; -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn subgroup_test_fail(value: u32) -> u32 { - spirv_std::arch::subgroup_clustered_i_add::<5, _>(value) + spirv_std::subgroup::subgroup_clustered_i_add::<5, _>(value) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_non_power_of_two_fail.stderr b/tests/compiletests/ui/subgroup/subgroup_cluster_size_non_power_of_two_fail.stderr similarity index 82% rename from tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_non_power_of_two_fail.stderr rename to tests/compiletests/ui/subgroup/subgroup_cluster_size_non_power_of_two_fail.stderr index db300c3e121..85b0b407e0e 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_cluster_size_non_power_of_two_fail.stderr +++ b/tests/compiletests/ui/subgroup/subgroup_cluster_size_non_power_of_two_fail.stderr @@ -1,5 +1,5 @@ error[E0080]: evaluation panicked: `ClusterSize` must be a power of 2 - --> $SPIRV_STD_SRC/arch/subgroup.rs:937:1 + --> $SPIRV_STD_SRC/subgroup.rs:953:1 | LL | / macro_subgroup_op_clustered!(impl Integer, "OpGroupNonUniformIAdd", subgroup_clustered_i_add; r" LL | | An integer add group operation of all `value` operands contributed by active invocations in the group. @@ -8,12 +8,12 @@ LL | | Result Type must be a scalar or vector of integer type. ... | LL | | * `ClusterSize` must not be greater than the size of the group LL | | "); - | |__^ evaluation of `spirv_std::arch::subgroup_clustered_i_add::<5, u32, u32>::{constant#0}` failed here + | |__^ evaluation of `spirv_std::subgroup::subgroup_clustered_i_add::<5, u32, u32>::{constant#0}` failed here | = note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `macro_subgroup_op_clustered` (in Nightly builds, run with -Z macro-backtrace for more info) note: erroneous constant encountered - --> $SPIRV_STD_SRC/arch/subgroup.rs:937:1 + --> $SPIRV_STD_SRC/subgroup.rs:953:1 | LL | / macro_subgroup_op_clustered!(impl Integer, "OpGroupNonUniformIAdd", subgroup_clustered_i_add; r" LL | | An integer add group operation of all `value` operands contributed by active invocations in the group. @@ -26,11 +26,11 @@ LL | | "); | = note: this note originates in the macro `macro_subgroup_op_clustered` (in Nightly builds, run with -Z macro-backtrace for more info) -note: the above error was encountered while instantiating `fn spirv_std::arch::subgroup_clustered_i_add::<5, u32, u32>` +note: the above error was encountered while instantiating `fn spirv_std::subgroup::subgroup_clustered_i_add::<5, u32, u32>` --> $DIR/subgroup_cluster_size_non_power_of_two_fail.rs:10:5 | -LL | spirv_std::arch::subgroup_clustered_i_add::<5, _>(value) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | spirv_std::subgroup::subgroup_clustered_i_add::<5, _>(value) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 1 previous error diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite.rs b/tests/compiletests/ui/subgroup/subgroup_composite.rs similarity index 98% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite.rs rename to tests/compiletests/ui/subgroup/subgroup_composite.rs index 9dd1ae0827f..0af966dcbb8 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_composite.rs +++ b/tests/compiletests/ui/subgroup/subgroup_composite.rs @@ -11,8 +11,8 @@ use glam::*; use spirv_std::ScalarComposite; -use spirv_std::arch::*; use spirv_std::spirv; +use spirv_std::subgroup::*; #[derive(Copy, Clone, ScalarComposite)] pub struct MyStruct { diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_all_equals.rs b/tests/compiletests/ui/subgroup/subgroup_composite_all_equals.rs similarity index 97% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_all_equals.rs rename to tests/compiletests/ui/subgroup/subgroup_composite_all_equals.rs index 27c84ffaaf8..bb6757de9ac 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_composite_all_equals.rs +++ b/tests/compiletests/ui/subgroup/subgroup_composite_all_equals.rs @@ -5,8 +5,8 @@ use glam::*; use spirv_std::ScalarComposite; -use spirv_std::arch::*; use spirv_std::spirv; +use spirv_std::subgroup::*; #[derive(Copy, Clone, ScalarComposite)] pub struct MyStruct { diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_all_equals.stderr b/tests/compiletests/ui/subgroup/subgroup_composite_all_equals.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_all_equals.stderr rename to tests/compiletests/ui/subgroup/subgroup_composite_all_equals.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_enum.rs b/tests/compiletests/ui/subgroup/subgroup_composite_enum.rs similarity index 97% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_enum.rs rename to tests/compiletests/ui/subgroup/subgroup_composite_enum.rs index 113e0f40fac..d0134fd280b 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_composite_enum.rs +++ b/tests/compiletests/ui/subgroup/subgroup_composite_enum.rs @@ -5,8 +5,8 @@ use glam::*; use spirv_std::ScalarComposite; -use spirv_std::arch::*; use spirv_std::spirv; +use spirv_std::subgroup::*; #[repr(u32)] #[derive(Copy, Clone, Default, ScalarComposite)] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_enum.stderr b/tests/compiletests/ui/subgroup/subgroup_composite_enum.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_enum.stderr rename to tests/compiletests/ui/subgroup/subgroup_composite_enum.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_enum_err.rs b/tests/compiletests/ui/subgroup/subgroup_composite_enum_err.rs similarity index 98% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_enum_err.rs rename to tests/compiletests/ui/subgroup/subgroup_composite_enum_err.rs index 0579efeeaf1..f4fac12b688 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_composite_enum_err.rs +++ b/tests/compiletests/ui/subgroup/subgroup_composite_enum_err.rs @@ -5,8 +5,8 @@ use glam::*; use spirv_std::ScalarComposite; -use spirv_std::arch::*; use spirv_std::spirv; +use spirv_std::subgroup::*; macro_rules! enum_repr_from { ($ident:ident, $repr:ty) => { diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_enum_err.stderr b/tests/compiletests/ui/subgroup/subgroup_composite_enum_err.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_enum_err.stderr rename to tests/compiletests/ui/subgroup/subgroup_composite_enum_err.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_shuffle.rs b/tests/compiletests/ui/subgroup/subgroup_composite_shuffle.rs similarity index 97% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_shuffle.rs rename to tests/compiletests/ui/subgroup/subgroup_composite_shuffle.rs index 6315697c4ba..166a0b6a737 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_composite_shuffle.rs +++ b/tests/compiletests/ui/subgroup/subgroup_composite_shuffle.rs @@ -5,8 +5,8 @@ use glam::*; use spirv_std::ScalarComposite; -use spirv_std::arch::*; use spirv_std::spirv; +use spirv_std::subgroup::*; #[derive(Copy, Clone, ScalarComposite)] pub struct MyStruct { diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_composite_shuffle.stderr b/tests/compiletests/ui/subgroup/subgroup_composite_shuffle.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_composite_shuffle.stderr rename to tests/compiletests/ui/subgroup/subgroup_composite_shuffle.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_elect.rs b/tests/compiletests/ui/subgroup/subgroup_elect.rs similarity index 90% rename from tests/compiletests/ui/arch/subgroup/subgroup_elect.rs rename to tests/compiletests/ui/subgroup/subgroup_elect.rs index 6c3337d4f73..0a1e2040361 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_elect.rs +++ b/tests/compiletests/ui/subgroup/subgroup_elect.rs @@ -6,7 +6,7 @@ use spirv_std::spirv; unsafe fn subgroup_elect() -> bool { - spirv_std::arch::subgroup_elect() + spirv_std::subgroup::subgroup_elect() } #[spirv(compute(threads(1, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_elect.stderr b/tests/compiletests/ui/subgroup/subgroup_elect.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_elect.stderr rename to tests/compiletests/ui/subgroup/subgroup_elect.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_clustered.rs b/tests/compiletests/ui/subgroup/subgroup_i_add_clustered.rs similarity index 82% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_clustered.rs rename to tests/compiletests/ui/subgroup/subgroup_i_add_clustered.rs index 028a1a78b45..f0f3b5acea9 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_clustered.rs +++ b/tests/compiletests/ui/subgroup/subgroup_i_add_clustered.rs @@ -4,11 +4,11 @@ // normalize-stderr-test "OpLine .*\n" -> "" use glam::UVec3; -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn subgroup_i_add_clustered(value: u32) -> u32 { - spirv_std::arch::subgroup_clustered_i_add::<8, _>(value) + spirv_std::subgroup::subgroup_clustered_i_add::<8, _>(value) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_clustered.stderr b/tests/compiletests/ui/subgroup/subgroup_i_add_clustered.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_clustered.stderr rename to tests/compiletests/ui/subgroup/subgroup_i_add_clustered.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_exclusive_scan.rs b/tests/compiletests/ui/subgroup/subgroup_i_add_exclusive_scan.rs similarity index 83% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_exclusive_scan.rs rename to tests/compiletests/ui/subgroup/subgroup_i_add_exclusive_scan.rs index fd97235a71a..c7a23a54db5 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_exclusive_scan.rs +++ b/tests/compiletests/ui/subgroup/subgroup_i_add_exclusive_scan.rs @@ -4,11 +4,11 @@ // normalize-stderr-test "OpLine .*\n" -> "" use glam::UVec3; -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn subgroup_i_add_exclusive_scan(value: u32) -> u32 { - spirv_std::arch::subgroup_exclusive_i_add(value) + spirv_std::subgroup::subgroup_exclusive_i_add(value) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_exclusive_scan.stderr b/tests/compiletests/ui/subgroup/subgroup_i_add_exclusive_scan.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_exclusive_scan.stderr rename to tests/compiletests/ui/subgroup/subgroup_i_add_exclusive_scan.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_inclusive_scan.rs b/tests/compiletests/ui/subgroup/subgroup_i_add_inclusive_scan.rs similarity index 83% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_inclusive_scan.rs rename to tests/compiletests/ui/subgroup/subgroup_i_add_inclusive_scan.rs index 786bdd71e4d..aea3a07d48a 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_inclusive_scan.rs +++ b/tests/compiletests/ui/subgroup/subgroup_i_add_inclusive_scan.rs @@ -4,11 +4,11 @@ // normalize-stderr-test "OpLine .*\n" -> "" use glam::UVec3; -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn subgroup_i_add_inclusive_scan(value: u32) -> u32 { - spirv_std::arch::subgroup_inclusive_i_add(value) + spirv_std::subgroup::subgroup_inclusive_i_add(value) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_inclusive_scan.stderr b/tests/compiletests/ui/subgroup/subgroup_i_add_inclusive_scan.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_inclusive_scan.stderr rename to tests/compiletests/ui/subgroup/subgroup_i_add_inclusive_scan.stderr diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_reduce.rs b/tests/compiletests/ui/subgroup/subgroup_i_add_reduce.rs similarity index 84% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_reduce.rs rename to tests/compiletests/ui/subgroup/subgroup_i_add_reduce.rs index 086ddd7f24c..0e83325e66f 100644 --- a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_reduce.rs +++ b/tests/compiletests/ui/subgroup/subgroup_i_add_reduce.rs @@ -4,11 +4,11 @@ // normalize-stderr-test "OpLine .*\n" -> "" use glam::UVec3; -use spirv_std::arch::{GroupOperation, SubgroupMask}; use spirv_std::spirv; +use spirv_std::subgroup::{GroupOperation, SubgroupMask}; unsafe fn subgroup_i_add_reduce(value: u32) -> u32 { - spirv_std::arch::subgroup_i_add(value) + spirv_std::subgroup::subgroup_i_add(value) } #[spirv(compute(threads(32, 1, 1)))] diff --git a/tests/compiletests/ui/arch/subgroup/subgroup_i_add_reduce.stderr b/tests/compiletests/ui/subgroup/subgroup_i_add_reduce.stderr similarity index 100% rename from tests/compiletests/ui/arch/subgroup/subgroup_i_add_reduce.stderr rename to tests/compiletests/ui/subgroup/subgroup_i_add_reduce.stderr diff --git a/tests/compiletests/ui/target_features_err.rs b/tests/compiletests/ui/target_features_err.rs index f6def31c4f4..264deb0a1b7 100644 --- a/tests/compiletests/ui/target_features_err.rs +++ b/tests/compiletests/ui/target_features_err.rs @@ -5,5 +5,5 @@ use spirv_std::spirv; #[spirv(any_hit)] pub fn main() { - unsafe { spirv_std::arch::terminate_ray() } + unsafe { spirv_std::ray_tracing::ray_pipeline::terminate_ray() } } diff --git a/tests/difftests/tests/arch/atomic_ops/atomic_ops-rust/src/lib.rs b/tests/difftests/tests/arch/atomic_ops/atomic_ops-rust/src/lib.rs index 0a590479706..2c94a9fe21b 100644 --- a/tests/difftests/tests/arch/atomic_ops/atomic_ops-rust/src/lib.rs +++ b/tests/difftests/tests/arch/atomic_ops/atomic_ops-rust/src/lib.rs @@ -1,6 +1,6 @@ #![no_std] -use spirv_std::arch::{atomic_i_add, atomic_i_sub, atomic_u_max, atomic_u_min}; +use spirv_std::atomic::{atomic_i_add, atomic_i_sub, atomic_u_max, atomic_u_min}; use spirv_std::memory::{Scope, Semantics}; use spirv_std::spirv; @@ -31,7 +31,7 @@ pub fn main_cs( // Thread 0 stores the final values after all operations complete if tid == 0 { // Use atomic loads to ensure we read the final values - spirv_std::arch::workgroup_memory_barrier_with_group_sync(); + spirv_std::barrier::workgroup_memory_barrier_with_group_sync(); output[0] = counters[0]; // Should be initial + 32 output[1] = counters[1]; // Should be initial - 32 output[2] = counters[2]; // Should be min(initial, 0) diff --git a/tests/difftests/tests/arch/memory_barriers/memory_barriers-rust/src/lib.rs b/tests/difftests/tests/arch/memory_barriers/memory_barriers-rust/src/lib.rs index 4a3979bf03c..b413389d4e7 100644 --- a/tests/difftests/tests/arch/memory_barriers/memory_barriers-rust/src/lib.rs +++ b/tests/difftests/tests/arch/memory_barriers/memory_barriers-rust/src/lib.rs @@ -1,6 +1,6 @@ #![no_std] -use spirv_std::arch::workgroup_memory_barrier_with_group_sync; +use spirv_std::barrier::workgroup_memory_barrier_with_group_sync; use spirv_std::spirv; #[spirv(compute(threads(64)))] diff --git a/tests/difftests/tests/arch/workgroup_memory/workgroup_memory-rust/src/shader.rs b/tests/difftests/tests/arch/workgroup_memory/workgroup_memory-rust/src/shader.rs index 45bc3924975..213ff25a78d 100644 --- a/tests/difftests/tests/arch/workgroup_memory/workgroup_memory-rust/src/shader.rs +++ b/tests/difftests/tests/arch/workgroup_memory/workgroup_memory-rust/src/shader.rs @@ -1,4 +1,4 @@ -use spirv_std::arch::workgroup_memory_barrier_with_group_sync; +use spirv_std::barrier::workgroup_memory_barrier_with_group_sync; use spirv_std::spirv; #[spirv(compute(threads(64)))] diff --git a/tests/difftests/tests/lang/abi/vector_layout/cpu/src/layout.rs b/tests/difftests/tests/lang/abi/vector_layout/cpu/src/layout.rs index f7febc2c0cb..1f15b52b18a 100644 --- a/tests/difftests/tests/lang/abi/vector_layout/cpu/src/layout.rs +++ b/tests/difftests/tests/lang/abi/vector_layout/cpu/src/layout.rs @@ -2,7 +2,7 @@ use core::mem::offset_of; use core::ops::Range; use experiments::*; use spirv_std::glam::*; -use spirv_std::matrix::Matrix4x3; +use spirv_std::ray_tracing::Matrix4x3; pub struct BumpAlloc(usize);