Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2019-02-20 14:19:00 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2019-02-20 14:19:00 +0300
commit056a0ba27ecdfc229e351e63f5c7aefe52cb14b0 (patch)
tree36370b6c8b597375c47ac56d22f76b8bd60912e5 /reference/shaders-hlsl
parentafa9eb89bf780d52cc36fece77c5e41419b2534d (diff)
Fix case where a struct is loaded which contains a row-major matrix.
Diffstat (limited to 'reference/shaders-hlsl')
-rw-r--r--reference/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert67
1 files changed, 67 insertions, 0 deletions
diff --git a/reference/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert b/reference/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert
new file mode 100644
index 00000000..d5bf9e7a
--- /dev/null
+++ b/reference/shaders-hlsl/asm/vert/extract-transposed-matrix-from-struct.asm.vert
@@ -0,0 +1,67 @@
+struct V2F
+{
+ float4 Position;
+ float4 Color;
+};
+
+struct InstanceData
+{
+ column_major float4x4 MATRIX_MVP;
+ float4 Color;
+};
+
+cbuffer gInstanceData : register(b0)
+{
+ InstanceData gInstanceData_1_data[32] : packoffset(c0);
+};
+
+
+static float4 gl_Position;
+static int gl_InstanceIndex;
+static float3 PosL;
+static float4 _entryPointOutput_Color;
+
+struct SPIRV_Cross_Input
+{
+ float3 PosL : TEXCOORD0;
+ uint gl_InstanceIndex : SV_InstanceID;
+};
+
+struct SPIRV_Cross_Output
+{
+ float4 _entryPointOutput_Color : TEXCOORD0;
+ float4 gl_Position : SV_Position;
+};
+
+V2F _VS(float3 PosL_1, uint instanceID)
+{
+ InstanceData instData;
+ instData.MATRIX_MVP = gInstanceData_1_data[instanceID].MATRIX_MVP;
+ instData.Color = gInstanceData_1_data[instanceID].Color;
+ V2F v2f;
+ v2f.Position = mul(float4(PosL_1, 1.0f), instData.MATRIX_MVP);
+ v2f.Color = instData.Color;
+ return v2f;
+}
+
+void vert_main()
+{
+ float3 PosL_1 = PosL;
+ uint instanceID = uint(gl_InstanceIndex);
+ float3 param = PosL_1;
+ uint param_1 = instanceID;
+ V2F flattenTemp = _VS(param, param_1);
+ gl_Position = flattenTemp.Position;
+ _entryPointOutput_Color = flattenTemp.Color;
+}
+
+SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
+{
+ gl_InstanceIndex = int(stage_input.gl_InstanceIndex);
+ PosL = stage_input.PosL;
+ vert_main();
+ SPIRV_Cross_Output stage_output;
+ stage_output.gl_Position = gl_Position;
+ stage_output._entryPointOutput_Color = _entryPointOutput_Color;
+ return stage_output;
+}