#include <metal_stdlib>

using namespace metal;
struct Constants {
  int level;
};
struct Result {
  /* 0x0000 */ float values[1];
};

void tint_symbol_inner(uint3 GlobalInvocationID, texture2d_array<float, access::sample> tint_symbol_1, device Result* const tint_symbol_2) {
  uint flatIndex = ((((2u * 2u) * GlobalInvocationID[2]) + (2u * GlobalInvocationID[1])) + GlobalInvocationID[0]);
  flatIndex = (flatIndex * 1u);
  float4 texel = tint_symbol_1.read(uint2(int2(uint3(GlobalInvocationID).xy)), 0, 0);
  for(uint i = 0u; (i < 1u); i = (i + 1u)) {
    (*(tint_symbol_2)).values[(flatIndex + i)] = texel[0];
  }
}

kernel void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(0)]], device Result* tint_symbol_4 [[buffer(0)]], uint3 GlobalInvocationID [[thread_position_in_grid]]) {
  tint_symbol_inner(GlobalInvocationID, tint_symbol_3, tint_symbol_4);
  return;
}

