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>2021-06-28 15:24:29 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2021-06-28 16:04:49 +0300
commitd6b29ab0173a4da8f6a5738cf6fb147dd567560a (patch)
treed5d4838aa056325c459a113f3faa5fcc51cc5157 /reference/opt
parent9338996f3b2bec5ef1b401c208baa8178843e38b (diff)
HLSL: Rewrite how block IO is emitted.
Emit block members directly in the IO structs and sort them. Ensures we can get some kind of stable order between stages. To complete the story, we'll need to be able to inject unused inputs / builtins, or eliminate unused outputs (probably easiest solution).
Diffstat (limited to 'reference/opt')
-rw-r--r--reference/opt/shaders-hlsl/frag/io-block.frag18
-rw-r--r--reference/opt/shaders-hlsl/vert/locations.vert20
-rw-r--r--reference/opt/shaders-hlsl/vert/qualifiers.vert28
3 files changed, 40 insertions, 26 deletions
diff --git a/reference/opt/shaders-hlsl/frag/io-block.frag b/reference/opt/shaders-hlsl/frag/io-block.frag
index 52c1f518..812a44d8 100644
--- a/reference/opt/shaders-hlsl/frag/io-block.frag
+++ b/reference/opt/shaders-hlsl/frag/io-block.frag
@@ -1,13 +1,18 @@
-static float4 FragColor;
-
struct VertexOut
{
- float4 a : TEXCOORD1;
- float4 b : TEXCOORD2;
+ float4 a;
+ float4 b;
};
+static float4 FragColor;
static VertexOut _12;
+struct SPIRV_Cross_Input
+{
+ float4 VertexOut_a : TEXCOORD1;
+ float4 VertexOut_b : TEXCOORD2;
+};
+
struct SPIRV_Cross_Output
{
float4 FragColor : SV_Target0;
@@ -18,9 +23,10 @@ void frag_main()
FragColor = _12.a + _12.b;
}
-SPIRV_Cross_Output main(in VertexOut stage_input_12)
+SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
{
- _12 = stage_input_12;
+ _12.a = stage_input.VertexOut_a;
+ _12.b = stage_input.VertexOut_b;
frag_main();
SPIRV_Cross_Output stage_output;
stage_output.FragColor = FragColor;
diff --git a/reference/opt/shaders-hlsl/vert/locations.vert b/reference/opt/shaders-hlsl/vert/locations.vert
index b007582c..0d14def3 100644
--- a/reference/opt/shaders-hlsl/vert/locations.vert
+++ b/reference/opt/shaders-hlsl/vert/locations.vert
@@ -5,6 +5,12 @@ struct Foo
float3 c;
};
+struct VertexOut
+{
+ float3 color;
+ float3 foo;
+};
+
static const Foo _71 = { 1.0f.xxx, 1.0f.xxx, 1.0f.xxx };
static float4 gl_Position;
@@ -16,13 +22,6 @@ static float vLocation1;
static float vLocation2[2];
static Foo vLocation4;
static float vLocation9;
-
-struct VertexOut
-{
- float3 color : TEXCOORD7;
- float3 foo : TEXCOORD8;
-};
-
static VertexOut vout;
struct SPIRV_Cross_Input
@@ -38,6 +37,8 @@ struct SPIRV_Cross_Output
float vLocation1 : TEXCOORD1;
float vLocation2[2] : TEXCOORD2;
Foo vLocation4 : TEXCOORD4;
+ float3 VertexOut_color : TEXCOORD7;
+ float3 VertexOut_foo : TEXCOORD8;
float vLocation9 : TEXCOORD9;
float4 gl_Position : SV_Position;
};
@@ -55,13 +56,12 @@ void vert_main()
vout.foo = 4.0f.xxx;
}
-SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input, out VertexOut stage_outputvout)
+SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
{
Input2 = stage_input.Input2;
Input4 = stage_input.Input4;
Input0 = stage_input.Input0;
vert_main();
- stage_outputvout = vout;
SPIRV_Cross_Output stage_output;
stage_output.gl_Position = gl_Position;
stage_output.vLocation0 = vLocation0;
@@ -69,5 +69,7 @@ SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input, out VertexOut stage_outpu
stage_output.vLocation2 = vLocation2;
stage_output.vLocation4 = vLocation4;
stage_output.vLocation9 = vLocation9;
+ stage_output.VertexOut_color = vout.color;
+ stage_output.VertexOut_foo = vout.foo;
return stage_output;
}
diff --git a/reference/opt/shaders-hlsl/vert/qualifiers.vert b/reference/opt/shaders-hlsl/vert/qualifiers.vert
index 13ee2a8c..bbf7dc61 100644
--- a/reference/opt/shaders-hlsl/vert/qualifiers.vert
+++ b/reference/opt/shaders-hlsl/vert/qualifiers.vert
@@ -1,17 +1,16 @@
+struct Block
+{
+ float vFlat;
+ float vCentroid;
+ float vSample;
+ float vNoperspective;
+};
+
static float4 gl_Position;
static float vFlat;
static float vCentroid;
static float vSample;
static float vNoperspective;
-
-struct Block
-{
- nointerpolation float vFlat : TEXCOORD4;
- centroid float vCentroid : TEXCOORD5;
- sample float vSample : TEXCOORD6;
- noperspective float vNoperspective : TEXCOORD7;
-};
-
static Block vout;
struct SPIRV_Cross_Output
@@ -20,6 +19,10 @@ struct SPIRV_Cross_Output
centroid float vCentroid : TEXCOORD1;
sample float vSample : TEXCOORD2;
noperspective float vNoperspective : TEXCOORD3;
+ nointerpolation float Block_vFlat : TEXCOORD4;
+ centroid float Block_vCentroid : TEXCOORD5;
+ sample float Block_vSample : TEXCOORD6;
+ noperspective float Block_vNoperspective : TEXCOORD7;
float4 gl_Position : SV_Position;
};
@@ -36,15 +39,18 @@ void vert_main()
vout.vNoperspective = 3.0f;
}
-SPIRV_Cross_Output main(out Block stage_outputvout)
+SPIRV_Cross_Output main()
{
vert_main();
- stage_outputvout = vout;
SPIRV_Cross_Output stage_output;
stage_output.gl_Position = gl_Position;
stage_output.vFlat = vFlat;
stage_output.vCentroid = vCentroid;
stage_output.vSample = vSample;
stage_output.vNoperspective = vNoperspective;
+ stage_output.Block_vFlat = vout.vFlat;
+ stage_output.Block_vCentroid = vout.vCentroid;
+ stage_output.Block_vSample = vout.vSample;
+ stage_output.Block_vNoperspective = vout.vNoperspective;
return stage_output;
}