Przeglądaj źródła

Updated spirv-cross.

Бранимир Караџић 6 lat temu
rodzic
commit
e826eb5af3
100 zmienionych plików z 3900 dodań i 291 usunięć
  1. 2 1
      3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/control-dependent-in-branch.desktop.frag
  2. 2 1
      3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/query-lod.desktop.frag
  3. 3 2
      3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/block-name-alias-global.asm.comp
  4. 22 7
      3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/variable-pointers-2.asm.comp
  5. 1 13
      3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag
  6. 11 9
      3rdparty/spirv-cross/reference/opt/shaders-msl/comp/struct-packing.comp
  7. 1 1
      3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/rowmajor.flatten.vert
  8. 1 1
      3rdparty/spirv-cross/reference/opt/shaders-msl/frag/ubo_layout.frag
  9. 3 5
      3rdparty/spirv-cross/reference/opt/shaders-msl/vert/packed_matrix.vert
  10. 2 10
      3rdparty/spirv-cross/reference/opt/shaders-msl/vert/read-from-row-major-array.vert
  11. 16 39
      3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp
  12. 2 3
      3rdparty/spirv-cross/reference/opt/shaders/amd/shader_ballot.comp
  13. 4 2
      3rdparty/spirv-cross/reference/opt/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag
  14. 1 13
      3rdparty/spirv-cross/reference/opt/shaders/asm/frag/vector-shuffle-oom.asm.frag
  15. 6 17
      3rdparty/spirv-cross/reference/opt/shaders/frag/loop-dominator-and-switch-default.frag
  16. 3 2
      3rdparty/spirv-cross/reference/opt/shaders/legacy/vert/struct-varying.legacy.vert
  17. 2 1
      3rdparty/spirv-cross/reference/shaders-hlsl/frag/control-dependent-in-branch.desktop.frag
  18. 2 1
      3rdparty/spirv-cross/reference/shaders-hlsl/frag/query-lod.desktop.frag
  19. 1 2
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag
  20. 16 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/composite-extract-row-major.asm.comp
  21. 19 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-2.asm.comp
  22. 20 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-3.asm.comp
  23. 20 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-4.asm.comp
  24. 20 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-5.asm.comp
  25. 23 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding.asm.comp
  26. 21 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/packed-vector-extract-insert.asm.comp
  27. 16 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/row-major-split-access-chain.asm.comp
  28. 1 18
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/vert/op-load-forced-temporary-array.asm.frag
  29. 4 2
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/comp/loop.comp
  30. 76 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-scalar.comp
  31. 82 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-std140.comp
  32. 76 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-std430.comp
  33. 82 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp
  34. 83 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-std140.comp
  35. 77 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-std430.comp
  36. 78 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-scalar.comp
  37. 87 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-std140.comp
  38. 78 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-std430.comp
  39. 81 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp
  40. 82 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-std140.comp
  41. 76 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-std430.comp
  42. 92 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-scalar.comp
  43. 77 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-std140.comp
  44. 77 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-std430.comp
  45. 89 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp
  46. 78 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-std140.comp
  47. 78 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-std430.comp
  48. 76 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-scalar.comp
  49. 85 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-std140.comp
  50. 76 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-std430.comp
  51. 88 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp
  52. 77 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-std140.comp
  53. 77 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-std430.comp
  54. 78 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-scalar.comp
  55. 78 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-std140.comp
  56. 78 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-std430.comp
  57. 19 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-row-major.comp
  58. 23 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major-2.comp
  59. 21 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major.comp
  60. 23 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major-2.comp
  61. 21 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major.comp
  62. 19 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/member-padding.comp
  63. 40 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/std140-array-of-vectors.comp
  64. 25 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-alignment.comp
  65. 20 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing-array-of-scalar.comp
  66. 31 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing-recursive.comp
  67. 27 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing.comp
  68. 52 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-size-padding-array-of-array.comp
  69. 52 0
      3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-size-padding.comp
  70. 3 2
      3rdparty/spirv-cross/reference/shaders-msl/asm/comp/block-name-alias-global.asm.comp
  71. 23 5
      3rdparty/spirv-cross/reference/shaders-msl/asm/comp/variable-pointers-2.asm.comp
  72. 12 24
      3rdparty/spirv-cross/reference/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag
  73. 11 9
      3rdparty/spirv-cross/reference/shaders-msl/comp/struct-packing.comp
  74. 2 10
      3rdparty/spirv-cross/reference/shaders-msl/flatten/rowmajor.flatten.vert
  75. 1 1
      3rdparty/spirv-cross/reference/shaders-msl/frag/ubo_layout.frag
  76. 1 3
      3rdparty/spirv-cross/reference/shaders-msl/tesc/water_tess.tesc
  77. 3 5
      3rdparty/spirv-cross/reference/shaders-msl/vert/packed_matrix.vert
  78. 2 8
      3rdparty/spirv-cross/reference/shaders-msl/vert/read-from-row-major-array.vert
  79. 16 39
      3rdparty/spirv-cross/reference/shaders-msl/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp
  80. 1 2
      3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag
  81. 4 2
      3rdparty/spirv-cross/reference/shaders-no-opt/comp/loop.comp
  82. 12 24
      3rdparty/spirv-cross/reference/shaders/asm/frag/vector-shuffle-oom.asm.frag
  83. 1 2
      3rdparty/spirv-cross/reference/shaders/comp/generate_height.comp
  84. 1 3
      3rdparty/spirv-cross/reference/shaders/tesc/water_tess.tesc
  85. 1 2
      3rdparty/spirv-cross/reference/shaders/vert/ground.vert
  86. 48 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/composite-extract-row-major.asm.comp
  87. 56 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-2.asm.comp
  88. 48 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-3.asm.comp
  89. 61 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-4.asm.comp
  90. 54 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-5.asm.comp
  91. 56 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding.asm.comp
  92. 57 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/packed-vector-extract-insert.asm.comp
  93. 48 0
      3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/row-major-split-access-chain.asm.comp
  94. 86 0
      3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-scalar.comp
  95. 85 0
      3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-std140.comp
  96. 85 0
      3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-std430.comp
  97. 86 0
      3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp
  98. 85 0
      3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-std140.comp
  99. 85 0
      3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-std430.comp
  100. 86 0
      3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x4-scalar.comp

+ 2 - 1
3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/control-dependent-in-branch.desktop.frag

@@ -28,6 +28,7 @@ void frag_main()
     float4 _47 = ddy_fine(vInput);
     float4 _50 = fwidth(vInput);
     float _56_tmp = uSampler.CalculateLevelOfDetail(_uSampler_sampler, vInput.zw);
+    float2 _56 = _56_tmp.xx;
     if (vInput.y > 10.0f)
     {
         FragColor += _23;
@@ -40,7 +41,7 @@ void frag_main()
         FragColor += _44;
         FragColor += _47;
         FragColor += _50;
-        FragColor += float2(_56_tmp, _56_tmp).xyxy;
+        FragColor += _56.xyxy;
     }
 }
 

+ 2 - 1
3rdparty/spirv-cross/reference/opt/shaders-hlsl/frag/query-lod.desktop.frag

@@ -17,7 +17,8 @@ struct SPIRV_Cross_Output
 void frag_main()
 {
     float _19_tmp = uSampler.CalculateLevelOfDetail(_uSampler_sampler, vTexCoord);
-    FragColor = float2(_19_tmp, _19_tmp).xyxy;
+    float2 _19 = _19_tmp.xx;
+    FragColor = _19.xyxy;
 }
 
 SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)

+ 3 - 2
3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/block-name-alias-global.asm.comp

@@ -18,11 +18,12 @@ struct A_2
 {
     int a;
     int b;
+    char _m0_final_padding[8];
 };
 
 struct A_3
 {
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ A_2 Data[1024];
+    A_2 Data[1024];
 };
 
 struct B
@@ -32,7 +33,7 @@ struct B
 
 struct B_1
 {
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ A_2 Data[1024];
+    A_2 Data[1024];
 };
 
 kernel void main0(device A_1& C1 [[buffer(0)]], constant A_3& C2 [[buffer(1)]], device B& C3 [[buffer(2)]], constant B_1& C4 [[buffer(3)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]])

+ 22 - 7
3rdparty/spirv-cross/reference/opt/shaders-msl/asm/comp/variable-pointers-2.asm.comp

@@ -23,14 +23,29 @@ kernel void main0(device foo& buf [[buffer(0)]], constant bar& cb [[buffer(1)]],
     device foo* _45 = _71;
     thread uint3* _77 = _70 ? &gl_GlobalInvocationID : &gl_LocalInvocationID;
     thread uint3* _73 = _77;
-    for (device int* _52 = &_71->a[0u], * _55 = &buf.a[0u]; (*_52) != (*_55); )
+    device int* _52;
+    device int* _55;
+    _52 = &_71->a[0u];
+    _55 = &buf.a[0u];
+    int _57;
+    int _58;
+    for (;;)
     {
-        int _66 = ((*_52) + (*_55)) + int((*_77).x);
-        *_52 = _66;
-        *_55 = _66;
-        _52 = &_52[1u];
-        _55 = &_55[1u];
-        continue;
+        _57 = *_52;
+        _58 = *_55;
+        if (_57 != _58)
+        {
+            int _66 = (_57 + _58) + int((*_77).x);
+            *_52 = _66;
+            *_55 = _66;
+            _52 = &_52[1u];
+            _55 = &_55[1u];
+            continue;
+        }
+        else
+        {
+            break;
+        }
     }
 }
 

+ 1 - 13
3rdparty/spirv-cross/reference/opt/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag

@@ -115,7 +115,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _129 = _109;
     }
