From e4d78bc39ce7796e6e6b854c403f177e8caa9abe Mon Sep 17 00:00:00 2001 From: wesselfr Date: Thu, 11 Aug 2022 11:01:27 +0200 Subject: [PATCH 1/4] Added atomic flag operations --- crates/spirv-std/src/arch/atomics.rs | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/crates/spirv-std/src/arch/atomics.rs b/crates/spirv-std/src/arch/atomics.rs index bb0f75992e..aec12d5860 100644 --- a/crates/spirv-std/src/arch/atomics.rs +++ b/crates/spirv-std/src/arch/atomics.rs @@ -576,6 +576,64 @@ pub unsafe fn atomic_f_max( old } +/// Atomically sets the flag value pointed to by Pointer to the set state. +/// Pointer must be a pointer to a 32-bit integer type representing an atomic flag. +/// The instruction’s result is true if the flag was in the set state or false if the flag was in the clear state immediately before the operation. +/// **Important:** Kernel capabilities have to be set beforehand. +/// +/// Result Type must be a Boolean type. +/// The resulting values are undefined if an atomic flag is modified by an instruction other than OpAtomicFlagTestAndSet or OpAtomicFlagClear. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpAtomicFlagTestAndSet")] +#[inline] +pub unsafe fn atomic_flag_test_and_set( + ptr: &mut I, +) -> bool { + let mut old: bool = false; + + asm! { + "%bool = OpTypeBool", + "%u32 = OpTypeInt 32 0", + "%scope = OpConstant %u32 {scope}", + "%semantics = OpConstant %u32 {semantics}", + "%old = OpAtomicFlagTestAndSet %bool {ptr} %scope %semantics", + "OpStore {old} %old", + scope = const SCOPE, + semantics = const SEMANTICS, + ptr = in(reg) ptr, + old = in(reg) &mut old + } + + old +} + +/// Atomically sets the flag value pointed to by Pointer to the clear state. +/// +/// Pointer must be a pointer to a 32-bit integer type representing an atomic flag. +/// **Important:** Memory Semantics must not be Acquire or AcquireRelease +/// +/// The resulting values are undefined if an atomic flag is modified by an instruction other than OpAtomicFlagTestAndSet or OpAtomicFlagClear. +#[spirv_std_macros::gpu_only] +#[doc(alias = "OpAtomicFlagClear")] +#[inline] +pub unsafe fn atomic_flag_clear(ptr: &mut I) { + // Ensure the memory semantic is not Acquire or AcquireRelease + assert!( + SEMANTICS + != (crate::memory::Semantics::ACQUIRE.bits() as u32 + | crate::memory::Semantics::ACQUIRE_RELEASE.bits() as u32) + ); + asm! { + "%u32 = OpTypeInt 32 0", + "%semantics = OpConstant %u32 {semantics}", + "%scope = OpConstant %u32 {scope}", + "OpAtomicFlagClear {ptr} %scope %semantics", + scope = const SCOPE, + semantics = const SEMANTICS, + ptr = in(reg) ptr + } +} + /// Perform the following steps atomically with respect to any other atomic /// accesses within `SCOPE` to the same location: /// From b4ce5ba84894275e62e999d1d65dc77fdac61c65 Mon Sep 17 00:00:00 2001 From: wesselfr Date: Thu, 11 Aug 2022 11:01:51 +0200 Subject: [PATCH 2/4] Added unit tests for atomic operations --- tests/ui/arch/atomics/atomic_and.rs | 19 ++++++++++++++ .../arch/atomics/atomic_compare_exchange.rs | 20 +++++++++++++++ tests/ui/arch/atomics/atomic_exchange.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_flag_clear.rs | 25 +++++++++++++++++++ .../arch/atomics/atomic_flag_test_and_set.rs | 25 +++++++++++++++++++ tests/ui/arch/atomics/atomic_i_add.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_i_decrement.rs | 21 ++++++++++++++++ tests/ui/arch/atomics/atomic_i_increment.rs | 21 ++++++++++++++++ tests/ui/arch/atomics/atomic_i_sub.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_load.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_or.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_s_max.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_s_min.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_store.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_u_max.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_u_min.rs | 19 ++++++++++++++ tests/ui/arch/atomics/atomic_xor.rs | 19 ++++++++++++++ 17 files changed, 340 insertions(+) create mode 100644 tests/ui/arch/atomics/atomic_and.rs create mode 100644 tests/ui/arch/atomics/atomic_compare_exchange.rs create mode 100644 tests/ui/arch/atomics/atomic_exchange.rs create mode 100644 tests/ui/arch/atomics/atomic_flag_clear.rs create mode 100644 tests/ui/arch/atomics/atomic_flag_test_and_set.rs create mode 100644 tests/ui/arch/atomics/atomic_i_add.rs create mode 100644 tests/ui/arch/atomics/atomic_i_decrement.rs create mode 100644 tests/ui/arch/atomics/atomic_i_increment.rs create mode 100644 tests/ui/arch/atomics/atomic_i_sub.rs create mode 100644 tests/ui/arch/atomics/atomic_load.rs create mode 100644 tests/ui/arch/atomics/atomic_or.rs create mode 100644 tests/ui/arch/atomics/atomic_s_max.rs create mode 100644 tests/ui/arch/atomics/atomic_s_min.rs create mode 100644 tests/ui/arch/atomics/atomic_store.rs create mode 100644 tests/ui/arch/atomics/atomic_u_max.rs create mode 100644 tests/ui/arch/atomics/atomic_u_min.rs create mode 100644 tests/ui/arch/atomics/atomic_xor.rs diff --git a/tests/ui/arch/atomics/atomic_and.rs b/tests/ui/arch/atomics/atomic_and.rs new file mode 100644 index 0000000000..fc2db0f176 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_and.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_and::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_compare_exchange.rs b/tests/ui/arch/atomics/atomic_compare_exchange.rs new file mode 100644 index 0000000000..ab2e31a60f --- /dev/null +++ b/tests/ui/arch/atomics/atomic_compare_exchange.rs @@ -0,0 +1,20 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + unsafe { + let old = spirv_std::arch::atomic_compare_exchange::< + _, + { Scope::CrossDevice as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5, 10); + } +} diff --git a/tests/ui/arch/atomics/atomic_exchange.rs b/tests/ui/arch/atomics/atomic_exchange.rs new file mode 100644 index 0000000000..8c15816c5f --- /dev/null +++ b/tests/ui/arch/atomics/atomic_exchange.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + unsafe { + let old = spirv_std::arch::atomic_exchange::< + _, + { Scope::CrossDevice as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5); + } +} diff --git a/tests/ui/arch/atomics/atomic_flag_clear.rs b/tests/ui/arch/atomics/atomic_flag_clear.rs new file mode 100644 index 0000000000..49b08921f7 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_flag_clear.rs @@ -0,0 +1,25 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[cfg(target_arch = "spirv")] +use core::arch::asm; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + // Ensure kernel capabilities. + unsafe { asm!("OpCapability Kernel") }; + + let old = unsafe { + spirv_std::arch::atomic_flag_clear::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0)) + }; +} diff --git a/tests/ui/arch/atomics/atomic_flag_test_and_set.rs b/tests/ui/arch/atomics/atomic_flag_test_and_set.rs new file mode 100644 index 0000000000..36d98f6c3c --- /dev/null +++ b/tests/ui/arch/atomics/atomic_flag_test_and_set.rs @@ -0,0 +1,25 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[cfg(target_arch = "spirv")] +use core::arch::asm; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + // Ensure kernel capabilities. + unsafe { asm!("OpCapability Kernel") }; + + let old = unsafe { + spirv_std::arch::atomic_flag_test_and_set::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0)) + }; +} diff --git a/tests/ui/arch/atomics/atomic_i_add.rs b/tests/ui/arch/atomics/atomic_i_add.rs new file mode 100644 index 0000000000..3357482fec --- /dev/null +++ b/tests/ui/arch/atomics/atomic_i_add.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_i_add::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_i_decrement.rs b/tests/ui/arch/atomics/atomic_i_decrement.rs new file mode 100644 index 0000000000..a231745c36 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_i_decrement.rs @@ -0,0 +1,21 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let reference = unsafe { buffer.index_unchecked_mut(0) }; + + let old = unsafe { + spirv_std::arch::atomic_i_decrement::< + _, + { Scope::Workgroup as u32 }, + { Semantics::NONE.bits() }, + >(reference) + }; +} diff --git a/tests/ui/arch/atomics/atomic_i_increment.rs b/tests/ui/arch/atomics/atomic_i_increment.rs new file mode 100644 index 0000000000..b8de4e58a4 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_i_increment.rs @@ -0,0 +1,21 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let reference = unsafe { buffer.index_unchecked_mut(0) }; + + let old = unsafe { + spirv_std::arch::atomic_i_increment::< + _, + { Scope::Workgroup as u32 }, + { Semantics::NONE.bits() }, + >(reference) + }; +} diff --git a/tests/ui/arch/atomics/atomic_i_sub.rs b/tests/ui/arch/atomics/atomic_i_sub.rs new file mode 100644 index 0000000000..18690b2da8 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_i_sub.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_i_sub::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_load.rs b/tests/ui/arch/atomics/atomic_load.rs new file mode 100644 index 0000000000..4195a345dd --- /dev/null +++ b/tests/ui/arch/atomics/atomic_load.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + unsafe { + let output = spirv_std::arch::atomic_load::< + _, + { Scope::CrossDevice as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0)); + } +} diff --git a/tests/ui/arch/atomics/atomic_or.rs b/tests/ui/arch/atomics/atomic_or.rs new file mode 100644 index 0000000000..76c1aa2dba --- /dev/null +++ b/tests/ui/arch/atomics/atomic_or.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_or::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_s_max.rs b/tests/ui/arch/atomics/atomic_s_max.rs new file mode 100644 index 0000000000..452ba61712 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_s_max.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [i32]) { + let old = unsafe { + spirv_std::arch::atomic_s_max::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_s_min.rs b/tests/ui/arch/atomics/atomic_s_min.rs new file mode 100644 index 0000000000..56bece3315 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_s_min.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [i32]) { + let old = unsafe { + spirv_std::arch::atomic_s_min::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_store.rs b/tests/ui/arch/atomics/atomic_store.rs new file mode 100644 index 0000000000..564d99204b --- /dev/null +++ b/tests/ui/arch/atomics/atomic_store.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_store::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_u_max.rs b/tests/ui/arch/atomics/atomic_u_max.rs new file mode 100644 index 0000000000..167aa04d18 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_u_max.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_u_max::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_u_min.rs b/tests/ui/arch/atomics/atomic_u_min.rs new file mode 100644 index 0000000000..7890383846 --- /dev/null +++ b/tests/ui/arch/atomics/atomic_u_min.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_u_min::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} diff --git a/tests/ui/arch/atomics/atomic_xor.rs b/tests/ui/arch/atomics/atomic_xor.rs new file mode 100644 index 0000000000..11ffda120b --- /dev/null +++ b/tests/ui/arch/atomics/atomic_xor.rs @@ -0,0 +1,19 @@ +// build-pass + +#![allow(incomplete_features)] +#![feature(generic_const_exprs)] +use spirv_std::{ + arch::IndexUnchecked, + memory::{Scope, Semantics}, +}; + +#[spirv(compute(threads(64)))] +pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &mut [u32]) { + let old = unsafe { + spirv_std::arch::atomic_xor::< + _, + { Scope::Workgroup as u32 }, + { Semantics::UNIFORM_MEMORY.bits() }, + >(&mut *buffer.index_unchecked_mut(0), 5) + }; +} From f949a260f29479c7bee01ca85ca7bc917d71c588 Mon Sep 17 00:00:00 2001 From: wesselfr Date: Mon, 15 Aug 2022 11:27:30 +0200 Subject: [PATCH 3/4] Removed redundant feature flags from the atomic unit tests --- tests/ui/arch/atomics/atomic_and.rs | 2 -- tests/ui/arch/atomics/atomic_compare_exchange.rs | 2 -- tests/ui/arch/atomics/atomic_exchange.rs | 2 -- tests/ui/arch/atomics/atomic_flag_clear.rs | 2 -- tests/ui/arch/atomics/atomic_flag_test_and_set.rs | 2 -- tests/ui/arch/atomics/atomic_i_add.rs | 2 -- tests/ui/arch/atomics/atomic_i_decrement.rs | 2 -- tests/ui/arch/atomics/atomic_i_increment.rs | 2 -- tests/ui/arch/atomics/atomic_i_sub.rs | 2 -- tests/ui/arch/atomics/atomic_load.rs | 2 -- tests/ui/arch/atomics/atomic_or.rs | 2 -- tests/ui/arch/atomics/atomic_s_max.rs | 2 -- tests/ui/arch/atomics/atomic_s_min.rs | 2 -- tests/ui/arch/atomics/atomic_store.rs | 2 -- tests/ui/arch/atomics/atomic_u_max.rs | 2 -- tests/ui/arch/atomics/atomic_u_min.rs | 2 -- tests/ui/arch/atomics/atomic_xor.rs | 2 -- 17 files changed, 34 deletions(-) diff --git a/tests/ui/arch/atomics/atomic_and.rs b/tests/ui/arch/atomics/atomic_and.rs index fc2db0f176..f5004c1e73 100644 --- a/tests/ui/arch/atomics/atomic_and.rs +++ b/tests/ui/arch/atomics/atomic_and.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_compare_exchange.rs b/tests/ui/arch/atomics/atomic_compare_exchange.rs index ab2e31a60f..a25ed78291 100644 --- a/tests/ui/arch/atomics/atomic_compare_exchange.rs +++ b/tests/ui/arch/atomics/atomic_compare_exchange.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_exchange.rs b/tests/ui/arch/atomics/atomic_exchange.rs index 8c15816c5f..59687ebeb7 100644 --- a/tests/ui/arch/atomics/atomic_exchange.rs +++ b/tests/ui/arch/atomics/atomic_exchange.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_flag_clear.rs b/tests/ui/arch/atomics/atomic_flag_clear.rs index 49b08921f7..64405440cc 100644 --- a/tests/ui/arch/atomics/atomic_flag_clear.rs +++ b/tests/ui/arch/atomics/atomic_flag_clear.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_flag_test_and_set.rs b/tests/ui/arch/atomics/atomic_flag_test_and_set.rs index 36d98f6c3c..01baef9af5 100644 --- a/tests/ui/arch/atomics/atomic_flag_test_and_set.rs +++ b/tests/ui/arch/atomics/atomic_flag_test_and_set.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_i_add.rs b/tests/ui/arch/atomics/atomic_i_add.rs index 3357482fec..6a53dc3042 100644 --- a/tests/ui/arch/atomics/atomic_i_add.rs +++ b/tests/ui/arch/atomics/atomic_i_add.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_i_decrement.rs b/tests/ui/arch/atomics/atomic_i_decrement.rs index a231745c36..c2159339a8 100644 --- a/tests/ui/arch/atomics/atomic_i_decrement.rs +++ b/tests/ui/arch/atomics/atomic_i_decrement.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_i_increment.rs b/tests/ui/arch/atomics/atomic_i_increment.rs index b8de4e58a4..d5db757c13 100644 --- a/tests/ui/arch/atomics/atomic_i_increment.rs +++ b/tests/ui/arch/atomics/atomic_i_increment.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_i_sub.rs b/tests/ui/arch/atomics/atomic_i_sub.rs index 18690b2da8..4dd034a507 100644 --- a/tests/ui/arch/atomics/atomic_i_sub.rs +++ b/tests/ui/arch/atomics/atomic_i_sub.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_load.rs b/tests/ui/arch/atomics/atomic_load.rs index 4195a345dd..4eb45b2342 100644 --- a/tests/ui/arch/atomics/atomic_load.rs +++ b/tests/ui/arch/atomics/atomic_load.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_or.rs b/tests/ui/arch/atomics/atomic_or.rs index 76c1aa2dba..677e8d2fe5 100644 --- a/tests/ui/arch/atomics/atomic_or.rs +++ b/tests/ui/arch/atomics/atomic_or.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_s_max.rs b/tests/ui/arch/atomics/atomic_s_max.rs index 452ba61712..e1aec67ca2 100644 --- a/tests/ui/arch/atomics/atomic_s_max.rs +++ b/tests/ui/arch/atomics/atomic_s_max.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_s_min.rs b/tests/ui/arch/atomics/atomic_s_min.rs index 56bece3315..6a1e558ba5 100644 --- a/tests/ui/arch/atomics/atomic_s_min.rs +++ b/tests/ui/arch/atomics/atomic_s_min.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_store.rs b/tests/ui/arch/atomics/atomic_store.rs index 564d99204b..de422c3c73 100644 --- a/tests/ui/arch/atomics/atomic_store.rs +++ b/tests/ui/arch/atomics/atomic_store.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_u_max.rs b/tests/ui/arch/atomics/atomic_u_max.rs index 167aa04d18..905f9b6532 100644 --- a/tests/ui/arch/atomics/atomic_u_max.rs +++ b/tests/ui/arch/atomics/atomic_u_max.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_u_min.rs b/tests/ui/arch/atomics/atomic_u_min.rs index 7890383846..073306c4ec 100644 --- a/tests/ui/arch/atomics/atomic_u_min.rs +++ b/tests/ui/arch/atomics/atomic_u_min.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, diff --git a/tests/ui/arch/atomics/atomic_xor.rs b/tests/ui/arch/atomics/atomic_xor.rs index 11ffda120b..2dc14e2f35 100644 --- a/tests/ui/arch/atomics/atomic_xor.rs +++ b/tests/ui/arch/atomics/atomic_xor.rs @@ -1,7 +1,5 @@ // build-pass -#![allow(incomplete_features)] -#![feature(generic_const_exprs)] use spirv_std::{ arch::IndexUnchecked, memory::{Scope, Semantics}, From 2ade8b2558322d67f3cb4312235ecdb49a7bc90b Mon Sep 17 00:00:00 2001 From: wesselfr Date: Mon, 15 Aug 2022 11:44:15 +0200 Subject: [PATCH 4/4] Changed memory scope on failing tests as it seems to fail on the CI Server --- tests/ui/arch/atomics/atomic_compare_exchange.rs | 2 +- tests/ui/arch/atomics/atomic_exchange.rs | 2 +- tests/ui/arch/atomics/atomic_load.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/ui/arch/atomics/atomic_compare_exchange.rs b/tests/ui/arch/atomics/atomic_compare_exchange.rs index a25ed78291..d1ad72a4c7 100644 --- a/tests/ui/arch/atomics/atomic_compare_exchange.rs +++ b/tests/ui/arch/atomics/atomic_compare_exchange.rs @@ -10,7 +10,7 @@ pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &m unsafe { let old = spirv_std::arch::atomic_compare_exchange::< _, - { Scope::CrossDevice as u32 }, + { Scope::Device as u32 }, { Semantics::UNIFORM_MEMORY.bits() }, { Semantics::UNIFORM_MEMORY.bits() }, >(&mut *buffer.index_unchecked_mut(0), 5, 10); diff --git a/tests/ui/arch/atomics/atomic_exchange.rs b/tests/ui/arch/atomics/atomic_exchange.rs index 59687ebeb7..23008780c5 100644 --- a/tests/ui/arch/atomics/atomic_exchange.rs +++ b/tests/ui/arch/atomics/atomic_exchange.rs @@ -10,7 +10,7 @@ pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &m unsafe { let old = spirv_std::arch::atomic_exchange::< _, - { Scope::CrossDevice as u32 }, + { Scope::Device as u32 }, { Semantics::UNIFORM_MEMORY.bits() }, >(&mut *buffer.index_unchecked_mut(0), 5); } diff --git a/tests/ui/arch/atomics/atomic_load.rs b/tests/ui/arch/atomics/atomic_load.rs index 4eb45b2342..b999b56807 100644 --- a/tests/ui/arch/atomics/atomic_load.rs +++ b/tests/ui/arch/atomics/atomic_load.rs @@ -10,7 +10,7 @@ pub fn main(#[spirv(descriptor_set = 0, binding = 0, storage_buffer)] buffer: &m unsafe { let output = spirv_std::arch::atomic_load::< _, - { Scope::CrossDevice as u32 }, + { Scope::Device as u32 }, { Semantics::UNIFORM_MEMORY.bits() }, >(&mut *buffer.index_unchecked_mut(0)); }