Ben Clayton | 47dd301 | 2023-04-26 18:27:53 +0000 | [diff] [blame] | 1 | struct atomic_compare_exchange_result_u32 { |
Antonio Maiorano | f99671b | 2022-06-23 13:14:54 +0000 | [diff] [blame] | 2 | uint old_value; |
| 3 | bool exchanged; |
| 4 | }; |
| 5 | groupshared uint arg_0; |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 6 | |
Antonio Maiorano | f99671b | 2022-06-23 13:14:54 +0000 | [diff] [blame] | 7 | void atomicCompareExchangeWeak_83580d() { |
| 8 | uint arg_1 = 1u; |
| 9 | uint arg_2 = 1u; |
Ben Clayton | 47dd301 | 2023-04-26 18:27:53 +0000 | [diff] [blame] | 10 | atomic_compare_exchange_result_u32 atomic_result = (atomic_compare_exchange_result_u32)0; |
Antonio Maiorano | f99671b | 2022-06-23 13:14:54 +0000 | [diff] [blame] | 11 | uint atomic_compare_value = arg_1; |
| 12 | InterlockedCompareExchange(arg_0, atomic_compare_value, arg_2, atomic_result.old_value); |
| 13 | atomic_result.exchanged = atomic_result.old_value == atomic_compare_value; |
Ben Clayton | 47dd301 | 2023-04-26 18:27:53 +0000 | [diff] [blame] | 14 | atomic_compare_exchange_result_u32 res = atomic_result; |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 15 | } |
| 16 | |
Antonio Maiorano | f99671b | 2022-06-23 13:14:54 +0000 | [diff] [blame] | 17 | struct tint_symbol_1 { |
| 18 | uint local_invocation_index : SV_GroupIndex; |
| 19 | }; |
| 20 | |
| 21 | void compute_main_inner(uint local_invocation_index) { |
| 22 | { |
| 23 | uint atomic_result_1 = 0u; |
| 24 | InterlockedExchange(arg_0, 0u, atomic_result_1); |
| 25 | } |
| 26 | GroupMemoryBarrierWithGroupSync(); |
Ben Clayton | c0af5c5 | 2022-06-02 14:36:10 +0000 | [diff] [blame] | 27 | atomicCompareExchangeWeak_83580d(); |
| 28 | } |
| 29 | |
Antonio Maiorano | f99671b | 2022-06-23 13:14:54 +0000 | [diff] [blame] | 30 | [numthreads(1, 1, 1)] |
| 31 | void compute_main(tint_symbol_1 tint_symbol) { |
| 32 | compute_main_inner(tint_symbol.local_invocation_index); |
| 33 | return; |
| 34 | } |