blob: 75776fcd23b1b85f2c92d59c02cdd65ca40033a6 [file] [log] [blame]
#include <metal_stdlib>
using namespace metal;
#define TINT_ISOLATE_UB(VOLATILE_NAME) \
volatile bool VOLATILE_NAME = true; \
if (VOLATILE_NAME)
struct tint_private_vars_struct {
bool tint_discarded;
};
int tint_ftoi(float v) {
return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
}
struct tint_symbol_1 {
float in [[user(locn0)]];
float2 coord [[user(locn1)]];
};
struct tint_symbol_2 {
int value [[color(0)]];
};
int foo_inner(float in, float2 coord, thread tint_private_vars_struct* const tint_private_vars, texture2d<float, access::sample> tint_symbol_4, sampler tint_symbol_5, device atomic_int* const tint_symbol_6) {
if ((in == 0.0f)) {
(*(tint_private_vars)).tint_discarded = true;
}
int result = tint_ftoi(tint_symbol_4.sample(tint_symbol_5, coord)[0]);
{
int i = 0;
TINT_ISOLATE_UB(tint_volatile_true) while(true) {
if (!((i < 10))) {
break;
}
{
result = as_type<int>((as_type<uint>(result) + as_type<uint>(i)));
}
{
int tint_symbol_3 = 0;
if (!((*(tint_private_vars)).tint_discarded)) {
tint_symbol_3 = atomic_fetch_add_explicit(tint_symbol_6, 1, memory_order_relaxed);
}
i = tint_symbol_3;
}
}
}
return result;
}
fragment tint_symbol_2 foo(texture2d<float, access::sample> tint_symbol_7 [[texture(0)]], sampler tint_symbol_8 [[sampler(0)]], device atomic_int* tint_symbol_9 [[buffer(0)]], tint_symbol_1 tint_symbol [[stage_in]]) {
thread tint_private_vars_struct tint_private_vars = {};
tint_private_vars.tint_discarded = false;
int const inner_result = foo_inner(tint_symbol.in, tint_symbol.coord, &(tint_private_vars), tint_symbol_7, tint_symbol_8, tint_symbol_9);
tint_symbol_2 wrapper_result = {};
wrapper_result.value = inner_result;
if (tint_private_vars.tint_discarded) {
discard_fragment();
}
return wrapper_result;
}