-    float3 _130 = _129 * 0.5;
     float2 _144 = fast::clamp(_82 + (float2(-1.0) * _7._m0.xy), _95, _96);
     float3 _156 = float3(_11._m5) * fast::clamp(_8.sample(_9, _144, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _160 = _12.sample(_13, _144, level(0.0));
@@ -129,7 +128,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _176 = _156;
     }
-    float3 _177 = _176 * 0.5;
     float2 _191 = fast::clamp(_82 + (float2(0.0, -1.0) * _7._m0.xy), _95, _96);
     float3 _203 = float3(_11._m5) * fast::clamp(_8.sample(_9, _191, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _207 = _12.sample(_13, _191, level(0.0));
@@ -143,7 +141,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _223 = _203;
     }
-    float3 _224 = _223 * 0.75;
     float2 _238 = fast::clamp(_82 + (float2(1.0, -1.0) * _7._m0.xy), _95, _96);
     float3 _250 = float3(_11._m5) * fast::clamp(_8.sample(_9, _238, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _254 = _12.sample(_13, _238, level(0.0));
@@ -157,7 +154,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _270 = _250;
     }
-    float3 _271 = _270 * 0.5;
     float2 _285 = fast::clamp(_82 + (float2(-2.0, 0.0) * _7._m0.xy), _95, _96);
     float3 _297 = float3(_11._m5) * fast::clamp(_8.sample(_9, _285, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _301 = _12.sample(_13, _285, level(0.0));
@@ -171,7 +167,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _317 = _297;
     }
-    float3 _318 = _317 * 0.5;
     float2 _332 = fast::clamp(_82 + (float2(-1.0, 0.0) * _7._m0.xy), _95, _96);
     float3 _344 = float3(_11._m5) * fast::clamp(_8.sample(_9, _332, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _348 = _12.sample(_13, _332, level(0.0));
@@ -185,7 +180,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _364 = _344;
     }
-    float3 _365 = _364 * 0.75;
     float2 _379 = fast::clamp(_82, _95, _96);
     float3 _391 = float3(_11._m5) * fast::clamp(_8.sample(_9, _379, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _395 = _12.sample(_13, _379, level(0.0));
@@ -199,7 +193,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _411 = _391;
     }
-    float3 _412 = _411 * 1.0;
     float2 _426 = fast::clamp(_82 + (float2(1.0, 0.0) * _7._m0.xy), _95, _96);
     float3 _438 = float3(_11._m5) * fast::clamp(_8.sample(_9, _426, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _442 = _12.sample(_13, _426, level(0.0));
@@ -213,7 +206,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _458 = _438;
     }
-    float3 _459 = _458 * 0.75;
     float2 _473 = fast::clamp(_82 + (float2(2.0, 0.0) * _7._m0.xy), _95, _96);
     float3 _485 = float3(_11._m5) * fast::clamp(_8.sample(_9, _473, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _489 = _12.sample(_13, _473, level(0.0));
@@ -227,7 +219,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _505 = _485;
     }
-    float3 _506 = _505 * 0.5;
     float2 _520 = fast::clamp(_82 + (float2(-1.0, 1.0) * _7._m0.xy), _95, _96);
     float3 _532 = float3(_11._m5) * fast::clamp(_8.sample(_9, _520, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _536 = _12.sample(_13, _520, level(0.0));
@@ -241,7 +232,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _552 = _532;
     }
-    float3 _553 = _552 * 0.5;
     float2 _567 = fast::clamp(_82 + (float2(0.0, 1.0) * _7._m0.xy), _95, _96);
     float3 _579 = float3(_11._m5) * fast::clamp(_8.sample(_9, _567, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _583 = _12.sample(_13, _567, level(0.0));
@@ -255,7 +245,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _599 = _579;
     }
-    float3 _600 = _599 * 0.75;
     float2 _614 = fast::clamp(_82 + _7._m0.xy, _95, _96);
     float3 _626 = float3(_11._m5) * fast::clamp(_8.sample(_9, _614, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _630 = _12.sample(_13, _614, level(0.0));
@@ -269,7 +258,6 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _646 = _626;
     }
-    float3 _647 = _646 * 0.5;
     float2 _661 = fast::clamp(_82 + (float2(0.0, 2.0) * _7._m0.xy), _95, _96);
     float3 _673 = float3(_11._m5) * fast::clamp(_8.sample(_9, _661, level(0.0)).w * _7._m1, 0.0, 1.0);
     float4 _677 = _12.sample(_13, _661, level(0.0));
@@ -283,7 +271,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _693 = _673;
     }
-    float3 _702 = ((((((((((((_130.xyz + _177).xyz + _224).xyz + _271).xyz + _318).xyz + _365).xyz + _412).xyz + _459).xyz + _506).xyz + _553).xyz + _600).xyz + _647).xyz + (_693 * 0.5)).xyz * float3(0.125);
+    float3 _702 = (((((((((((((_129 * 0.5).xyz + (_176 * 0.5)).xyz + (_223 * 0.75)).xyz + (_270 * 0.5)).xyz + (_317 * 0.5)).xyz + (_364 * 0.75)).xyz + (_411 * 1.0)).xyz + (_458 * 0.75)).xyz + (_505 * 0.5)).xyz + (_552 * 0.5)).xyz + (_599 * 0.75)).xyz + (_646 * 0.5)).xyz + (_693 * 0.5)).xyz * float3(0.125);
     _28 _704 = _74;
     _704._m0 = float4(_702.x, _702.y, _702.z, float4(0.0).w);
     _28 _705 = _704;

+ 11 - 9
3rdparty/spirv-cross/reference/opt/shaders-msl/comp/struct-packing.comp

@@ -3,12 +3,11 @@
 
 using namespace metal;
 
-typedef packed_float2 packed_rm_float2x3[3];
-
 struct S0
 {
     float2 a[1];
     float b;
+    char _m0_final_padding[4];
 };
 
 struct S1
@@ -21,6 +20,7 @@ struct S2
 {
     float3 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S3
@@ -45,6 +45,7 @@ struct Content
     S3 m3;
     float m4;
     S4 m3s[8];
+    char _m0_final_padding[8];
 };
 
 struct SSBO1
@@ -58,10 +59,8 @@ struct SSBO1
     float3x2 m3;
     float2x2 m4;
     float2x2 m5[9];
-    packed_rm_float2x3 m6[4][2];
-    char _m10_pad[8];
-    float3x2 m7;
-    char _m11_pad[8];
+    float3x2 m6[4][2];
+    float2x3 m7;
     float array[1];
 };
 
@@ -69,6 +68,7 @@ struct S0_1
 {
     float4 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S1_1
@@ -81,6 +81,7 @@ struct S2_1
 {
     float3 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S3_1
@@ -92,6 +93,7 @@ struct S3_1
 struct S4_1
 {
     float2 c;
+    char _m0_final_padding[8];
 };
 
 struct Content_1
@@ -104,8 +106,8 @@ struct Content_1
     S2_1 m2;
     S3_1 m3;
     float m4;
-    char _m8_pad[12];
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ S4_1 m3s[8];
+    char _m8_pad[8];
+    S4_1 m3s[8];
 };
 
 struct SSBO0
@@ -142,6 +144,6 @@ kernel void main0(device SSBO1& ssbo_430 [[buffer(0)]], device SSBO0& ssbo_140 [
     ssbo_430.content.m3s[5].c = _60.m3s[5].c;
     ssbo_430.content.m3s[6].c = _60.m3s[6].c;
     ssbo_430.content.m3s[7].c = _60.m3s[7].c;
-    ssbo_430.content.m1.a = ssbo_430.content.m3.a * float3x2(float2(ssbo_430.m6[1][1][0]), float2(ssbo_430.m6[1][1][1]), float2(ssbo_430.m6[1][1][2]));
+    ssbo_430.content.m1.a = ssbo_430.content.m3.a * ssbo_430.m6[1][1];
 }
 

+ 1 - 1
3rdparty/spirv-cross/reference/opt/shaders-msl/flatten/rowmajor.flatten.vert

@@ -7,7 +7,7 @@ struct UBO
 {
     float4x4 uMVPR;
     float4x4 uMVPC;
-    float2x4 uMVP;
+    float4x4 uMVP;
 };
 
 struct main0_out

+ 1 - 1
3rdparty/spirv-cross/reference/opt/shaders-msl/frag/ubo_layout.frag

@@ -31,7 +31,7 @@ struct main0_out
 fragment main0_out main0(constant UBO1& ubo1 [[buffer(0)]], constant UBO2& ubo0 [[buffer(1)]])
 {
     main0_out out = {};
-    out.FragColor = transpose(ubo1.foo.foo)[0] + ubo0.foo.foo[0];
+    out.FragColor = float4(ubo1.foo.foo[0][0], ubo1.foo.foo[1][0], ubo1.foo.foo[2][0], ubo1.foo.foo[3][0]) + ubo0.foo.foo[0];
     return out;
 }
 

+ 3 - 5
3rdparty/spirv-cross/reference/opt/shaders-msl/vert/packed_matrix.vert

@@ -3,12 +3,10 @@
 
 using namespace metal;
 
-typedef packed_float4 packed_rm_float4x3[3];
-
 struct _15
 {
-    packed_rm_float4x3 _m0;
-    packed_rm_float4x3 _m1;
+    float3x4 _m0;
+    float3x4 _m1;
 };
 
 struct _42
@@ -41,7 +39,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant _15& _17 [[buffer(0)]]
 {
     main0_out out = {};
     float4 _70 = _44._m0 * float4(float3(_44._m3) + (in.m_25.xyz * (_44._m6 + _44._m7)), 1.0);
-    out.m_72 = normalize(float4(in.m_25.xyz, 0.0) * float3x4(float4(_17._m1[0]), float4(_17._m1[1]), float4(_17._m1[2])));
+    out.m_72 = normalize(float4(in.m_25.xyz, 0.0) * _17._m1);
     float4 _94 = _70;
     _94.y = -_70.y;
     out.gl_Position = _94;

+ 2 - 10
3rdparty/spirv-cross/reference/opt/shaders-msl/vert/read-from-row-major-array.vert

@@ -1,5 +1,3 @@
-#pragma clang diagnostic ignored "-Wmissing-prototypes"
-
 #include <metal_stdlib>
 #include <simd/simd.h>
 
@@ -7,7 +5,7 @@ using namespace metal;
 
 struct Block
 {
-    float2x3 var[3][4];
+    float3x4 var[3][4];
 };
 
 struct main0_out
@@ -21,17 +19,11 @@ struct main0_in
     float4 a_position [[attribute(0)]];
 };
 
-// Implementation of a conversion of matrix content from RowMajor to ColumnMajor organization.
-float2x3 spvConvertFromRowMajor2x3(float2x3 m)
-{
-    return float2x3(float3(m[0][0], m[0][2], m[1][1]), float3(m[0][1], m[1][0], m[1][2]));
-}
-
 vertex main0_out main0(main0_in in [[stage_in]], constant Block& _104 [[buffer(0)]])
 {
     main0_out out = {};
     out.gl_Position = in.a_position;
-    out.v_vtxResult = ((float(abs(spvConvertFromRowMajor2x3(_104.var[0][0])[0].x - 2.0) < 0.0500000007450580596923828125) * float(abs(spvConvertFromRowMajor2x3(_104.var[0][0])[0].y - 6.0) < 0.0500000007450580596923828125)) * float(abs(spvConvertFromRowMajor2x3(_104.var[0][0])[0].z - (-6.0)) < 0.0500000007450580596923828125)) * ((float(abs(spvConvertFromRowMajor2x3(_104.var[0][0])[1].x) < 0.0500000007450580596923828125) * float(abs(spvConvertFromRowMajor2x3(_104.var[0][0])[1].y - 5.0) < 0.0500000007450580596923828125)) * float(abs(spvConvertFromRowMajor2x3(_104.var[0][0])[1].z - 5.0) < 0.0500000007450580596923828125));
+    out.v_vtxResult = ((float(abs(float3(_104.var[0][0][0][0], _104.var[0][0][1][0], _104.var[0][0][2][0])[0] - 2.0) < 0.0500000007450580596923828125) * float(abs(float3(_104.var[0][0][0][0], _104.var[0][0][1][0], _104.var[0][0][2][0])[1] - 6.0) < 0.0500000007450580596923828125)) * float(abs(float3(_104.var[0][0][0][0], _104.var[0][0][1][0], _104.var[0][0][2][0])[2] - (-6.0)) < 0.0500000007450580596923828125)) * ((float(abs(float3(_104.var[0][0][0][1], _104.var[0][0][1][1], _104.var[0][0][2][1])[0]) < 0.0500000007450580596923828125) * float(abs(float3(_104.var[0][0][0][1], _104.var[0][0][1][1], _104.var[0][0][2][1])[1] - 5.0) < 0.0500000007450580596923828125)) * float(abs(float3(_104.var[0][0][0][1], _104.var[0][0][1][1], _104.var[0][0][2][1])[2] - 5.0) < 0.0500000007450580596923828125));
     return out;
 }
 

+ 16 - 39
3rdparty/spirv-cross/reference/opt/shaders-msl/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp

@@ -4,7 +4,6 @@
 using namespace metal;
 
 typedef packed_float2 packed_float2x2[2];
-typedef packed_float2 packed_rm_float2x3[3];
 typedef packed_float3 packed_float2x3[2];
 typedef packed_float3 packed_rm_float3x2[2];
 
@@ -32,11 +31,6 @@ struct S3
     float b;
 };
 
-struct S4
-{
-    float2 c;
-};
-
 struct Content
 {
     S0 m0s[1];
@@ -47,7 +41,6 @@ struct Content
     S2 m2;
     S3 m3;
     float m4;
-    S4 m3s[8];
 };
 
 struct SSBO1
@@ -61,8 +54,8 @@ struct SSBO1
     float3x2 m3;
     float2x2 m4;
     float2x2 m5[9];
-    packed_rm_float2x3 m6[4][2];
-    float3x2 m7;
+    float3x2 m6[4][2];
+    packed_rm_float3x2 m7;
     float array[1];
 };
 
@@ -70,6 +63,7 @@ struct S0_1
 {
     float4 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S1_1
@@ -82,6 +76,7 @@ struct S2_1
 {
     float3 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S3_1
@@ -90,11 +85,6 @@ struct S3_1
     float b;
 };
 
-struct S4_1
-{
-    float2 c;
-};
-
 struct Content_1
 {
     S0_1 m0s[1];
@@ -105,8 +95,7 @@ struct Content_1
     S2_1 m2;
     S3_1 m3;
     float m4;
-    char _m8_pad[12];
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ S4_1 m3s[8];
+    char _m0_final_padding[12];
 };
 
 struct SSBO0
@@ -114,18 +103,14 @@ struct SSBO0
     Content_1 content;
     Content_1 content1[2];
     Content_1 content2;
-    float2x2 m0;
-    char _m4_pad[16];
-    float2x2 m1;
-    char _m5_pad[16];
+    float2x4 m0;
+    float2x4 m1;
     float2x3 m2[4];
-    float3x2 m3;
-    char _m7_pad[24];
-    float2x2 m4;
-    char _m8_pad[16];
-    float2x2 m5[9];
-    float2x3 m6[4][2];
-    float3x2 m7;
+    float3x4 m3;
+    float2x4 m4;
+    float2x4 m5[9];
+    float3x4 m6[4][2];
+    float2x3 m7;
     float4 array[1];
 };
 
@@ -153,19 +138,11 @@ kernel void main0(device SSBO1& ssbo_scalar [[buffer(0)]], device SSBO0& ssbo_14
     ssbo_scalar.content.m3.a = ssbo_140.content.m3.a;
     ssbo_scalar.content.m3.b = ssbo_140.content.m3.b;
     ssbo_scalar.content.m4 = ssbo_140.content.m4;
-    ssbo_scalar.content.m3s[0].c = ssbo_140.content.m3s[0].c;
-    ssbo_scalar.content.m3s[1].c = ssbo_140.content.m3s[1].c;
-    ssbo_scalar.content.m3s[2].c = ssbo_140.content.m3s[2].c;
-    ssbo_scalar.content.m3s[3].c = ssbo_140.content.m3s[3].c;
-    ssbo_scalar.content.m3s[4].c = ssbo_140.content.m3s[4].c;
-    ssbo_scalar.content.m3s[5].c = ssbo_140.content.m3s[5].c;
-    ssbo_scalar.content.m3s[6].c = ssbo_140.content.m3s[6].c;
-    ssbo_scalar.content.m3s[7].c = ssbo_140.content.m3s[7].c;
     ssbo_scalar.content.m1.a = float2x3(float3(ssbo_scalar.m2[1][0]), float3(ssbo_scalar.m2[1][1])) * float2(ssbo_scalar.content.m0.a[0]);
     ssbo_scalar.m0 = float2x2(float2(ssbo_scalar2.m1[0]), float2(ssbo_scalar2.m1[1]));
-    ssbo_scalar2.m1[0] = transpose(ssbo_scalar.m4)[0];
-    ssbo_scalar2.m1[1] = transpose(ssbo_scalar.m4)[1];
-    ssbo_scalar2.m2[0] = spvConvertFromRowMajor3x2(ssbo_scalar.m3)[0];
-    ssbo_scalar2.m2[1] = spvConvertFromRowMajor3x2(ssbo_scalar.m3)[1];
+    ssbo_scalar2.m1[0] = float2(ssbo_scalar.m4[0][0], ssbo_scalar.m4[1][0]);
+    ssbo_scalar2.m1[1] = float2(ssbo_scalar.m4[0][1], ssbo_scalar.m4[1][1]);
+    ssbo_scalar2.m2[0] = float3(ssbo_scalar.m3[0][0], ssbo_scalar.m3[1][0], ssbo_scalar.m3[2][0]);
+    ssbo_scalar2.m2[1] = float3(ssbo_scalar.m3[0][1], ssbo_scalar.m3[1][1], ssbo_scalar.m3[2][1]);
 }
 

+ 2 - 3
3rdparty/spirv-cross/reference/opt/shaders/amd/shader_ballot.comp

@@ -16,13 +16,12 @@ layout(binding = 1, std430) buffer outputData
 
 void main()
 {
-    float _25 = _12.inputDataArray[gl_LocalInvocationID.x];
-    bool _31 = _25 > 0.0;
+    bool _31 = _12.inputDataArray[gl_LocalInvocationID.x] > 0.0;
     uvec4 _37 = uvec4(unpackUint2x32(ballotARB(_31)), 0u, 0u);
     uint _44 = mbcntAMD(packUint2x32(uvec2(_37.xy)));
     if (_31)
     {
-        _74.outputDataArray[_44] = _25;
+        _74.outputDataArray[_44] = _12.inputDataArray[gl_LocalInvocationID.x];
     }
 }
 

+ 4 - 2
3rdparty/spirv-cross/reference/opt/shaders/asm/frag/loop-body-dominator-continue-access.asm.frag

@@ -48,10 +48,12 @@ void main()
                 }
                 else
                 {
-                    _227++;
+                    uint _204 = _227 + uint(1);
+                    _227 = _204;
                     continue;
                 }
-                _227++;
+                uint _204 = _227 + uint(1);
+                _227 = _204;
                 continue;
             }
             else

+ 1 - 13
3rdparty/spirv-cross/reference/opt/shaders/asm/frag/vector-shuffle-oom.asm.frag

@@ -111,7 +111,6 @@ void main()
     {
         _129 = _109;
     }
-    vec3 _130 = _129 * 0.5;
     vec2 _144 = clamp(_82 + (vec2(-1.0) * _7._m0.xy), _95, _96);
     vec3 _156 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _144, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _160 = textureLod(SPIRV_Cross_Combined_1, _144, 0.0);
@@ -125,7 +124,6 @@ void main()
     {
         _176 = _156;
     }
-    vec3 _177 = _176 * 0.5;
     vec2 _191 = clamp(_82 + (vec2(0.0, -1.0) * _7._m0.xy), _95, _96);
     vec3 _203 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _191, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _207 = textureLod(SPIRV_Cross_Combined_1, _191, 0.0);
@@ -139,7 +137,6 @@ void main()
     {
         _223 = _203;
     }
-    vec3 _224 = _223 * 0.75;
     vec2 _238 = clamp(_82 + (vec2(1.0, -1.0) * _7._m0.xy), _95, _96);
     vec3 _250 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _238, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _254 = textureLod(SPIRV_Cross_Combined_1, _238, 0.0);
@@ -153,7 +150,6 @@ void main()
     {
         _270 = _250;
     }
-    vec3 _271 = _270 * 0.5;
     vec2 _285 = clamp(_82 + (vec2(-2.0, 0.0) * _7._m0.xy), _95, _96);
     vec3 _297 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _285, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _301 = textureLod(SPIRV_Cross_Combined_1, _285, 0.0);
@@ -167,7 +163,6 @@ void main()
     {
         _317 = _297;
     }
-    vec3 _318 = _317 * 0.5;
     vec2 _332 = clamp(_82 + (vec2(-1.0, 0.0) * _7._m0.xy), _95, _96);
     vec3 _344 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _332, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _348 = textureLod(SPIRV_Cross_Combined_1, _332, 0.0);
@@ -181,7 +176,6 @@ void main()
     {
         _364 = _344;
     }
-    vec3 _365 = _364 * 0.75;
     vec2 _379 = clamp(_82, _95, _96);
     vec3 _391 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _379, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _395 = textureLod(SPIRV_Cross_Combined_1, _379, 0.0);
@@ -195,7 +189,6 @@ void main()
     {
         _411 = _391;
     }
-    vec3 _412 = _411 * 1.0;
     vec2 _426 = clamp(_82 + (vec2(1.0, 0.0) * _7._m0.xy), _95, _96);
     vec3 _438 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _426, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _442 = textureLod(SPIRV_Cross_Combined_1, _426, 0.0);
@@ -209,7 +202,6 @@ void main()
     {
         _458 = _438;
     }
-    vec3 _459 = _458 * 0.75;
     vec2 _473 = clamp(_82 + (vec2(2.0, 0.0) * _7._m0.xy), _95, _96);
     vec3 _485 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _473, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _489 = textureLod(SPIRV_Cross_Combined_1, _473, 0.0);
@@ -223,7 +215,6 @@ void main()
     {
         _505 = _485;
     }
-    vec3 _506 = _505 * 0.5;
     vec2 _520 = clamp(_82 + (vec2(-1.0, 1.0) * _7._m0.xy), _95, _96);
     vec3 _532 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _520, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _536 = textureLod(SPIRV_Cross_Combined_1, _520, 0.0);
@@ -237,7 +228,6 @@ void main()
     {
         _552 = _532;
     }
-    vec3 _553 = _552 * 0.5;
     vec2 _567 = clamp(_82 + (vec2(0.0, 1.0) * _7._m0.xy), _95, _96);
     vec3 _579 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _567, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _583 = textureLod(SPIRV_Cross_Combined_1, _567, 0.0);
@@ -251,7 +241,6 @@ void main()
     {
         _599 = _579;
     }
-    vec3 _600 = _599 * 0.75;
     vec2 _614 = clamp(_82 + _7._m0.xy, _95, _96);
     vec3 _626 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _614, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _630 = textureLod(SPIRV_Cross_Combined_1, _614, 0.0);
@@ -265,7 +254,6 @@ void main()
     {
         _646 = _626;
     }
-    vec3 _647 = _646 * 0.5;
     vec2 _661 = clamp(_82 + (vec2(0.0, 2.0) * _7._m0.xy), _95, _96);
     vec3 _673 = _11._m5 * clamp(textureLod(SPIRV_Cross_Combined, _661, 0.0).w * _7._m1, 0.0, 1.0);
     vec4 _677 = textureLod(SPIRV_Cross_Combined_1, _661, 0.0);
@@ -279,7 +267,7 @@ void main()
     {
         _693 = _673;
     }
-    vec3 _702 = ((((((((((((_130.xyz + _177).xyz + _224).xyz + _271).xyz + _318).xyz + _365).xyz + _412).xyz + _459).xyz + _506).xyz + _553).xyz + _600).xyz + _647).xyz + (_693 * 0.5)).xyz * vec3(0.125);
+    vec3 _702 = (((((((((((((_129 * 0.5).xyz + (_176 * 0.5)).xyz + (_223 * 0.75)).xyz + (_270 * 0.5)).xyz + (_317 * 0.5)).xyz + (_364 * 0.75)).xyz + (_411 * 1.0)).xyz + (_458 * 0.75)).xyz + (_505 * 0.5)).xyz + (_552 * 0.5)).xyz + (_599 * 0.75)).xyz + (_646 * 0.5)).xyz + (_693 * 0.5)).xyz * vec3(0.125);
     _28 _704 = _74;
     _704._m0 = vec4(_702.x, _702.y, _702.z, vec4(0.0).w);
     _28 _705 = _704;

+ 6 - 17
3rdparty/spirv-cross/reference/opt/shaders/frag/loop-dominator-and-switch-default.frag

@@ -33,26 +33,15 @@ void main()
             }
             default:
             {
-                mediump int _84;
                 vec4 _88;
                 _88 = _82;
-                _84 = 0;
-                mediump int _50;
-                for (;;)
+                for (mediump int _84 = 0; _84 < _18; )
                 {
-                    _50 = _84 + 1;
-                    if (_84 < _18)
-                    {
-                        vec4 _72 = _88;
-                        _72.y = _88.y + 0.5;
-                        _88 = _72;
-                        _84 = _50;
-                        continue;
-                    }
-                    else
-                    {
-                        break;
-                    }
+                    vec4 _72 = _88;
+                    _72.y = _88.y + 0.5;
+                    _88 = _72;
+                    _84++;
+                    continue;
                 }
                 _89 = _88;
                 continue;

+ 3 - 2
3rdparty/spirv-cross/reference/opt/shaders/legacy/vert/struct-varying.legacy.vert

@@ -21,8 +21,9 @@ void main()
         vout_a = vout.a;
         vout_b = vout.b;
     }
-    vout_a = Output(vout_a, vout_b).a;
-    vout_b = Output(vout_a, vout_b).b;
+    Output _22 = Output(vout_a, vout_b);
+    vout_a = _22.a;
+    vout_b = _22.b;
     vout_a.x = 1.0;
     vout_b.y = 1.0;
 }

+ 2 - 1
3rdparty/spirv-cross/reference/shaders-hlsl/frag/control-dependent-in-branch.desktop.frag

@@ -28,7 +28,8 @@ void frag_main()
     float4 d7 = ddy_fine(vInput);
     float4 d8 = fwidth(vInput);
     float _56_tmp = uSampler.CalculateLevelOfDetail(_uSampler_sampler, vInput.zw);
-    float2 lod = float2(_56_tmp, _56_tmp);
+    float2 _56 = _56_tmp.xx;
+    float2 lod = _56;
     if (vInput.y > 10.0f)
     {
         FragColor += t;

+ 2 - 1
3rdparty/spirv-cross/reference/shaders-hlsl/frag/query-lod.desktop.frag

@@ -17,7 +17,8 @@ struct SPIRV_Cross_Output
 void frag_main()
 {
     float _19_tmp = uSampler.CalculateLevelOfDetail(_uSampler_sampler, vTexCoord);
-    FragColor = float2(_19_tmp, _19_tmp).xyxy;
+    float2 _19 = _19_tmp.xx;
+    FragColor = _19.xyxy;
 }
 
 SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)

+ 1 - 2
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag

@@ -154,7 +154,6 @@ fragment main0_out main0(main0_in in [[stage_in]], constant CB0& _19 [[buffer(0)
         _193 = _192;
         break;
     } while (false);
-    float4 _194 = _193 * 1.0;
     float4 _220;
     do
     {
@@ -180,7 +179,7 @@ fragment main0_out main0(main0_in in [[stage_in]], constant CB0& _19 [[buffer(0)
     float3 _253 = float3(_252.x, _252.y, _232.z);
     float2 _255 = _253.xy * _165;
     float3 _256 = float3(_255.x, _255.y, _253.z);
-    float3 _271 = ((in.IN_Color.xyz * _194.xyz) * (1.0 + (_256.x * 0.300000011920928955078125))) * (StudsMapTexture.sample(StudsMapSampler, _156.UvStuds).x * 2.0);
+    float3 _271 = ((in.IN_Color.xyz * (_193 * 1.0).xyz) * (1.0 + (_256.x * 0.300000011920928955078125))) * (StudsMapTexture.sample(StudsMapSampler, _156.UvStuds).x * 2.0);
     float4 _298;
     do
     {

+ 16 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/composite-extract-row-major.asm.comp

@@ -0,0 +1,16 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBORow
+{
+    float v;
+    float4x4 row_major0;
+};
+
+kernel void main0(device SSBORow& _4 [[buffer(0)]])
+{
+    _4.v = float4(_4.row_major0[0][1], _4.row_major0[1][1], _4.row_major0[2][1], _4.row_major0[3][1])[2];
+}
+

+ 19 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-2.asm.comp

@@ -0,0 +1,19 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOScalar
+{
+    float3 a;
+    float3x3 b;
+    float3x3 c;
+};
+
+kernel void main0(device SSBOScalar& _4 [[buffer(0)]])
+{
+    float3x3 _20 = transpose(_4.b);
+    _4.b = _4.c;
+    _4.a = _20 * _4.a;
+}
+

+ 20 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-3.asm.comp

@@ -0,0 +1,20 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOScalar
+{
+    packed_float3 a;
+    packed_float3 b;
+    packed_float3 c;
+};
+
+kernel void main0(device SSBOScalar& _4 [[buffer(0)]])
+{
+    float3 _17 = float3(_4.b);
+    float3 _19 = float3(_4.c);
+    _4.c = _17;
+    _4.a = _17 * _19;
+}
+

+ 20 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-4.asm.comp

@@ -0,0 +1,20 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOScalar
+{
+    float4 a[16];
+    float4 b[16];
+    float4 c[16];
+};
+
+kernel void main0(device SSBOScalar& _4 [[buffer(0)]])
+{
+    float2 _27 = _4.b[10].xy;
+    float _29 = _4.c[10].x;
+    _4.b[10].xy = float2(10.0, 11.0);
+    _4.a[10].xy = _27 * _29;
+}
+

+ 20 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-5.asm.comp

@@ -0,0 +1,20 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOScalar
+{
+    float2 a;
+    packed_float3 b;
+    packed_float3 c;
+};
+
+kernel void main0(device SSBOScalar& _4 [[buffer(0)]])
+{
+    float3 _21 = float3(_4.b);
+    float3 _24 = float3(_4.c);
+    _4.b = float3(1.0);
+    _4.a = _21.xy * _24.yz;
+}
+

+ 23 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding.asm.comp

@@ -0,0 +1,23 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_rm_float3x3[3];
+
+struct SSBOScalar
+{
+    packed_float3 a;
+    packed_rm_float3x3 b;
+    packed_rm_float3x3 c;
+};
+
+kernel void main0(device SSBOScalar& _4 [[buffer(0)]])
+{
+    float3x3 _20 = transpose(float3x3(float3(_4.b[0]), float3(_4.b[1]), float3(_4.b[2])));
+    _4.b[0] = float3x3(float3(_4.c[0]), float3(_4.c[1]), float3(_4.c[2]))[0];
+    _4.b[1] = float3x3(float3(_4.c[0]), float3(_4.c[1]), float3(_4.c[2]))[1];
+    _4.b[2] = float3x3(float3(_4.c[0]), float3(_4.c[1]), float3(_4.c[2]))[2];
+    _4.a = _20 * float3(_4.a);
+}
+

+ 21 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/packed-vector-extract-insert.asm.comp

@@ -0,0 +1,21 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOScalar
+{
+    float2 a;
+    packed_float3 b;
+    packed_float3 c;
+    float3 d;
+};
+
+kernel void main0(device SSBOScalar& _4 [[buffer(0)]])
+{
+    float3 _24 = _4.b;
+    _24.z = 2.0;
+    _4.a = float2(_4.b[0], _4.b[1]) * _4.b[2];
+    _4.b = _24;
+}
+

+ 16 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/packing/row-major-split-access-chain.asm.comp

@@ -0,0 +1,16 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBORow
+{
+    float v;
+    float4x4 row_major0;
+};
+
+kernel void main0(device SSBORow& _4 [[buffer(0)]])
+{
+    _4.v = _4.row_major0[2u][1];
+}
+

+ 1 - 18
3rdparty/spirv-cross/reference/shaders-msl-no-opt/asm/vert/op-load-forced-temporary-array.asm.frag

@@ -1,5 +1,3 @@
-#pragma clang diagnostic ignored "-Wmissing-prototypes"
-
 #include <metal_stdlib>
 #include <simd/simd.h>
 
@@ -12,19 +10,6 @@ struct main0_out
     float4 gl_Position [[position]];
 };
 
-// Implementation of an array copy function to cover GLSL's ability to copy an array via assignment.
-template<typename T, uint N>
-void spvArrayCopyFromStack1(thread T (&dst)[N], thread const T (&src)[N])
-{
-    for (uint i = 0; i < N; dst[i] = src[i], i++);
-}
-
-template<typename T, uint N>
-void spvArrayCopyFromConstant1(thread T (&dst)[N], constant T (&src)[N])
-{
-    for (uint i = 0; i < N; dst[i] = src[i], i++);
-}
-
 vertex main0_out main0()
 {
     main0_out out = {};
@@ -35,12 +20,10 @@ vertex main0_out main0()
         _25++;
         continue;
     }
-    float _31[2];
-    spvArrayCopyFromStack1(_31, _23);
     float _37;
     if (as_type<uint>(3.0) != 0u)
     {
-        _37 = _31[0];
+        _37 = _23[0];
     }
     else
     {

+ 4 - 2
3rdparty/spirv-cross/reference/shaders-msl-no-opt/comp/loop.comp

@@ -95,11 +95,13 @@ kernel void main0(const device SSBO& _24 [[buffer(0)]], device SSBO2& _177 [[buf
     {
         if (l == 5)
         {
-            l++;
+            int _172 = l;
+            l = _172 + 1;
             continue;
         }
         idat += float4(1.0);
-        l++;
+        int _172 = l;
+        l = _172 + 1;
         continue;
     }
     _177.out_data[ident] = idat;

+ 76 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-scalar.comp

@@ -0,0 +1,76 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x2 col_major0;
+    float2x2 col_major1;
+};
+
+struct SSBORow
+{
+    float2x2 row_major0;
+    float2x2 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x2 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x2 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 82 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-std140.comp

@@ -0,0 +1,82 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x4 col_major0;
+    float2x4 col_major1;
+};
+
+struct SSBORow
+{
+    float2x4 row_major0;
+    float2x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x2 loaded = float2x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy);
+    v_29.col_major1[0].xy = loaded[0];
+    v_29.col_major1[1].xy = loaded[1];
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x2 loaded = transpose(float2x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy));
+    v_41.row_major0[0].xy = float2(loaded[0][0], loaded[1][0]);
+    v_41.row_major0[1].xy = float2(loaded[0][1], loaded[1][1]);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0[0].xy = float2x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy)[0];
+    v_29.col_major0[1].xy = float2x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy)[1];
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0[0].xy = float2(float2x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy)[0][0], float2x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy)[1][0]);
+    v_41.row_major0[1].xy = float2(float2x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy)[0][1], float2x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy)[1][1]);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].xy = float2(float2x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy)[0][0], float2x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy)[1][0]);
+    v_29.col_major0[1].xy = float2(float2x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy)[0][1], float2x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy)[1][1]);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0[0].xy = float2x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy)[0];
+    v_41.row_major0[1].xy = float2x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy)[1];
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1].xy = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 76 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x2-std430.comp

