Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 1 | #version 310 es |
| 2 | |
Ben Clayton | 47dd301 | 2023-04-26 18:27:53 +0000 | [diff] [blame] | 3 | struct atomic_compare_exchange_result_i32 { |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 4 | int old_value; |
| 5 | bool exchanged; |
| 6 | }; |
| 7 | |
| 8 | |
| 9 | shared int arg_0; |
Ben Clayton | 9dc42ad | 2024-02-05 18:01:33 +0000 | [diff] [blame] | 10 | void tint_zero_workgroup_memory(uint local_idx) { |
Antonio Maiorano | f5abb82 | 2024-02-28 01:01:02 +0000 | [diff] [blame] | 11 | if ((local_idx < 1u)) { |
Ben Clayton | 9dc42ad | 2024-02-05 18:01:33 +0000 | [diff] [blame] | 12 | atomicExchange(arg_0, 0); |
| 13 | } |
| 14 | barrier(); |
| 15 | } |
| 16 | |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 17 | void atomicCompareExchangeWeak_e88938() { |
| 18 | int arg_1 = 1; |
| 19 | int arg_2 = 1; |
Ben Clayton | 47dd301 | 2023-04-26 18:27:53 +0000 | [diff] [blame] | 20 | atomic_compare_exchange_result_i32 atomic_compare_result; |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 21 | atomic_compare_result.old_value = atomicCompSwap(arg_0, arg_1, arg_2); |
| 22 | atomic_compare_result.exchanged = atomic_compare_result.old_value == arg_1; |
Ben Clayton | 47dd301 | 2023-04-26 18:27:53 +0000 | [diff] [blame] | 23 | atomic_compare_exchange_result_i32 res = atomic_compare_result; |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 24 | } |
| 25 | |
| 26 | void compute_main(uint local_invocation_index) { |
Ben Clayton | 9dc42ad | 2024-02-05 18:01:33 +0000 | [diff] [blame] | 27 | tint_zero_workgroup_memory(local_invocation_index); |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 28 | atomicCompareExchangeWeak_e88938(); |
| 29 | } |
| 30 | |
| 31 | layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; |
| 32 | void main() { |
| 33 | compute_main(gl_LocalInvocationIndex); |
| 34 | return; |
| 35 | } |