| #version 310 es |
| precision mediump float; |
| |
| struct atomic_compare_exchange_resulti32 { |
| int old_value; |
| bool exchanged; |
| }; |
| |
| |
| bool tint_discarded = false; |
| struct tint_symbol_1 { |
| int old_value; |
| bool exchanged; |
| }; |
| |
| layout(location = 0) out int value; |
| layout(binding = 0, std430) buffer a_block_ssbo { |
| int inner; |
| } a; |
| |
| int foo() { |
| tint_discarded = true; |
| int x = 0; |
| tint_symbol_1 tint_symbol = tint_symbol_1(0, false); |
| if (!(tint_discarded)) { |
| atomic_compare_exchange_resulti32 atomic_compare_result; |
| atomic_compare_result.old_value = atomicCompSwap(a.inner, 0, 1); |
| atomic_compare_result.exchanged = atomic_compare_result.old_value == 0; |
| atomic_compare_exchange_resulti32 tint_symbol_2 = atomic_compare_result; |
| tint_symbol.old_value = tint_symbol_2.old_value; |
| tint_symbol.exchanged = tint_symbol_2.exchanged; |
| } |
| tint_symbol_1 result = tint_symbol; |
| if (result.exchanged) { |
| x = result.old_value; |
| } |
| return x; |
| } |
| |
| void main() { |
| int inner_result = foo(); |
| value = inner_result; |
| if (tint_discarded) { |
| discard; |
| } |
| return; |
| } |