@@ -0,0 +1,76 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x2 col_major0;
+    float2x2 col_major1;
+};
+
+struct SSBORow
+{
+    float2x2 row_major0;
+    float2x2 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x2 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x2 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 82 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp

@@ -0,0 +1,82 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_float2x3[2];
+
+struct SSBOCol
+{
+    packed_float2x3 col_major0;
+    packed_float2x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x2 row_major0;
+    float3x2 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x3 loaded = float2x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]));
+    v_29.col_major1[0] = loaded[0];
+    v_29.col_major1[1] = loaded[1];
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x3 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0[0] = float2x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]))[0];
+    v_29.col_major0[1] = float2x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]))[1];
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(float2x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1])));
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0] = float3(v_41.row_major0[0][0], v_41.row_major0[1][0], v_41.row_major0[2][0]);
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1][0];
+    v_41.row_major0[1][1] = v_29.col_major0[1][1];
+    v_41.row_major0[2][1] = v_29.col_major0[1][2];
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0][1u] = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0][1u];
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 83 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-std140.comp

@@ -0,0 +1,83 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x3 col_major0;
+    float2x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x4 row_major0;
+    float3x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x3 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x3 loaded = transpose(float3x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy, v_41.row_major0[2].xy));
+    v_41.row_major0[0].xy = float2(loaded[0][0], loaded[1][0]);
+    v_41.row_major0[1].xy = float2(loaded[0][1], loaded[1][1]);
+    v_41.row_major0[2].xy = float2(loaded[0][2], loaded[1][2]);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0[0].xy = float2(v_29.col_major0[0][0], v_29.col_major0[1][0]);
+    v_41.row_major0[1].xy = float2(v_29.col_major0[0][1], v_29.col_major0[1][1]);
+    v_41.row_major0[2].xy = float2(v_29.col_major0[0][2], v_29.col_major0[1][2]);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(float3x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy, v_41.row_major0[2].xy));
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0[0].xy = float3x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy, v_41.row_major1[2].xy)[0];
+    v_41.row_major0[1].xy = float3x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy, v_41.row_major1[2].xy)[1];
+    v_41.row_major0[2].xy = float3x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy, v_41.row_major1[2].xy)[2];
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 77 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x3-std430.comp

@@ -0,0 +1,77 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x3 col_major0;
+    float2x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x2 row_major0;
+    float3x2 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x3 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x3 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 78 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-scalar.comp

@@ -0,0 +1,78 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x4 col_major0;
+    float2x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x2 row_major0;
+    float4x2 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x4 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 87 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-std140.comp

@@ -0,0 +1,87 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x4 col_major0;
+    float2x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x4 row_major0;
+    float4x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x4 loaded = transpose(float4x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy, v_41.row_major0[2].xy, v_41.row_major0[3].xy));
+    v_41.row_major0[0].xy = float2(loaded[0][0], loaded[1][0]);
+    v_41.row_major0[1].xy = float2(loaded[0][1], loaded[1][1]);
+    v_41.row_major0[2].xy = float2(loaded[0][2], loaded[1][2]);
+    v_41.row_major0[3].xy = float2(loaded[0][3], loaded[1][3]);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0[0].xy = float2(v_29.col_major0[0][0], v_29.col_major0[1][0]);
+    v_41.row_major0[1].xy = float2(v_29.col_major0[0][1], v_29.col_major0[1][1]);
+    v_41.row_major0[2].xy = float2(v_29.col_major0[0][2], v_29.col_major0[1][2]);
+    v_41.row_major0[3].xy = float2(v_29.col_major0[0][3], v_29.col_major0[1][3]);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(float4x2(v_41.row_major0[0].xy, v_41.row_major0[1].xy, v_41.row_major0[2].xy, v_41.row_major0[3].xy));
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0[0].xy = float4x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy, v_41.row_major1[2].xy, v_41.row_major1[3].xy)[0];
+    v_41.row_major0[1].xy = float4x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy, v_41.row_major1[2].xy, v_41.row_major1[3].xy)[1];
+    v_41.row_major0[2].xy = float4x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy, v_41.row_major1[2].xy, v_41.row_major1[3].xy)[2];
+    v_41.row_major0[3].xy = float4x2(v_41.row_major1[0].xy, v_41.row_major1[1].xy, v_41.row_major1[2].xy, v_41.row_major1[3].xy)[3];
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 78 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-2x4-std430.comp

