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>2020-07-03 14:12:05 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2020-07-03 15:38:51 +0300
commit2d43103a55233bd8e205075e47008bf5a731ab68 (patch)
tree3fe59feb4c51000167341313f726bc22bb40c160 /reference/opt/shaders
parentd573a95a9c65cf0ab76c0c206e3b01fa47235836 (diff)
GLSL: Support multi-level struct flattening for I/O.
Diffstat (limited to 'reference/opt/shaders')
-rw-r--r--reference/opt/shaders/legacy/fragment/multiple-struct-flattening.legacy.frag36
-rw-r--r--reference/opt/shaders/legacy/vert/struct-flatten-stores-multi-dimension.legacy.vert49
-rw-r--r--reference/opt/shaders/legacy/vert/struct-varying.legacy.vert14
3 files changed, 89 insertions, 10 deletions
diff --git a/reference/opt/shaders/legacy/fragment/multiple-struct-flattening.legacy.frag b/reference/opt/shaders/legacy/fragment/multiple-struct-flattening.legacy.frag
new file mode 100644
index 00000000..10ce5a51
--- /dev/null
+++ b/reference/opt/shaders/legacy/fragment/multiple-struct-flattening.legacy.frag
@@ -0,0 +1,36 @@
+#version 100
+precision mediump float;
+precision highp int;
+
+struct Foo
+{
+ highp vec4 a;
+ highp vec4 b;
+};
+
+struct Bar
+{
+ highp vec4 a;
+ highp vec4 b;
+};
+
+struct Baz
+{
+ Foo foo;
+ Bar bar;
+};
+
+varying highp vec4 baz_foo_a;
+varying highp vec4 baz_foo_b;
+varying highp vec4 baz_bar_a;
+varying highp vec4 baz_bar_b;
+varying highp vec4 _33_a_a;
+varying highp vec4 _33_a_b;
+varying highp vec4 _33_b_a;
+varying highp vec4 _33_b_b;
+
+void main()
+{
+ gl_FragData[0] = (((_33_a_a + _33_b_b) + baz_foo_b) + baz_foo_a) + baz_bar_b;
+}
+
diff --git a/reference/opt/shaders/legacy/vert/struct-flatten-stores-multi-dimension.legacy.vert b/reference/opt/shaders/legacy/vert/struct-flatten-stores-multi-dimension.legacy.vert
new file mode 100644
index 00000000..cf807c41
--- /dev/null
+++ b/reference/opt/shaders/legacy/vert/struct-flatten-stores-multi-dimension.legacy.vert
@@ -0,0 +1,49 @@
+#version 100
+
+struct Foo
+{
+ vec4 a;
+ vec4 b;
+};
+
+struct Bar
+{
+ vec4 a;
+ vec4 b;
+};
+
+struct Baz
+{
+ Foo foo;
+ Bar bar;
+};
+
+varying vec4 _12_a_a;
+varying vec4 _12_a_b;
+varying vec4 _12_b_a;
+varying vec4 _12_b_b;
+varying vec4 baz_foo_a;
+varying vec4 baz_foo_b;
+varying vec4 baz_bar_a;
+varying vec4 baz_bar_b;
+
+void main()
+{
+ _12_a_a = vec4(10.0);
+ _12_a_b = vec4(20.0);
+ _12_b_a = vec4(30.0);
+ _12_b_b = vec4(40.0);
+ _12_a_a = Foo(vec4(50.0), vec4(60.0)).a;
+ _12_a_b = Foo(vec4(50.0), vec4(60.0)).b;
+ _12_b_a = Bar(vec4(50.0), vec4(60.0)).a;
+ _12_b_b = Bar(vec4(50.0), vec4(60.0)).b;
+ baz_foo_a = Foo(vec4(100.0), vec4(200.0)).a;
+ baz_foo_b = Foo(vec4(100.0), vec4(200.0)).b;
+ baz_bar_a = Bar(vec4(300.0), vec4(400.0)).a;
+ baz_bar_b = Bar(vec4(300.0), vec4(400.0)).b;
+ baz_foo_a = Baz(Foo(vec4(1000.0), vec4(2000.0)), Bar(vec4(3000.0), vec4(4000.0))).foo.a;
+ baz_foo_b = Baz(Foo(vec4(1000.0), vec4(2000.0)), Bar(vec4(3000.0), vec4(4000.0))).foo.b;
+ baz_bar_a = Baz(Foo(vec4(1000.0), vec4(2000.0)), Bar(vec4(3000.0), vec4(4000.0))).bar.a;
+ baz_bar_b = Baz(Foo(vec4(1000.0), vec4(2000.0)), Bar(vec4(3000.0), vec4(4000.0))).bar.b;
+}
+
diff --git a/reference/opt/shaders/legacy/vert/struct-varying.legacy.vert b/reference/opt/shaders/legacy/vert/struct-varying.legacy.vert
index 8520e2d5..66136d27 100644
--- a/reference/opt/shaders/legacy/vert/struct-varying.legacy.vert
+++ b/reference/opt/shaders/legacy/vert/struct-varying.legacy.vert
@@ -11,16 +11,10 @@ varying vec2 vout_b;
void main()
{
- {
- Output vout = Output(vec4(0.5), vec2(0.25));
- vout_a = vout.a;
- vout_b = vout.b;
- }
- {
- Output vout = Output(vec4(0.5), vec2(0.25));
- vout_a = vout.a;
- vout_b = vout.b;
- }
+ vout_a = Output(vec4(0.5), vec2(0.25)).a;
+ vout_b = Output(vec4(0.5), vec2(0.25)).b;
+ vout_a = Output(vec4(0.5), vec2(0.25)).a;
+ vout_b = Output(vec4(0.5), vec2(0.25)).b;
Output _22 = Output(vout_a, vout_b);
vout_a = _22.a;
vout_b = _22.b;