#include <metal_stdlib>

using namespace metal;
struct tint_private_vars_struct {
  float4 my_global;
};

void foo_member_initialize(thread tint_private_vars_struct* const tint_private_vars, const constant float* const tint_symbol, texture2d<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
  bool2 vb2 = false;
  vb2[0] = ((*(tint_private_vars)).my_global[2] != 0.0f);
  vb2[0] = (*(tint_symbol) == -1.0f);
  vb2 = bool2((*(tint_symbol) == -1.0f), false);
  if (vb2[0]) {
    float4 const r = tint_symbol_1.sample(tint_symbol_2, float2(0.0f), bias(0.0f));
  }
}

void foo_default_initialize(thread tint_private_vars_struct* const tint_private_vars, const constant float* const tint_symbol_3, texture2d<float, access::sample> tint_symbol_4, sampler tint_symbol_5) {
  bool2 vb2 = false;
  vb2[0] = ((*(tint_private_vars)).my_global[2] != 0.0f);
  vb2[0] = (*(tint_symbol_3) == -1.0f);
  vb2 = bool2(false);
  if (vb2[0]) {
    float4 const r = tint_symbol_4.sample(tint_symbol_5, float2(0.0f), bias(0.0f));
  }
}

