diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2020-07-03 14:12:05 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2020-07-03 15:38:51 +0300 |
commit | 2d43103a55233bd8e205075e47008bf5a731ab68 (patch) | |
tree | 3fe59feb4c51000167341313f726bc22bb40c160 /reference/opt/shaders | |
parent | d573a95a9c65cf0ab76c0c206e3b01fa47235836 (diff) |
GLSL: Support multi-level struct flattening for I/O.
Diffstat (limited to 'reference/opt/shaders')
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; |