@@ -0,0 +1,78 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float2x4 col_major0;
+    float2x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x2 row_major0;
+    float4x2 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float2x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float2x4 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 81 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp

@@ -0,0 +1,81 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_rm_float3x2[2];
+
+struct SSBOCol
+{
+    float3x2 col_major0;
+    float3x2 col_major1;
+};
+
+struct SSBORow
+{
+    packed_rm_float3x2 row_major0;
+    packed_rm_float3x2 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x2 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x2 loaded = transpose(float2x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1])));
+    v_41.row_major0[0] = float3(loaded[0][0], loaded[1][0], loaded[2][0]);
+    v_41.row_major0[1] = float3(loaded[0][1], loaded[1][1], loaded[2][1]);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0[0] = float3(v_29.col_major0[0][0], v_29.col_major0[1][0], v_29.col_major0[2][0]);
+    v_41.row_major0[1] = float3(v_29.col_major0[0][1], v_29.col_major0[1][1], v_29.col_major0[2][1]);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(float2x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1])));
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0[0] = float2x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]))[0];
+    v_41.row_major0[1] = float2x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]))[1];
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 82 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-std140.comp

@@ -0,0 +1,82 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float3x4 col_major0;
+    float3x4 col_major1;
+};
+
+struct SSBORow
+{
+    float2x3 row_major0;
+    float2x3 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x2 loaded = float3x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy, v_29.col_major0[2].xy);
+    v_29.col_major1[0].xy = loaded[0];
+    v_29.col_major1[1].xy = loaded[1];
+    v_29.col_major1[2].xy = loaded[2];
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x2 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0[0].xy = float3x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy, v_29.col_major1[2].xy)[0];
+    v_29.col_major0[1].xy = float3x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy, v_29.col_major1[2].xy)[1];
+    v_29.col_major0[2].xy = float3x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy, v_29.col_major1[2].xy)[2];
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(float3x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy, v_29.col_major0[2].xy));
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].xy = float2(v_41.row_major0[0][0], v_41.row_major0[1][0]);
+    v_29.col_major0[1].xy = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_29.col_major0[2].xy = float2(v_41.row_major0[0][2], v_41.row_major0[1][2]);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1].xy = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 76 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x2-std430.comp

@@ -0,0 +1,76 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float3x2 col_major0;
+    float3x2 col_major1;
+};
+
+struct SSBORow
+{
+    float2x3 row_major0;
+    float2x3 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x2 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x2 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 92 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-scalar.comp

@@ -0,0 +1,92 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_float3x3[3];
+typedef packed_float3 packed_rm_float3x3[3];
+
+struct SSBOCol
+{
+    packed_float3x3 col_major0;
+    packed_float3x3 col_major1;
+};
+
+struct SSBORow
+{
+    packed_rm_float3x3 row_major0;
+    packed_rm_float3x3 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x3 loaded = float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]));
+    v_29.col_major1[0] = loaded[0];
+    v_29.col_major1[1] = loaded[1];
+    v_29.col_major1[2] = loaded[2];
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x3 loaded = transpose(float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2])));
+    v_41.row_major0[0] = float3(loaded[0][0], loaded[1][0], loaded[2][0]);
+    v_41.row_major0[1] = float3(loaded[0][1], loaded[1][1], loaded[2][1]);
+    v_41.row_major0[2] = float3(loaded[0][2], loaded[1][2], loaded[2][2]);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0[0] = float3x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]), float3(v_29.col_major1[2]))[0];
+    v_29.col_major0[1] = float3x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]), float3(v_29.col_major1[2]))[1];
+    v_29.col_major0[2] = float3x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]), float3(v_29.col_major1[2]))[2];
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0[0] = float3(float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[0][0], float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[1][0], float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[2][0]);
+    v_41.row_major0[1] = float3(float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[0][1], float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[1][1], float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[2][1]);
+    v_41.row_major0[2] = float3(float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[0][2], float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[1][2], float3x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]))[2][2]);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0] = float3(float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[0][0], float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[1][0], float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[2][0]);
+    v_29.col_major0[1] = float3(float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[0][1], float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[1][1], float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[2][1]);
+    v_29.col_major0[2] = float3(float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[0][2], float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[1][2], float3x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]))[2][2]);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0[0] = float3x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]), float3(v_41.row_major1[2]))[0];
+    v_41.row_major0[1] = float3x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]), float3(v_41.row_major1[2]))[1];
+    v_41.row_major0[2] = float3x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]), float3(v_41.row_major1[2]))[2];
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1][0];
+    v_41.row_major0[1][1] = v_29.col_major0[1][1];
+    v_41.row_major0[2][1] = v_29.col_major0[1][2];
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0][1u] = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0][1u];
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 77 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-std140.comp

@@ -0,0 +1,77 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float3x3 col_major0;
+    float3x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x3 row_major0;
+    float3x3 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x3 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x3 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 77 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x3-std430.comp

@@ -0,0 +1,77 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float3x3 col_major0;
+    float3x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x3 row_major0;
+    float3x3 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x3 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x3 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 89 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp

@@ -0,0 +1,89 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_rm_float3x4[4];
+
+struct SSBOCol
+{
+    float3x4 col_major0;
+    float3x4 col_major1;
+};
+
+struct SSBORow
+{
+    packed_rm_float3x4 row_major0;
+    packed_rm_float3x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x4 loaded = transpose(float4x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]), float3(v_41.row_major0[3])));
+    v_41.row_major0[0] = float3(loaded[0][0], loaded[1][0], loaded[2][0]);
+    v_41.row_major0[1] = float3(loaded[0][1], loaded[1][1], loaded[2][1]);
+    v_41.row_major0[2] = float3(loaded[0][2], loaded[1][2], loaded[2][2]);
+    v_41.row_major0[3] = float3(loaded[0][3], loaded[1][3], loaded[2][3]);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0[0] = float3(v_29.col_major0[0][0], v_29.col_major0[1][0], v_29.col_major0[2][0]);
+    v_41.row_major0[1] = float3(v_29.col_major0[0][1], v_29.col_major0[1][1], v_29.col_major0[2][1]);
+    v_41.row_major0[2] = float3(v_29.col_major0[0][2], v_29.col_major0[1][2], v_29.col_major0[2][2]);
+    v_41.row_major0[3] = float3(v_29.col_major0[0][3], v_29.col_major0[1][3], v_29.col_major0[2][3]);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(float4x3(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]), float3(v_41.row_major0[3])));
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0[0] = float4x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]), float3(v_41.row_major1[2]), float3(v_41.row_major1[3]))[0];
+    v_41.row_major0[1] = float4x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]), float3(v_41.row_major1[2]), float3(v_41.row_major1[3]))[1];
+    v_41.row_major0[2] = float4x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]), float3(v_41.row_major1[2]), float3(v_41.row_major1[3]))[2];
+    v_41.row_major0[3] = float4x3(float3(v_41.row_major1[0]), float3(v_41.row_major1[1]), float3(v_41.row_major1[2]), float3(v_41.row_major1[3]))[3];
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 78 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-std140.comp

@@ -0,0 +1,78 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float3x4 col_major0;
+    float3x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x3 row_major0;
+    float4x3 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x4 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 78 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-3x4-std430.comp

@@ -0,0 +1,78 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float3x4 col_major0;
+    float3x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x3 row_major0;
+    float4x3 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float3x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float3x4 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 76 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-scalar.comp

@@ -0,0 +1,76 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x2 col_major0;
+    float4x2 col_major1;
+};
+
+struct SSBORow
+{
+    float2x4 row_major0;
+    float2x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x2 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x2 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 85 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-std140.comp

@@ -0,0 +1,85 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x4 col_major0;
+    float4x4 col_major1;
+};
+
+struct SSBORow
+{
+    float2x4 row_major0;
+    float2x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x2 loaded = float4x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy, v_29.col_major0[2].xy, v_29.col_major0[3].xy);
+    v_29.col_major1[0].xy = loaded[0];
+    v_29.col_major1[1].xy = loaded[1];
+    v_29.col_major1[2].xy = loaded[2];
+    v_29.col_major1[3].xy = loaded[3];
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x2 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0[0].xy = float4x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy, v_29.col_major1[2].xy, v_29.col_major1[3].xy)[0];
+    v_29.col_major0[1].xy = float4x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy, v_29.col_major1[2].xy, v_29.col_major1[3].xy)[1];
+    v_29.col_major0[2].xy = float4x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy, v_29.col_major1[2].xy, v_29.col_major1[3].xy)[2];
+    v_29.col_major0[3].xy = float4x2(v_29.col_major1[0].xy, v_29.col_major1[1].xy, v_29.col_major1[2].xy, v_29.col_major1[3].xy)[3];
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(float4x2(v_29.col_major0[0].xy, v_29.col_major0[1].xy, v_29.col_major0[2].xy, v_29.col_major0[3].xy));
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].xy = float2(v_41.row_major0[0][0], v_41.row_major0[1][0]);
+    v_29.col_major0[1].xy = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_29.col_major0[2].xy = float2(v_41.row_major0[0][2], v_41.row_major0[1][2]);
+    v_29.col_major0[3].xy = float2(v_41.row_major0[0][3], v_41.row_major0[1][3]);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1].xy = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 76 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x2-std430.comp

@@ -0,0 +1,76 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x2 col_major0;
+    float4x2 col_major1;
+};
+
+struct SSBORow
+{
+    float2x4 row_major0;
+    float2x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x2 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x2 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float2(v_41.row_major0[0][1], v_41.row_major0[1][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 88 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp

@@ -0,0 +1,88 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_float4x3[4];
+
+struct SSBOCol
+{
+    packed_float4x3 col_major0;
+    packed_float4x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x4 row_major0;
+    float3x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x3 loaded = float4x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]), float3(v_29.col_major0[3]));
+    v_29.col_major1[0] = loaded[0];
+    v_29.col_major1[1] = loaded[1];
+    v_29.col_major1[2] = loaded[2];
+    v_29.col_major1[3] = loaded[3];
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x3 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0[0] = float4x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]), float3(v_29.col_major1[2]), float3(v_29.col_major1[3]))[0];
+    v_29.col_major0[1] = float4x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]), float3(v_29.col_major1[2]), float3(v_29.col_major1[3]))[1];
+    v_29.col_major0[2] = float4x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]), float3(v_29.col_major1[2]), float3(v_29.col_major1[3]))[2];
+    v_29.col_major0[3] = float4x3(float3(v_29.col_major1[0]), float3(v_29.col_major1[1]), float3(v_29.col_major1[2]), float3(v_29.col_major1[3]))[3];
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(float4x3(float3(v_29.col_major0[0]), float3(v_29.col_major0[1]), float3(v_29.col_major0[2]), float3(v_29.col_major0[3])));
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0] = float3(v_41.row_major0[0][0], v_41.row_major0[1][0], v_41.row_major0[2][0]);
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_29.col_major0[2] = float3(v_41.row_major0[0][2], v_41.row_major0[1][2], v_41.row_major0[2][2]);
+    v_29.col_major0[3] = float3(v_41.row_major0[0][3], v_41.row_major0[1][3], v_41.row_major0[2][3]);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1][0];
+    v_41.row_major0[1][1] = v_29.col_major0[1][1];
+    v_41.row_major0[2][1] = v_29.col_major0[1][2];
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0][1u] = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0][1u];
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 77 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-std140.comp

@@ -0,0 +1,77 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x3 col_major0;
+    float4x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x4 row_major0;
+    float3x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x3 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x3 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 77 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x3-std430.comp

@@ -0,0 +1,77 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x3 col_major0;
+    float4x3 col_major1;
+};
+
+struct SSBORow
+{
+    float3x4 row_major0;
+    float3x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x3 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x3 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float3(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 78 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-scalar.comp

@@ -0,0 +1,78 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x4 col_major0;
+    float4x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x4 row_major0;
+    float4x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x4 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 78 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-std140.comp

@@ -0,0 +1,78 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x4 col_major0;
+    float4x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x4 row_major0;
+    float4x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x4 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 78 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-4x4-std430.comp

@@ -0,0 +1,78 @@
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBOCol
+{
+    float4x4 col_major0;
+    float4x4 col_major1;
+};
+
+struct SSBORow
+{
+    float4x4 row_major0;
+    float4x4 row_major1;
+};
+
+void load_store_to_variable_col_major(device SSBOCol& v_29)
+{
+    float4x4 loaded = v_29.col_major0;
+    v_29.col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major(device SSBORow& v_41)
+{
+    float4x4 loaded = transpose(v_41.row_major0);
+    v_41.row_major0 = transpose(loaded);
+}
+
+void copy_col_major_to_col_major(device SSBOCol& v_29)
+{
+    v_29.col_major0 = v_29.col_major1;
+}
+
+void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_41.row_major0 = transpose(v_29.col_major0);
+}
+
+void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0 = transpose(v_41.row_major0);
+}
+
+void copy_row_major_to_row_major(device SSBORow& v_41)
+{
+    v_41.row_major0 = v_41.row_major1;
+}
+
+void copy_columns(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[1] = float4(v_41.row_major0[0][1], v_41.row_major0[1][1], v_41.row_major0[2][1], v_41.row_major0[3][1]);
+    v_41.row_major0[0][1] = v_29.col_major0[1].x;
+    v_41.row_major0[1][1] = v_29.col_major0[1].y;
+    v_41.row_major0[2][1] = v_29.col_major0[1].z;
+    v_41.row_major0[3][1] = v_29.col_major0[1].w;
+}
+
+void copy_elements(device SSBOCol& v_29, device SSBORow& v_41)
+{
+    v_29.col_major0[0].y = v_41.row_major0[1u][0];
+    v_41.row_major0[1u][0] = v_29.col_major0[0].y;
+}
+
+kernel void main0(device SSBOCol& v_29 [[buffer(0)]], device SSBORow& v_41 [[buffer(1)]])
+{
+    load_store_to_variable_col_major(v_29);
+    load_store_to_variable_row_major(v_41);
+    copy_col_major_to_col_major(v_29);
+    copy_col_major_to_row_major(v_29, v_41);
+    copy_row_major_to_col_major(v_29, v_41);
+    copy_row_major_to_row_major(v_41);
+    copy_columns(v_29, v_41);
+    copy_elements(v_29, v_41);
+}
+

+ 19 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-row-major.comp

@@ -0,0 +1,19 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBO
+{
+    float3x3 m0;
+    float3x3 m1;
+    float3 v0;
+    float3 v1;
+};
+
+kernel void main0(device SSBO& _11 [[buffer(0)]])
+{
+    _11.v0 = _11.v1 * (_11.m1 * _11.m0);
+    _11.v0 = (_11.v1 * _11.m1) * _11.m0;
+}
+

+ 23 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major-2.comp

@@ -0,0 +1,23 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_float3x3[3];
+
+struct SSBO
+{
+    packed_float3x3 m0;
+    packed_float3x3 m1;
+    packed_float3 v0;
+    packed_float3 v1;
+};
+
+kernel void main0(device SSBO& _11 [[buffer(0)]])
+{
+    _11.v0 = (float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2]))) * float3(_11.v1);
+    _11.v0 = float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * (float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * float3(_11.v1));
+    _11.v0 = (float3(_11.v1) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2]))) * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2]));
+    _11.v0 = float3(_11.v1) * (float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])));
+}
+

+ 21 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-col-major.comp

@@ -0,0 +1,21 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBO
+{
+    float2x4 m0;
+    float2x4 m1;
+    float2 v0;
+    float2 v1;
+};
+
+kernel void main0(device SSBO& _11 [[buffer(0)]])
+{
+    _11.v0 = (float2x2(_11.m0[0].xy, _11.m0[1].xy) * float2x2(_11.m1[0].xy, _11.m1[1].xy)) * _11.v1;
+    _11.v0 = float2x2(_11.m0[0].xy, _11.m0[1].xy) * (float2x2(_11.m1[0].xy, _11.m1[1].xy) * _11.v1);
+    _11.v0 = (_11.v1 * float2x2(_11.m0[0].xy, _11.m0[1].xy)) * float2x2(_11.m1[0].xy, _11.m1[1].xy);
+    _11.v0 = _11.v1 * (float2x2(_11.m0[0].xy, _11.m0[1].xy) * float2x2(_11.m1[0].xy, _11.m1[1].xy));
+}
+

