[[group(1), binding(0)]] var arg_0 : texture_depth_multisampled_2d;

var<private> tint_symbol_1 : vec4<f32> = vec4<f32>();

fn textureLoad_6273b1() {
  var res : f32 = 0.0;
  let x_17 : vec4<f32> = vec4<f32>(textureLoad(arg_0, vec2<i32>(), 1), 0.0, 0.0, 0.0);
  res = x_17.x;
  return;
}

fn tint_symbol_2(tint_symbol : vec4<f32>) {
  tint_symbol_1 = tint_symbol;
  return;
}

fn vertex_main_1() {
  textureLoad_6273b1();
  tint_symbol_2(vec4<f32>());
  return;
}

struct vertex_main_out {
  [[builtin(position)]]
  tint_symbol_1_1 : vec4<f32>;
};

[[stage(vertex)]]
fn vertex_main() -> vertex_main_out {
  vertex_main_1();
  return vertex_main_out(tint_symbol_1);
}

fn fragment_main_1() {
  textureLoad_6273b1();
  return;
}

[[stage(fragment)]]
fn fragment_main() {
  fragment_main_1();
}

fn compute_main_1() {
  textureLoad_6273b1();
  return;
}

[[stage(compute), workgroup_size(1, 1, 1)]]
fn compute_main() {
  compute_main_1();
}
