dawn-cmake/test/tint/statements/discard/atomic_cmpxchg.wgsl.expected.glsl
Ben Clayton f1f56b2d3c tint/writer/glsl: Set default precision to highp
WGSL states that `f32` is a IEEE-754 binary32. mediump precision guarantees are much smaller than highp, and using mediump can break code generated by tint.

Change-Id: I8a129c4c8ac078c785e0d5d7d21f19ed6b3620b5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/123400
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Stephen White <senorblanco@chromium.org>
2023-03-09 19:58:23 +00:00

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;
}