+ 23 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major-2.comp

@@ -0,0 +1,23 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+typedef packed_float3 packed_rm_float3x3[3];
+
+struct SSBO
+{
+    packed_rm_float3x3 m0;
+    packed_rm_float3x3 m1;
+    packed_float3 v0;
+    packed_float3 v1;
+};
+
+kernel void main0(device SSBO& _11 [[buffer(0)]])
+{
+    _11.v0 = float3(_11.v1) * (float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])));
+    _11.v0 = (float3(_11.v1) * float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2]))) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2]));
+    _11.v0 = float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * (float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2])) * float3(_11.v1));
+    _11.v0 = (float3x3(float3(_11.m1[0]), float3(_11.m1[1]), float3(_11.m1[2])) * float3x3(float3(_11.m0[0]), float3(_11.m0[1]), float3(_11.m0[2]))) * float3(_11.v1);
+}
+

+ 21 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/matrix-multiply-unpacked-row-major.comp

@@ -0,0 +1,21 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBO
+{
+    float2x4 m0;
+    float2x4 m1;
+    float2 v0;
+    float2 v1;
+};
+
+kernel void main0(device SSBO& _11 [[buffer(0)]])
+{
+    _11.v0 = _11.v1 * (float2x2(_11.m1[0].xy, _11.m1[1].xy) * float2x2(_11.m0[0].xy, _11.m0[1].xy));
+    _11.v0 = (_11.v1 * float2x2(_11.m1[0].xy, _11.m1[1].xy)) * float2x2(_11.m0[0].xy, _11.m0[1].xy);
+    _11.v0 = float2x2(_11.m1[0].xy, _11.m1[1].xy) * (float2x2(_11.m0[0].xy, _11.m0[1].xy) * _11.v1);
+    _11.v0 = (float2x2(_11.m1[0].xy, _11.m1[1].xy) * float2x2(_11.m0[0].xy, _11.m0[1].xy)) * _11.v1;
+}
+

+ 19 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/member-padding.comp

@@ -0,0 +1,19 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBO
+{
+    char _m0_pad[16];
+    float a;
+    char _m1_pad[20];
+    float b;
+};
+
+kernel void main0(device SSBO& _9 [[buffer(0)]])
+{
+    _9.a = 10.0;
+    _9.b = 20.0;
+}
+

+ 40 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/std140-array-of-vectors.comp

@@ -0,0 +1,40 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct SSBO
+{
+    float4 v1[4];
+    float4 v2[4];
+    float3 v3[4];
+    float4 v4[4];
+    float4 v1_array_of_array[4][4];
+    float4 v2_array_of_array[4][4];
+    float3 v3_array_of_array[4][4];
+    float4 v4_array_of_array[4][4];
+    float4 v_unsized[1];
+};
+
+kernel void main0(device SSBO& _29 [[buffer(0)]])
+{
+    float loaded1 = _29.v1[1].x;
+    _29.v1[2].x = loaded1;
+    float2 loaded2 = _29.v2[1].xy;
+    _29.v2[2].xy = loaded2;
+    float3 loaded3 = _29.v3[1];
+    _29.v3[2] = loaded3;
+    float4 loaded4 = _29.v4[1];
+    _29.v4[2] = loaded4;
+    loaded1 = _29.v1_array_of_array[1][2].x;
+    _29.v1_array_of_array[2][3].x = loaded1;
+    loaded2 = _29.v2_array_of_array[1][2].xy;
+    _29.v2_array_of_array[2][3].xy = loaded2;
+    loaded3 = _29.v3_array_of_array[1][2];
+    _29.v3_array_of_array[2][3] = loaded3;
+    loaded4 = _29.v4_array_of_array[1][2];
+    _29.v4_array_of_array[2][3] = loaded4;
+    loaded1 = _29.v_unsized[1].x;
+    _29.v_unsized[2].x = loaded1;
+}
+

+ 25 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-alignment.comp

@@ -0,0 +1,25 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct Foo
+{
+    packed_float3 a;
+    float b;
+};
+
+struct SSBO
+{
+    float2 a;
+    float b;
+    char _m2_pad[4];
+    Foo foo;
+};
+
+kernel void main0(device SSBO& _12 [[buffer(0)]])
+{
+    _12.a.x = 10.0;
+    _12.b = 20.0;
+}
+

+ 20 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing-array-of-scalar.comp

@@ -0,0 +1,20 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct Foo
+{
+    packed_float3 a;
+};
+
+struct SSBOScalar
+{
+    Foo v[1];
+};
+
+kernel void main0(device SSBOScalar& buffer_scalar [[buffer(0)]])
+{
+    buffer_scalar.v[1].a[1u] = 1.0;
+}
+

+ 31 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing-recursive.comp

@@ -0,0 +1,31 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct Foo
+{
+    packed_float4 a;
+};
+
+struct Bar
+{
+    Foo a;
+};
+
+struct Baz
+{
+    Bar a;
+};
+
+struct SSBOScalar
+{
+    float v;
+    Baz baz;
+};
+
+kernel void main0(device SSBOScalar& buffer_scalar [[buffer(0)]])
+{
+    buffer_scalar.baz.a.a.a[3u] = 10.0;
+}
+

+ 27 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-packing.comp

@@ -0,0 +1,27 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct Foo
+{
+    packed_float3 a;
+};
+
+struct Bar
+{
+    packed_float3 a;
+};
+
+struct SSBOScalar
+{
+    Foo foo;
+    Bar bar;
+};
+
+kernel void main0(device SSBOScalar& buffer_scalar [[buffer(0)]])
+{
+    buffer_scalar.foo.a[0u] = 10.0;
+    buffer_scalar.bar.a[0u] = 20.0;
+}
+

+ 52 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-size-padding-array-of-array.comp

@@ -0,0 +1,52 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct A
+{
+    float v;
+    char _m0_final_padding[12];
+};
+
+struct B
+{
+    float2 v;
+    char _m0_final_padding[8];
+};
+
+struct C
+{
+    float3 v;
+};
+
+struct D
+{
+    float4 v;
+};
+
+struct E
+{
+    float4 a;
+    float2 b;
+    char _m0_final_padding[8];
+};
+
+struct SSBO
+{
+    A a[2][4];
+    B b[2][4];
+    C c[2][4];
+    D d[2][4];
+    float2x4 e[2][4];
+    E f[1];
+};
+
+kernel void main0(device SSBO& _32 [[buffer(0)]])
+{
+    _32.f[0].a = float4(2.0);
+    float2x2 tmp = float2x2(_32.e[0][1][0].xy, _32.e[0][1][1].xy);
+    _32.e[1][2][0].xy = tmp[0];
+    _32.e[1][2][1].xy = tmp[1];
+}
+

+ 52 - 0
3rdparty/spirv-cross/reference/shaders-msl-no-opt/packing/struct-size-padding.comp

@@ -0,0 +1,52 @@
+#include <metal_stdlib>
+#include <simd/simd.h>
+
+using namespace metal;
+
+struct A
+{
+    float v;
+    char _m0_final_padding[12];
+};
+
+struct B
+{
+    float2 v;
+    char _m0_final_padding[8];
+};
+
+struct C
+{
+    float3 v;
+};
+
+struct D
+{
+    float4 v;
+};
+
+struct E
+{
+    float4 a;
+    float2 b;
+    char _m0_final_padding[8];
+};
+
+struct SSBO
+{
+    A a[4];
+    B b[4];
+    C c[4];
+    D d[4];
+    float2x4 e[4];
+    E f[1];
+};
+
+kernel void main0(device SSBO& _26 [[buffer(0)]])
+{
+    _26.f[0].a = float4(2.0);
+    float2x2 tmp = float2x2(_26.e[1][0].xy, _26.e[1][1].xy);
+    _26.e[2][0].xy = tmp[0];
+    _26.e[2][1].xy = tmp[1];
+}
+

+ 3 - 2
3rdparty/spirv-cross/reference/shaders-msl/asm/comp/block-name-alias-global.asm.comp

@@ -18,11 +18,12 @@ struct A_2
 {
     int a;
     int b;
+    char _m0_final_padding[8];
 };
 
 struct A_3
 {
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ A_2 Data[1024];
+    A_2 Data[1024];
 };
 
 struct B
@@ -32,7 +33,7 @@ struct B
 
 struct B_1
 {
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ A_2 Data[1024];
+    A_2 Data[1024];
 };
 
 kernel void main0(device A_1& C1 [[buffer(0)]], constant A_3& C2 [[buffer(1)]], device B& C3 [[buffer(2)]], constant B_1& C4 [[buffer(3)]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]])

+ 23 - 5
3rdparty/spirv-cross/reference/shaders-msl/asm/comp/variable-pointers-2.asm.comp

@@ -31,12 +31,30 @@ kernel void main0(device foo& buf [[buffer(0)]], constant bar& cb [[buffer(1)]],
 {
     device foo* _46 = select_buffer(buf, cb);
     device foo* _45 = _46;
-    for (device int* _52 = &_45->a[0u], * _55 = &buf.a[0u]; (*_52) != (*_55); _52 = &_52[1u], _55 = &_55[1u])
+    device foo* _48 = _45;
+    device int* _52;
+    device int* _55;
+    _52 = &_48->a[0u];
+    _55 = &buf.a[0u];
+    int _57;
+    int _58;
+    for (;;)
     {
-        int _66 = ((*_52) + (*_55)) + int((*select_input(gl_GlobalInvocationID, gl_LocalInvocationID, cb)).x);
-        *_52 = _66;
-        *_55 = _66;
-        continue;
+        _57 = *_52;
+        _58 = *_55;
+        if (_57 != _58)
+        {
+            int _66 = (_57 + _58) + int((*select_input(gl_GlobalInvocationID, gl_LocalInvocationID, cb)).x);
+            *_52 = _66;
+            *_55 = _66;
+            _52 = &_52[1u];
+            _55 = &_55[1u];
+            continue;
+        }
+        else
+        {
+            break;
+        }
     }
 }
 

+ 12 - 24
3rdparty/spirv-cross/reference/shaders-msl/asm/frag/vector-shuffle-oom.asm.frag

@@ -144,8 +144,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _129 = _109;
     }
-    float3 _130 = _129 * 0.5;
-    float3 _133 = float4(0.0).xyz + _130;
+    float3 _133 = float4(0.0).xyz + (_129 * 0.5);
     float4 _134 = float4(_133.x, _133.y, _133.z, float4(0.0).w);
     _28 _135 = _77;
     _135._m0 = _134;
@@ -161,8 +160,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _176 = _156;
     }
-    float3 _177 = _176 * 0.5;
-    float3 _180 = _134.xyz + _177;
+    float3 _180 = _134.xyz + (_176 * 0.5);
     float4 _181 = float4(_180.x, _180.y, _180.z, _134.w);
     _28 _182 = _135;
     _182._m0 = _181;
@@ -178,8 +176,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _223 = _203;
     }
-    float3 _224 = _223 * 0.75;
-    float3 _227 = _181.xyz + _224;
+    float3 _227 = _181.xyz + (_223 * 0.75);
     float4 _228 = float4(_227.x, _227.y, _227.z, _181.w);
     _28 _229 = _182;
     _229._m0 = _228;
@@ -195,8 +192,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _270 = _250;
     }
-    float3 _271 = _270 * 0.5;
-    float3 _274 = _228.xyz + _271;
+    float3 _274 = _228.xyz + (_270 * 0.5);
     float4 _275 = float4(_274.x, _274.y, _274.z, _228.w);
     _28 _276 = _229;
     _276._m0 = _275;
@@ -212,8 +208,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _317 = _297;
     }
-    float3 _318 = _317 * 0.5;
-    float3 _321 = _275.xyz + _318;
+    float3 _321 = _275.xyz + (_317 * 0.5);
     float4 _322 = float4(_321.x, _321.y, _321.z, _275.w);
     _28 _323 = _276;
     _323._m0 = _322;
@@ -229,8 +224,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _364 = _344;
     }
-    float3 _365 = _364 * 0.75;
-    float3 _368 = _322.xyz + _365;
+    float3 _368 = _322.xyz + (_364 * 0.75);
     float4 _369 = float4(_368.x, _368.y, _368.z, _322.w);
     _28 _370 = _323;
     _370._m0 = _369;
@@ -246,8 +240,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _411 = _391;
     }
-    float3 _412 = _411 * 1.0;
-    float3 _415 = _369.xyz + _412;
+    float3 _415 = _369.xyz + (_411 * 1.0);
     float4 _416 = float4(_415.x, _415.y, _415.z, _369.w);
     _28 _417 = _370;
     _417._m0 = _416;
@@ -263,8 +256,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _458 = _438;
     }
-    float3 _459 = _458 * 0.75;
-    float3 _462 = _416.xyz + _459;
+    float3 _462 = _416.xyz + (_458 * 0.75);
     float4 _463 = float4(_462.x, _462.y, _462.z, _416.w);
     _28 _464 = _417;
     _464._m0 = _463;
@@ -280,8 +272,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _505 = _485;
     }
-    float3 _506 = _505 * 0.5;
-    float3 _509 = _463.xyz + _506;
+    float3 _509 = _463.xyz + (_505 * 0.5);
     float4 _510 = float4(_509.x, _509.y, _509.z, _463.w);
     _28 _511 = _464;
     _511._m0 = _510;
@@ -297,8 +288,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _552 = _532;
     }
-    float3 _553 = _552 * 0.5;
-    float3 _556 = _510.xyz + _553;
+    float3 _556 = _510.xyz + (_552 * 0.5);
     float4 _557 = float4(_556.x, _556.y, _556.z, _510.w);
     _28 _558 = _511;
     _558._m0 = _557;
@@ -314,8 +304,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _599 = _579;
     }
-    float3 _600 = _599 * 0.75;
-    float3 _603 = _557.xyz + _600;
+    float3 _603 = _557.xyz + (_599 * 0.75);
     float4 _604 = float4(_603.x, _603.y, _603.z, _557.w);
     _28 _605 = _558;
     _605._m0 = _604;
