#version 310 es
precision mediump float;

struct Constants {
  int level;
};

layout(binding = 3) buffer Result_1 {
  float values[];
} result;
struct tint_symbol_2 {
  uvec3 GlobalInvocationID;
};

uniform highp sampler2DArray myTexture_1;
void tint_symbol_inner(uvec3 GlobalInvocationID) {
  uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
  flatIndex = (flatIndex * 1u);
  vec4 texel = texelFetch(myTexture_1, ivec3(ivec2(GlobalInvocationID.xy), 0), 0);
  {
    for(uint i = 0u; (i < 1u); i = (i + 1u)) {
      result.values[(flatIndex + i)] = texel.r;
    }
  }
}

layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void tint_symbol(tint_symbol_2 tint_symbol_1) {
  tint_symbol_inner(tint_symbol_1.GlobalInvocationID);
  return;
}


void main() {
  tint_symbol_2 inputs;
  inputs.GlobalInvocationID = gl_GlobalInvocationID;
  tint_symbol(inputs);
}

