From 19f5cd3e9067d49ac68f8f8ada831e1c59fffea8 Mon Sep 17 00:00:00 2001 From: Hans-Kristian Arntzen Date: Mon, 22 Jul 2019 13:25:45 +0200 Subject: [PATCH] Declare correct matrix type when unpacking. --- .../shaders-msl/vert/read-from-row-major-array.vert | 2 +- .../packing/matrix-2x2-std140.comp | 4 ++-- .../packing/matrix-2x3-scalar.comp | 6 +++--- .../packing/matrix-2x3-std140.comp | 10 +++++----- .../packing/matrix-2x4-std140.comp | 12 ++++++------ .../packing/matrix-3x2-scalar.comp | 8 ++++---- .../packing/matrix-3x2-std140.comp | 8 ++++---- .../packing/matrix-3x4-scalar.comp | 12 ++++++------ .../packing/matrix-4x2-std140.comp | 10 +++++----- .../packing/matrix-4x3-scalar.comp | 10 +++++----- reference/shaders-msl/flatten/rowmajor.flatten.vert | 2 +- .../shaders-msl/vert/read-from-row-major-array.vert | 2 +- spirv_msl.cpp | 6 +++--- 13 files changed, 46 insertions(+), 46 deletions(-) diff --git a/reference/opt/shaders-msl/vert/read-from-row-major-array.vert b/reference/opt/shaders-msl/vert/read-from-row-major-array.vert index 6b453f58..49ba3cf0 100644 --- a/reference/opt/shaders-msl/vert/read-from-row-major-array.vert +++ b/reference/opt/shaders-msl/vert/read-from-row-major-array.vert @@ -23,7 +23,7 @@ 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(transpose(float2x3(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[0].x - 2.0) < 0.0500000007450580596923828125) * float(abs(transpose(float2x3(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[0].y - 6.0) < 0.0500000007450580596923828125)) * float(abs(transpose(float2x3(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[0].z - (-6.0)) < 0.0500000007450580596923828125)) * ((float(abs(transpose(float2x3(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[1].x) < 0.0500000007450580596923828125) * float(abs(transpose(float2x3(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[1].y - 5.0) < 0.0500000007450580596923828125)) * float(abs(transpose(float2x3(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[1].z - 5.0) < 0.0500000007450580596923828125)); + out.v_vtxResult = ((float(abs(transpose(float3x2(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[0].x - 2.0) < 0.0500000007450580596923828125) * float(abs(transpose(float3x2(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[0].y - 6.0) < 0.0500000007450580596923828125)) * float(abs(transpose(float3x2(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[0].z - (-6.0)) < 0.0500000007450580596923828125)) * ((float(abs(transpose(float3x2(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[1].x) < 0.0500000007450580596923828125) * float(abs(transpose(float3x2(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[1].y - 5.0) < 0.0500000007450580596923828125)) * float(abs(transpose(float3x2(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy))[1].z - 5.0) < 0.0500000007450580596923828125)); return out; } diff --git a/reference/shaders-msl-no-opt/packing/matrix-2x2-std140.comp b/reference/shaders-msl-no-opt/packing/matrix-2x2-std140.comp index 929325b1..e499066f 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-2x2-std140.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-2x2-std140.comp @@ -51,8 +51,8 @@ void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41) void copy_row_major_to_row_major(device SSBORow& v_41) { - v_41.row_major0[0].xy = float2x2(v_41.row_major1[0], v_41.row_major1[1])[0]; - v_41.row_major0[1].xy = float2x2(v_41.row_major1[0], v_41.row_major1[1])[1]; + 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) diff --git a/reference/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp b/reference/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp index fb654870..c7df7c50 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-2x3-scalar.comp @@ -40,13 +40,13 @@ void copy_col_major_to_col_major(device SSBOCol& v_29) void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_41.row_major0 = transpose(float2x3(float2(v_29.col_major0[0]), float2(v_29.col_major0[1]), float2(v_29.col_major0[2]))); + v_41.row_major0 = transpose(float3x2(float2(v_29.col_major0[0]), float2(v_29.col_major0[1]), float2(v_29.col_major0[2]))); } void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_29.col_major0[0] = float3(float2x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][0], float2x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][0], float2x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][0]); - v_29.col_major0[1] = float3(float2x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][1], float2x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][1], float2x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][1]); + v_29.col_major0[0] = float3(float3x2(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][0], float3x2(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][0], float3x2(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][0]); + v_29.col_major0[1] = float3(float3x2(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][1], float3x2(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][1], float3x2(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][1]); } void copy_row_major_to_row_major(device SSBORow& v_41) diff --git a/reference/shaders-msl-no-opt/packing/matrix-2x3-std140.comp b/reference/shaders-msl-no-opt/packing/matrix-2x3-std140.comp index 155ba504..d04df10a 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-2x3-std140.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-2x3-std140.comp @@ -25,7 +25,7 @@ void load_store_to_variable_col_major(device SSBOCol& v_29) void load_store_to_variable_row_major(device SSBORow& v_41) { - float2x3 loaded = transpose(float2x3(v_41.row_major0[0].xy, v_41.row_major0[1].xy, v_41.row_major0[2].xy)); + 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]); @@ -45,14 +45,14 @@ void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41) void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_29.col_major0 = transpose(float2x3(v_41.row_major0[0].xy, v_41.row_major0[1].xy, v_41.row_major0[2].xy)); + 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 = float2x3(v_41.row_major1[0], v_41.row_major1[1])[0]; - v_41.row_major0[1].xy = float2x3(v_41.row_major1[0], v_41.row_major1[1])[1]; - v_41.row_major0[2].xy = float2x3(v_41.row_major1[0], v_41.row_major1[1])[2]; + 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) diff --git a/reference/shaders-msl-no-opt/packing/matrix-2x4-std140.comp b/reference/shaders-msl-no-opt/packing/matrix-2x4-std140.comp index 653f7b8c..9d78295c 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-2x4-std140.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-2x4-std140.comp @@ -25,7 +25,7 @@ void load_store_to_variable_col_major(device SSBOCol& v_29) void load_store_to_variable_row_major(device SSBORow& v_41) { - float2x4 loaded = transpose(float2x4(v_41.row_major0[0].xy, v_41.row_major0[1].xy, v_41.row_major0[2].xy, v_41.row_major0[3].xy)); + 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]); @@ -47,15 +47,15 @@ void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41) void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_29.col_major0 = transpose(float2x4(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_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 = float2x4(v_41.row_major1[0], v_41.row_major1[1])[0]; - v_41.row_major0[1].xy = float2x4(v_41.row_major1[0], v_41.row_major1[1])[1]; - v_41.row_major0[2].xy = float2x4(v_41.row_major1[0], v_41.row_major1[1])[2]; - v_41.row_major0[3].xy = float2x4(v_41.row_major1[0], v_41.row_major1[1])[3]; + 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) diff --git a/reference/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp b/reference/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp index 11748b2c..d917a91c 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-3x2-scalar.comp @@ -27,7 +27,7 @@ void load_store_to_variable_col_major(device SSBOCol& v_29) void load_store_to_variable_row_major(device SSBORow& v_41) { - float3x2 loaded = transpose(float3x2(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]))); + 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]); } @@ -45,13 +45,13 @@ void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41) void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_29.col_major0 = transpose(float3x2(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]))); + 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] = float3x2(float2(v_41.row_major1[0]), float2(v_41.row_major1[1]), float2(v_41.row_major1[2]))[0]; - v_41.row_major0[1] = float3x2(float2(v_41.row_major1[0]), float2(v_41.row_major1[1]), float2(v_41.row_major1[2]))[1]; + 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) diff --git a/reference/shaders-msl-no-opt/packing/matrix-3x2-std140.comp b/reference/shaders-msl-no-opt/packing/matrix-3x2-std140.comp index 92ebe472..5b2a3a0c 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-3x2-std140.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-3x2-std140.comp @@ -40,14 +40,14 @@ void copy_col_major_to_col_major(device SSBOCol& v_29) 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], v_29.col_major0[1])); + v_41.row_major0 = transpose(float2x3(v_29.col_major0[0], 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].xy = float2(float3x2(v_41.row_major0[0], v_41.row_major0[1])[0][0], float3x2(v_41.row_major0[0], v_41.row_major0[1])[1][0]); - v_29.col_major0[1].xy = float2(float3x2(v_41.row_major0[0], v_41.row_major0[1])[0][1], float3x2(v_41.row_major0[0], v_41.row_major0[1])[1][1]); - v_29.col_major0[2].xy = float2(float3x2(v_41.row_major0[0], v_41.row_major0[1])[0][2], float3x2(v_41.row_major0[0], v_41.row_major0[1])[1][2]); + v_29.col_major0[0].xy = float2(float2x3(v_41.row_major0[0], v_41.row_major0[1])[0][0], float2x3(v_41.row_major0[0], v_41.row_major0[1])[1][0]); + v_29.col_major0[1].xy = float2(float2x3(v_41.row_major0[0], v_41.row_major0[1])[0][1], float2x3(v_41.row_major0[0], v_41.row_major0[1])[1][1]); + v_29.col_major0[2].xy = float2(float2x3(v_41.row_major0[0], v_41.row_major0[1])[0][2], float2x3(v_41.row_major0[0], v_41.row_major0[1])[1][2]); } void copy_row_major_to_row_major(device SSBORow& v_41) diff --git a/reference/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp b/reference/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp index b5dfe4c7..c7b1b326 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-3x4-scalar.comp @@ -27,7 +27,7 @@ void load_store_to_variable_col_major(device SSBOCol& v_29) void load_store_to_variable_row_major(device SSBORow& v_41) { - float3x4 loaded = transpose(float3x4(float3(v_41.row_major0[0]), float3(v_41.row_major0[1]), float3(v_41.row_major0[2]), float3(v_41.row_major0[3]))); + 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]); @@ -49,15 +49,15 @@ void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41) void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_29.col_major0 = transpose(float3x4(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_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] = float3x4(float4(v_41.row_major1[0]), float4(v_41.row_major1[1]), float4(v_41.row_major1[2]))[0]; - v_41.row_major0[1] = float3x4(float4(v_41.row_major1[0]), float4(v_41.row_major1[1]), float4(v_41.row_major1[2]))[1]; - v_41.row_major0[2] = float3x4(float4(v_41.row_major1[0]), float4(v_41.row_major1[1]), float4(v_41.row_major1[2]))[2]; - v_41.row_major0[3] = float3x4(float4(v_41.row_major1[0]), float4(v_41.row_major1[1]), float4(v_41.row_major1[2]))[3]; + 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) diff --git a/reference/shaders-msl-no-opt/packing/matrix-4x2-std140.comp b/reference/shaders-msl-no-opt/packing/matrix-4x2-std140.comp index 88aa21e2..0d1586fb 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-4x2-std140.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-4x2-std140.comp @@ -42,15 +42,15 @@ void copy_col_major_to_col_major(device SSBOCol& v_29) 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], v_29.col_major0[1])); + v_41.row_major0 = transpose(float2x4(v_29.col_major0[0], 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].xy = float2(float4x2(v_41.row_major0[0], v_41.row_major0[1])[0][0], float4x2(v_41.row_major0[0], v_41.row_major0[1])[1][0]); - v_29.col_major0[1].xy = float2(float4x2(v_41.row_major0[0], v_41.row_major0[1])[0][1], float4x2(v_41.row_major0[0], v_41.row_major0[1])[1][1]); - v_29.col_major0[2].xy = float2(float4x2(v_41.row_major0[0], v_41.row_major0[1])[0][2], float4x2(v_41.row_major0[0], v_41.row_major0[1])[1][2]); - v_29.col_major0[3].xy = float2(float4x2(v_41.row_major0[0], v_41.row_major0[1])[0][3], float4x2(v_41.row_major0[0], v_41.row_major0[1])[1][3]); + v_29.col_major0[0].xy = float2(float2x4(v_41.row_major0[0], v_41.row_major0[1])[0][0], float2x4(v_41.row_major0[0], v_41.row_major0[1])[1][0]); + v_29.col_major0[1].xy = float2(float2x4(v_41.row_major0[0], v_41.row_major0[1])[0][1], float2x4(v_41.row_major0[0], v_41.row_major0[1])[1][1]); + v_29.col_major0[2].xy = float2(float2x4(v_41.row_major0[0], v_41.row_major0[1])[0][2], float2x4(v_41.row_major0[0], v_41.row_major0[1])[1][2]); + v_29.col_major0[3].xy = float2(float2x4(v_41.row_major0[0], v_41.row_major0[1])[0][3], float2x4(v_41.row_major0[0], v_41.row_major0[1])[1][3]); } void copy_row_major_to_row_major(device SSBORow& v_41) diff --git a/reference/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp b/reference/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp index 856621b8..c8185baa 100644 --- a/reference/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp +++ b/reference/shaders-msl-no-opt/packing/matrix-4x3-scalar.comp @@ -44,15 +44,15 @@ void copy_col_major_to_col_major(device SSBOCol& v_29) void copy_col_major_to_row_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_41.row_major0 = transpose(float4x3(float4(v_29.col_major0[0]), float4(v_29.col_major0[1]), float4(v_29.col_major0[2]))); + v_41.row_major0 = transpose(float3x4(float4(v_29.col_major0[0]), float4(v_29.col_major0[1]), float4(v_29.col_major0[2]))); } void copy_row_major_to_col_major(device SSBOCol& v_29, device SSBORow& v_41) { - v_29.col_major0[0] = float3(float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][0], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][0], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][0]); - v_29.col_major0[1] = float3(float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][1], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][1], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][1]); - v_29.col_major0[2] = float3(float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][2], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][2], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][2]); - v_29.col_major0[3] = float3(float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][3], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][3], float4x3(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][3]); + v_29.col_major0[0] = float3(float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][0], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][0], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][0]); + v_29.col_major0[1] = float3(float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][1], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][1], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][1]); + v_29.col_major0[2] = float3(float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][2], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][2], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][2]); + v_29.col_major0[3] = float3(float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[0][3], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[1][3], float3x4(v_41.row_major0[0], v_41.row_major0[1], v_41.row_major0[2])[2][3]); } void copy_row_major_to_row_major(device SSBORow& v_41) diff --git a/reference/shaders-msl/flatten/rowmajor.flatten.vert b/reference/shaders-msl/flatten/rowmajor.flatten.vert index 688e66e3..6e72c36b 100644 --- a/reference/shaders-msl/flatten/rowmajor.flatten.vert +++ b/reference/shaders-msl/flatten/rowmajor.flatten.vert @@ -23,7 +23,7 @@ struct main0_in vertex main0_out main0(main0_in in [[stage_in]], constant UBO& _18 [[buffer(0)]]) { main0_out out = {}; - float2 v = in.aVertex * transpose(float2x4(_18.uMVP[0].xy, _18.uMVP[1].xy, _18.uMVP[2].xy, _18.uMVP[3].xy)); + float2 v = in.aVertex * transpose(float4x2(_18.uMVP[0].xy, _18.uMVP[1].xy, _18.uMVP[2].xy, _18.uMVP[3].xy)); out.gl_Position = (_18.uMVPR * in.aVertex) + (in.aVertex * _18.uMVPC); return out; } diff --git a/reference/shaders-msl/vert/read-from-row-major-array.vert b/reference/shaders-msl/vert/read-from-row-major-array.vert index 141977d7..2d322a69 100644 --- a/reference/shaders-msl/vert/read-from-row-major-array.vert +++ b/reference/shaders-msl/vert/read-from-row-major-array.vert @@ -51,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 = transpose(float2x3(_104.var[0][0][0].xy, _104.var[0][0][1].xy, _104.var[0][0][2].xy)); + 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; diff --git a/spirv_msl.cpp b/spirv_msl.cpp index 8aabbe75..5e7dc93b 100644 --- a/spirv_msl.cpp +++ b/spirv_msl.cpp @@ -2792,7 +2792,7 @@ void CompilerMSL::emit_store_statement(uint32_t lhs_expression, uint32_t rhs_exp for (uint32_t i = 0; i < type.vecsize; i++) { statement(to_enclosed_expression(lhs_expression), - "[", i, "]", store_swiz, " = ", to_enclosed_pointer_expression(rhs_expression), "[", i, "];"); + "[", i, "]", store_swiz, " = ", unpack_expression_explicit(rhs_expression, true), "[", i, "];"); } } else @@ -2808,7 +2808,7 @@ void CompilerMSL::emit_store_statement(uint32_t lhs_expression, uint32_t rhs_exp string rhs_row = type_to_glsl_constructor(vector_type) + "("; for (uint32_t j = 0; j < vector_type.vecsize; j++) { - rhs_row += join(to_enclosed_pointer_expression(rhs_expression), "[", j, "][", i, "]"); + rhs_row += join(to_enclosed_unpacked_expression(rhs_expression), "[", j, "][", i, "]"); if (j + 1 < vector_type.vecsize) rhs_row += ", "; } @@ -2961,7 +2961,7 @@ string CompilerMSL::unpack_expression_type(string expr_str, const SPIRType &type uint32_t physical_vecsize = row_major ? physical_type->columns : physical_type->vecsize; const char *base_type = type.width == 16 ? "half" : "float"; - string unpack_expr = join(type_to_glsl(type), "("); + string unpack_expr = join(base_type, columns, "x", vecsize, "("); const char *load_swiz = "";