| #version 310 es |
| |
| struct atomic_compare_exchange_resultu32 { |
| uint old_value; |
| bool exchanged; |
| }; |
| |
| struct atomic_compare_exchange_resulti32 { |
| int old_value; |
| bool exchanged; |
| }; |
| |
| |
| layout(binding = 0, std430) buffer a_u32_block_ssbo { |
| uint inner; |
| } a_u32; |
| |
| layout(binding = 1, std430) buffer a_i32_block_ssbo { |
| int inner; |
| } a_i32; |
| |
| shared uint b_u32; |
| shared int b_i32; |
| void tint_symbol(uint local_invocation_index) { |
| if ((local_invocation_index < 1u)) { |
| atomicExchange(b_u32, 0u); |
| atomicExchange(b_i32, 0); |
| } |
| barrier(); |
| { |
| uint value = 42u; |
| atomic_compare_exchange_resultu32 atomic_compare_result; |
| atomic_compare_result.old_value = atomicCompSwap(a_u32.inner, 0u, value); |
| atomic_compare_result.exchanged = atomic_compare_result.old_value == 0u; |
| atomic_compare_exchange_resultu32 r1 = atomic_compare_result; |
| atomic_compare_exchange_resultu32 atomic_compare_result_1; |
| atomic_compare_result_1.old_value = atomicCompSwap(a_u32.inner, 0u, value); |
| atomic_compare_result_1.exchanged = atomic_compare_result_1.old_value == 0u; |
| atomic_compare_exchange_resultu32 r2 = atomic_compare_result_1; |
| atomic_compare_exchange_resultu32 atomic_compare_result_2; |
| atomic_compare_result_2.old_value = atomicCompSwap(a_u32.inner, 0u, value); |
| atomic_compare_result_2.exchanged = atomic_compare_result_2.old_value == 0u; |
| atomic_compare_exchange_resultu32 r3 = atomic_compare_result_2; |
| } |
| { |
| int value = 42; |
| atomic_compare_exchange_resulti32 atomic_compare_result_3; |
| atomic_compare_result_3.old_value = atomicCompSwap(a_i32.inner, 0, value); |
| atomic_compare_result_3.exchanged = atomic_compare_result_3.old_value == 0; |
| atomic_compare_exchange_resulti32 r1 = atomic_compare_result_3; |
| atomic_compare_exchange_resulti32 atomic_compare_result_4; |
| atomic_compare_result_4.old_value = atomicCompSwap(a_i32.inner, 0, value); |
| atomic_compare_result_4.exchanged = atomic_compare_result_4.old_value == 0; |
| atomic_compare_exchange_resulti32 r2 = atomic_compare_result_4; |
| atomic_compare_exchange_resulti32 atomic_compare_result_5; |
| atomic_compare_result_5.old_value = atomicCompSwap(a_i32.inner, 0, value); |
| atomic_compare_result_5.exchanged = atomic_compare_result_5.old_value == 0; |
| atomic_compare_exchange_resulti32 r3 = atomic_compare_result_5; |
| } |
| { |
| uint value = 42u; |
| atomic_compare_exchange_resultu32 atomic_compare_result_6; |
| atomic_compare_result_6.old_value = atomicCompSwap(b_u32, 0u, value); |
| atomic_compare_result_6.exchanged = atomic_compare_result_6.old_value == 0u; |
| atomic_compare_exchange_resultu32 r1 = atomic_compare_result_6; |
| atomic_compare_exchange_resultu32 atomic_compare_result_7; |
| atomic_compare_result_7.old_value = atomicCompSwap(b_u32, 0u, value); |
| atomic_compare_result_7.exchanged = atomic_compare_result_7.old_value == 0u; |
| atomic_compare_exchange_resultu32 r2 = atomic_compare_result_7; |
| atomic_compare_exchange_resultu32 atomic_compare_result_8; |
| atomic_compare_result_8.old_value = atomicCompSwap(b_u32, 0u, value); |
| atomic_compare_result_8.exchanged = atomic_compare_result_8.old_value == 0u; |
| atomic_compare_exchange_resultu32 r3 = atomic_compare_result_8; |
| } |
| { |
| int value = 42; |
| atomic_compare_exchange_resulti32 atomic_compare_result_9; |
| atomic_compare_result_9.old_value = atomicCompSwap(b_i32, 0, value); |
| atomic_compare_result_9.exchanged = atomic_compare_result_9.old_value == 0; |
| atomic_compare_exchange_resulti32 r1 = atomic_compare_result_9; |
| atomic_compare_exchange_resulti32 atomic_compare_result_10; |
| atomic_compare_result_10.old_value = atomicCompSwap(b_i32, 0, value); |
| atomic_compare_result_10.exchanged = atomic_compare_result_10.old_value == 0; |
| atomic_compare_exchange_resulti32 r2 = atomic_compare_result_10; |
| atomic_compare_exchange_resulti32 atomic_compare_result_11; |
| atomic_compare_result_11.old_value = atomicCompSwap(b_i32, 0, value); |
| atomic_compare_result_11.exchanged = atomic_compare_result_11.old_value == 0; |
| atomic_compare_exchange_resulti32 r3 = atomic_compare_result_11; |
| } |
| } |
| |
| layout(local_size_x = 16, local_size_y = 1, local_size_z = 1) in; |
| void main() { |
| tint_symbol(gl_LocalInvocationIndex); |
| return; |
| } |