Skip to content

Commit fc7dc5d

Browse files
committed
Use mixed atomics / non-atomics
This is probably the version of the test I want to promote.
1 parent 0594d07 commit fc7dc5d

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

compute-shader-hello/src/shader.wgsl

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@
1414
//
1515
// Also licensed under MIT license, at your choice.
1616

17+
struct Element {
18+
data: u32;
19+
flag: atomic<u32>;
20+
};
21+
1722
[[block]]
1823
struct DataBuf {
19-
data: [[stride(4)]] array<atomic<u32>>;
24+
data: [[stride(8)]] array<Element>;
2025
};
2126

2227
[[block]]
@@ -48,23 +53,17 @@ fn main([[builtin(global_invocation_id)]] global_id: vec3<u32>) {
4853
var failures = 0u;
4954
for (var i: u32 = 0u; i < n_iter; i = i + 1u) {
5055
let wr_flag_ix = permute_flag_ix(ix);
51-
atomicStore(&data_buf.data[ix * 2u], i + 1u);
56+
data_buf.data[ix].data = i + 1u;
5257
storageBarrier(); // release semantics for writing flag
53-
atomicStore(&data_buf.data[wr_flag_ix * 2u + 1u], i + 1u);
58+
atomicStore(&data_buf.data[wr_flag_ix].flag, i + 1u);
5459

5560
// Read from a different workgroup
5661
let read_ix = ((ix & 0xffu) << 8u) | (ix >> 8u);
5762
let read_flag_ix = permute_flag_ix(read_ix);
5863

59-
let flag = atomicLoad(&data_buf.data[read_flag_ix * 2u + 1u]);
60-
//let flag = atomicOr(&data_buf.data[read_flag_ix * 2u + 1u], 0u);
64+
let flag = atomicLoad(&data_buf.data[read_flag_ix].flag);
6165
storageBarrier(); // acquire semantics for reading flag
62-
var data = 0u;
63-
if (strategy == 0u) {
64-
data = atomicLoad(&data_buf.data[read_ix * 2u]);
65-
} else {
66-
data = atomicOr(&data_buf.data[read_ix * 2u], 0u);
67-
}
66+
let data = data_buf.data[read_ix].data;
6867
if (flag > data) {
6968
failures = failures + 1u;
7069
}

0 commit comments

Comments
 (0)