RWByteAddressBuffer s : register(u0, space0);

struct tint_symbol_1 {
  uint idx : SV_GroupIndex;
};

void tint_symbol_8(RWByteAddressBuffer buffer, uint offset, float2x3 value) {
  buffer.Store3((offset + 0u), asuint(value[0u]));
  buffer.Store3((offset + 16u), asuint(value[1u]));
}

void tint_symbol_9(RWByteAddressBuffer buffer, uint offset, float3x2 value) {
  buffer.Store2((offset + 0u), asuint(value[0u]));
  buffer.Store2((offset + 8u), asuint(value[1u]));
  buffer.Store2((offset + 16u), asuint(value[2u]));
}

void tint_symbol_11(RWByteAddressBuffer buffer, uint offset, int4 value[4]) {
  int4 array[4] = value;
  {
    for(uint i_1 = 0u; (i_1 < 4u); i_1 = (i_1 + 1u)) {
      buffer.Store4((offset + (i_1 * 16u)), asuint(array[i_1]));
    }
  }
}

void main_inner(uint idx) {
  s.Store3((176u * idx), asuint((0).xxx));
  s.Store(((176u * idx) + 12u), asuint(0));
  s.Store3(((176u * idx) + 16u), asuint((0u).xxx));
  s.Store(((176u * idx) + 28u), asuint(0u));
  s.Store3(((176u * idx) + 32u), asuint((0.0f).xxx));
  s.Store(((176u * idx) + 44u), asuint(0.0f));
  tint_symbol_8(s, ((176u * idx) + 48u), float2x3((0.0f).xxx, (0.0f).xxx));
  tint_symbol_9(s, ((176u * idx) + 80u), float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx));
  const int4 tint_symbol_13[4] = (int4[4])0;
  tint_symbol_11(s, ((176u * idx) + 112u), tint_symbol_13);
}

[numthreads(1, 1, 1)]
void main(tint_symbol_1 tint_symbol) {
  main_inner(tint_symbol.idx);
  return;
}
