void set_matrix_column(inout float3x3 mat, int col, float3 val) {
  switch (col) {
    case 0: mat[0] = val; break;
    case 1: mat[1] = val; break;
    case 2: mat[2] = val; break;
  }
}

struct S {
  float3x3 m;
};
struct S2 {
  float3x3 m[1];
};
struct S3 {
  S s;
};
struct S4 {
  S s[1];
};

RWByteAddressBuffer buffer0 : register(u0);
RWByteAddressBuffer buffer1 : register(u1);
RWByteAddressBuffer buffer2 : register(u2);
RWByteAddressBuffer buffer3 : register(u3);
RWByteAddressBuffer buffer4 : register(u4);
RWByteAddressBuffer buffer5 : register(u5);
RWByteAddressBuffer buffer6 : register(u6);
RWByteAddressBuffer buffer7 : register(u7);

void buffer0_store(uint offset, float3x3 value) {
  buffer0.Store3((offset + 0u), asuint(value[0u]));
  buffer0.Store3((offset + 16u), asuint(value[1u]));
  buffer0.Store3((offset + 32u), asuint(value[2u]));
}

void buffer1_store_1(uint offset, float3x3 value) {
  buffer1.Store3((offset + 0u), asuint(value[0u]));
  buffer1.Store3((offset + 16u), asuint(value[1u]));
  buffer1.Store3((offset + 32u), asuint(value[2u]));
}

void buffer1_store(uint offset, S value) {
  buffer1_store_1((offset + 0u), value.m);
}

void buffer2_store_2(uint offset, float3x3 value) {
  buffer2.Store3((offset + 0u), asuint(value[0u]));
  buffer2.Store3((offset + 16u), asuint(value[1u]));
  buffer2.Store3((offset + 32u), asuint(value[2u]));
}

void buffer2_store_1(uint offset, float3x3 value[1]) {
  float3x3 array_1[1] = value;
  {
    for(uint i = 0u; (i < 1u); i = (i + 1u)) {
      buffer2_store_2((offset + (i * 48u)), array_1[i]);
    }
  }
}

void buffer2_store(uint offset, S2 value) {
  buffer2_store_1((offset + 0u), value.m);
}

void buffer3_store_2(uint offset, float3x3 value) {
  buffer3.Store3((offset + 0u), asuint(value[0u]));
  buffer3.Store3((offset + 16u), asuint(value[1u]));
  buffer3.Store3((offset + 32u), asuint(value[2u]));
}

void buffer3_store_1(uint offset, S value) {
  buffer3_store_2((offset + 0u), value.m);
}

void buffer3_store(uint offset, S3 value) {
  buffer3_store_1((offset + 0u), value.s);
}

void buffer4_store_3(uint offset, float3x3 value) {
  buffer4.Store3((offset + 0u), asuint(value[0u]));
  buffer4.Store3((offset + 16u), asuint(value[1u]));
  buffer4.Store3((offset + 32u), asuint(value[2u]));
}

void buffer4_store_2(uint offset, S value) {
  buffer4_store_3((offset + 0u), value.m);
}

void buffer4_store_1(uint offset, S value[1]) {
  S array_2[1] = value;
  {
    for(uint i_1 = 0u; (i_1 < 1u); i_1 = (i_1 + 1u)) {
      buffer4_store_2((offset + (i_1 * 48u)), array_2[i_1]);
    }
  }
}

void buffer4_store(uint offset, S4 value) {
  buffer4_store_1((offset + 0u), value.s);
}

void buffer5_store_1(uint offset, float3x3 value) {
  buffer5.Store3((offset + 0u), asuint(value[0u]));
  buffer5.Store3((offset + 16u), asuint(value[1u]));
  buffer5.Store3((offset + 32u), asuint(value[2u]));
}

void buffer5_store(uint offset, float3x3 value[1]) {
  float3x3 array_3[1] = value;
  {
    for(uint i_2 = 0u; (i_2 < 1u); i_2 = (i_2 + 1u)) {
      buffer5_store_1((offset + (i_2 * 48u)), array_3[i_2]);
    }
  }
}

void buffer6_store_2(uint offset, float3x3 value) {
  buffer6.Store3((offset + 0u), asuint(value[0u]));
  buffer6.Store3((offset + 16u), asuint(value[1u]));
  buffer6.Store3((offset + 32u), asuint(value[2u]));
}

void buffer6_store_1(uint offset, S value) {
  buffer6_store_2((offset + 0u), value.m);
}

void buffer6_store(uint offset, S value[1]) {
  S array_4[1] = value;
  {
    for(uint i_3 = 0u; (i_3 < 1u); i_3 = (i_3 + 1u)) {
      buffer6_store_1((offset + (i_3 * 48u)), array_4[i_3]);
    }
  }
}

void buffer7_store_3(uint offset, float3x3 value) {
  buffer7.Store3((offset + 0u), asuint(value[0u]));
  buffer7.Store3((offset + 16u), asuint(value[1u]));
  buffer7.Store3((offset + 32u), asuint(value[2u]));
}

void buffer7_store_2(uint offset, float3x3 value[1]) {
  float3x3 array_6[1] = value;
  {
    for(uint i_4 = 0u; (i_4 < 1u); i_4 = (i_4 + 1u)) {
      buffer7_store_3((offset + (i_4 * 48u)), array_6[i_4]);
    }
  }
}

void buffer7_store_1(uint offset, S2 value) {
  buffer7_store_2((offset + 0u), value.m);
}

void buffer7_store(uint offset, S2 value[1]) {
  S2 array_5[1] = value;
  {
    for(uint i_5 = 0u; (i_5 < 1u); i_5 = (i_5 + 1u)) {
      buffer7_store_1((offset + (i_5 * 48u)), array_5[i_5]);
    }
  }
}

[numthreads(1, 1, 1)]
void main() {
  float3x3 m = float3x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
  {
    for(uint c = 0u; (c < 3u); c = (c + 1u)) {
      set_matrix_column(m, c, float3(float(((c * 3u) + 1u)), float(((c * 3u) + 2u)), float(((c * 3u) + 3u))));
    }
  }
  {
    float3x3 a = m;
    buffer0_store(0u, a);
  }
  {
    S a = {m};
    buffer1_store(0u, a);
  }
  {
    float3x3 tint_symbol[1] = {m};
    S2 a = {tint_symbol};
    buffer2_store(0u, a);
  }
  {
    S tint_symbol_1 = {m};
    S3 a = {tint_symbol_1};
    buffer3_store(0u, a);
  }
  {
    S tint_symbol_2 = {m};
    S tint_symbol_3[1] = {tint_symbol_2};
    S4 a = {tint_symbol_3};
    buffer4_store(0u, a);
  }
  {
    float3x3 a[1] = {m};
    buffer5_store(0u, a);
  }
  {
    S tint_symbol_4 = {m};
    S a[1] = {tint_symbol_4};
    buffer6_store(0u, a);
  }
  {
    float3x3 tint_symbol_5[1] = {m};
    S2 tint_symbol_6 = {tint_symbol_5};
    S2 a[1] = {tint_symbol_6};
    buffer7_store(0u, a);
  }
  return;
}
