#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;
}

