#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  device float* prevent_dce;
  depth2d_array<float, access::sample> arg_0;
  sampler arg_1;
};

float textureSampleCompare_dd431d(tint_module_vars_struct tint_module_vars) {
  float2 arg_2 = float2(1.0f);
  int arg_3 = 1;
  float arg_4 = 1.0f;
  float2 const v = arg_2;
  float const v_1 = arg_4;
  float res = tint_module_vars.arg_0.sample_compare(tint_module_vars.arg_1, v, max(arg_3, 0), v_1);
  return res;
}

fragment void fragment_main(device float* prevent_dce [[buffer(0)]], depth2d_array<float, access::sample> arg_0 [[texture(0)]], sampler arg_1 [[sampler(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce, .arg_0=arg_0, .arg_1=arg_1};
  (*tint_module_vars.prevent_dce) = textureSampleCompare_dd431d(tint_module_vars);
}
