48 lines
1.0 KiB
GLSL
48 lines
1.0 KiB
GLSL
#version 310 es
|
|
precision highp 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;
|
|
}
|