@@ -331,8 +320,7 @@ fragment main0_out main0(constant _6& _7 [[buffer(0)]], constant _10& _11 [[buff
     {
         _646 = _626;
     }
-    float3 _647 = _646 * 0.5;
-    float3 _650 = _604.xyz + _647;
+    float3 _650 = _604.xyz + (_646 * 0.5);
     float4 _651 = float4(_650.x, _650.y, _650.z, _604.w);
     _28 _652 = _605;
     _652._m0 = _651;

+ 11 - 9
3rdparty/spirv-cross/reference/shaders-msl/comp/struct-packing.comp

@@ -3,12 +3,11 @@
 
 using namespace metal;
 
-typedef packed_float2 packed_rm_float2x3[3];
-
 struct S0
 {
     float2 a[1];
     float b;
+    char _m0_final_padding[4];
 };
 
 struct S1
@@ -21,6 +20,7 @@ struct S2
 {
     float3 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S3
@@ -45,6 +45,7 @@ struct Content
     S3 m3;
     float m4;
     S4 m3s[8];
+    char _m0_final_padding[8];
 };
 
 struct SSBO1
@@ -58,10 +59,8 @@ struct SSBO1
     float3x2 m3;
     float2x2 m4;
     float2x2 m5[9];
-    packed_rm_float2x3 m6[4][2];
-    char _m10_pad[8];
-    float3x2 m7;
-    char _m11_pad[8];
+    float3x2 m6[4][2];
+    float2x3 m7;
     float array[1];
 };
 
@@ -69,6 +68,7 @@ struct S0_1
 {
     float4 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S1_1
@@ -81,6 +81,7 @@ struct S2_1
 {
     float3 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S3_1
@@ -92,6 +93,7 @@ struct S3_1
 struct S4_1
 {
     float2 c;
+    char _m0_final_padding[8];
 };
 
 struct Content_1
@@ -104,8 +106,8 @@ struct Content_1
     S2_1 m2;
     S3_1 m3;
     float m4;
-    char _m8_pad[12];
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ S4_1 m3s[8];
+    char _m8_pad[8];
+    S4_1 m3s[8];
 };
 
 struct SSBO0
@@ -142,6 +144,6 @@ kernel void main0(device SSBO1& ssbo_430 [[buffer(0)]], device SSBO0& ssbo_140 [
     ssbo_430.content.m3s[5].c = _60.m3s[5].c;
     ssbo_430.content.m3s[6].c = _60.m3s[6].c;
     ssbo_430.content.m3s[7].c = _60.m3s[7].c;
-    ssbo_430.content.m1.a = ssbo_430.content.m3.a * float3x2(float2(ssbo_430.m6[1][1][0]), float2(ssbo_430.m6[1][1][1]), float2(ssbo_430.m6[1][1][2]));
+    ssbo_430.content.m1.a = ssbo_430.content.m3.a * ssbo_430.m6[1][1];
 }
 

+ 2 - 10
3rdparty/spirv-cross/reference/shaders-msl/flatten/rowmajor.flatten.vert

@@ -1,5 +1,3 @@
-#pragma clang diagnostic ignored "-Wmissing-prototypes"
-
 #include <metal_stdlib>
 #include <simd/simd.h>
 
@@ -9,7 +7,7 @@ struct UBO
 {
     float4x4 uMVPR;
     float4x4 uMVPC;
-    float2x4 uMVP;
+    float4x4 uMVP;
 };
 
 struct main0_out
@@ -22,16 +20,10 @@ struct main0_in
     float4 aVertex [[attribute(0)]];
 };
 
-// Implementation of a conversion of matrix content from RowMajor to ColumnMajor organization.
-float2x4 spvConvertFromRowMajor2x4(float2x4 m)
-{
-    return float2x4(float4(m[0][0], m[0][2], m[1][0], m[1][2]), float4(m[0][1], m[0][3], m[1][1], m[1][3]));
-}
-
 vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _18 [[buffer(0)]])
 {
     main0_out out = {};
-    float2 v = in.aVertex * spvConvertFromRowMajor2x4(_18.uMVP);
+    float2 v = float4x2(_18.uMVP[0].xy, _18.uMVP[1].xy, _18.uMVP[2].xy, _18.uMVP[3].xy) * in.aVertex;
     out.gl_Position = (_18.uMVPR * in.aVertex) + (in.aVertex * _18.uMVPC);
     return out;
 }

+ 1 - 1
3rdparty/spirv-cross/reference/shaders-msl/frag/ubo_layout.frag

@@ -31,7 +31,7 @@ struct main0_out
 fragment main0_out main0(constant UBO1& ubo1 [[buffer(0)]], constant UBO2& ubo0 [[buffer(1)]])
 {
     main0_out out = {};
-    out.FragColor = transpose(ubo1.foo.foo)[0] + ubo0.foo.foo[0];
+    out.FragColor = float4(ubo1.foo.foo[0][0], ubo1.foo.foo[1][0], ubo1.foo.foo[2][0], ubo1.foo.foo[3][0]) + ubo0.foo.foo[0];
     return out;
 }
 

+ 1 - 3
3rdparty/spirv-cross/reference/shaders-msl/tesc/water_tess.tesc

@@ -36,9 +36,7 @@ bool frustum_cull(thread const float2& p0, constant UBO& v_41)
     float radius = 0.5 * length(bb_max - bb_min);
     float3 f0 = float3(dot(v_41.uFrustum[0], float4(center, 1.0)), dot(v_41.uFrustum[1], float4(center, 1.0)), dot(v_41.uFrustum[2], float4(center, 1.0)));
     float3 f1 = float3(dot(v_41.uFrustum[3], float4(center, 1.0)), dot(v_41.uFrustum[4], float4(center, 1.0)), dot(v_41.uFrustum[5], float4(center, 1.0)));
-    float3 _199 = f0;
-    float _200 = radius;
-    bool _205 = any(_199 <= float3(-_200));
+    bool _205 = any(f0 <= float3(-radius));
     bool _215;
     if (!_205)
     {

+ 3 - 5
3rdparty/spirv-cross/reference/shaders-msl/vert/packed_matrix.vert

@@ -3,12 +3,10 @@
 
 using namespace metal;
 
-typedef packed_float4 packed_rm_float4x3[3];
-
 struct _15
 {
-    packed_rm_float4x3 _m0;
-    packed_rm_float4x3 _m1;
+    float3x4 _m0;
+    float3x4 _m1;
 };
 
 struct _42
@@ -44,7 +42,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant _15& _17 [[buffer(0)]]
     float3 _13;
     do
     {
-        _13 = normalize(float4(in.m_25.xyz, 0.0) * float3x4(float4(_17._m1[0]), float4(_17._m1[1]), float4(_17._m1[2])));
+        _13 = normalize(float4(in.m_25.xyz, 0.0) * _17._m1);
         break;
     } while (false);
     float4 _39 = _44._m0 * float4(float3(_44._m3) + (in.m_25.xyz * (_44._m6 + _44._m7)), 1.0);

+ 2 - 8
3rdparty/spirv-cross/reference/shaders-msl/vert/read-from-row-major-array.vert

@@ -7,7 +7,7 @@ using namespace metal;
 
 struct Block
 {
-    float2x3 var[3][4];
+    float3x4 var[3][4];
 };
 
 struct main0_out
@@ -21,12 +21,6 @@ struct main0_in
     float4 a_position [[attribute(0)]];
 };
 
-// Implementation of a conversion of matrix content from RowMajor to ColumnMajor organization.
-float2x3 spvConvertFromRowMajor2x3(float2x3 m)
-{
-    return float2x3(float3(m[0][0], m[0][2], m[1][1]), float3(m[0][1], m[1][0], m[1][2]));
-}
-
 float compare_float(thread const float& a, thread const float& b)
 {
     return float(abs(a - b) < 0.0500000007450580596923828125);
@@ -57,7 +51,7 @@ vertex main0_out main0(main0_in in [[stage_in]], constant Block& _104 [[buffer(0
     main0_out out = {};
     out.gl_Position = in.a_position;
     float result = 1.0;
-    float2x3 param = spvConvertFromRowMajor2x3(_104.var[0][0]);
+    float2x3 param = transpose(float3x2(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy));
     float2x3 param_1 = float2x3(float3(2.0, 6.0, -6.0), float3(0.0, 5.0, 5.0));
     result *= compare_mat2x3(param, param_1);
     out.v_vtxResult = result;

+ 16 - 39
3rdparty/spirv-cross/reference/shaders-msl/vulkan/comp/struct-packing-scalar.nocompat.invalid.vk.comp

@@ -4,7 +4,6 @@
 using namespace metal;
 
 typedef packed_float2 packed_float2x2[2];
-typedef packed_float2 packed_rm_float2x3[3];
 typedef packed_float3 packed_float2x3[2];
 typedef packed_float3 packed_rm_float3x2[2];
 
@@ -32,11 +31,6 @@ struct S3
     float b;
 };
 
-struct S4
-{
-    float2 c;
-};
-
 struct Content
 {
     S0 m0s[1];
@@ -47,7 +41,6 @@ struct Content
     S2 m2;
     S3 m3;
     float m4;
-    S4 m3s[8];
 };
 
 struct SSBO1
@@ -61,8 +54,8 @@ struct SSBO1
     float3x2 m3;
     float2x2 m4;
     float2x2 m5[9];
-    packed_rm_float2x3 m6[4][2];
-    float3x2 m7;
+    float3x2 m6[4][2];
+    packed_rm_float3x2 m7;
     float array[1];
 };
 
@@ -70,6 +63,7 @@ struct S0_1
 {
     float4 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S1_1
@@ -82,6 +76,7 @@ struct S2_1
 {
     float3 a[1];
     float b;
+    char _m0_final_padding[12];
 };
 
 struct S3_1
@@ -90,11 +85,6 @@ struct S3_1
     float b;
 };
 
-struct S4_1
-{
-    float2 c;
-};
-
 struct Content_1
 {
     S0_1 m0s[1];
@@ -105,8 +95,7 @@ struct Content_1
     S2_1 m2;
     S3_1 m3;
     float m4;
-    char _m8_pad[12];
-    /* FIXME: A padded struct is needed here. If you see this message, file a bug! */ S4_1 m3s[8];
+    char _m0_final_padding[12];
 };
 
 struct SSBO0
@@ -114,18 +103,14 @@ struct SSBO0
     Content_1 content;
     Content_1 content1[2];
     Content_1 content2;
-    float2x2 m0;
-    char _m4_pad[16];
-    float2x2 m1;
-    char _m5_pad[16];
+    float2x4 m0;
+    float2x4 m1;
     float2x3 m2[4];
-    float3x2 m3;
-    char _m7_pad[24];
-    float2x2 m4;
-    char _m8_pad[16];
-    float2x2 m5[9];
-    float2x3 m6[4][2];
-    float3x2 m7;
+    float3x4 m3;
+    float2x4 m4;
+    float2x4 m5[9];
+    float3x4 m6[4][2];
+    float2x3 m7;
     float4 array[1];
 };
 
@@ -153,19 +138,11 @@ kernel void main0(device SSBO1& ssbo_scalar [[buffer(0)]], device SSBO0& ssbo_14
     ssbo_scalar.content.m3.a = ssbo_140.content.m3.a;
     ssbo_scalar.content.m3.b = ssbo_140.content.m3.b;
     ssbo_scalar.content.m4 = ssbo_140.content.m4;
-    ssbo_scalar.content.m3s[0].c = ssbo_140.content.m3s[0].c;
-    ssbo_scalar.content.m3s[1].c = ssbo_140.content.m3s[1].c;
-    ssbo_scalar.content.m3s[2].c = ssbo_140.content.m3s[2].c;
-    ssbo_scalar.content.m3s[3].c = ssbo_140.content.m3s[3].c;
-    ssbo_scalar.content.m3s[4].c = ssbo_140.content.m3s[4].c;
-    ssbo_scalar.content.m3s[5].c = ssbo_140.content.m3s[5].c;
-    ssbo_scalar.content.m3s[6].c = ssbo_140.content.m3s[6].c;
-    ssbo_scalar.content.m3s[7].c = ssbo_140.content.m3s[7].c;
     ssbo_scalar.content.m1.a = float2x3(float3(ssbo_scalar.m2[1][0]), float3(ssbo_scalar.m2[1][1])) * float2(ssbo_scalar.content.m0.a[0]);
     ssbo_scalar.m0 = float2x2(float2(ssbo_scalar2.m1[0]), float2(ssbo_scalar2.m1[1]));
-    ssbo_scalar2.m1[0] = transpose(ssbo_scalar.m4)[0];
-    ssbo_scalar2.m1[1] = transpose(ssbo_scalar.m4)[1];
-    ssbo_scalar2.m2[0] = spvConvertFromRowMajor3x2(ssbo_scalar.m3)[0];
-    ssbo_scalar2.m2[1] = spvConvertFromRowMajor3x2(ssbo_scalar.m3)[1];
+    ssbo_scalar2.m1[0] = float2(ssbo_scalar.m4[0][0], ssbo_scalar.m4[1][0]);
+    ssbo_scalar2.m1[1] = float2(ssbo_scalar.m4[0][1], ssbo_scalar.m4[1][1]);
+    ssbo_scalar2.m2[0] = float3(ssbo_scalar.m3[0][0], ssbo_scalar.m3[1][0], ssbo_scalar.m3[2][0]);
+    ssbo_scalar2.m2[1] = float3(ssbo_scalar.m3[0][1], ssbo_scalar.m3[1][1], ssbo_scalar.m3[2][1]);
 }
 

+ 1 - 2
3rdparty/spirv-cross/reference/shaders-no-opt/asm/frag/inliner-dominator-inside-loop.asm.frag

@@ -147,7 +147,6 @@ void main()
         _193 = _192;
         break;
     } while (false);
-    vec4 _194 = _193 * 1.0;
     vec4 _220;
     do
     {
@@ -173,7 +172,7 @@ void main()
     vec3 _253 = vec3(_252.x, _252.y, _232.z);
     vec2 _255 = _253.xy * _165;
     vec3 _256 = vec3(_255.x, _255.y, _253.z);
-    vec3 _271 = ((IN_Color.xyz * _194.xyz) * (1.0 + (_256.x * 0.300000011920928955078125))) * (texture(SPIRV_Cross_CombinedStudsMapTextureStudsMapSampler, _156.UvStuds).x * 2.0);
+    vec3 _271 = ((IN_Color.xyz * (_193 * 1.0).xyz) * (1.0 + (_256.x * 0.300000011920928955078125))) * (texture(SPIRV_Cross_CombinedStudsMapTextureStudsMapSampler, _156.UvStuds).x * 2.0);
     vec4 _298;
     do
     {

+ 4 - 2
3rdparty/spirv-cross/reference/shaders-no-opt/comp/loop.comp

@@ -93,11 +93,13 @@ void main()
     {
         if (l == 5)
         {
-            l++;
+            int _172 = l;
+            l = _172 + 1;
             continue;
         }
         idat += vec4(1.0);
-        l++;
+        int _172 = l;
+        l = _172 + 1;
         continue;
     }
     _177.out_data[ident] = idat;

+ 12 - 24
3rdparty/spirv-cross/reference/shaders/asm/frag/vector-shuffle-oom.asm.frag

@@ -110,8 +110,7 @@ void main()
     {
         _129 = _109;
     }
-    vec3 _130 = _129 * 0.5;
-    vec3 _133 = vec4(0.0).xyz + _130;
+    vec3 _133 = vec4(0.0).xyz + (_129 * 0.5);
     vec4 _134 = vec4(_133.x, _133.y, _133.z, vec4(0.0).w);
     _28 _135 = _77;
     _135._m0 = _134;
@@ -127,8 +126,7 @@ void main()
     {
         _176 = _156;
     }
-    vec3 _177 = _176 * 0.5;
-    vec3 _180 = _134.xyz + _177;
+    vec3 _180 = _134.xyz + (_176 * 0.5);
     vec4 _181 = vec4(_180.x, _180.y, _180.z, _134.w);
     _28 _182 = _135;
     _182._m0 = _181;
@@ -144,8 +142,7 @@ void main()
     {
         _223 = _203;
     }
-    vec3 _224 = _223 * 0.75;
-    vec3 _227 = _181.xyz + _224;
+    vec3 _227 = _181.xyz + (_223 * 0.75);
     vec4 _228 = vec4(_227.x, _227.y, _227.z, _181.w);
     _28 _229 = _182;
     _229._m0 = _228;
@@ -161,8 +158,7 @@ void main()
     {
         _270 = _250;
     }
-    vec3 _271 = _270 * 0.5;
-    vec3 _274 = _228.xyz + _271;
+    vec3 _274 = _228.xyz + (_270 * 0.5);
     vec4 _275 = vec4(_274.x, _274.y, _274.z, _228.w);
     _28 _276 = _229;
     _276._m0 = _275;
@@ -178,8 +174,7 @@ void main()
     {
         _317 = _297;
     }
-    vec3 _318 = _317 * 0.5;
-    vec3 _321 = _275.xyz + _318;
+    vec3 _321 = _275.xyz + (_317 * 0.5);
     vec4 _322 = vec4(_321.x, _321.y, _321.z, _275.w);
     _28 _323 = _276;
     _323._m0 = _322;
@@ -195,8 +190,7 @@ void main()
     {
         _364 = _344;
     }
-    vec3 _365 = _364 * 0.75;
-    vec3 _368 = _322.xyz + _365;
+    vec3 _368 = _322.xyz + (_364 * 0.75);
     vec4 _369 = vec4(_368.x, _368.y, _368.z, _322.w);
     _28 _370 = _323;
     _370._m0 = _369;
@@ -212,8 +206,7 @@ void main()
     {
         _411 = _391;
     }
-    vec3 _412 = _411 * 1.0;
-    vec3 _415 = _369.xyz + _412;
+    vec3 _415 = _369.xyz + (_411 * 1.0);
     vec4 _416 = vec4(_415.x, _415.y, _415.z, _369.w);
     _28 _417 = _370;
     _417._m0 = _416;
@@ -229,8 +222,7 @@ void main()
     {
         _458 = _438;
     }
-    vec3 _459 = _458 * 0.75;
-    vec3 _462 = _416.xyz + _459;
+    vec3 _462 = _416.xyz + (_458 * 0.75);
     vec4 _463 = vec4(_462.x, _462.y, _462.z, _416.w);
     _28 _464 = _417;
     _464._m0 = _463;
@@ -246,8 +238,7 @@ void main()
     {
         _505 = _485;
     }
-    vec3 _506 = _505 * 0.5;
-    vec3 _509 = _463.xyz + _506;
+    vec3 _509 = _463.xyz + (_505 * 0.5);
     vec4 _510 = vec4(_509.x, _509.y, _509.z, _463.w);
     _28 _511 = _464;
     _511._m0 = _510;
@@ -263,8 +254,7 @@ void main()
     {
         _552 = _532;
     }
-    vec3 _553 = _552 * 0.5;
-    vec3 _556 = _510.xyz + _553;
+    vec3 _556 = _510.xyz + (_552 * 0.5);
     vec4 _557 = vec4(_556.x, _556.y, _556.z, _510.w);
     _28 _558 = _511;
     _558._m0 = _557;
@@ -280,8 +270,7 @@ void main()
     {
         _599 = _579;
     }
-    vec3 _600 = _599 * 0.75;
-    vec3 _603 = _557.xyz + _600;
+    vec3 _603 = _557.xyz + (_599 * 0.75);
     vec4 _604 = vec4(_603.x, _603.y, _603.z, _557.w);
     _28 _605 = _558;
     _605._m0 = _604;
@@ -297,8 +286,7 @@ void main()
     {
         _646 = _626;
     }
-    vec3 _647 = _646 * 0.5;
-    vec3 _650 = _604.xyz + _647;
+    vec3 _650 = _604.xyz + (_646 * 0.5);
     vec4 _651 = vec4(_650.x, _650.y, _650.z, _604.w);
     _28 _652 = _605;
     _652._m0 = _651;

+ 1 - 2
3rdparty/spirv-cross/reference/shaders/comp/generate_height.comp

@@ -27,7 +27,6 @@ uvec2 workaround_mix(uvec2 a, uvec2 b, bvec2 sel)
     {
         _86 = a.x;
     }
-    uint _94 = _86;
     uint _97;
     if (sel.y)
     {
@@ -37,7 +36,7 @@ uvec2 workaround_mix(uvec2 a, uvec2 b, bvec2 sel)
     {
         _97 = a.y;
     }
-    return uvec2(_94, _97);
+    return uvec2(_86, _97);
 }
 
 vec2 alias(vec2 i, vec2 N)

+ 1 - 3
3rdparty/spirv-cross/reference/shaders/tesc/water_tess.tesc

@@ -26,9 +26,7 @@ bool frustum_cull(vec2 p0)
     float radius = 0.5 * length(bb_max - bb_min);
     vec3 f0 = vec3(dot(_41.uFrustum[0], vec4(center, 1.0)), dot(_41.uFrustum[1], vec4(center, 1.0)), dot(_41.uFrustum[2], vec4(center, 1.0)));
     vec3 f1 = vec3(dot(_41.uFrustum[3], vec4(center, 1.0)), dot(_41.uFrustum[4], vec4(center, 1.0)), dot(_41.uFrustum[5], vec4(center, 1.0)));
-    vec3 _199 = f0;
-    float _200 = radius;
-    bool _205 = any(lessThanEqual(_199, vec3(-_200)));
+    bool _205 = any(lessThanEqual(f0, vec3(-radius)));
     bool _215;
     if (!_205)
     {

+ 1 - 2
3rdparty/spirv-cross/reference/shaders/vert/ground.vert

@@ -67,7 +67,6 @@ vec2 warp_position()
     {
         _110 = 0u;
     }
-    uint _116 = _110;
     uint _120;
     if (uPosition.y < 32u)
     {
@@ -77,7 +76,7 @@ vec2 warp_position()
     {
         _120 = 0u;
     }
-    uvec2 rounding = uvec2(_116, _120);
+    uvec2 rounding = uvec2(_110, _120);
     vec4 lower_upper_snapped = vec4((uPosition + rounding).xyxy & (~mask).xxyy);
     return mix(lower_upper_snapped.xy, lower_upper_snapped.zw, vec2(fract_lod));
 }

+ 48 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/composite-extract-row-major.asm.comp

@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 21
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpName %main "main"
+               OpName %SSBORow "SSBORow"
+               OpMemberName %SSBORow 0 "v"
+               OpMemberName %SSBORow 1 "row_major0"
+               OpName %_ ""
+               OpMemberDecorate %SSBORow 0 Offset 0
+               OpMemberDecorate %SSBORow 1 RowMajor
+               OpMemberDecorate %SSBORow 1 Offset 16
+               OpMemberDecorate %SSBORow 1 MatrixStride 16
+               OpDecorate %SSBORow BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%mat4v4float = OpTypeMatrix %v4float 4
+    %SSBORow = OpTypeStruct %float %mat4v4float
+%_ptr_Uniform_SSBORow = OpTypePointer Uniform %SSBORow
+          %_ = OpVariable %_ptr_Uniform_SSBORow Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %row_ptr = OpAccessChain %_ptr_Uniform_v4float %_ %int_1 %int_1
+		 %vec = OpLoad %v4float %row_ptr
+		 %float_val = OpCompositeExtract %float %vec 2
+
+         %20 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+               OpStore %20 %float_val
+               OpReturn
+               OpFunctionEnd

+ 56 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-2.asm.comp

@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 23
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpSourceExtension "GL_EXT_scalar_block_layout"
+               OpName %main "main"
+               OpName %SSBOScalar "SSBOScalar"
+               OpMemberName %SSBOScalar 0 "a"
+               OpMemberName %SSBOScalar 1 "b"
+               OpMemberName %SSBOScalar 2 "c"
+               OpName %_ ""
+               OpMemberDecorate %SSBOScalar 0 Offset 0
+               OpMemberDecorate %SSBOScalar 1 RowMajor
+               OpMemberDecorate %SSBOScalar 1 Offset 16
+               OpMemberDecorate %SSBOScalar 1 MatrixStride 16
+               OpMemberDecorate %SSBOScalar 2 RowMajor
+               OpMemberDecorate %SSBOScalar 2 Offset 64
+               OpMemberDecorate %SSBOScalar 2 MatrixStride 16
+               OpDecorate %SSBOScalar BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%mat3v3float = OpTypeMatrix %v3float 3
+ %SSBOScalar = OpTypeStruct %v3float %mat3v3float %mat3v3float
+%_ptr_Uniform_SSBOScalar = OpTypePointer Uniform %SSBOScalar
+          %_ = OpVariable %_ptr_Uniform_SSBOScalar Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+      %int_2 = OpConstant %int 2
+%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %b_ptr = OpAccessChain %_ptr_Uniform_mat3v3float %_ %int_1
+         %c_ptr = OpAccessChain %_ptr_Uniform_mat3v3float %_ %int_2
+         %b = OpLoad %mat3v3float %b_ptr
+         %c = OpLoad %mat3v3float %c_ptr
+		 OpStore %b_ptr %c
+         %19 = OpAccessChain %_ptr_Uniform_v3float %_ %int_0
+         %20 = OpLoad %v3float %19
+         %21 = OpMatrixTimesVector %v3float %b %20
+         %22 = OpAccessChain %_ptr_Uniform_v3float %_ %int_0
+               OpStore %22 %21
+               OpReturn
+               OpFunctionEnd

+ 48 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-3.asm.comp

@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 22
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpSourceExtension "GL_EXT_scalar_block_layout"
+               OpName %main "main"
+               OpName %SSBOScalar "SSBOScalar"
+               OpMemberName %SSBOScalar 0 "a"
+               OpMemberName %SSBOScalar 1 "b"
+               OpMemberName %SSBOScalar 2 "c"
+               OpName %_ ""
+               OpMemberDecorate %SSBOScalar 0 Offset 0
+               OpMemberDecorate %SSBOScalar 1 Offset 12
+               OpMemberDecorate %SSBOScalar 2 Offset 24
+               OpDecorate %SSBOScalar BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+ %SSBOScalar = OpTypeStruct %v3float %v3float %v3float
+%_ptr_Uniform_SSBOScalar = OpTypePointer Uniform %SSBOScalar
+          %_ = OpVariable %_ptr_Uniform_SSBOScalar Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+      %int_2 = OpConstant %int 2
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %15 = OpAccessChain %_ptr_Uniform_v3float %_ %int_1
+         %16 = OpLoad %v3float %15
+         %18 = OpAccessChain %_ptr_Uniform_v3float %_ %int_2
+         %19 = OpLoad %v3float %18
+		 	OpStore %18 %16
+         %20 = OpFMul %v3float %16 %19
+         %21 = OpAccessChain %_ptr_Uniform_v3float %_ %int_0
+               OpStore %21 %20
+               OpReturn
+               OpFunctionEnd

+ 61 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-4.asm.comp

@@ -0,0 +1,61 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpSourceExtension "GL_EXT_scalar_block_layout"
+               OpName %main "main"
+               OpName %SSBOScalar "SSBOScalar"
+               OpMemberName %SSBOScalar 0 "a"
+               OpMemberName %SSBOScalar 1 "b"
+               OpMemberName %SSBOScalar 2 "c"
+               OpName %_ ""
+               OpDecorate %_arr_v2float_uint_16 ArrayStride 16
+               OpDecorate %_arr_v2float_uint_16_0 ArrayStride 16
+               OpDecorate %_arr_float_uint_16 ArrayStride 16
+               OpMemberDecorate %SSBOScalar 0 Offset 0
+               OpMemberDecorate %SSBOScalar 1 Offset 256
+               OpMemberDecorate %SSBOScalar 2 Offset 512
+               OpDecorate %SSBOScalar BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+       %uint = OpTypeInt 32 0
+    %uint_16 = OpConstant %uint 16
+%_arr_v2float_uint_16 = OpTypeArray %v2float %uint_16
+%_arr_v2float_uint_16_0 = OpTypeArray %v2float %uint_16
+%_arr_float_uint_16 = OpTypeArray %float %uint_16
+ %SSBOScalar = OpTypeStruct %_arr_v2float_uint_16 %_arr_v2float_uint_16_0 %_arr_float_uint_16
+%_ptr_Uniform_SSBOScalar = OpTypePointer Uniform %SSBOScalar
+          %_ = OpVariable %_ptr_Uniform_SSBOScalar Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+     %int_10 = OpConstant %int 10
+      %int_1 = OpConstant %int 1
+%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
+      %int_2 = OpConstant %int 2
+	  %float_10 = OpConstant %float 10.0
+	  %float_11 = OpConstant %float 11.0
+	  %float_const = OpConstantComposite %v2float %float_10 %float_11
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %21 = OpAccessChain %_ptr_Uniform_v2float %_ %int_1 %int_10
+         %22 = OpLoad %v2float %21
+         %25 = OpAccessChain %_ptr_Uniform_float %_ %int_2 %int_10
+         %26 = OpLoad %float %25
+		 OpStore %21 %float_const
+         %27 = OpVectorTimesScalar %v2float %22 %26
+         %28 = OpAccessChain %_ptr_Uniform_v2float %_ %int_0 %int_10
+               OpStore %28 %27
+               OpReturn
+               OpFunctionEnd

+ 54 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding-5.asm.comp

@@ -0,0 +1,54 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpSourceExtension "GL_EXT_scalar_block_layout"
+               OpName %main "main"
+               OpName %SSBOScalar "SSBOScalar"
+               OpMemberName %SSBOScalar 0 "a"
+               OpMemberName %SSBOScalar 1 "b"
+               OpMemberName %SSBOScalar 2 "c"
+               OpName %_ ""
+               OpMemberDecorate %SSBOScalar 0 Offset 0
+               OpMemberDecorate %SSBOScalar 1 Offset 8
+               OpMemberDecorate %SSBOScalar 2 Offset 20
+               OpDecorate %SSBOScalar BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+    %v3float = OpTypeVector %float 3
+ %SSBOScalar = OpTypeStruct %v2float %v3float %v3float
+%_ptr_Uniform_SSBOScalar = OpTypePointer Uniform %SSBOScalar
+          %_ = OpVariable %_ptr_Uniform_SSBOScalar Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+      %int_2 = OpConstant %int 2
+%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
+    %float_1 = OpConstant %float 1
+         %27 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %16 = OpAccessChain %_ptr_Uniform_v3float %_ %int_1
+         %17 = OpLoad %v3float %16
+         %18 = OpVectorShuffle %v2float %17 %17 0 1
+         %20 = OpAccessChain %_ptr_Uniform_v3float %_ %int_2
+         %21 = OpLoad %v3float %20
+         %22 = OpVectorShuffle %v2float %21 %21 1 2
+               OpStore %16 %27
+         %23 = OpFMul %v2float %18 %22
+         %25 = OpAccessChain %_ptr_Uniform_v2float %_ %int_0
+               OpStore %25 %23
+               OpReturn
+               OpFunctionEnd

+ 56 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/load-packed-no-forwarding.asm.comp

@@ -0,0 +1,56 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 23
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpSourceExtension "GL_EXT_scalar_block_layout"
+               OpName %main "main"
+               OpName %SSBOScalar "SSBOScalar"
+               OpMemberName %SSBOScalar 0 "a"
+               OpMemberName %SSBOScalar 1 "b"
+               OpMemberName %SSBOScalar 2 "c"
+               OpName %_ ""
+               OpMemberDecorate %SSBOScalar 0 Offset 0
+               OpMemberDecorate %SSBOScalar 1 RowMajor
+               OpMemberDecorate %SSBOScalar 1 Offset 12
+               OpMemberDecorate %SSBOScalar 1 MatrixStride 12
+               OpMemberDecorate %SSBOScalar 2 RowMajor
+               OpMemberDecorate %SSBOScalar 2 Offset 48
+               OpMemberDecorate %SSBOScalar 2 MatrixStride 12
+               OpDecorate %SSBOScalar BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v3float = OpTypeVector %float 3
+%mat3v3float = OpTypeMatrix %v3float 3
+ %SSBOScalar = OpTypeStruct %v3float %mat3v3float %mat3v3float
+%_ptr_Uniform_SSBOScalar = OpTypePointer Uniform %SSBOScalar
+          %_ = OpVariable %_ptr_Uniform_SSBOScalar Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+      %int_2 = OpConstant %int 2
+%_ptr_Uniform_mat3v3float = OpTypePointer Uniform %mat3v3float
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %b_ptr = OpAccessChain %_ptr_Uniform_mat3v3float %_ %int_1
+         %c_ptr = OpAccessChain %_ptr_Uniform_mat3v3float %_ %int_2
+         %b = OpLoad %mat3v3float %b_ptr
+         %c = OpLoad %mat3v3float %c_ptr
+		 OpStore %b_ptr %c
+         %19 = OpAccessChain %_ptr_Uniform_v3float %_ %int_0
+         %20 = OpLoad %v3float %19
+         %21 = OpMatrixTimesVector %v3float %b %20
+         %22 = OpAccessChain %_ptr_Uniform_v3float %_ %int_0
+               OpStore %22 %21
+               OpReturn
+               OpFunctionEnd

+ 57 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/packed-vector-extract-insert.asm.comp

@@ -0,0 +1,57 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 28
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpSourceExtension "GL_EXT_scalar_block_layout"
+               OpName %main "main"
+               OpName %SSBOScalar "SSBOScalar"
+               OpMemberName %SSBOScalar 0 "a"
+               OpMemberName %SSBOScalar 1 "b"
+               OpMemberName %SSBOScalar 2 "c"
+               OpMemberName %SSBOScalar 3 "d"
+               OpName %_ ""
+               OpMemberDecorate %SSBOScalar 0 Offset 0
+               OpMemberDecorate %SSBOScalar 1 Offset 8
+               OpMemberDecorate %SSBOScalar 2 Offset 20
+               OpMemberDecorate %SSBOScalar 3 Offset 32
+               OpDecorate %SSBOScalar BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v2float = OpTypeVector %float 2
+    %v3float = OpTypeVector %float 3
+ %SSBOScalar = OpTypeStruct %v2float %v3float %v3float %v3float
+%_ptr_Uniform_SSBOScalar = OpTypePointer Uniform %SSBOScalar
+          %_ = OpVariable %_ptr_Uniform_SSBOScalar Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
+      %int_2 = OpConstant %int 2
+       %uint = OpTypeInt 32 0
+     %uint_0 = OpConstant %uint 0
+	 %float_2 = OpConstant %float 2.0
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %v3_ptr = OpAccessChain %_ptr_Uniform_v3float %_ %int_1
+         %v3 = OpLoad %v3float %v3_ptr
+		 %v3_mod = OpCompositeInsert %v3float %float_2 %v3 2
+         %v2 = OpVectorShuffle %v2float %v3 %v3 0 1
+		 %v1 = OpCompositeExtract %float %v3 2
+         %v2_mul = OpVectorTimesScalar %v2float %v2 %v1
+         %v2_ptr = OpAccessChain %_ptr_Uniform_v2float %_ %int_0
+               OpStore %v2_ptr %v2_mul
+			   OpStore %v3_ptr %v3_mod
+               OpReturn
+               OpFunctionEnd

+ 48 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/asm/packing/row-major-split-access-chain.asm.comp

@@ -0,0 +1,48 @@
+; SPIR-V
+; Version: 1.0
+; Generator: Khronos Glslang Reference Front End; 7
+; Bound: 21
+; Schema: 0
+               OpCapability Shader
+          %1 = OpExtInstImport "GLSL.std.450"
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpSource GLSL 450
+               OpName %main "main"
+               OpName %SSBORow "SSBORow"
+               OpMemberName %SSBORow 0 "v"
+               OpMemberName %SSBORow 1 "row_major0"
+               OpName %_ ""
+               OpMemberDecorate %SSBORow 0 Offset 0
+               OpMemberDecorate %SSBORow 1 RowMajor
+               OpMemberDecorate %SSBORow 1 Offset 16
+               OpMemberDecorate %SSBORow 1 MatrixStride 16
+               OpDecorate %SSBORow BufferBlock
+               OpDecorate %_ DescriptorSet 0
+               OpDecorate %_ Binding 0
+       %void = OpTypeVoid
+          %3 = OpTypeFunction %void
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%mat4v4float = OpTypeMatrix %v4float 4
+    %SSBORow = OpTypeStruct %float %mat4v4float
+%_ptr_Uniform_SSBORow = OpTypePointer Uniform %SSBORow
+          %_ = OpVariable %_ptr_Uniform_SSBORow Uniform
+        %int = OpTypeInt 32 1
+      %int_0 = OpConstant %int 0
+      %int_1 = OpConstant %int 1
+       %uint = OpTypeInt 32 0
+     %uint_2 = OpConstant %uint 2
+%_ptr_Uniform_float = OpTypePointer Uniform %float
+%_ptr_Uniform_v4float = OpTypePointer Uniform %v4float
+       %main = OpFunction %void None %3
+          %5 = OpLabel
+         %row_ptr = OpAccessChain %_ptr_Uniform_v4float %_ %int_1 %int_1
+		 %float_ptr = OpAccessChain %_ptr_Uniform_float %row_ptr %uint_2
+
+         %19 = OpLoad %float %float_ptr
+         %20 = OpAccessChain %_ptr_Uniform_float %_ %int_0
+               OpStore %20 %19
+               OpReturn
+               OpFunctionEnd

+ 86 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-scalar.comp

@@ -0,0 +1,86 @@
+#version 450
+#extension GL_EXT_scalar_block_layout : require
+layout(local_size_x = 1) in;
+
+#define T mat2
+#define PACKING scalar
+
+layout(set = 0, binding = 0, PACKING) buffer SSBOCol
+{
+	layout(column_major) T col_major0;
+	layout(column_major) T col_major1;
+};
+
+layout(set = 0, binding = 1, PACKING) buffer SSBORow
+{
+	layout(row_major) T row_major0;
+	layout(row_major) T row_major1;
+};
+
+void load_store_to_variable_col_major()
+{
+	// Load to variable.
+	T loaded = col_major0;
+
+	// Store from variable.
+	col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major()
+{
+	// Load to variable.
+	T loaded = row_major0;
+
+	// Store to variable.
+	row_major0 = loaded;
+}
+
+void copy_col_major_to_col_major()
+{
+	// Copy col -> col
+	col_major0 = col_major1;
+}
+
+void copy_row_major_to_col_major()
+{
+	// Copy row -> col
+	col_major0 = row_major0;
+}
+
+void copy_col_major_to_row_major()
+{
+	// Copy col -> row
+	row_major0 = col_major0;
+}
+
+void copy_row_major_to_row_major()
+{
+	// Copy row -> row
+	row_major0 = row_major1;
+}
+
+void copy_columns()
+{
+	// Copy columns/rows.
+	col_major0[1] = row_major0[1];
+	row_major0[1] = col_major0[1];
+}
+
+void copy_elements()
+{
+	// Copy individual elements.
+	col_major0[0][1] = row_major0[0][1];
+	row_major0[0][1] = col_major0[0][1];
+}
+
+void main()
+{
+	load_store_to_variable_col_major();
+	load_store_to_variable_row_major();
+	copy_col_major_to_col_major();
+	copy_col_major_to_row_major();
+	copy_row_major_to_col_major();
+	copy_row_major_to_row_major();
+	copy_columns();
+	copy_elements();
+}

+ 85 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-std140.comp

@@ -0,0 +1,85 @@
+#version 450
+layout(local_size_x = 1) in;
+
+#define T mat2
+#define PACKING std140
+
+layout(set = 0, binding = 0, PACKING) buffer SSBOCol
+{
+	layout(column_major) T col_major0;
+	layout(column_major) T col_major1;
+};
+
+layout(set = 0, binding = 1, PACKING) buffer SSBORow
+{
+	layout(row_major) T row_major0;
+	layout(row_major) T row_major1;
+};
+
+void load_store_to_variable_col_major()
+{
+	// Load to variable.
+	T loaded = col_major0;
+
+	// Store from variable.
+	col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major()
+{
+	// Load to variable.
+	T loaded = row_major0;
+
+	// Store to variable.
+	row_major0 = loaded;
+}
+
+void copy_col_major_to_col_major()
+{
+	// Copy col -> col
+	col_major0 = col_major1;
+}
+
+void copy_row_major_to_col_major()
+{
+	// Copy row -> col
+	col_major0 = row_major0;
+}
+
+void copy_col_major_to_row_major()
+{
+	// Copy col -> row
+	row_major0 = col_major0;
+}
+
+void copy_row_major_to_row_major()
+{
+	// Copy row -> row
+	row_major0 = row_major1;
+}
+
+void copy_columns()
+{
+	// Copy columns/rows.
+	col_major0[1] = row_major0[1];
+	row_major0[1] = col_major0[1];
+}
+
+void copy_elements()
+{
+	// Copy individual elements.
+	col_major0[0][1] = row_major0[0][1];
+	row_major0[0][1] = col_major0[0][1];
+}
+
+void main()
+{
+	load_store_to_variable_col_major();
+	load_store_to_variable_row_major();
+	copy_col_major_to_col_major();
+	copy_col_major_to_row_major();
+	copy_row_major_to_col_major();
+	copy_row_major_to_row_major();
+	copy_columns();
+	copy_elements();
+}

+ 85 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x2-std430.comp

@@ -0,0 +1,85 @@
+#version 450
+layout(local_size_x = 1) in;
+
+#define T mat2
+#define PACKING std430
+
+layout(set = 0, binding = 0, PACKING) buffer SSBOCol
+{
+	layout(column_major) T col_major0;
+	layout(column_major) T col_major1;
+};
+
+layout(set = 0, binding = 1, PACKING) buffer SSBORow
+{
+	layout(row_major) T row_major0;
+	layout(row_major) T row_major1;
+};
+
+void load_store_to_variable_col_major()
+{
+	// Load to variable.
+	T loaded = col_major0;
+
+	// Store from variable.
+	col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major()
+{
+	// Load to variable.
+	T loaded = row_major0;
+
+	// Store to variable.
+	row_major0 = loaded;
+}
+
+void copy_col_major_to_col_major()
+{
+	// Copy col -> col
+	col_major0 = col_major1;
+}
+
+void copy_row_major_to_col_major()
+{
+	// Copy row -> col
+	col_major0 = row_major0;
+}
+
+void copy_col_major_to_row_major()
+{
+	// Copy col -> row
+	row_major0 = col_major0;
+}
+
+void copy_row_major_to_row_major()
+{
+	// Copy row -> row
+	row_major0 = row_major1;
+}
+
+void copy_columns()
+{
+	// Copy columns/rows.
+	col_major0[1] = row_major0[1];
+	row_major0[1] = col_major0[1];
+}
+
+void copy_elements()
+{
+	// Copy individual elements.
+	col_major0[0][1] = row_major0[0][1];
+	row_major0[0][1] = col_major0[0][1];
+}
+
+void main()
+{
+	load_store_to_variable_col_major();
+	load_store_to_variable_row_major();
+	copy_col_major_to_col_major();
+	copy_col_major_to_row_major();
+	copy_row_major_to_col_major();
+	copy_row_major_to_row_major();
+	copy_columns();
+	copy_elements();
+}

+ 86 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp

@@ -0,0 +1,86 @@
+#version 450
+#extension GL_EXT_scalar_block_layout : require
+layout(local_size_x = 1) in;
+
+#define T mat2x3
+#define PACKING scalar
+
+layout(set = 0, binding = 0, PACKING) buffer SSBOCol
+{
+	layout(column_major) T col_major0;
+	layout(column_major) T col_major1;
+};
+
+layout(set = 0, binding = 1, PACKING) buffer SSBORow
+{
+	layout(row_major) T row_major0;
+	layout(row_major) T row_major1;
+};
+
+void load_store_to_variable_col_major()
+{
+	// Load to variable.
+	T loaded = col_major0;
+
+	// Store from variable.
+	col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major()
+{
+	// Load to variable.
+	T loaded = row_major0;
+
+	// Store to variable.
+	row_major0 = loaded;
+}
+
+void copy_col_major_to_col_major()
+{
+	// Copy col -> col
+	col_major0 = col_major1;
+}
+
+void copy_row_major_to_col_major()
+{
+	// Copy row -> col
+	col_major0 = row_major0;
+}
+
+void copy_col_major_to_row_major()
+{
+	// Copy col -> row
+	row_major0 = col_major0;
+}
+
+void copy_row_major_to_row_major()
+{
+	// Copy row -> row
+	row_major0 = row_major1;
+}
+
+void copy_columns()
+{
+	// Copy columns/rows.
+	col_major0[1] = row_major0[1];
+	row_major0[1] = col_major0[1];
+}
+
+void copy_elements()
+{
+	// Copy individual elements.
+	col_major0[0][1] = row_major0[0][1];
+	row_major0[0][1] = col_major0[0][1];
+}
+
+void main()
+{
+	load_store_to_variable_col_major();
+	load_store_to_variable_row_major();
+	copy_col_major_to_col_major();
+	copy_col_major_to_row_major();
+	copy_row_major_to_col_major();
+	copy_row_major_to_row_major();
+	copy_columns();
+	copy_elements();
+}

+ 85 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-std140.comp

@@ -0,0 +1,85 @@
+#version 450
+layout(local_size_x = 1) in;
+
+#define T mat2x3
+#define PACKING std140
+
+layout(set = 0, binding = 0, PACKING) buffer SSBOCol
+{
+	layout(column_major) T col_major0;
+	layout(column_major) T col_major1;
+};
+
+layout(set = 0, binding = 1, PACKING) buffer SSBORow
+{
+	layout(row_major) T row_major0;
+	layout(row_major) T row_major1;
+};
+
+void load_store_to_variable_col_major()
+{
+	// Load to variable.
+	T loaded = col_major0;
+
+	// Store from variable.
+	col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major()
+{
+	// Load to variable.
+	T loaded = row_major0;
+
+	// Store to variable.
+	row_major0 = loaded;
+}
+
+void copy_col_major_to_col_major()
+{
+	// Copy col -> col
+	col_major0 = col_major1;
+}
+
+void copy_row_major_to_col_major()
+{
+	// Copy row -> col
+	col_major0 = row_major0;
+}
+
+void copy_col_major_to_row_major()
+{
+	// Copy col -> row
+	row_major0 = col_major0;
+}
+
+void copy_row_major_to_row_major()
+{
+	// Copy row -> row
+	row_major0 = row_major1;
+}
+
+void copy_columns()
+{
+	// Copy columns/rows.
+	col_major0[1] = row_major0[1];
+	row_major0[1] = col_major0[1];
+}
+
+void copy_elements()
+{
+	// Copy individual elements.
+	col_major0[0][1] = row_major0[0][1];
+	row_major0[0][1] = col_major0[0][1];
+}
+
+void main()
+{
+	load_store_to_variable_col_major();
+	load_store_to_variable_row_major();
+	copy_col_major_to_col_major();
+	copy_col_major_to_row_major();
+	copy_row_major_to_col_major();
+	copy_row_major_to_row_major();
+	copy_columns();
+	copy_elements();
+}

+ 85 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x3-std430.comp

@@ -0,0 +1,85 @@
+#version 450
+layout(local_size_x = 1) in;
+
+#define T mat2x3
+#define PACKING std430
+
+layout(set = 0, binding = 0, PACKING) buffer SSBOCol
+{
+	layout(column_major) T col_major0;
+	layout(column_major) T col_major1;
+};
+
+layout(set = 0, binding = 1, PACKING) buffer SSBORow
+{
+	layout(row_major) T row_major0;
+	layout(row_major) T row_major1;
+};
+
+void load_store_to_variable_col_major()
+{
+	// Load to variable.
+	T loaded = col_major0;
+
+	// Store from variable.
+	col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major()
+{
+	// Load to variable.
+	T loaded = row_major0;
+
+	// Store to variable.
+	row_major0 = loaded;
+}
+
+void copy_col_major_to_col_major()
+{
+	// Copy col -> col
+	col_major0 = col_major1;
+}
+
+void copy_row_major_to_col_major()
+{
+	// Copy row -> col
+	col_major0 = row_major0;
+}
+
+void copy_col_major_to_row_major()
+{
+	// Copy col -> row
+	row_major0 = col_major0;
+}
+
+void copy_row_major_to_row_major()
+{
+	// Copy row -> row
+	row_major0 = row_major1;
+}
+
+void copy_columns()
+{
+	// Copy columns/rows.
+	col_major0[1] = row_major0[1];
+	row_major0[1] = col_major0[1];
+}
+
+void copy_elements()
+{
+	// Copy individual elements.
+	col_major0[0][1] = row_major0[0][1];
+	row_major0[0][1] = col_major0[0][1];
+}
+
+void main()
+{
+	load_store_to_variable_col_major();
+	load_store_to_variable_row_major();
+	copy_col_major_to_col_major();
+	copy_col_major_to_row_major();
+	copy_row_major_to_col_major();
+	copy_row_major_to_row_major();
+	copy_columns();
+	copy_elements();
+}

+ 86 - 0
3rdparty/spirv-cross/shaders-msl-no-opt/packing/matrix-2x4-scalar.comp

@@ -0,0 +1,86 @@
+#version 450
+#extension GL_EXT_scalar_block_layout : require
+layout(local_size_x = 1) in;
+
+#define T mat2x4
+#define PACKING scalar
+
+layout(set = 0, binding = 0, PACKING) buffer SSBOCol
+{
+	layout(column_major) T col_major0;
+	layout(column_major) T col_major1;
+};
+
+layout(set = 0, binding = 1, PACKING) buffer SSBORow
+{
+	layout(row_major) T row_major0;
+	layout(row_major) T row_major1;
+};
+
+void load_store_to_variable_col_major()
+{
+	// Load to variable.
+	T loaded = col_major0;
+
+	// Store from variable.
+	col_major1 = loaded;
+}
+
+void load_store_to_variable_row_major()
+{
+	// Load to variable.
+	T loaded = row_major0;
+
+	// Store to variable.
+	row_major0 = loaded;
+}
+
+void copy_col_major_to_col_major()
+{
+	// Copy col -> col
+	col_major0 = col_major1;
+}
+
+void copy_row_major_to_col_major()
+{
+	// Copy row -> col
+	col_major0 = row_major0;
+}
+
+void copy_col_major_to_row_major()
+{
+	// Copy col -> row
+	row_major0 = col_major0;
+}
+
+void copy_row_major_to_row_major()
+{
+	// Copy row -> row
+	row_major0 = row_major1;
+}
+
+void copy_columns()
+{
+	// Copy columns/rows.
+	col_major0[1] = row_major0[1];
+	row_major0[1] = col_major0[1];
+}
+
+void copy_elements()
+{
+	// Copy individual elements.
+	col_major0[0][1] = row_major0[0][1];
+	row_major0[0][1] = col_major0[0][1];
+}
+
+void main()
+{
+	load_store_to_variable_col_major();
+	load_store_to_variable_row_major();
+	copy_col_major_to_col_major();
+	copy_col_major_to_row_major();
+	copy_row_major_to_col_major();
+	copy_row_major_to_row_major();
+	copy_columns();
+	copy_elements();
+}

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików