struct Inner {
  int scalar_i32;
  float scalar_f32;
};


RWByteAddressBuffer sb : register(u0);
void v(uint offset, Inner obj) {
  sb.Store((offset + 0u), asuint(obj.scalar_i32));
  sb.Store((offset + 4u), asuint(obj.scalar_f32));
}

void v_1(uint offset, Inner obj[4]) {
  {
    uint v_2 = 0u;
    v_2 = 0u;
    while(true) {
      uint v_3 = v_2;
      if ((v_3 >= 4u)) {
        break;
      }
      Inner v_4 = obj[v_3];
      v((offset + (v_3 * 8u)), v_4);
      {
        v_2 = (v_3 + 1u);
      }
      continue;
    }
  }
}

void v_5(uint offset, float3 obj[2]) {
  {
    uint v_6 = 0u;
    v_6 = 0u;
    while(true) {
      uint v_7 = v_6;
      if ((v_7 >= 2u)) {
        break;
      }
      sb.Store3((offset + (v_7 * 16u)), asuint(obj[v_7]));
      {
        v_6 = (v_7 + 1u);
      }
      continue;
    }
  }
}

void v_8(uint offset, float4x4 obj) {
  sb.Store4((offset + 0u), asuint(obj[0u]));
  sb.Store4((offset + 16u), asuint(obj[1u]));
  sb.Store4((offset + 32u), asuint(obj[2u]));
  sb.Store4((offset + 48u), asuint(obj[3u]));
}

void v_9(uint offset, float4x3 obj) {
  sb.Store3((offset + 0u), asuint(obj[0u]));
  sb.Store3((offset + 16u), asuint(obj[1u]));
  sb.Store3((offset + 32u), asuint(obj[2u]));
  sb.Store3((offset + 48u), asuint(obj[3u]));
}

void v_10(uint offset, float4x2 obj) {
  sb.Store2((offset + 0u), asuint(obj[0u]));
  sb.Store2((offset + 8u), asuint(obj[1u]));
  sb.Store2((offset + 16u), asuint(obj[2u]));
  sb.Store2((offset + 24u), asuint(obj[3u]));
}

void v_11(uint offset, float3x4 obj) {
  sb.Store4((offset + 0u), asuint(obj[0u]));
  sb.Store4((offset + 16u), asuint(obj[1u]));
  sb.Store4((offset + 32u), asuint(obj[2u]));
}

void v_12(uint offset, float3x3 obj) {
  sb.Store3((offset + 0u), asuint(obj[0u]));
  sb.Store3((offset + 16u), asuint(obj[1u]));
  sb.Store3((offset + 32u), asuint(obj[2u]));
}

void v_13(uint offset, float3x2 obj) {
  sb.Store2((offset + 0u), asuint(obj[0u]));
  sb.Store2((offset + 8u), asuint(obj[1u]));
  sb.Store2((offset + 16u), asuint(obj[2u]));
}

void v_14(uint offset, float2x4 obj) {
  sb.Store4((offset + 0u), asuint(obj[0u]));
  sb.Store4((offset + 16u), asuint(obj[1u]));
}

void v_15(uint offset, float2x3 obj) {
  sb.Store3((offset + 0u), asuint(obj[0u]));
  sb.Store3((offset + 16u), asuint(obj[1u]));
}

void v_16(uint offset, float2x2 obj) {
  sb.Store2((offset + 0u), asuint(obj[0u]));
  sb.Store2((offset + 8u), asuint(obj[1u]));
}

[numthreads(1, 1, 1)]
void main() {
  sb.Store(0u, asuint(0.0f));
  sb.Store(4u, asuint(0));
  sb.Store(8u, 0u);
  sb.Store2(16u, asuint((0.0f).xx));
  sb.Store2(24u, asuint((0).xx));
  sb.Store2(32u, (0u).xx);
  sb.Store3(48u, asuint((0.0f).xxx));
  sb.Store3(64u, asuint((0).xxx));
  sb.Store3(80u, (0u).xxx);
  sb.Store4(96u, asuint((0.0f).xxxx));
  sb.Store4(112u, asuint((0).xxxx));
  sb.Store4(128u, (0u).xxxx);
  v_16(144u, float2x2((0.0f).xx, (0.0f).xx));
  v_15(160u, float2x3((0.0f).xxx, (0.0f).xxx));
  v_14(192u, float2x4((0.0f).xxxx, (0.0f).xxxx));
  v_13(224u, float3x2((0.0f).xx, (0.0f).xx, (0.0f).xx));
  v_12(256u, float3x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx));
  v_11(304u, float3x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx));
  v_10(352u, float4x2((0.0f).xx, (0.0f).xx, (0.0f).xx, (0.0f).xx));
  v_9(384u, float4x3((0.0f).xxx, (0.0f).xxx, (0.0f).xxx, (0.0f).xxx));
  v_8(448u, float4x4((0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx, (0.0f).xxxx));
  float3 v_17[2] = (float3[2])0;
  v_5(512u, v_17);
  Inner v_18 = (Inner)0;
  v(544u, v_18);
  Inner v_19[4] = (Inner[4])0;
  v_1(552u, v_19);
}

