Skip to content

Commit ca2ea7b

Browse files
committed
glam-infication of spirv-std
1 parent de03e8d commit ca2ea7b

File tree

4 files changed

+31
-31
lines changed

4 files changed

+31
-31
lines changed

crates/spirv-std/src/arch.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::{
1212
};
1313
#[cfg(target_arch = "spirv")]
1414
use core::arch::asm;
15+
use glam::UVec2;
1516

1617
mod atomics;
1718
mod barrier;
@@ -175,9 +176,9 @@ pub fn read_clock_khr<const SCOPE: u32>() -> u64 {
175176
/// bits and the second component containing the 32 most significant bits.'
176177
#[spirv_std_macros::gpu_only]
177178
#[doc(alias = "OpReadClockKHR")]
178-
pub fn read_clock_uvec2_khr<V: Vector<u32, 2>, const SCOPE: u32>() -> V {
179+
pub fn read_clock_uvec2_khr<const SCOPE: u32>() -> UVec2 {
179180
unsafe {
180-
let mut result = V::default();
181+
let mut result = UVec2::default();
181182

182183
asm! {
183184
"%uint = OpTypeInt 32 0",

crates/spirv-std/src/float.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
//! Traits and helper functions related to floats.
22
3-
use crate::vector::Vector;
43
#[cfg(target_arch = "spirv")]
54
use core::arch::asm;
5+
use glam::{Vec2, Vec4};
66

77
/// Abstract trait representing a SPIR-V floating point type.
88
///
@@ -25,7 +25,7 @@ unsafe impl Float for f64 {
2525
/// Converts two f32 values (floats) into two f16 values (halfs). The result is a u32, with the low
2626
/// 16 bits being the first f16, and the high 16 bits being the second f16.
2727
#[spirv_std_macros::gpu_only]
28-
pub fn vec2_to_f16x2(vec: impl Vector<f32, 2>) -> u32 {
28+
pub fn vec2_to_f16x2(vec: Vec2) -> u32 {
2929
let result;
3030
unsafe {
3131
asm!(
@@ -44,7 +44,7 @@ pub fn vec2_to_f16x2(vec: impl Vector<f32, 2>) -> u32 {
4444
/// Converts two f16 values (halfs) into two f32 values (floats). The parameter is a u32, with the
4545
/// low 16 bits being the first f16, and the high 16 bits being the second f16.
4646
#[spirv_std_macros::gpu_only]
47-
pub fn f16x2_to_vec2<V: Vector<f32, 2>>(int: u32) -> V {
47+
pub fn f16x2_to_vec2(int: u32) -> Vec2 {
4848
let mut result = Default::default();
4949
unsafe {
5050
asm!(
@@ -70,14 +70,14 @@ pub fn f32_to_f16(float: f32) -> u32 {
7070
/// not being universal - the upper 16 bits are ignored.
7171
#[spirv_std_macros::gpu_only]
7272
pub fn f16_to_f32(packed: u32) -> f32 {
73-
f16x2_to_vec2::<glam::Vec2>(packed).x
73+
f16x2_to_vec2(packed).x
7474
}
7575

7676
/// Packs a vec4 into 4 8-bit signed integers. See
7777
/// [PackSnorm4x8](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for exact
7878
/// semantics.
7979
#[spirv_std_macros::gpu_only]
80-
pub fn vec4_to_u8x4_snorm(vec: impl Vector<f32, 4>) -> u32 {
80+
pub fn vec4_to_u8x4_snorm(vec: Vec4) -> u32 {
8181
let result;
8282
unsafe {
8383
asm!(
@@ -97,7 +97,7 @@ pub fn vec4_to_u8x4_snorm(vec: impl Vector<f32, 4>) -> u32 {
9797
/// [PackUnorm4x8](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for exact
9898
/// semantics.
9999
#[spirv_std_macros::gpu_only]
100-
pub fn vec4_to_u8x4_unorm(vec: impl Vector<f32, 4>) -> u32 {
100+
pub fn vec4_to_u8x4_unorm(vec: Vec4) -> u32 {
101101
let result;
102102
unsafe {
103103
asm!(
@@ -117,7 +117,7 @@ pub fn vec4_to_u8x4_unorm(vec: impl Vector<f32, 4>) -> u32 {
117117
/// [PackSnorm2x16](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for exact
118118
/// semantics.
119119
#[spirv_std_macros::gpu_only]
120-
pub fn vec2_to_u16x2_snorm(vec: impl Vector<f32, 2>) -> u32 {
120+
pub fn vec2_to_u16x2_snorm(vec: Vec2) -> u32 {
121121
let result;
122122
unsafe {
123123
asm!(
@@ -137,7 +137,7 @@ pub fn vec2_to_u16x2_snorm(vec: impl Vector<f32, 2>) -> u32 {
137137
/// [PackUnorm2x16](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for exact
138138
/// semantics.
139139
#[spirv_std_macros::gpu_only]
140-
pub fn vec2_to_u16x2_unorm(vec: impl Vector<f32, 2>) -> u32 {
140+
pub fn vec2_to_u16x2_unorm(vec: Vec2) -> u32 {
141141
let result;
142142
unsafe {
143143
asm!(
@@ -157,7 +157,7 @@ pub fn vec2_to_u16x2_unorm(vec: impl Vector<f32, 2>) -> u32 {
157157
/// [UnpackSnorm4x8](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for exact
158158
/// semantics.
159159
#[spirv_std_macros::gpu_only]
160-
pub fn u8x4_to_vec4_snorm<V: Vector<f32, 4>>(int: u32) -> V {
160+
pub fn u8x4_to_vec4_snorm(int: u32) -> Vec4 {
161161
let mut result = Default::default();
162162
unsafe {
163163
asm!(
@@ -176,7 +176,7 @@ pub fn u8x4_to_vec4_snorm<V: Vector<f32, 4>>(int: u32) -> V {
176176
/// [UnpackSnorm4x8](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for exact
177177
/// semantics.
178178
#[spirv_std_macros::gpu_only]
179-
pub fn u8x4_to_vec4_unorm<V: Vector<f32, 4>>(int: u32) -> V {
179+
pub fn u8x4_to_vec4_unorm(int: u32) -> Vec4 {
180180
let mut result = Default::default();
181181
unsafe {
182182
asm!(
@@ -195,7 +195,7 @@ pub fn u8x4_to_vec4_unorm<V: Vector<f32, 4>>(int: u32) -> V {
195195
/// [UnpackSnorm2x16](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for
196196
/// exact semantics.
197197
#[spirv_std_macros::gpu_only]
198-
pub fn u16x2_to_vec2_snorm<V: Vector<f32, 2>>(int: u32) -> V {
198+
pub fn u16x2_to_vec2_snorm(int: u32) -> Vec2 {
199199
let mut result = Default::default();
200200
unsafe {
201201
asm!(
@@ -214,7 +214,7 @@ pub fn u16x2_to_vec2_snorm<V: Vector<f32, 2>>(int: u32) -> V {
214214
/// [UnpackUnorm2x16](https://www.khronos.org/registry/SPIR-V/specs/1.0/GLSL.std.450.html) for
215215
/// exact semantics.
216216
#[spirv_std_macros::gpu_only]
217-
pub fn u16x2_to_vec2_unorm<V: Vector<f32, 2>>(int: u32) -> V {
217+
pub fn u16x2_to_vec2_unorm(int: u32) -> Vec2 {
218218
let mut result = Default::default();
219219
unsafe {
220220
asm!(

crates/spirv-std/src/ray_tracing.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
#![allow(clippy::bad_bit_mask)]
55

66
use crate::matrix::Matrix4x3;
7-
use crate::vector::Vector;
87
#[cfg(target_arch = "spirv")]
98
use core::arch::asm;
9+
use glam::{UVec2, Vec2, Vec3};
1010

1111
/// An acceleration structure type which is an opaque reference to an
1212
/// acceleration structure handle as defined in the client API specification.
@@ -48,7 +48,7 @@ impl AccelerationStructure {
4848
#[spirv_std_macros::gpu_only]
4949
#[doc(alias = "OpConvertUToAccelerationStructureKHR")]
5050
#[inline]
51-
pub unsafe fn from_vec(id: impl Vector<u32, 2>) -> AccelerationStructure {
51+
pub unsafe fn from_vec(id: UVec2) -> AccelerationStructure {
5252
unsafe {
5353
// FIXME(eddyb) `let mut result = T::default()` uses (for `asm!`), with this.
5454
let mut result_slot = core::mem::MaybeUninit::uninit();
@@ -102,9 +102,9 @@ impl AccelerationStructure {
102102
sbt_offset: i32,
103103
sbt_stride: i32,
104104
miss_index: i32,
105-
ray_origin: impl Vector<f32, 3>,
105+
ray_origin: Vec3,
106106
ray_tmin: f32,
107-
ray_direction: impl Vector<f32, 3>,
107+
ray_direction: Vec3,
108108
ray_tmax: f32,
109109
payload: &mut T,
110110
) {
@@ -261,9 +261,9 @@ impl RayQuery {
261261
acceleration_structure: &AccelerationStructure,
262262
ray_flags: RayFlags,
263263
cull_mask: u32,
264-
ray_origin: impl Vector<f32, 3>,
264+
ray_origin: Vec3,
265265
ray_tmin: f32,
266-
ray_direction: impl Vector<f32, 3>,
266+
ray_direction: Vec3,
267267
ray_tmax: f32,
268268
) {
269269
unsafe {
@@ -732,7 +732,7 @@ impl RayQuery {
732732
#[spirv_std_macros::gpu_only]
733733
#[doc(alias = "OpRayQueryGetIntersectionBarycentricsKHR")]
734734
#[inline]
735-
pub unsafe fn get_candidate_intersection_barycentrics<V: Vector<f32, 2>>(&self) -> V {
735+
pub unsafe fn get_candidate_intersection_barycentrics(&self) -> Vec2 {
736736
unsafe {
737737
let mut result = Default::default();
738738

@@ -760,7 +760,7 @@ impl RayQuery {
760760
#[spirv_std_macros::gpu_only]
761761
#[doc(alias = "OpRayQueryGetIntersectionBarycentricsKHR")]
762762
#[inline]
763-
pub unsafe fn get_committed_intersection_barycentrics<V: Vector<f32, 2>>(&self) -> V {
763+
pub unsafe fn get_committed_intersection_barycentrics(&self) -> Vec2 {
764764
unsafe {
765765
let mut result = Default::default();
766766

@@ -861,7 +861,7 @@ impl RayQuery {
861861
#[spirv_std_macros::gpu_only]
862862
#[doc(alias = "OpRayQueryGetIntersectionObjectRayDirectionKHR")]
863863
#[inline]
864-
pub unsafe fn get_candidate_intersection_object_ray_direction<V: Vector<f32, 3>>(&self) -> V {
864+
pub unsafe fn get_candidate_intersection_object_ray_direction(&self) -> Vec3 {
865865
unsafe {
866866
let mut result = Default::default();
867867

@@ -888,7 +888,7 @@ impl RayQuery {
888888
#[spirv_std_macros::gpu_only]
889889
#[doc(alias = "OpRayQueryGetIntersectionObjectRayDirectionKHR")]
890890
#[inline]
891-
pub unsafe fn get_committed_intersection_object_ray_direction<V: Vector<f32, 3>>(&self) -> V {
891+
pub unsafe fn get_committed_intersection_object_ray_direction(&self) -> Vec3 {
892892
unsafe {
893893
let mut result = Default::default();
894894

@@ -912,7 +912,7 @@ impl RayQuery {
912912
#[spirv_std_macros::gpu_only]
913913
#[doc(alias = "OpRayQueryGetIntersectionObjectRayOriginKHR")]
914914
#[inline]
915-
pub unsafe fn get_candidate_intersection_object_ray_origin<V: Vector<f32, 3>>(&self) -> V {
915+
pub unsafe fn get_candidate_intersection_object_ray_origin(&self) -> Vec3 {
916916
unsafe {
917917
let mut result = Default::default();
918918

@@ -939,7 +939,7 @@ impl RayQuery {
939939
#[spirv_std_macros::gpu_only]
940940
#[doc(alias = "OpRayQueryGetIntersectionObjectRayOriginKHR")]
941941
#[inline]
942-
pub unsafe fn get_committed_intersection_object_ray_origin<V: Vector<f32, 3>>(&self) -> V {
942+
pub unsafe fn get_committed_intersection_object_ray_origin(&self) -> Vec3 {
943943
unsafe {
944944
let mut result = Default::default();
945945

@@ -960,7 +960,7 @@ impl RayQuery {
960960
#[spirv_std_macros::gpu_only]
961961
#[doc(alias = "OpRayQueryGetWorldRayDirectionKHR")]
962962
#[inline]
963-
pub unsafe fn get_world_ray_direction<V: Vector<f32, 3>>(&self) -> V {
963+
pub unsafe fn get_world_ray_direction(&self) -> Vec3 {
964964
unsafe {
965965
let mut result = Default::default();
966966

@@ -980,7 +980,7 @@ impl RayQuery {
980980
#[spirv_std_macros::gpu_only]
981981
#[doc(alias = "OpRayQueryGetWorldRayOriginKHR")]
982982
#[inline]
983-
pub unsafe fn get_world_ray_origin<V: Vector<f32, 3>>(&self) -> V {
983+
pub unsafe fn get_world_ray_origin(&self) -> Vec3 {
984984
unsafe {
985985
let mut result = Default::default();
986986

@@ -1053,7 +1053,7 @@ impl RayQuery {
10531053
#[spirv_std_macros::gpu_only]
10541054
#[doc(alias = "OpRayQueryGetIntersectionTriangleVertexPositionsKHR")]
10551055
#[inline]
1056-
pub unsafe fn get_intersection_triangle_vertex_positions<V: Vector<f32, 3>>(&self) -> [V; 3] {
1056+
pub unsafe fn get_intersection_triangle_vertex_positions(&self) -> [Vec3; 3] {
10571057
unsafe {
10581058
let mut result = Default::default();
10591059

tests/compiletests/ui/arch/read_clock_khr.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,5 @@ use spirv_std::{
1212
pub fn main() {
1313
let clock_time = unsafe { read_clock_khr::<{ Scope::Subgroup as u32 }>() };
1414

15-
let clock_time_uvec2: UVec2 =
16-
unsafe { read_clock_uvec2_khr::<_, { Scope::Subgroup as u32 }>() };
15+
let clock_time_uvec2: UVec2 = unsafe { read_clock_uvec2_khr::<{ Scope::Subgroup as u32 }>() };
1716
}

0 commit comments

Comments
 (0)