@group(1) @binding(0) var arg_0 : texture_2d<i32>;

fn textureLoad2d(texture : texture_2d<i32>, coords : vec2<i32>, level : i32) -> vec4<i32> {
  return textureLoad(texture, coords, level);
}

fn doTextureLoad() {
  var res : vec4<i32> = textureLoad2d(arg_0, vec2<i32>(), 0);
}

@stage(vertex)
fn vertex_main() -> @builtin(position) vec4<f32> {
  doTextureLoad();
  return vec4<f32>();
}

@stage(fragment)
fn fragment_main() {
  doTextureLoad();
}

@stage(compute) @workgroup_size(1)
fn compute_main() {
  doTextureLoad();
}
