From 6b43d274e7899a7bbe80831eab96ef0d387dea91 Mon Sep 17 00:00:00 2001 From: steve-lunarg Date: Thu, 6 Oct 2016 20:12:24 -0600 Subject: [PATCH 1/5] HLSL: phase 2a: add r-value operator[] for RWTexture/RWBuffer This commit adds r-value support for RW textures and buffers. Supported is: - Function in parameter conversions - conversion of rvalue use to imageLoad --- Test/baseResults/hlsl.rw.bracket.frag.out | 719 ++++++++++++++++++++++ Test/hlsl.rw.bracket.frag | 114 ++++ gtests/Hlsl.FromFile.cpp | 1 + hlsl/hlslParseHelper.cpp | 40 +- hlsl/hlslParseHelper.h | 1 + 5 files changed, 869 insertions(+), 6 deletions(-) create mode 100644 Test/baseResults/hlsl.rw.bracket.frag.out create mode 100644 Test/hlsl.rw.bracket.frag diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out new file mode 100644 index 00000000..7c72e98b --- /dev/null +++ b/Test/baseResults/hlsl.rw.bracket.frag.out @@ -0,0 +1,719 @@ +hlsl.rw.bracket.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:38 Function Definition: Fn1(vi4; (temp 4-component vector of int) +0:38 Function Parameters: +0:38 'x' (in 4-component vector of int) +0:? Sequence +0:38 Branch: Return with expression +0:38 'x' (in 4-component vector of int) +0:39 Function Definition: Fn1(vu4; (temp 4-component vector of uint) +0:39 Function Parameters: +0:39 'x' (in 4-component vector of uint) +0:? Sequence +0:39 Branch: Return with expression +0:39 'x' (in 4-component vector of uint) +0:40 Function Definition: Fn1(vf4; (temp 4-component vector of float) +0:40 Function Parameters: +0:40 'x' (in 4-component vector of float) +0:? Sequence +0:40 Branch: Return with expression +0:40 'x' (in 4-component vector of float) +0:42 Function Definition: Fn2(vi4; (temp void) +0:42 Function Parameters: +0:42 'x' (out 4-component vector of int) +0:? Sequence +0:42 move second child to first child (temp 4-component vector of int) +0:42 'x' (out 4-component vector of int) +0:42 Constant: +0:42 0 (const int) +0:42 0 (const int) +0:42 0 (const int) +0:42 0 (const int) +0:43 Function Definition: Fn2(vu4; (temp void) +0:43 Function Parameters: +0:43 'x' (out 4-component vector of uint) +0:? Sequence +0:43 move second child to first child (temp 4-component vector of uint) +0:43 'x' (out 4-component vector of uint) +0:43 Constant: +0:43 0 (const uint) +0:43 0 (const uint) +0:43 0 (const uint) +0:43 0 (const uint) +0:44 Function Definition: Fn2(vf4; (temp void) +0:44 Function Parameters: +0:44 'x' (out 4-component vector of float) +0:? Sequence +0:44 move second child to first child (temp 4-component vector of float) +0:44 'x' (out 4-component vector of float) +0:44 Constant: +0:44 0.000000 +0:44 0.000000 +0:44 0.000000 +0:44 0.000000 +0:47 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:47 Function Parameters: +0:? Sequence +0:53 imageLoad (temp 4-component vector of float) +0:53 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:53 c1: direct index for structure (layout(offset=0 ) uniform int) +0:53 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:53 Constant: +0:53 0 (const uint) +0:55 Sequence +0:55 move second child to first child (temp 4-component vector of float) +0:55 'r00' (temp 4-component vector of float) +0:55 imageLoad (temp 4-component vector of float) +0:55 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:55 c1: direct index for structure (layout(offset=0 ) uniform int) +0:55 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:55 Constant: +0:55 0 (const uint) +0:56 Sequence +0:56 move second child to first child (temp 4-component vector of int) +0:56 'r01' (temp 4-component vector of int) +0:56 imageLoad (temp 4-component vector of int) +0:56 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:56 c1: direct index for structure (layout(offset=0 ) uniform int) +0:56 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:56 Constant: +0:56 0 (const uint) +0:57 Sequence +0:57 move second child to first child (temp 4-component vector of uint) +0:57 'r02' (temp 4-component vector of uint) +0:57 imageLoad (temp 4-component vector of uint) +0:57 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:57 c1: direct index for structure (layout(offset=0 ) uniform int) +0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:57 Constant: +0:57 0 (const uint) +0:60 Sequence +0:60 move second child to first child (temp 4-component vector of float) +0:60 'r10' (temp 4-component vector of float) +0:60 imageLoad (temp 4-component vector of float) +0:60 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:60 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:60 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:60 Constant: +0:60 1 (const uint) +0:61 Sequence +0:61 move second child to first child (temp 4-component vector of int) +0:61 'r11' (temp 4-component vector of int) +0:61 imageLoad (temp 4-component vector of int) +0:61 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:61 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:61 Constant: +0:61 1 (const uint) +0:62 Sequence +0:62 move second child to first child (temp 4-component vector of uint) +0:62 'r12' (temp 4-component vector of uint) +0:62 imageLoad (temp 4-component vector of uint) +0:62 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:62 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:62 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:62 Constant: +0:62 1 (const uint) +0:65 Sequence +0:65 move second child to first child (temp 4-component vector of float) +0:65 'r20' (temp 4-component vector of float) +0:65 imageLoad (temp 4-component vector of float) +0:65 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:65 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:65 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:65 Constant: +0:65 2 (const uint) +0:66 Sequence +0:66 move second child to first child (temp 4-component vector of int) +0:66 'r21' (temp 4-component vector of int) +0:66 imageLoad (temp 4-component vector of int) +0:66 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:66 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:66 Constant: +0:66 2 (const uint) +0:67 Sequence +0:67 move second child to first child (temp 4-component vector of uint) +0:67 'r22' (temp 4-component vector of uint) +0:67 imageLoad (temp 4-component vector of uint) +0:67 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:67 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:67 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:67 Constant: +0:67 2 (const uint) +0:86 Function Call: Fn1(vf4; (temp 4-component vector of float) +0:86 imageLoad (temp 4-component vector of float) +0:86 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:86 c1: direct index for structure (layout(offset=0 ) uniform int) +0:86 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:86 Constant: +0:86 0 (const uint) +0:87 Function Call: Fn1(vi4; (temp 4-component vector of int) +0:87 imageLoad (temp 4-component vector of int) +0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:87 c1: direct index for structure (layout(offset=0 ) uniform int) +0:87 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:87 Constant: +0:87 0 (const uint) +0:88 Function Call: Fn1(vu4; (temp 4-component vector of uint) +0:88 imageLoad (temp 4-component vector of uint) +0:88 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:88 c1: direct index for structure (layout(offset=0 ) uniform int) +0:88 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:88 Constant: +0:88 0 (const uint) +0:111 move second child to first child (temp 4-component vector of float) +0:111 Color: direct index for structure (temp 4-component vector of float) +0:111 'psout' (temp structure{temp 4-component vector of float Color}) +0:111 Constant: +0:111 0 (const int) +0:111 Constant: +0:111 1.000000 +0:111 1.000000 +0:111 1.000000 +0:111 1.000000 +0:113 Sequence +0:113 Sequence +0:113 move second child to first child (temp 4-component vector of float) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) +0:113 Color: direct index for structure (temp 4-component vector of float) +0:113 'psout' (temp structure{temp 4-component vector of float Color}) +0:113 Constant: +0:113 0 (const int) +0:113 Branch: Return +0:? Linker Objects +0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) +0:? 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:? 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:? 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:? 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:? 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:? 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:? 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:? 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:? 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:? 'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray) +0:? 'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray) +0:? 'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray) +0:? 'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:38 Function Definition: Fn1(vi4; (temp 4-component vector of int) +0:38 Function Parameters: +0:38 'x' (in 4-component vector of int) +0:? Sequence +0:38 Branch: Return with expression +0:38 'x' (in 4-component vector of int) +0:39 Function Definition: Fn1(vu4; (temp 4-component vector of uint) +0:39 Function Parameters: +0:39 'x' (in 4-component vector of uint) +0:? Sequence +0:39 Branch: Return with expression +0:39 'x' (in 4-component vector of uint) +0:40 Function Definition: Fn1(vf4; (temp 4-component vector of float) +0:40 Function Parameters: +0:40 'x' (in 4-component vector of float) +0:? Sequence +0:40 Branch: Return with expression +0:40 'x' (in 4-component vector of float) +0:42 Function Definition: Fn2(vi4; (temp void) +0:42 Function Parameters: +0:42 'x' (out 4-component vector of int) +0:? Sequence +0:42 move second child to first child (temp 4-component vector of int) +0:42 'x' (out 4-component vector of int) +0:42 Constant: +0:42 0 (const int) +0:42 0 (const int) +0:42 0 (const int) +0:42 0 (const int) +0:43 Function Definition: Fn2(vu4; (temp void) +0:43 Function Parameters: +0:43 'x' (out 4-component vector of uint) +0:? Sequence +0:43 move second child to first child (temp 4-component vector of uint) +0:43 'x' (out 4-component vector of uint) +0:43 Constant: +0:43 0 (const uint) +0:43 0 (const uint) +0:43 0 (const uint) +0:43 0 (const uint) +0:44 Function Definition: Fn2(vf4; (temp void) +0:44 Function Parameters: +0:44 'x' (out 4-component vector of float) +0:? Sequence +0:44 move second child to first child (temp 4-component vector of float) +0:44 'x' (out 4-component vector of float) +0:44 Constant: +0:44 0.000000 +0:44 0.000000 +0:44 0.000000 +0:44 0.000000 +0:47 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:47 Function Parameters: +0:? Sequence +0:53 imageLoad (temp 4-component vector of float) +0:53 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:53 c1: direct index for structure (layout(offset=0 ) uniform int) +0:53 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:53 Constant: +0:53 0 (const uint) +0:55 Sequence +0:55 move second child to first child (temp 4-component vector of float) +0:55 'r00' (temp 4-component vector of float) +0:55 imageLoad (temp 4-component vector of float) +0:55 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:55 c1: direct index for structure (layout(offset=0 ) uniform int) +0:55 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:55 Constant: +0:55 0 (const uint) +0:56 Sequence +0:56 move second child to first child (temp 4-component vector of int) +0:56 'r01' (temp 4-component vector of int) +0:56 imageLoad (temp 4-component vector of int) +0:56 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:56 c1: direct index for structure (layout(offset=0 ) uniform int) +0:56 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:56 Constant: +0:56 0 (const uint) +0:57 Sequence +0:57 move second child to first child (temp 4-component vector of uint) +0:57 'r02' (temp 4-component vector of uint) +0:57 imageLoad (temp 4-component vector of uint) +0:57 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:57 c1: direct index for structure (layout(offset=0 ) uniform int) +0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:57 Constant: +0:57 0 (const uint) +0:60 Sequence +0:60 move second child to first child (temp 4-component vector of float) +0:60 'r10' (temp 4-component vector of float) +0:60 imageLoad (temp 4-component vector of float) +0:60 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:60 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:60 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:60 Constant: +0:60 1 (const uint) +0:61 Sequence +0:61 move second child to first child (temp 4-component vector of int) +0:61 'r11' (temp 4-component vector of int) +0:61 imageLoad (temp 4-component vector of int) +0:61 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:61 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:61 Constant: +0:61 1 (const uint) +0:62 Sequence +0:62 move second child to first child (temp 4-component vector of uint) +0:62 'r12' (temp 4-component vector of uint) +0:62 imageLoad (temp 4-component vector of uint) +0:62 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:62 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:62 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:62 Constant: +0:62 1 (const uint) +0:65 Sequence +0:65 move second child to first child (temp 4-component vector of float) +0:65 'r20' (temp 4-component vector of float) +0:65 imageLoad (temp 4-component vector of float) +0:65 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:65 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:65 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:65 Constant: +0:65 2 (const uint) +0:66 Sequence +0:66 move second child to first child (temp 4-component vector of int) +0:66 'r21' (temp 4-component vector of int) +0:66 imageLoad (temp 4-component vector of int) +0:66 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:66 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:66 Constant: +0:66 2 (const uint) +0:67 Sequence +0:67 move second child to first child (temp 4-component vector of uint) +0:67 'r22' (temp 4-component vector of uint) +0:67 imageLoad (temp 4-component vector of uint) +0:67 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:67 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:67 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:67 Constant: +0:67 2 (const uint) +0:86 Function Call: Fn1(vf4; (temp 4-component vector of float) +0:86 imageLoad (temp 4-component vector of float) +0:86 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:86 c1: direct index for structure (layout(offset=0 ) uniform int) +0:86 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:86 Constant: +0:86 0 (const uint) +0:87 Function Call: Fn1(vi4; (temp 4-component vector of int) +0:87 imageLoad (temp 4-component vector of int) +0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:87 c1: direct index for structure (layout(offset=0 ) uniform int) +0:87 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:87 Constant: +0:87 0 (const uint) +0:88 Function Call: Fn1(vu4; (temp 4-component vector of uint) +0:88 imageLoad (temp 4-component vector of uint) +0:88 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:88 c1: direct index for structure (layout(offset=0 ) uniform int) +0:88 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:88 Constant: +0:88 0 (const uint) +0:111 move second child to first child (temp 4-component vector of float) +0:111 Color: direct index for structure (temp 4-component vector of float) +0:111 'psout' (temp structure{temp 4-component vector of float Color}) +0:111 Constant: +0:111 0 (const int) +0:111 Constant: +0:111 1.000000 +0:111 1.000000 +0:111 1.000000 +0:111 1.000000 +0:113 Sequence +0:113 Sequence +0:113 move second child to first child (temp 4-component vector of float) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) +0:113 Color: direct index for structure (temp 4-component vector of float) +0:113 'psout' (temp structure{temp 4-component vector of float Color}) +0:113 Constant: +0:113 0 (const int) +0:113 Branch: Return +0:? Linker Objects +0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) +0:? 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:? 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:? 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:? 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:? 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:? 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:? 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:? 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:? 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:? 'g_tTex1df4a' (layout(rgba32f ) uniform image1DArray) +0:? 'g_tTex1di4a' (layout(rgba32i ) uniform iimage1DArray) +0:? 'g_tTex1du4a' (layout(rgba32ui ) uniform uimage1DArray) +0:? 'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray) +0:? 'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray) +0:? 'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 190 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 165 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Fn1(vi4;" + Name 10 "x" + Name 18 "Fn1(vu4;" + Name 17 "x" + Name 25 "Fn1(vf4;" + Name 24 "x" + Name 29 "Fn2(vi4;" + Name 28 "x" + Name 33 "Fn2(vu4;" + Name 32 "x" + Name 37 "Fn2(vf4;" + Name 36 "x" + Name 56 "g_tTex1df4" + Name 60 "$Global" + MemberName 60($Global) 0 "c1" + MemberName 60($Global) 1 "c2" + MemberName 60($Global) 2 "c3" + MemberName 60($Global) 3 "c4" + MemberName 60($Global) 4 "o1" + MemberName 60($Global) 5 "o2" + MemberName 60($Global) 6 "o3" + MemberName 60($Global) 7 "o4" + Name 62 "" + Name 67 "r00" + Name 72 "r01" + Name 75 "g_tTex1di4" + Name 80 "r02" + Name 83 "g_tTex1du4" + Name 88 "r10" + Name 91 "g_tTex2df4" + Name 98 "r11" + Name 101 "g_tTex2di4" + Name 106 "r12" + Name 109 "g_tTex2du4" + Name 114 "r20" + Name 117 "g_tTex3df4" + Name 124 "r21" + Name 127 "g_tTex3di4" + Name 132 "r22" + Name 135 "g_tTex3du4" + Name 144 "param" + Name 150 "param" + Name 156 "param" + Name 158 "PS_OUTPUT" + MemberName 158(PS_OUTPUT) 0 "Color" + Name 160 "psout" + Name 165 "Color" + Name 171 "g_sSamp" + Name 174 "g_tTex1df4a" + Name 177 "g_tTex1di4a" + Name 180 "g_tTex1du4a" + Name 183 "g_tTex2df4a" + Name 186 "g_tTex2di4a" + Name 189 "g_tTex2du4a" + Decorate 56(g_tTex1df4) DescriptorSet 0 + Decorate 56(g_tTex1df4) Binding 0 + MemberDecorate 60($Global) 0 Offset 0 + MemberDecorate 60($Global) 1 Offset 8 + MemberDecorate 60($Global) 2 Offset 16 + MemberDecorate 60($Global) 3 Offset 32 + MemberDecorate 60($Global) 4 Offset 48 + MemberDecorate 60($Global) 5 Offset 56 + MemberDecorate 60($Global) 6 Offset 64 + MemberDecorate 60($Global) 7 Offset 80 + Decorate 60($Global) Block + Decorate 62 DescriptorSet 0 + Decorate 75(g_tTex1di4) DescriptorSet 0 + Decorate 83(g_tTex1du4) DescriptorSet 0 + Decorate 91(g_tTex2df4) DescriptorSet 0 + Decorate 101(g_tTex2di4) DescriptorSet 0 + Decorate 109(g_tTex2du4) DescriptorSet 0 + Decorate 117(g_tTex3df4) DescriptorSet 0 + Decorate 127(g_tTex3di4) DescriptorSet 0 + Decorate 135(g_tTex3du4) DescriptorSet 0 + Decorate 165(Color) Location 0 + Decorate 171(g_sSamp) DescriptorSet 0 + Decorate 171(g_sSamp) Binding 0 + Decorate 174(g_tTex1df4a) DescriptorSet 0 + Decorate 177(g_tTex1di4a) DescriptorSet 0 + Decorate 180(g_tTex1du4a) DescriptorSet 0 + Decorate 183(g_tTex2df4a) DescriptorSet 0 + Decorate 186(g_tTex2di4a) DescriptorSet 0 + Decorate 189(g_tTex2du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 9: TypeFunction 7(ivec4) 8(ptr) + 13: TypeInt 32 0 + 14: TypeVector 13(int) 4 + 15: TypePointer Function 14(ivec4) + 16: TypeFunction 14(ivec4) 15(ptr) + 20: TypeFloat 32 + 21: TypeVector 20(float) 4 + 22: TypePointer Function 21(fvec4) + 23: TypeFunction 21(fvec4) 22(ptr) + 27: TypeFunction 2 8(ptr) + 31: TypeFunction 2 15(ptr) + 35: TypeFunction 2 22(ptr) + 48: 6(int) Constant 0 + 49: 7(ivec4) ConstantComposite 48 48 48 48 + 50: 13(int) Constant 0 + 51: 14(ivec4) ConstantComposite 50 50 50 50 + 52: 20(float) Constant 0 + 53: 21(fvec4) ConstantComposite 52 52 52 52 + 54: TypeImage 20(float) 1D nonsampled format:Rgba32f + 55: TypePointer UniformConstant 54 + 56(g_tTex1df4): 55(ptr) Variable UniformConstant + 58: TypeVector 6(int) 2 + 59: TypeVector 6(int) 3 + 60($Global): TypeStruct 6(int) 58(ivec2) 59(ivec3) 7(ivec4) 6(int) 58(ivec2) 59(ivec3) 7(ivec4) + 61: TypePointer Uniform 60($Global) + 62: 61(ptr) Variable Uniform + 63: TypePointer Uniform 6(int) + 73: TypeImage 6(int) 1D nonsampled format:Rgba32i + 74: TypePointer UniformConstant 73 + 75(g_tTex1di4): 74(ptr) Variable UniformConstant + 81: TypeImage 13(int) 1D nonsampled format:Rgba32ui + 82: TypePointer UniformConstant 81 + 83(g_tTex1du4): 82(ptr) Variable UniformConstant + 89: TypeImage 20(float) 2D nonsampled format:Rgba32f + 90: TypePointer UniformConstant 89 + 91(g_tTex2df4): 90(ptr) Variable UniformConstant + 93: 6(int) Constant 1 + 94: TypePointer Uniform 58(ivec2) + 99: TypeImage 6(int) 2D nonsampled format:Rgba32i + 100: TypePointer UniformConstant 99 + 101(g_tTex2di4): 100(ptr) Variable UniformConstant + 107: TypeImage 13(int) 2D nonsampled format:Rgba32ui + 108: TypePointer UniformConstant 107 + 109(g_tTex2du4): 108(ptr) Variable UniformConstant + 115: TypeImage 20(float) 3D nonsampled format:Rgba32f + 116: TypePointer UniformConstant 115 + 117(g_tTex3df4): 116(ptr) Variable UniformConstant + 119: 6(int) Constant 2 + 120: TypePointer Uniform 59(ivec3) + 125: TypeImage 6(int) 3D nonsampled format:Rgba32i + 126: TypePointer UniformConstant 125 + 127(g_tTex3di4): 126(ptr) Variable UniformConstant + 133: TypeImage 13(int) 3D nonsampled format:Rgba32ui + 134: TypePointer UniformConstant 133 + 135(g_tTex3du4): 134(ptr) Variable UniformConstant + 158(PS_OUTPUT): TypeStruct 21(fvec4) + 159: TypePointer Function 158(PS_OUTPUT) + 161: 20(float) Constant 1065353216 + 162: 21(fvec4) ConstantComposite 161 161 161 161 + 164: TypePointer Output 21(fvec4) + 165(Color): 164(ptr) Variable Output + 169: TypeSampler + 170: TypePointer UniformConstant 169 + 171(g_sSamp): 170(ptr) Variable UniformConstant + 172: TypeImage 20(float) 1D array nonsampled format:Rgba32f + 173: TypePointer UniformConstant 172 +174(g_tTex1df4a): 173(ptr) Variable UniformConstant + 175: TypeImage 6(int) 1D array nonsampled format:Rgba32i + 176: TypePointer UniformConstant 175 +177(g_tTex1di4a): 176(ptr) Variable UniformConstant + 178: TypeImage 13(int) 1D array nonsampled format:Rgba32ui + 179: TypePointer UniformConstant 178 +180(g_tTex1du4a): 179(ptr) Variable UniformConstant + 181: TypeImage 20(float) 2D array nonsampled format:Rgba32f + 182: TypePointer UniformConstant 181 +183(g_tTex2df4a): 182(ptr) Variable UniformConstant + 184: TypeImage 6(int) 2D array nonsampled format:Rgba32i + 185: TypePointer UniformConstant 184 +186(g_tTex2di4a): 185(ptr) Variable UniformConstant + 187: TypeImage 13(int) 2D array nonsampled format:Rgba32ui + 188: TypePointer UniformConstant 187 +189(g_tTex2du4a): 188(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 67(r00): 22(ptr) Variable Function + 72(r01): 8(ptr) Variable Function + 80(r02): 15(ptr) Variable Function + 88(r10): 22(ptr) Variable Function + 98(r11): 8(ptr) Variable Function + 106(r12): 15(ptr) Variable Function + 114(r20): 22(ptr) Variable Function + 124(r21): 8(ptr) Variable Function + 132(r22): 15(ptr) Variable Function + 144(param): 22(ptr) Variable Function + 150(param): 8(ptr) Variable Function + 156(param): 15(ptr) Variable Function + 160(psout): 159(ptr) Variable Function + 57: 54 Load 56(g_tTex1df4) + 64: 63(ptr) AccessChain 62 48 + 65: 6(int) Load 64 + 66: 21(fvec4) ImageRead 57 65 + 68: 54 Load 56(g_tTex1df4) + 69: 63(ptr) AccessChain 62 48 + 70: 6(int) Load 69 + 71: 21(fvec4) ImageRead 68 70 + Store 67(r00) 71 + 76: 73 Load 75(g_tTex1di4) + 77: 63(ptr) AccessChain 62 48 + 78: 6(int) Load 77 + 79: 7(ivec4) ImageRead 76 78 + Store 72(r01) 79 + 84: 81 Load 83(g_tTex1du4) + 85: 63(ptr) AccessChain 62 48 + 86: 6(int) Load 85 + 87: 14(ivec4) ImageRead 84 86 + Store 80(r02) 87 + 92: 89 Load 91(g_tTex2df4) + 95: 94(ptr) AccessChain 62 93 + 96: 58(ivec2) Load 95 + 97: 21(fvec4) ImageRead 92 96 + Store 88(r10) 97 + 102: 99 Load 101(g_tTex2di4) + 103: 94(ptr) AccessChain 62 93 + 104: 58(ivec2) Load 103 + 105: 7(ivec4) ImageRead 102 104 + Store 98(r11) 105 + 110: 107 Load 109(g_tTex2du4) + 111: 94(ptr) AccessChain 62 93 + 112: 58(ivec2) Load 111 + 113: 14(ivec4) ImageRead 110 112 + Store 106(r12) 113 + 118: 115 Load 117(g_tTex3df4) + 121: 120(ptr) AccessChain 62 119 + 122: 59(ivec3) Load 121 + 123: 21(fvec4) ImageRead 118 122 + Store 114(r20) 123 + 128: 125 Load 127(g_tTex3di4) + 129: 120(ptr) AccessChain 62 119 + 130: 59(ivec3) Load 129 + 131: 7(ivec4) ImageRead 128 130 + Store 124(r21) 131 + 136: 133 Load 135(g_tTex3du4) + 137: 120(ptr) AccessChain 62 119 + 138: 59(ivec3) Load 137 + 139: 14(ivec4) ImageRead 136 138 + Store 132(r22) 139 + 140: 54 Load 56(g_tTex1df4) + 141: 63(ptr) AccessChain 62 48 + 142: 6(int) Load 141 + 143: 21(fvec4) ImageRead 140 142 + Store 144(param) 143 + 145: 21(fvec4) FunctionCall 25(Fn1(vf4;) 144(param) + 146: 73 Load 75(g_tTex1di4) + 147: 63(ptr) AccessChain 62 48 + 148: 6(int) Load 147 + 149: 7(ivec4) ImageRead 146 148 + Store 150(param) 149 + 151: 7(ivec4) FunctionCall 11(Fn1(vi4;) 150(param) + 152: 81 Load 83(g_tTex1du4) + 153: 63(ptr) AccessChain 62 48 + 154: 6(int) Load 153 + 155: 14(ivec4) ImageRead 152 154 + Store 156(param) 155 + 157: 14(ivec4) FunctionCall 18(Fn1(vu4;) 156(param) + 163: 22(ptr) AccessChain 160(psout) 48 + Store 163 162 + 166: 22(ptr) AccessChain 160(psout) 48 + 167: 21(fvec4) Load 166 + Store 165(Color) 167 + Return + FunctionEnd + 11(Fn1(vi4;): 7(ivec4) Function None 9 + 10(x): 8(ptr) FunctionParameter + 12: Label + 39: 7(ivec4) Load 10(x) + ReturnValue 39 + FunctionEnd + 18(Fn1(vu4;): 14(ivec4) Function None 16 + 17(x): 15(ptr) FunctionParameter + 19: Label + 42: 14(ivec4) Load 17(x) + ReturnValue 42 + FunctionEnd + 25(Fn1(vf4;): 21(fvec4) Function None 23 + 24(x): 22(ptr) FunctionParameter + 26: Label + 45: 21(fvec4) Load 24(x) + ReturnValue 45 + FunctionEnd + 29(Fn2(vi4;): 2 Function None 27 + 28(x): 8(ptr) FunctionParameter + 30: Label + Store 28(x) 49 + Return + FunctionEnd + 33(Fn2(vu4;): 2 Function None 31 + 32(x): 15(ptr) FunctionParameter + 34: Label + Store 32(x) 51 + Return + FunctionEnd + 37(Fn2(vf4;): 2 Function None 35 + 36(x): 22(ptr) FunctionParameter + 38: Label + Store 36(x) 53 + Return + FunctionEnd diff --git a/Test/hlsl.rw.bracket.frag b/Test/hlsl.rw.bracket.frag new file mode 100644 index 00000000..e435b91d --- /dev/null +++ b/Test/hlsl.rw.bracket.frag @@ -0,0 +1,114 @@ +SamplerState g_sSamp : register(s0); + +RWTexture1D g_tTex1df4 : register(t0); +RWTexture1D g_tTex1di4; +RWTexture1D g_tTex1du4; + +RWTexture2D g_tTex2df4; +RWTexture2D g_tTex2di4; +RWTexture2D g_tTex2du4; + +RWTexture3D g_tTex3df4; +RWTexture3D g_tTex3di4; +RWTexture3D g_tTex3du4; + +RWTexture1DArray g_tTex1df4a; +RWTexture1DArray g_tTex1di4a; +RWTexture1DArray g_tTex1du4a; + +RWTexture2DArray g_tTex2df4a; +RWTexture2DArray g_tTex2di4a; +RWTexture2DArray g_tTex2du4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +int4 Fn1(in int4 x) { return x; } +uint4 Fn1(in uint4 x) { return x; } +float4 Fn1(in float4 x) { return x; } + +void Fn2(out int4 x) { x = int4(0); } +void Fn2(out uint4 x) { x = uint4(0); } +void Fn2(out float4 x) { x = float4(0); } + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // Test as R-values + + // 1D + g_tTex1df4[c1]; + + float4 r00 = g_tTex1df4[c1]; + int4 r01 = g_tTex1di4[c1]; + uint4 r02 = g_tTex1du4[c1]; + + // 2D + float4 r10 = g_tTex2df4[c2]; + int4 r11 = g_tTex2di4[c2]; + uint4 r12 = g_tTex2du4[c2]; + + // 3D + float4 r20 = g_tTex3df4[c3]; + int4 r21 = g_tTex3di4[c3]; + uint4 r22 = g_tTex3du4[c3]; + + // // Test as L-values + // // 1D + // g_tTex1df4[c1] = float4(1,2,3,4); + // g_tTex1di4[c1] = int4(1,2,3,4); + // g_tTex1du4[c1] = uint4(1,2,3,4); + + // // 2D + // g_tTex2df4[c2] = float4(1,2,3,4); + // g_tTex2di4[c2] = int4(1,2,3,4); + // g_tTex2du4[c2] = uint4(1,2,3,4); + + // // 3D + // g_tTex3df4[c3] = float4(1,2,3,4); + // g_tTex3di4[c3] = int4(1,2,3,4); + // g_tTex3du4[c3] = uint4(1,2,3,4); + + // // Test function calling + Fn1(g_tTex1df4[c1]); // in + Fn1(g_tTex1di4[c1]); // in + Fn1(g_tTex1du4[c1]); // in + + // Fn2(g_tTex1df4[c1]); // out + // Fn2(g_tTex1di4[c1]); // out + // Fn2(g_tTex1du4[c1]); // out + + // // Test increment operators + // g_tTex1df4[c1]++; + // g_tTex1di4[c1]++; + // g_tTex1du4[c1]++; + + // g_tTex1df4[c1]--; + // g_tTex1di4[c1]--; + // g_tTex1du4[c1]--; + + // ++g_tTex1df4[c1]; + // ++g_tTex1di4[c1]; + // ++g_tTex1du4[c1]; + + // --g_tTex1df4[c1]; + // --g_tTex1di4[c1]; + // --g_tTex1du4[c1]; + + psout.Color = 1.0; + + return psout; +} diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 7b642171..9a160cf4 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -147,6 +147,7 @@ INSTANTIATE_TEST_CASE_P( {"hlsl.pp.line.frag", "main"}, {"hlsl.precise.frag", "main"}, {"hlsl.promotions.frag", "main"}, + {"hlsl.rw.bracket.frag", "main"}, {"hlsl.sample.array.dx10.frag", "main"}, {"hlsl.sample.basic.dx10.frag", "main"}, {"hlsl.sample.offset.dx10.frag", "main"}, diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 4eda44d7..204e9f08 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -297,12 +297,40 @@ TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, TSymbol* s return node; } +// +// Handle operator[] on any objects it applies to. Currently: +// Textures +// Buffers +// +TIntermTyped* HlslParseContext::handleBracketOperator(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index) +{ + // handle r-value operator[] on textures and images. l-values will be processed later. + if (base->getType().getBasicType() == EbtSampler && !base->isArray()) { + const TSampler& sampler = base->getType().getSampler(); + if (sampler.isImage() || sampler.isTexture()) { + const int vecSize = 4; // TODO: handle arbitrary sizes (get from qualifier) + TIntermAggregate* load = new TIntermAggregate(EOpImageLoad); + + load->setType(TType(sampler.type, EvqTemporary, vecSize)); + load->setLoc(loc); + load->getSequence().push_back(base); + load->getSequence().push_back(index); + return load; + } + } + + return nullptr; +} + // // Handle seeing a base[index] dereference in the grammar. // TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc, TIntermTyped* base, TIntermTyped* index) { - TIntermTyped* result = nullptr; + TIntermTyped* result = handleBracketOperator(loc, base, index); + + if (result != nullptr) + return result; // it was handled as an operator[] bool flattened = false; int indexValue = 0; @@ -425,10 +453,10 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt field == "SampleLevel") { // If it's not a method on a sampler object, we fall through in case it is a struct member. if (base->getType().getBasicType() == EbtSampler) { - const TSampler& texType = base->getType().getSampler(); - if (! texType.isPureSampler()) { - const int vecSize = texType.isShadow() ? 1 : 4; - return intermediate.addMethod(base, TType(texType.type, EvqTemporary, vecSize), &field, loc); + const TSampler& sampler = base->getType().getSampler(); + if (! sampler.isPureSampler()) { + const int vecSize = sampler.isShadow() ? 1 : 4; // TODO: handle arbitrary sample return sizes + return intermediate.addMethod(base, TType(sampler.type, EvqTemporary, vecSize), &field, loc); } } } @@ -1261,7 +1289,7 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType case Esd2D: numDims = 2; break; // W, H case Esd3D: numDims = 3; break; // W, H, D case EsdCube: numDims = 2; break; // W, H (cube) - case EsdBuffer: numDims = 1; break; // buffers + case EsdBuffer: numDims = 1; break; // W (buffers) default: assert(0 && "unhandled texture dimension"); } diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h index c8ebdbe8..78beadb3 100755 --- a/hlsl/hlslParseHelper.h +++ b/hlsl/hlslParseHelper.h @@ -61,6 +61,7 @@ public: void handlePragma(const TSourceLoc&, const TVector&); TIntermTyped* handleVariable(const TSourceLoc&, TSymbol* symbol, const TString* string); TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index); + TIntermTyped* handleBracketOperator(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index); void checkIndex(const TSourceLoc&, const TType&, int& index); TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right); From 90707966eae3622d7d87d67a3cf8f163bd81320d Mon Sep 17 00:00:00 2001 From: steve-lunarg Date: Fri, 7 Oct 2016 19:35:40 -0600 Subject: [PATCH 2/5] HLSL: phase 2b: add l-value operator[] for RWTexture/RWBuffer This commit adds l-value support for RW texture and buffer objects. Supported are: - pre and post inc/decrement - function out parameters - op-assignments, such as *=, +-, etc. - result values from op-assignments. e.g, val=(MyRwTex[loc] *= 2); Not supported are: - Function inout parameters - multiple post-inc/decrement operators. E.g, MyRWTex[loc]++++; --- Test/baseResults/hlsl.rw.bracket.frag.out | 2997 +++++++++++++++---- Test/hlsl.rw.bracket.frag | 87 +- glslang/MachineIndependent/Intermediate.cpp | 4 + hlsl/hlslGrammar.cpp | 4 + hlsl/hlslParseHelper.cpp | 252 +- hlsl/hlslParseHelper.h | 8 +- 6 files changed, 2766 insertions(+), 586 deletions(-) diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out index 7c72e98b..b0dc68b7 100644 --- a/Test/baseResults/hlsl.rw.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.bracket.frag.out @@ -2,187 +2,836 @@ hlsl.rw.bracket.frag Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence -0:38 Function Definition: Fn1(vi4; (temp 4-component vector of int) -0:38 Function Parameters: -0:38 'x' (in 4-component vector of int) -0:? Sequence -0:38 Branch: Return with expression -0:38 'x' (in 4-component vector of int) -0:39 Function Definition: Fn1(vu4; (temp 4-component vector of uint) -0:39 Function Parameters: -0:39 'x' (in 4-component vector of uint) -0:? Sequence -0:39 Branch: Return with expression -0:39 'x' (in 4-component vector of uint) -0:40 Function Definition: Fn1(vf4; (temp 4-component vector of float) -0:40 Function Parameters: -0:40 'x' (in 4-component vector of float) -0:? Sequence -0:40 Branch: Return with expression -0:40 'x' (in 4-component vector of float) -0:42 Function Definition: Fn2(vi4; (temp void) +0:42 Function Definition: Fn1(vi4; (temp 4-component vector of int) 0:42 Function Parameters: -0:42 'x' (out 4-component vector of int) +0:42 'x' (in 4-component vector of int) 0:? Sequence -0:42 move second child to first child (temp 4-component vector of int) -0:42 'x' (out 4-component vector of int) -0:42 Constant: -0:42 0 (const int) -0:42 0 (const int) -0:42 0 (const int) -0:42 0 (const int) -0:43 Function Definition: Fn2(vu4; (temp void) +0:42 Branch: Return with expression +0:42 'x' (in 4-component vector of int) +0:43 Function Definition: Fn1(vu4; (temp 4-component vector of uint) 0:43 Function Parameters: -0:43 'x' (out 4-component vector of uint) +0:43 'x' (in 4-component vector of uint) 0:? Sequence -0:43 move second child to first child (temp 4-component vector of uint) -0:43 'x' (out 4-component vector of uint) -0:43 Constant: -0:43 0 (const uint) -0:43 0 (const uint) -0:43 0 (const uint) -0:43 0 (const uint) -0:44 Function Definition: Fn2(vf4; (temp void) +0:43 Branch: Return with expression +0:43 'x' (in 4-component vector of uint) +0:44 Function Definition: Fn1(vf4; (temp 4-component vector of float) 0:44 Function Parameters: -0:44 'x' (out 4-component vector of float) +0:44 'x' (in 4-component vector of float) 0:? Sequence -0:44 move second child to first child (temp 4-component vector of float) -0:44 'x' (out 4-component vector of float) -0:44 Constant: -0:44 0.000000 -0:44 0.000000 -0:44 0.000000 -0:44 0.000000 -0:47 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:44 Branch: Return with expression +0:44 'x' (in 4-component vector of float) +0:46 Function Definition: Fn2(vi4; (temp void) +0:46 Function Parameters: +0:46 'x' (out 4-component vector of int) +0:? Sequence +0:46 move second child to first child (temp 4-component vector of int) +0:46 'x' (out 4-component vector of int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:47 Function Definition: Fn2(vu4; (temp void) 0:47 Function Parameters: +0:47 'x' (out 4-component vector of uint) 0:? Sequence -0:53 imageLoad (temp 4-component vector of float) -0:53 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) -0:53 c1: direct index for structure (layout(offset=0 ) uniform int) -0:53 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:53 Constant: -0:53 0 (const uint) -0:55 Sequence -0:55 move second child to first child (temp 4-component vector of float) -0:55 'r00' (temp 4-component vector of float) -0:55 imageLoad (temp 4-component vector of float) -0:55 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) -0:55 c1: direct index for structure (layout(offset=0 ) uniform int) -0:55 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:55 Constant: -0:55 0 (const uint) -0:56 Sequence -0:56 move second child to first child (temp 4-component vector of int) -0:56 'r01' (temp 4-component vector of int) -0:56 imageLoad (temp 4-component vector of int) -0:56 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) -0:56 c1: direct index for structure (layout(offset=0 ) uniform int) -0:56 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:56 Constant: -0:56 0 (const uint) -0:57 Sequence -0:57 move second child to first child (temp 4-component vector of uint) -0:57 'r02' (temp 4-component vector of uint) -0:57 imageLoad (temp 4-component vector of uint) -0:57 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) -0:57 c1: direct index for structure (layout(offset=0 ) uniform int) -0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:57 Constant: -0:57 0 (const uint) +0:47 move second child to first child (temp 4-component vector of uint) +0:47 'x' (out 4-component vector of uint) +0:47 Constant: +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:48 Function Definition: Fn2(vf4; (temp void) +0:48 Function Parameters: +0:48 'x' (out 4-component vector of float) +0:? Sequence +0:48 move second child to first child (temp 4-component vector of float) +0:48 'x' (out 4-component vector of float) +0:48 Constant: +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:50 Function Definition: SomeValue( (temp 4-component vector of float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float (temp 4-component vector of float) +0:50 c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int) +0:50 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:50 Constant: +0:50 3 (const uint) +0:53 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad (temp 4-component vector of float) +0:57 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:57 c1: direct index for structure (layout(offset=0 ) uniform int) +0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child (temp 4-component vector of float) +0:59 'r00' (temp 4-component vector of float) +0:59 imageLoad (temp 4-component vector of float) +0:59 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:59 c1: direct index for structure (layout(offset=0 ) uniform int) +0:59 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:59 Constant: +0:59 0 (const uint) 0:60 Sequence -0:60 move second child to first child (temp 4-component vector of float) -0:60 'r10' (temp 4-component vector of float) -0:60 imageLoad (temp 4-component vector of float) -0:60 'g_tTex2df4' (layout(rgba32f ) uniform image2D) -0:60 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) -0:60 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:60 move second child to first child (temp 4-component vector of int) +0:60 'r01' (temp 4-component vector of int) +0:60 imageLoad (temp 4-component vector of int) +0:60 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:60 c1: direct index for structure (layout(offset=0 ) uniform int) +0:60 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:60 Constant: -0:60 1 (const uint) +0:60 0 (const uint) 0:61 Sequence -0:61 move second child to first child (temp 4-component vector of int) -0:61 'r11' (temp 4-component vector of int) -0:61 imageLoad (temp 4-component vector of int) -0:61 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) -0:61 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) -0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:61 move second child to first child (temp 4-component vector of uint) +0:61 'r02' (temp 4-component vector of uint) +0:61 imageLoad (temp 4-component vector of uint) +0:61 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:61 c1: direct index for structure (layout(offset=0 ) uniform int) +0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:61 Constant: -0:61 1 (const uint) -0:62 Sequence -0:62 move second child to first child (temp 4-component vector of uint) -0:62 'r12' (temp 4-component vector of uint) -0:62 imageLoad (temp 4-component vector of uint) -0:62 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) -0:62 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) -0:62 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:62 Constant: -0:62 1 (const uint) +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child (temp 4-component vector of float) +0:64 'r10' (temp 4-component vector of float) +0:64 imageLoad (temp 4-component vector of float) +0:64 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:64 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:64 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:64 Constant: +0:64 1 (const uint) 0:65 Sequence -0:65 move second child to first child (temp 4-component vector of float) -0:65 'r20' (temp 4-component vector of float) -0:65 imageLoad (temp 4-component vector of float) -0:65 'g_tTex3df4' (layout(rgba32f ) uniform image3D) -0:65 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) -0:65 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:65 move second child to first child (temp 4-component vector of int) +0:65 'r11' (temp 4-component vector of int) +0:65 imageLoad (temp 4-component vector of int) +0:65 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:65 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:65 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:65 Constant: -0:65 2 (const uint) +0:65 1 (const uint) 0:66 Sequence -0:66 move second child to first child (temp 4-component vector of int) -0:66 'r21' (temp 4-component vector of int) -0:66 imageLoad (temp 4-component vector of int) -0:66 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) -0:66 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) -0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:66 move second child to first child (temp 4-component vector of uint) +0:66 'r12' (temp 4-component vector of uint) +0:66 imageLoad (temp 4-component vector of uint) +0:66 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:66 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:66 Constant: -0:66 2 (const uint) -0:67 Sequence -0:67 move second child to first child (temp 4-component vector of uint) -0:67 'r22' (temp 4-component vector of uint) -0:67 imageLoad (temp 4-component vector of uint) -0:67 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) -0:67 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) -0:67 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:67 Constant: -0:67 2 (const uint) -0:86 Function Call: Fn1(vf4; (temp 4-component vector of float) -0:86 imageLoad (temp 4-component vector of float) -0:86 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) -0:86 c1: direct index for structure (layout(offset=0 ) uniform int) -0:86 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:86 Constant: -0:86 0 (const uint) -0:87 Function Call: Fn1(vi4; (temp 4-component vector of int) -0:87 imageLoad (temp 4-component vector of int) -0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child (temp 4-component vector of float) +0:69 'r20' (temp 4-component vector of float) +0:69 imageLoad (temp 4-component vector of float) +0:69 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:69 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:69 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child (temp 4-component vector of int) +0:70 'r21' (temp 4-component vector of int) +0:70 imageLoad (temp 4-component vector of int) +0:70 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:70 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:70 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child (temp 4-component vector of uint) +0:71 'r22' (temp 4-component vector of uint) +0:71 imageLoad (temp 4-component vector of uint) +0:71 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:71 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:71 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child (temp 4-component vector of float) +0:73 'lf4' (temp 4-component vector of float) +0:73 uf4: direct index for structure (layout(offset=96 ) uniform 4-component vector of float) +0:73 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child (temp 4-component vector of float) +0:77 'storeTemp' (temp 4-component vector of float) +0:77 Function Call: SomeValue( (temp 4-component vector of float) +0:77 imageStore (temp void) +0:77 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:77 c1: direct index for structure (layout(offset=0 ) uniform int) +0:77 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' (temp 4-component vector of float) +0:77 'storeTemp' (temp 4-component vector of float) +0:78 Sequence +0:78 imageStore (temp void) +0:78 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:78 c1: direct index for structure (layout(offset=0 ) uniform int) +0:78 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:78 Constant: +0:78 0 (const uint) +0:78 'lf4' (temp 4-component vector of float) +0:78 'lf4' (temp 4-component vector of float) +0:79 Sequence +0:79 move second child to first child (temp 4-component vector of int) +0:79 'storeTemp' (temp 4-component vector of int) +0:? Constant: +0:? 2 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:79 imageStore (temp void) +0:79 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:79 c1: direct index for structure (layout(offset=0 ) uniform int) +0:79 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' (temp 4-component vector of int) +0:79 'storeTemp' (temp 4-component vector of int) +0:80 Sequence +0:80 move second child to first child (temp 4-component vector of uint) +0:80 'storeTemp' (temp 4-component vector of uint) +0:? Constant: +0:? 3 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:80 imageStore (temp void) +0:80 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:80 c1: direct index for structure (layout(offset=0 ) uniform int) +0:80 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' (temp 4-component vector of uint) +0:80 'storeTemp' (temp 4-component vector of uint) +0:83 Sequence +0:83 move second child to first child (temp 4-component vector of float) +0:83 'val1' (temp 4-component vector of float) +0:83 Sequence +0:83 move second child to first child (temp int) +0:83 'coordTemp' (temp int) +0:83 c1: direct index for structure (layout(offset=0 ) uniform int) +0:83 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child (temp 4-component vector of float) +0:83 'storeTemp' (temp 4-component vector of float) +0:83 imageLoad (temp 4-component vector of float) +0:83 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:83 'coordTemp' (temp int) +0:83 vector scale second child into first child (temp 4-component vector of float) +0:83 'storeTemp' (temp 4-component vector of float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore (temp void) +0:83 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:83 'coordTemp' (temp int) +0:83 'storeTemp' (temp 4-component vector of float) +0:83 'storeTemp' (temp 4-component vector of float) +0:84 Sequence +0:84 move second child to first child (temp int) +0:84 'coordTemp' (temp int) +0:84 c1: direct index for structure (layout(offset=0 ) uniform int) +0:84 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child (temp 4-component vector of float) +0:84 'storeTemp' (temp 4-component vector of float) +0:84 imageLoad (temp 4-component vector of float) +0:84 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:84 'coordTemp' (temp int) +0:84 subtract second child into first child (temp 4-component vector of float) +0:84 'storeTemp' (temp 4-component vector of float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore (temp void) +0:84 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:84 'coordTemp' (temp int) +0:84 'storeTemp' (temp 4-component vector of float) +0:84 'storeTemp' (temp 4-component vector of float) +0:85 Sequence +0:85 move second child to first child (temp int) +0:85 'coordTemp' (temp int) +0:85 c1: direct index for structure (layout(offset=0 ) uniform int) +0:85 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child (temp 4-component vector of float) +0:85 'storeTemp' (temp 4-component vector of float) +0:85 imageLoad (temp 4-component vector of float) +0:85 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:85 'coordTemp' (temp int) +0:85 add second child into first child (temp 4-component vector of float) +0:85 'storeTemp' (temp 4-component vector of float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore (temp void) +0:85 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:85 'coordTemp' (temp int) +0:85 'storeTemp' (temp 4-component vector of float) +0:85 'storeTemp' (temp 4-component vector of float) +0:87 Sequence +0:87 move second child to first child (temp int) +0:87 'coordTemp' (temp int) 0:87 c1: direct index for structure (layout(offset=0 ) uniform int) -0:87 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:87 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:87 Constant: 0:87 0 (const uint) -0:88 Function Call: Fn1(vu4; (temp 4-component vector of uint) -0:88 imageLoad (temp 4-component vector of uint) -0:88 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:87 move second child to first child (temp 4-component vector of int) +0:87 'storeTemp' (temp 4-component vector of int) +0:87 imageLoad (temp 4-component vector of int) +0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:87 'coordTemp' (temp int) +0:87 divide second child into first child (temp 4-component vector of int) +0:87 'storeTemp' (temp 4-component vector of int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore (temp void) +0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:87 'coordTemp' (temp int) +0:87 'storeTemp' (temp 4-component vector of int) +0:87 'storeTemp' (temp 4-component vector of int) +0:88 Sequence +0:88 move second child to first child (temp int) +0:88 'coordTemp' (temp int) 0:88 c1: direct index for structure (layout(offset=0 ) uniform int) -0:88 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:88 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:88 Constant: 0:88 0 (const uint) -0:111 move second child to first child (temp 4-component vector of float) -0:111 Color: direct index for structure (temp 4-component vector of float) -0:111 'psout' (temp structure{temp 4-component vector of float Color}) -0:111 Constant: -0:111 0 (const int) -0:111 Constant: -0:111 1.000000 -0:111 1.000000 -0:111 1.000000 -0:111 1.000000 -0:113 Sequence +0:88 move second child to first child (temp 4-component vector of int) +0:88 'storeTemp' (temp 4-component vector of int) +0:88 imageLoad (temp 4-component vector of int) +0:88 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:88 'coordTemp' (temp int) +0:88 mod second child into first child (temp 4-component vector of int) +0:88 'storeTemp' (temp 4-component vector of int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore (temp void) +0:88 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:88 'coordTemp' (temp int) +0:88 'storeTemp' (temp 4-component vector of int) +0:88 'storeTemp' (temp 4-component vector of int) +0:89 Sequence +0:89 move second child to first child (temp int) +0:89 'coordTemp' (temp int) +0:89 c1: direct index for structure (layout(offset=0 ) uniform int) +0:89 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child (temp 4-component vector of int) +0:89 'storeTemp' (temp 4-component vector of int) +0:89 imageLoad (temp 4-component vector of int) +0:89 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:89 'coordTemp' (temp int) +0:89 and second child into first child (temp 4-component vector of int) +0:89 'storeTemp' (temp 4-component vector of int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore (temp void) +0:89 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:89 'coordTemp' (temp int) +0:89 'storeTemp' (temp 4-component vector of int) +0:89 'storeTemp' (temp 4-component vector of int) +0:90 Sequence +0:90 move second child to first child (temp int) +0:90 'coordTemp' (temp int) +0:90 c1: direct index for structure (layout(offset=0 ) uniform int) +0:90 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child (temp 4-component vector of int) +0:90 'storeTemp' (temp 4-component vector of int) +0:90 imageLoad (temp 4-component vector of int) +0:90 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:90 'coordTemp' (temp int) +0:90 or second child into first child (temp 4-component vector of int) +0:90 'storeTemp' (temp 4-component vector of int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore (temp void) +0:90 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:90 'coordTemp' (temp int) +0:90 'storeTemp' (temp 4-component vector of int) +0:90 'storeTemp' (temp 4-component vector of int) +0:91 Sequence +0:91 move second child to first child (temp int) +0:91 'coordTemp' (temp int) +0:91 c1: direct index for structure (layout(offset=0 ) uniform int) +0:91 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child (temp 4-component vector of int) +0:91 'storeTemp' (temp 4-component vector of int) +0:91 imageLoad (temp 4-component vector of int) +0:91 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:91 'coordTemp' (temp int) +0:91 left shift second child into first child (temp 4-component vector of int) +0:91 'storeTemp' (temp 4-component vector of int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore (temp void) +0:91 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:91 'coordTemp' (temp int) +0:91 'storeTemp' (temp 4-component vector of int) +0:91 'storeTemp' (temp 4-component vector of int) +0:92 Sequence +0:92 move second child to first child (temp int) +0:92 'coordTemp' (temp int) +0:92 c1: direct index for structure (layout(offset=0 ) uniform int) +0:92 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child (temp 4-component vector of int) +0:92 'storeTemp' (temp 4-component vector of int) +0:92 imageLoad (temp 4-component vector of int) +0:92 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:92 'coordTemp' (temp int) +0:92 right shift second child into first child (temp 4-component vector of int) +0:92 'storeTemp' (temp 4-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore (temp void) +0:92 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:92 'coordTemp' (temp int) +0:92 'storeTemp' (temp 4-component vector of int) +0:92 'storeTemp' (temp 4-component vector of int) +0:95 Sequence +0:95 move second child to first child (temp 4-component vector of float) +0:95 'storeTemp' (temp 4-component vector of float) +0:95 Function Call: SomeValue( (temp 4-component vector of float) +0:95 imageStore (temp void) +0:95 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:95 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:95 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' (temp 4-component vector of float) +0:95 'storeTemp' (temp 4-component vector of float) +0:96 Sequence +0:96 imageStore (temp void) +0:96 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:96 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:96 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:96 Constant: +0:96 1 (const uint) +0:96 'lf4' (temp 4-component vector of float) +0:96 'lf4' (temp 4-component vector of float) +0:97 Sequence +0:97 move second child to first child (temp 4-component vector of int) +0:97 'storeTemp' (temp 4-component vector of int) +0:? Constant: +0:? 5 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:97 imageStore (temp void) +0:97 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:97 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:97 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' (temp 4-component vector of int) +0:97 'storeTemp' (temp 4-component vector of int) +0:98 Sequence +0:98 move second child to first child (temp 4-component vector of uint) +0:98 'storeTemp' (temp 4-component vector of uint) +0:? Constant: +0:? 6 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:98 imageStore (temp void) +0:98 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:98 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:98 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' (temp 4-component vector of uint) +0:98 'storeTemp' (temp 4-component vector of uint) +0:101 Sequence +0:101 move second child to first child (temp 4-component vector of float) +0:101 'storeTemp' (temp 4-component vector of float) +0:101 Function Call: SomeValue( (temp 4-component vector of float) +0:101 imageStore (temp void) +0:101 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:101 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:101 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' (temp 4-component vector of float) +0:101 'storeTemp' (temp 4-component vector of float) +0:102 Sequence +0:102 imageStore (temp void) +0:102 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:102 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:102 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:102 Constant: +0:102 2 (const uint) +0:102 'lf4' (temp 4-component vector of float) +0:102 'lf4' (temp 4-component vector of float) +0:103 Sequence +0:103 move second child to first child (temp 4-component vector of int) +0:103 'storeTemp' (temp 4-component vector of int) +0:? Constant: +0:? 8 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:103 imageStore (temp void) +0:103 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:103 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:103 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' (temp 4-component vector of int) +0:103 'storeTemp' (temp 4-component vector of int) +0:104 Sequence +0:104 move second child to first child (temp 4-component vector of uint) +0:104 'storeTemp' (temp 4-component vector of uint) +0:? Constant: +0:? 9 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:104 imageStore (temp void) +0:104 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:104 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:104 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' (temp 4-component vector of uint) +0:104 'storeTemp' (temp 4-component vector of uint) +0:107 Function Call: Fn1(vf4; (temp 4-component vector of float) +0:107 imageLoad (temp 4-component vector of float) +0:107 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:107 c1: direct index for structure (layout(offset=0 ) uniform int) +0:107 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(vi4; (temp 4-component vector of int) +0:108 imageLoad (temp 4-component vector of int) +0:108 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:108 c1: direct index for structure (layout(offset=0 ) uniform int) +0:108 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(vu4; (temp 4-component vector of uint) +0:109 imageLoad (temp 4-component vector of uint) +0:109 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:109 c1: direct index for structure (layout(offset=0 ) uniform int) +0:109 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:109 Constant: +0:109 0 (const uint) +0:111 Comma (temp void) +0:111 Function Call: Fn2(vf4; (temp void) +0:111 'tempArg' (temp 4-component vector of float) +0:111 Sequence +0:111 imageStore (temp void) +0:111 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:111 c1: direct index for structure (layout(offset=0 ) uniform int) +0:111 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' (temp 4-component vector of float) +0:111 'tempArg' (temp 4-component vector of float) +0:112 Comma (temp void) +0:112 Function Call: Fn2(vi4; (temp void) +0:112 'tempArg' (temp 4-component vector of int) +0:112 Sequence +0:112 imageStore (temp void) +0:112 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:112 c1: direct index for structure (layout(offset=0 ) uniform int) +0:112 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' (temp 4-component vector of int) +0:112 'tempArg' (temp 4-component vector of int) +0:113 Comma (temp void) +0:113 Function Call: Fn2(vu4; (temp void) +0:113 'tempArg' (temp 4-component vector of uint) 0:113 Sequence -0:113 move second child to first child (temp 4-component vector of float) -0:? 'Color' (layout(location=0 ) out 4-component vector of float) -0:113 Color: direct index for structure (temp 4-component vector of float) -0:113 'psout' (temp structure{temp 4-component vector of float Color}) +0:113 imageStore (temp void) +0:113 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:113 c1: direct index for structure (layout(offset=0 ) uniform int) +0:113 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:113 Constant: -0:113 0 (const int) -0:113 Branch: Return +0:113 0 (const uint) +0:113 'tempArg' (temp 4-component vector of uint) +0:113 'tempArg' (temp 4-component vector of uint) +0:117 Sequence +0:117 move second child to first child (temp int) +0:117 'coordTemp' (temp int) +0:117 c1: direct index for structure (layout(offset=0 ) uniform int) +0:117 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child (temp 4-component vector of float) +0:117 'storeTemp' (temp 4-component vector of float) +0:117 imageLoad (temp 4-component vector of float) +0:117 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:117 'coordTemp' (temp int) +0:117 Pre-Increment (temp 4-component vector of float) +0:117 'storeTemp' (temp 4-component vector of float) +0:117 imageStore (temp void) +0:117 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:117 'coordTemp' (temp int) +0:117 'storeTemp' (temp 4-component vector of float) +0:117 'storeTemp' (temp 4-component vector of float) +0:118 Sequence +0:118 move second child to first child (temp int) +0:118 'coordTemp' (temp int) +0:118 c1: direct index for structure (layout(offset=0 ) uniform int) +0:118 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child (temp 4-component vector of int) +0:118 'storeTemp' (temp 4-component vector of int) +0:118 imageLoad (temp 4-component vector of int) +0:118 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:118 'coordTemp' (temp int) +0:118 Pre-Increment (temp 4-component vector of int) +0:118 'storeTemp' (temp 4-component vector of int) +0:118 imageStore (temp void) +0:118 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:118 'coordTemp' (temp int) +0:118 'storeTemp' (temp 4-component vector of int) +0:118 'storeTemp' (temp 4-component vector of int) +0:119 Sequence +0:119 move second child to first child (temp int) +0:119 'coordTemp' (temp int) +0:119 c1: direct index for structure (layout(offset=0 ) uniform int) +0:119 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child (temp 4-component vector of uint) +0:119 'storeTemp' (temp 4-component vector of uint) +0:119 imageLoad (temp 4-component vector of uint) +0:119 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:119 'coordTemp' (temp int) +0:119 Pre-Increment (temp 4-component vector of uint) +0:119 'storeTemp' (temp 4-component vector of uint) +0:119 imageStore (temp void) +0:119 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:119 'coordTemp' (temp int) +0:119 'storeTemp' (temp 4-component vector of uint) +0:119 'storeTemp' (temp 4-component vector of uint) +0:121 Sequence +0:121 move second child to first child (temp int) +0:121 'coordTemp' (temp int) +0:121 c1: direct index for structure (layout(offset=0 ) uniform int) +0:121 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child (temp 4-component vector of float) +0:121 'storeTemp' (temp 4-component vector of float) +0:121 imageLoad (temp 4-component vector of float) +0:121 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:121 'coordTemp' (temp int) +0:121 Pre-Decrement (temp 4-component vector of float) +0:121 'storeTemp' (temp 4-component vector of float) +0:121 imageStore (temp void) +0:121 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:121 'coordTemp' (temp int) +0:121 'storeTemp' (temp 4-component vector of float) +0:121 'storeTemp' (temp 4-component vector of float) +0:122 Sequence +0:122 move second child to first child (temp int) +0:122 'coordTemp' (temp int) +0:122 c1: direct index for structure (layout(offset=0 ) uniform int) +0:122 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child (temp 4-component vector of int) +0:122 'storeTemp' (temp 4-component vector of int) +0:122 imageLoad (temp 4-component vector of int) +0:122 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:122 'coordTemp' (temp int) +0:122 Pre-Decrement (temp 4-component vector of int) +0:122 'storeTemp' (temp 4-component vector of int) +0:122 imageStore (temp void) +0:122 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:122 'coordTemp' (temp int) +0:122 'storeTemp' (temp 4-component vector of int) +0:122 'storeTemp' (temp 4-component vector of int) +0:123 Sequence +0:123 move second child to first child (temp int) +0:123 'coordTemp' (temp int) +0:123 c1: direct index for structure (layout(offset=0 ) uniform int) +0:123 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child (temp 4-component vector of uint) +0:123 'storeTemp' (temp 4-component vector of uint) +0:123 imageLoad (temp 4-component vector of uint) +0:123 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:123 'coordTemp' (temp int) +0:123 Pre-Decrement (temp 4-component vector of uint) +0:123 'storeTemp' (temp 4-component vector of uint) +0:123 imageStore (temp void) +0:123 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:123 'coordTemp' (temp int) +0:123 'storeTemp' (temp 4-component vector of uint) +0:123 'storeTemp' (temp 4-component vector of uint) +0:126 Sequence +0:126 move second child to first child (temp int) +0:126 'coordTemp' (temp int) +0:126 c1: direct index for structure (layout(offset=0 ) uniform int) +0:126 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child (temp 4-component vector of float) +0:126 'storeTempPre' (temp 4-component vector of float) +0:126 imageLoad (temp 4-component vector of float) +0:126 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:126 'coordTemp' (temp int) +0:126 move second child to first child (temp 4-component vector of float) +0:126 'storeTempPost' (temp 4-component vector of float) +0:126 'storeTempPre' (temp 4-component vector of float) +0:126 Post-Increment (temp 4-component vector of float) +0:126 'storeTempPost' (temp 4-component vector of float) +0:126 imageStore (temp void) +0:126 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:126 'coordTemp' (temp int) +0:126 'storeTempPost' (temp 4-component vector of float) +0:126 'storeTempPre' (temp 4-component vector of float) +0:127 Sequence +0:127 move second child to first child (temp int) +0:127 'coordTemp' (temp int) +0:127 c1: direct index for structure (layout(offset=0 ) uniform int) +0:127 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child (temp 4-component vector of uint) +0:127 'storeTempPre' (temp 4-component vector of uint) +0:127 imageLoad (temp 4-component vector of uint) +0:127 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:127 'coordTemp' (temp int) +0:127 move second child to first child (temp 4-component vector of uint) +0:127 'storeTempPost' (temp 4-component vector of uint) +0:127 'storeTempPre' (temp 4-component vector of uint) +0:127 Post-Decrement (temp 4-component vector of uint) +0:127 'storeTempPost' (temp 4-component vector of uint) +0:127 imageStore (temp void) +0:127 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:127 'coordTemp' (temp int) +0:127 'storeTempPost' (temp 4-component vector of uint) +0:127 'storeTempPre' (temp 4-component vector of uint) +0:128 Sequence +0:128 move second child to first child (temp int) +0:128 'coordTemp' (temp int) +0:128 c1: direct index for structure (layout(offset=0 ) uniform int) +0:128 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child (temp 4-component vector of int) +0:128 'storeTempPre' (temp 4-component vector of int) +0:128 imageLoad (temp 4-component vector of int) +0:128 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:128 'coordTemp' (temp int) +0:128 move second child to first child (temp 4-component vector of int) +0:128 'storeTempPost' (temp 4-component vector of int) +0:128 'storeTempPre' (temp 4-component vector of int) +0:128 Post-Increment (temp 4-component vector of int) +0:128 'storeTempPost' (temp 4-component vector of int) +0:128 imageStore (temp void) +0:128 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:128 'coordTemp' (temp int) +0:128 'storeTempPost' (temp 4-component vector of int) +0:128 'storeTempPre' (temp 4-component vector of int) +0:130 Sequence +0:130 move second child to first child (temp int) +0:130 'coordTemp' (temp int) +0:130 c1: direct index for structure (layout(offset=0 ) uniform int) +0:130 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child (temp 4-component vector of float) +0:130 'storeTempPre' (temp 4-component vector of float) +0:130 imageLoad (temp 4-component vector of float) +0:130 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:130 'coordTemp' (temp int) +0:130 move second child to first child (temp 4-component vector of float) +0:130 'storeTempPost' (temp 4-component vector of float) +0:130 'storeTempPre' (temp 4-component vector of float) +0:130 Post-Decrement (temp 4-component vector of float) +0:130 'storeTempPost' (temp 4-component vector of float) +0:130 imageStore (temp void) +0:130 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:130 'coordTemp' (temp int) +0:130 'storeTempPost' (temp 4-component vector of float) +0:130 'storeTempPre' (temp 4-component vector of float) +0:131 Sequence +0:131 move second child to first child (temp int) +0:131 'coordTemp' (temp int) +0:131 c1: direct index for structure (layout(offset=0 ) uniform int) +0:131 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child (temp 4-component vector of int) +0:131 'storeTempPre' (temp 4-component vector of int) +0:131 imageLoad (temp 4-component vector of int) +0:131 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:131 'coordTemp' (temp int) +0:131 move second child to first child (temp 4-component vector of int) +0:131 'storeTempPost' (temp 4-component vector of int) +0:131 'storeTempPre' (temp 4-component vector of int) +0:131 Post-Increment (temp 4-component vector of int) +0:131 'storeTempPost' (temp 4-component vector of int) +0:131 imageStore (temp void) +0:131 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:131 'coordTemp' (temp int) +0:131 'storeTempPost' (temp 4-component vector of int) +0:131 'storeTempPre' (temp 4-component vector of int) +0:132 Sequence +0:132 move second child to first child (temp int) +0:132 'coordTemp' (temp int) +0:132 c1: direct index for structure (layout(offset=0 ) uniform int) +0:132 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child (temp 4-component vector of uint) +0:132 'storeTempPre' (temp 4-component vector of uint) +0:132 imageLoad (temp 4-component vector of uint) +0:132 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:132 'coordTemp' (temp int) +0:132 move second child to first child (temp 4-component vector of uint) +0:132 'storeTempPost' (temp 4-component vector of uint) +0:132 'storeTempPre' (temp 4-component vector of uint) +0:132 Post-Decrement (temp 4-component vector of uint) +0:132 'storeTempPost' (temp 4-component vector of uint) +0:132 imageStore (temp void) +0:132 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:132 'coordTemp' (temp int) +0:132 'storeTempPost' (temp 4-component vector of uint) +0:132 'storeTempPre' (temp 4-component vector of uint) +0:134 move second child to first child (temp 4-component vector of float) +0:134 Color: direct index for structure (temp 4-component vector of float) +0:134 'psout' (temp structure{temp 4-component vector of float Color}) +0:134 Constant: +0:134 0 (const int) +0:134 Constant: +0:134 1.000000 +0:134 1.000000 +0:134 1.000000 +0:134 1.000000 +0:136 Sequence +0:136 Sequence +0:136 move second child to first child (temp 4-component vector of float) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) +0:136 Color: direct index for structure (temp 4-component vector of float) +0:136 'psout' (temp structure{temp 4-component vector of float Color}) +0:136 Constant: +0:136 0 (const int) +0:136 Branch: Return 0:? Linker Objects 0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) 0:? 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) @@ -200,7 +849,7 @@ gl_FragCoord origin is upper left 0:? 'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray) 0:? 'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray) 0:? 'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray) -0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:? 'Color' (layout(location=0 ) out 4-component vector of float) @@ -210,187 +859,836 @@ Linked fragment stage: Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence -0:38 Function Definition: Fn1(vi4; (temp 4-component vector of int) -0:38 Function Parameters: -0:38 'x' (in 4-component vector of int) -0:? Sequence -0:38 Branch: Return with expression -0:38 'x' (in 4-component vector of int) -0:39 Function Definition: Fn1(vu4; (temp 4-component vector of uint) -0:39 Function Parameters: -0:39 'x' (in 4-component vector of uint) -0:? Sequence -0:39 Branch: Return with expression -0:39 'x' (in 4-component vector of uint) -0:40 Function Definition: Fn1(vf4; (temp 4-component vector of float) -0:40 Function Parameters: -0:40 'x' (in 4-component vector of float) -0:? Sequence -0:40 Branch: Return with expression -0:40 'x' (in 4-component vector of float) -0:42 Function Definition: Fn2(vi4; (temp void) +0:42 Function Definition: Fn1(vi4; (temp 4-component vector of int) 0:42 Function Parameters: -0:42 'x' (out 4-component vector of int) +0:42 'x' (in 4-component vector of int) 0:? Sequence -0:42 move second child to first child (temp 4-component vector of int) -0:42 'x' (out 4-component vector of int) -0:42 Constant: -0:42 0 (const int) -0:42 0 (const int) -0:42 0 (const int) -0:42 0 (const int) -0:43 Function Definition: Fn2(vu4; (temp void) +0:42 Branch: Return with expression +0:42 'x' (in 4-component vector of int) +0:43 Function Definition: Fn1(vu4; (temp 4-component vector of uint) 0:43 Function Parameters: -0:43 'x' (out 4-component vector of uint) +0:43 'x' (in 4-component vector of uint) 0:? Sequence -0:43 move second child to first child (temp 4-component vector of uint) -0:43 'x' (out 4-component vector of uint) -0:43 Constant: -0:43 0 (const uint) -0:43 0 (const uint) -0:43 0 (const uint) -0:43 0 (const uint) -0:44 Function Definition: Fn2(vf4; (temp void) +0:43 Branch: Return with expression +0:43 'x' (in 4-component vector of uint) +0:44 Function Definition: Fn1(vf4; (temp 4-component vector of float) 0:44 Function Parameters: -0:44 'x' (out 4-component vector of float) +0:44 'x' (in 4-component vector of float) 0:? Sequence -0:44 move second child to first child (temp 4-component vector of float) -0:44 'x' (out 4-component vector of float) -0:44 Constant: -0:44 0.000000 -0:44 0.000000 -0:44 0.000000 -0:44 0.000000 -0:47 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:44 Branch: Return with expression +0:44 'x' (in 4-component vector of float) +0:46 Function Definition: Fn2(vi4; (temp void) +0:46 Function Parameters: +0:46 'x' (out 4-component vector of int) +0:? Sequence +0:46 move second child to first child (temp 4-component vector of int) +0:46 'x' (out 4-component vector of int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:46 0 (const int) +0:47 Function Definition: Fn2(vu4; (temp void) 0:47 Function Parameters: +0:47 'x' (out 4-component vector of uint) 0:? Sequence -0:53 imageLoad (temp 4-component vector of float) -0:53 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) -0:53 c1: direct index for structure (layout(offset=0 ) uniform int) -0:53 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:53 Constant: -0:53 0 (const uint) -0:55 Sequence -0:55 move second child to first child (temp 4-component vector of float) -0:55 'r00' (temp 4-component vector of float) -0:55 imageLoad (temp 4-component vector of float) -0:55 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) -0:55 c1: direct index for structure (layout(offset=0 ) uniform int) -0:55 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:55 Constant: -0:55 0 (const uint) -0:56 Sequence -0:56 move second child to first child (temp 4-component vector of int) -0:56 'r01' (temp 4-component vector of int) -0:56 imageLoad (temp 4-component vector of int) -0:56 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) -0:56 c1: direct index for structure (layout(offset=0 ) uniform int) -0:56 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:56 Constant: -0:56 0 (const uint) -0:57 Sequence -0:57 move second child to first child (temp 4-component vector of uint) -0:57 'r02' (temp 4-component vector of uint) -0:57 imageLoad (temp 4-component vector of uint) -0:57 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) -0:57 c1: direct index for structure (layout(offset=0 ) uniform int) -0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:57 Constant: -0:57 0 (const uint) +0:47 move second child to first child (temp 4-component vector of uint) +0:47 'x' (out 4-component vector of uint) +0:47 Constant: +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:47 0 (const uint) +0:48 Function Definition: Fn2(vf4; (temp void) +0:48 Function Parameters: +0:48 'x' (out 4-component vector of float) +0:? Sequence +0:48 move second child to first child (temp 4-component vector of float) +0:48 'x' (out 4-component vector of float) +0:48 Constant: +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:48 0.000000 +0:50 Function Definition: SomeValue( (temp 4-component vector of float) +0:50 Function Parameters: +0:? Sequence +0:50 Branch: Return with expression +0:50 Convert int to float (temp 4-component vector of float) +0:50 c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int) +0:50 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:50 Constant: +0:50 3 (const uint) +0:53 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:53 Function Parameters: +0:? Sequence +0:57 imageLoad (temp 4-component vector of float) +0:57 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:57 c1: direct index for structure (layout(offset=0 ) uniform int) +0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:57 Constant: +0:57 0 (const uint) +0:59 Sequence +0:59 move second child to first child (temp 4-component vector of float) +0:59 'r00' (temp 4-component vector of float) +0:59 imageLoad (temp 4-component vector of float) +0:59 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:59 c1: direct index for structure (layout(offset=0 ) uniform int) +0:59 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:59 Constant: +0:59 0 (const uint) 0:60 Sequence -0:60 move second child to first child (temp 4-component vector of float) -0:60 'r10' (temp 4-component vector of float) -0:60 imageLoad (temp 4-component vector of float) -0:60 'g_tTex2df4' (layout(rgba32f ) uniform image2D) -0:60 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) -0:60 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:60 move second child to first child (temp 4-component vector of int) +0:60 'r01' (temp 4-component vector of int) +0:60 imageLoad (temp 4-component vector of int) +0:60 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:60 c1: direct index for structure (layout(offset=0 ) uniform int) +0:60 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:60 Constant: -0:60 1 (const uint) +0:60 0 (const uint) 0:61 Sequence -0:61 move second child to first child (temp 4-component vector of int) -0:61 'r11' (temp 4-component vector of int) -0:61 imageLoad (temp 4-component vector of int) -0:61 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) -0:61 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) -0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:61 move second child to first child (temp 4-component vector of uint) +0:61 'r02' (temp 4-component vector of uint) +0:61 imageLoad (temp 4-component vector of uint) +0:61 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:61 c1: direct index for structure (layout(offset=0 ) uniform int) +0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:61 Constant: -0:61 1 (const uint) -0:62 Sequence -0:62 move second child to first child (temp 4-component vector of uint) -0:62 'r12' (temp 4-component vector of uint) -0:62 imageLoad (temp 4-component vector of uint) -0:62 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) -0:62 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) -0:62 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:62 Constant: -0:62 1 (const uint) +0:61 0 (const uint) +0:64 Sequence +0:64 move second child to first child (temp 4-component vector of float) +0:64 'r10' (temp 4-component vector of float) +0:64 imageLoad (temp 4-component vector of float) +0:64 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:64 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:64 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:64 Constant: +0:64 1 (const uint) 0:65 Sequence -0:65 move second child to first child (temp 4-component vector of float) -0:65 'r20' (temp 4-component vector of float) -0:65 imageLoad (temp 4-component vector of float) -0:65 'g_tTex3df4' (layout(rgba32f ) uniform image3D) -0:65 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) -0:65 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:65 move second child to first child (temp 4-component vector of int) +0:65 'r11' (temp 4-component vector of int) +0:65 imageLoad (temp 4-component vector of int) +0:65 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:65 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:65 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:65 Constant: -0:65 2 (const uint) +0:65 1 (const uint) 0:66 Sequence -0:66 move second child to first child (temp 4-component vector of int) -0:66 'r21' (temp 4-component vector of int) -0:66 imageLoad (temp 4-component vector of int) -0:66 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) -0:66 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) -0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:66 move second child to first child (temp 4-component vector of uint) +0:66 'r12' (temp 4-component vector of uint) +0:66 imageLoad (temp 4-component vector of uint) +0:66 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:66 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:66 Constant: -0:66 2 (const uint) -0:67 Sequence -0:67 move second child to first child (temp 4-component vector of uint) -0:67 'r22' (temp 4-component vector of uint) -0:67 imageLoad (temp 4-component vector of uint) -0:67 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) -0:67 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) -0:67 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:67 Constant: -0:67 2 (const uint) -0:86 Function Call: Fn1(vf4; (temp 4-component vector of float) -0:86 imageLoad (temp 4-component vector of float) -0:86 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) -0:86 c1: direct index for structure (layout(offset=0 ) uniform int) -0:86 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) -0:86 Constant: -0:86 0 (const uint) -0:87 Function Call: Fn1(vi4; (temp 4-component vector of int) -0:87 imageLoad (temp 4-component vector of int) -0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:66 1 (const uint) +0:69 Sequence +0:69 move second child to first child (temp 4-component vector of float) +0:69 'r20' (temp 4-component vector of float) +0:69 imageLoad (temp 4-component vector of float) +0:69 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:69 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:69 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:69 Constant: +0:69 2 (const uint) +0:70 Sequence +0:70 move second child to first child (temp 4-component vector of int) +0:70 'r21' (temp 4-component vector of int) +0:70 imageLoad (temp 4-component vector of int) +0:70 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:70 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:70 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:70 Constant: +0:70 2 (const uint) +0:71 Sequence +0:71 move second child to first child (temp 4-component vector of uint) +0:71 'r22' (temp 4-component vector of uint) +0:71 imageLoad (temp 4-component vector of uint) +0:71 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:71 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:71 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:71 Constant: +0:71 2 (const uint) +0:73 Sequence +0:73 move second child to first child (temp 4-component vector of float) +0:73 'lf4' (temp 4-component vector of float) +0:73 uf4: direct index for structure (layout(offset=96 ) uniform 4-component vector of float) +0:73 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:73 Constant: +0:73 8 (const uint) +0:77 Sequence +0:77 move second child to first child (temp 4-component vector of float) +0:77 'storeTemp' (temp 4-component vector of float) +0:77 Function Call: SomeValue( (temp 4-component vector of float) +0:77 imageStore (temp void) +0:77 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:77 c1: direct index for structure (layout(offset=0 ) uniform int) +0:77 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:77 Constant: +0:77 0 (const uint) +0:77 'storeTemp' (temp 4-component vector of float) +0:77 'storeTemp' (temp 4-component vector of float) +0:78 Sequence +0:78 imageStore (temp void) +0:78 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:78 c1: direct index for structure (layout(offset=0 ) uniform int) +0:78 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:78 Constant: +0:78 0 (const uint) +0:78 'lf4' (temp 4-component vector of float) +0:78 'lf4' (temp 4-component vector of float) +0:79 Sequence +0:79 move second child to first child (temp 4-component vector of int) +0:79 'storeTemp' (temp 4-component vector of int) +0:? Constant: +0:? 2 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:79 imageStore (temp void) +0:79 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:79 c1: direct index for structure (layout(offset=0 ) uniform int) +0:79 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:79 Constant: +0:79 0 (const uint) +0:79 'storeTemp' (temp 4-component vector of int) +0:79 'storeTemp' (temp 4-component vector of int) +0:80 Sequence +0:80 move second child to first child (temp 4-component vector of uint) +0:80 'storeTemp' (temp 4-component vector of uint) +0:? Constant: +0:? 3 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:80 imageStore (temp void) +0:80 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:80 c1: direct index for structure (layout(offset=0 ) uniform int) +0:80 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:80 Constant: +0:80 0 (const uint) +0:80 'storeTemp' (temp 4-component vector of uint) +0:80 'storeTemp' (temp 4-component vector of uint) +0:83 Sequence +0:83 move second child to first child (temp 4-component vector of float) +0:83 'val1' (temp 4-component vector of float) +0:83 Sequence +0:83 move second child to first child (temp int) +0:83 'coordTemp' (temp int) +0:83 c1: direct index for structure (layout(offset=0 ) uniform int) +0:83 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:83 Constant: +0:83 0 (const uint) +0:83 move second child to first child (temp 4-component vector of float) +0:83 'storeTemp' (temp 4-component vector of float) +0:83 imageLoad (temp 4-component vector of float) +0:83 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:83 'coordTemp' (temp int) +0:83 vector scale second child into first child (temp 4-component vector of float) +0:83 'storeTemp' (temp 4-component vector of float) +0:83 Constant: +0:83 2.000000 +0:83 imageStore (temp void) +0:83 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:83 'coordTemp' (temp int) +0:83 'storeTemp' (temp 4-component vector of float) +0:83 'storeTemp' (temp 4-component vector of float) +0:84 Sequence +0:84 move second child to first child (temp int) +0:84 'coordTemp' (temp int) +0:84 c1: direct index for structure (layout(offset=0 ) uniform int) +0:84 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:84 Constant: +0:84 0 (const uint) +0:84 move second child to first child (temp 4-component vector of float) +0:84 'storeTemp' (temp 4-component vector of float) +0:84 imageLoad (temp 4-component vector of float) +0:84 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:84 'coordTemp' (temp int) +0:84 subtract second child into first child (temp 4-component vector of float) +0:84 'storeTemp' (temp 4-component vector of float) +0:84 Constant: +0:84 3.000000 +0:84 imageStore (temp void) +0:84 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:84 'coordTemp' (temp int) +0:84 'storeTemp' (temp 4-component vector of float) +0:84 'storeTemp' (temp 4-component vector of float) +0:85 Sequence +0:85 move second child to first child (temp int) +0:85 'coordTemp' (temp int) +0:85 c1: direct index for structure (layout(offset=0 ) uniform int) +0:85 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:85 Constant: +0:85 0 (const uint) +0:85 move second child to first child (temp 4-component vector of float) +0:85 'storeTemp' (temp 4-component vector of float) +0:85 imageLoad (temp 4-component vector of float) +0:85 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:85 'coordTemp' (temp int) +0:85 add second child into first child (temp 4-component vector of float) +0:85 'storeTemp' (temp 4-component vector of float) +0:85 Constant: +0:85 4.000000 +0:85 imageStore (temp void) +0:85 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:85 'coordTemp' (temp int) +0:85 'storeTemp' (temp 4-component vector of float) +0:85 'storeTemp' (temp 4-component vector of float) +0:87 Sequence +0:87 move second child to first child (temp int) +0:87 'coordTemp' (temp int) 0:87 c1: direct index for structure (layout(offset=0 ) uniform int) -0:87 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:87 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:87 Constant: 0:87 0 (const uint) -0:88 Function Call: Fn1(vu4; (temp 4-component vector of uint) -0:88 imageLoad (temp 4-component vector of uint) -0:88 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:87 move second child to first child (temp 4-component vector of int) +0:87 'storeTemp' (temp 4-component vector of int) +0:87 imageLoad (temp 4-component vector of int) +0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:87 'coordTemp' (temp int) +0:87 divide second child into first child (temp 4-component vector of int) +0:87 'storeTemp' (temp 4-component vector of int) +0:87 Constant: +0:87 2 (const int) +0:87 imageStore (temp void) +0:87 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:87 'coordTemp' (temp int) +0:87 'storeTemp' (temp 4-component vector of int) +0:87 'storeTemp' (temp 4-component vector of int) +0:88 Sequence +0:88 move second child to first child (temp int) +0:88 'coordTemp' (temp int) 0:88 c1: direct index for structure (layout(offset=0 ) uniform int) -0:88 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:88 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:88 Constant: 0:88 0 (const uint) -0:111 move second child to first child (temp 4-component vector of float) -0:111 Color: direct index for structure (temp 4-component vector of float) -0:111 'psout' (temp structure{temp 4-component vector of float Color}) -0:111 Constant: -0:111 0 (const int) -0:111 Constant: -0:111 1.000000 -0:111 1.000000 -0:111 1.000000 -0:111 1.000000 -0:113 Sequence +0:88 move second child to first child (temp 4-component vector of int) +0:88 'storeTemp' (temp 4-component vector of int) +0:88 imageLoad (temp 4-component vector of int) +0:88 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:88 'coordTemp' (temp int) +0:88 mod second child into first child (temp 4-component vector of int) +0:88 'storeTemp' (temp 4-component vector of int) +0:88 Constant: +0:88 2 (const int) +0:88 imageStore (temp void) +0:88 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:88 'coordTemp' (temp int) +0:88 'storeTemp' (temp 4-component vector of int) +0:88 'storeTemp' (temp 4-component vector of int) +0:89 Sequence +0:89 move second child to first child (temp int) +0:89 'coordTemp' (temp int) +0:89 c1: direct index for structure (layout(offset=0 ) uniform int) +0:89 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:89 Constant: +0:89 0 (const uint) +0:89 move second child to first child (temp 4-component vector of int) +0:89 'storeTemp' (temp 4-component vector of int) +0:89 imageLoad (temp 4-component vector of int) +0:89 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:89 'coordTemp' (temp int) +0:89 and second child into first child (temp 4-component vector of int) +0:89 'storeTemp' (temp 4-component vector of int) +0:89 Constant: +0:89 65535 (const int) +0:89 imageStore (temp void) +0:89 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:89 'coordTemp' (temp int) +0:89 'storeTemp' (temp 4-component vector of int) +0:89 'storeTemp' (temp 4-component vector of int) +0:90 Sequence +0:90 move second child to first child (temp int) +0:90 'coordTemp' (temp int) +0:90 c1: direct index for structure (layout(offset=0 ) uniform int) +0:90 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:90 Constant: +0:90 0 (const uint) +0:90 move second child to first child (temp 4-component vector of int) +0:90 'storeTemp' (temp 4-component vector of int) +0:90 imageLoad (temp 4-component vector of int) +0:90 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:90 'coordTemp' (temp int) +0:90 or second child into first child (temp 4-component vector of int) +0:90 'storeTemp' (temp 4-component vector of int) +0:90 Constant: +0:90 61680 (const int) +0:90 imageStore (temp void) +0:90 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:90 'coordTemp' (temp int) +0:90 'storeTemp' (temp 4-component vector of int) +0:90 'storeTemp' (temp 4-component vector of int) +0:91 Sequence +0:91 move second child to first child (temp int) +0:91 'coordTemp' (temp int) +0:91 c1: direct index for structure (layout(offset=0 ) uniform int) +0:91 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:91 Constant: +0:91 0 (const uint) +0:91 move second child to first child (temp 4-component vector of int) +0:91 'storeTemp' (temp 4-component vector of int) +0:91 imageLoad (temp 4-component vector of int) +0:91 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:91 'coordTemp' (temp int) +0:91 left shift second child into first child (temp 4-component vector of int) +0:91 'storeTemp' (temp 4-component vector of int) +0:91 Constant: +0:91 2 (const int) +0:91 imageStore (temp void) +0:91 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:91 'coordTemp' (temp int) +0:91 'storeTemp' (temp 4-component vector of int) +0:91 'storeTemp' (temp 4-component vector of int) +0:92 Sequence +0:92 move second child to first child (temp int) +0:92 'coordTemp' (temp int) +0:92 c1: direct index for structure (layout(offset=0 ) uniform int) +0:92 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:92 Constant: +0:92 0 (const uint) +0:92 move second child to first child (temp 4-component vector of int) +0:92 'storeTemp' (temp 4-component vector of int) +0:92 imageLoad (temp 4-component vector of int) +0:92 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:92 'coordTemp' (temp int) +0:92 right shift second child into first child (temp 4-component vector of int) +0:92 'storeTemp' (temp 4-component vector of int) +0:92 Constant: +0:92 2 (const int) +0:92 imageStore (temp void) +0:92 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:92 'coordTemp' (temp int) +0:92 'storeTemp' (temp 4-component vector of int) +0:92 'storeTemp' (temp 4-component vector of int) +0:95 Sequence +0:95 move second child to first child (temp 4-component vector of float) +0:95 'storeTemp' (temp 4-component vector of float) +0:95 Function Call: SomeValue( (temp 4-component vector of float) +0:95 imageStore (temp void) +0:95 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:95 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:95 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:95 Constant: +0:95 1 (const uint) +0:95 'storeTemp' (temp 4-component vector of float) +0:95 'storeTemp' (temp 4-component vector of float) +0:96 Sequence +0:96 imageStore (temp void) +0:96 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:96 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:96 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:96 Constant: +0:96 1 (const uint) +0:96 'lf4' (temp 4-component vector of float) +0:96 'lf4' (temp 4-component vector of float) +0:97 Sequence +0:97 move second child to first child (temp 4-component vector of int) +0:97 'storeTemp' (temp 4-component vector of int) +0:? Constant: +0:? 5 (const int) +0:? 2 (const int) +0:? 3 (const int) +0:? 4 (const int) +0:97 imageStore (temp void) +0:97 'g_tTex2di4' (layout(rgba32i ) uniform iimage2D) +0:97 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:97 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:97 Constant: +0:97 1 (const uint) +0:97 'storeTemp' (temp 4-component vector of int) +0:97 'storeTemp' (temp 4-component vector of int) +0:98 Sequence +0:98 move second child to first child (temp 4-component vector of uint) +0:98 'storeTemp' (temp 4-component vector of uint) +0:? Constant: +0:? 6 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:98 imageStore (temp void) +0:98 'g_tTex2du4' (layout(rgba32ui ) uniform uimage2D) +0:98 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:98 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:98 Constant: +0:98 1 (const uint) +0:98 'storeTemp' (temp 4-component vector of uint) +0:98 'storeTemp' (temp 4-component vector of uint) +0:101 Sequence +0:101 move second child to first child (temp 4-component vector of float) +0:101 'storeTemp' (temp 4-component vector of float) +0:101 Function Call: SomeValue( (temp 4-component vector of float) +0:101 imageStore (temp void) +0:101 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:101 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:101 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:101 Constant: +0:101 2 (const uint) +0:101 'storeTemp' (temp 4-component vector of float) +0:101 'storeTemp' (temp 4-component vector of float) +0:102 Sequence +0:102 imageStore (temp void) +0:102 'g_tTex3df4' (layout(rgba32f ) uniform image3D) +0:102 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:102 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:102 Constant: +0:102 2 (const uint) +0:102 'lf4' (temp 4-component vector of float) +0:102 'lf4' (temp 4-component vector of float) +0:103 Sequence +0:103 move second child to first child (temp 4-component vector of int) +0:103 'storeTemp' (temp 4-component vector of int) +0:? Constant: +0:? 8 (const int) +0:? 6 (const int) +0:? 7 (const int) +0:? 8 (const int) +0:103 imageStore (temp void) +0:103 'g_tTex3di4' (layout(rgba32i ) uniform iimage3D) +0:103 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:103 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:103 Constant: +0:103 2 (const uint) +0:103 'storeTemp' (temp 4-component vector of int) +0:103 'storeTemp' (temp 4-component vector of int) +0:104 Sequence +0:104 move second child to first child (temp 4-component vector of uint) +0:104 'storeTemp' (temp 4-component vector of uint) +0:? Constant: +0:? 9 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:104 imageStore (temp void) +0:104 'g_tTex3du4' (layout(rgba32ui ) uniform uimage3D) +0:104 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:104 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:104 Constant: +0:104 2 (const uint) +0:104 'storeTemp' (temp 4-component vector of uint) +0:104 'storeTemp' (temp 4-component vector of uint) +0:107 Function Call: Fn1(vf4; (temp 4-component vector of float) +0:107 imageLoad (temp 4-component vector of float) +0:107 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:107 c1: direct index for structure (layout(offset=0 ) uniform int) +0:107 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:107 Constant: +0:107 0 (const uint) +0:108 Function Call: Fn1(vi4; (temp 4-component vector of int) +0:108 imageLoad (temp 4-component vector of int) +0:108 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:108 c1: direct index for structure (layout(offset=0 ) uniform int) +0:108 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:108 Constant: +0:108 0 (const uint) +0:109 Function Call: Fn1(vu4; (temp 4-component vector of uint) +0:109 imageLoad (temp 4-component vector of uint) +0:109 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:109 c1: direct index for structure (layout(offset=0 ) uniform int) +0:109 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:109 Constant: +0:109 0 (const uint) +0:111 Comma (temp void) +0:111 Function Call: Fn2(vf4; (temp void) +0:111 'tempArg' (temp 4-component vector of float) +0:111 Sequence +0:111 imageStore (temp void) +0:111 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:111 c1: direct index for structure (layout(offset=0 ) uniform int) +0:111 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:111 Constant: +0:111 0 (const uint) +0:111 'tempArg' (temp 4-component vector of float) +0:111 'tempArg' (temp 4-component vector of float) +0:112 Comma (temp void) +0:112 Function Call: Fn2(vi4; (temp void) +0:112 'tempArg' (temp 4-component vector of int) +0:112 Sequence +0:112 imageStore (temp void) +0:112 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:112 c1: direct index for structure (layout(offset=0 ) uniform int) +0:112 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:112 Constant: +0:112 0 (const uint) +0:112 'tempArg' (temp 4-component vector of int) +0:112 'tempArg' (temp 4-component vector of int) +0:113 Comma (temp void) +0:113 Function Call: Fn2(vu4; (temp void) +0:113 'tempArg' (temp 4-component vector of uint) 0:113 Sequence -0:113 move second child to first child (temp 4-component vector of float) -0:? 'Color' (layout(location=0 ) out 4-component vector of float) -0:113 Color: direct index for structure (temp 4-component vector of float) -0:113 'psout' (temp structure{temp 4-component vector of float Color}) +0:113 imageStore (temp void) +0:113 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:113 c1: direct index for structure (layout(offset=0 ) uniform int) +0:113 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:113 Constant: -0:113 0 (const int) -0:113 Branch: Return +0:113 0 (const uint) +0:113 'tempArg' (temp 4-component vector of uint) +0:113 'tempArg' (temp 4-component vector of uint) +0:117 Sequence +0:117 move second child to first child (temp int) +0:117 'coordTemp' (temp int) +0:117 c1: direct index for structure (layout(offset=0 ) uniform int) +0:117 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:117 Constant: +0:117 0 (const uint) +0:117 move second child to first child (temp 4-component vector of float) +0:117 'storeTemp' (temp 4-component vector of float) +0:117 imageLoad (temp 4-component vector of float) +0:117 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:117 'coordTemp' (temp int) +0:117 Pre-Increment (temp 4-component vector of float) +0:117 'storeTemp' (temp 4-component vector of float) +0:117 imageStore (temp void) +0:117 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:117 'coordTemp' (temp int) +0:117 'storeTemp' (temp 4-component vector of float) +0:117 'storeTemp' (temp 4-component vector of float) +0:118 Sequence +0:118 move second child to first child (temp int) +0:118 'coordTemp' (temp int) +0:118 c1: direct index for structure (layout(offset=0 ) uniform int) +0:118 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:118 Constant: +0:118 0 (const uint) +0:118 move second child to first child (temp 4-component vector of int) +0:118 'storeTemp' (temp 4-component vector of int) +0:118 imageLoad (temp 4-component vector of int) +0:118 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:118 'coordTemp' (temp int) +0:118 Pre-Increment (temp 4-component vector of int) +0:118 'storeTemp' (temp 4-component vector of int) +0:118 imageStore (temp void) +0:118 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:118 'coordTemp' (temp int) +0:118 'storeTemp' (temp 4-component vector of int) +0:118 'storeTemp' (temp 4-component vector of int) +0:119 Sequence +0:119 move second child to first child (temp int) +0:119 'coordTemp' (temp int) +0:119 c1: direct index for structure (layout(offset=0 ) uniform int) +0:119 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:119 Constant: +0:119 0 (const uint) +0:119 move second child to first child (temp 4-component vector of uint) +0:119 'storeTemp' (temp 4-component vector of uint) +0:119 imageLoad (temp 4-component vector of uint) +0:119 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:119 'coordTemp' (temp int) +0:119 Pre-Increment (temp 4-component vector of uint) +0:119 'storeTemp' (temp 4-component vector of uint) +0:119 imageStore (temp void) +0:119 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:119 'coordTemp' (temp int) +0:119 'storeTemp' (temp 4-component vector of uint) +0:119 'storeTemp' (temp 4-component vector of uint) +0:121 Sequence +0:121 move second child to first child (temp int) +0:121 'coordTemp' (temp int) +0:121 c1: direct index for structure (layout(offset=0 ) uniform int) +0:121 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:121 Constant: +0:121 0 (const uint) +0:121 move second child to first child (temp 4-component vector of float) +0:121 'storeTemp' (temp 4-component vector of float) +0:121 imageLoad (temp 4-component vector of float) +0:121 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:121 'coordTemp' (temp int) +0:121 Pre-Decrement (temp 4-component vector of float) +0:121 'storeTemp' (temp 4-component vector of float) +0:121 imageStore (temp void) +0:121 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:121 'coordTemp' (temp int) +0:121 'storeTemp' (temp 4-component vector of float) +0:121 'storeTemp' (temp 4-component vector of float) +0:122 Sequence +0:122 move second child to first child (temp int) +0:122 'coordTemp' (temp int) +0:122 c1: direct index for structure (layout(offset=0 ) uniform int) +0:122 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:122 Constant: +0:122 0 (const uint) +0:122 move second child to first child (temp 4-component vector of int) +0:122 'storeTemp' (temp 4-component vector of int) +0:122 imageLoad (temp 4-component vector of int) +0:122 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:122 'coordTemp' (temp int) +0:122 Pre-Decrement (temp 4-component vector of int) +0:122 'storeTemp' (temp 4-component vector of int) +0:122 imageStore (temp void) +0:122 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:122 'coordTemp' (temp int) +0:122 'storeTemp' (temp 4-component vector of int) +0:122 'storeTemp' (temp 4-component vector of int) +0:123 Sequence +0:123 move second child to first child (temp int) +0:123 'coordTemp' (temp int) +0:123 c1: direct index for structure (layout(offset=0 ) uniform int) +0:123 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:123 Constant: +0:123 0 (const uint) +0:123 move second child to first child (temp 4-component vector of uint) +0:123 'storeTemp' (temp 4-component vector of uint) +0:123 imageLoad (temp 4-component vector of uint) +0:123 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:123 'coordTemp' (temp int) +0:123 Pre-Decrement (temp 4-component vector of uint) +0:123 'storeTemp' (temp 4-component vector of uint) +0:123 imageStore (temp void) +0:123 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:123 'coordTemp' (temp int) +0:123 'storeTemp' (temp 4-component vector of uint) +0:123 'storeTemp' (temp 4-component vector of uint) +0:126 Sequence +0:126 move second child to first child (temp int) +0:126 'coordTemp' (temp int) +0:126 c1: direct index for structure (layout(offset=0 ) uniform int) +0:126 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:126 Constant: +0:126 0 (const uint) +0:126 move second child to first child (temp 4-component vector of float) +0:126 'storeTempPre' (temp 4-component vector of float) +0:126 imageLoad (temp 4-component vector of float) +0:126 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:126 'coordTemp' (temp int) +0:126 move second child to first child (temp 4-component vector of float) +0:126 'storeTempPost' (temp 4-component vector of float) +0:126 'storeTempPre' (temp 4-component vector of float) +0:126 Post-Increment (temp 4-component vector of float) +0:126 'storeTempPost' (temp 4-component vector of float) +0:126 imageStore (temp void) +0:126 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:126 'coordTemp' (temp int) +0:126 'storeTempPost' (temp 4-component vector of float) +0:126 'storeTempPre' (temp 4-component vector of float) +0:127 Sequence +0:127 move second child to first child (temp int) +0:127 'coordTemp' (temp int) +0:127 c1: direct index for structure (layout(offset=0 ) uniform int) +0:127 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:127 Constant: +0:127 0 (const uint) +0:127 move second child to first child (temp 4-component vector of uint) +0:127 'storeTempPre' (temp 4-component vector of uint) +0:127 imageLoad (temp 4-component vector of uint) +0:127 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:127 'coordTemp' (temp int) +0:127 move second child to first child (temp 4-component vector of uint) +0:127 'storeTempPost' (temp 4-component vector of uint) +0:127 'storeTempPre' (temp 4-component vector of uint) +0:127 Post-Decrement (temp 4-component vector of uint) +0:127 'storeTempPost' (temp 4-component vector of uint) +0:127 imageStore (temp void) +0:127 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:127 'coordTemp' (temp int) +0:127 'storeTempPost' (temp 4-component vector of uint) +0:127 'storeTempPre' (temp 4-component vector of uint) +0:128 Sequence +0:128 move second child to first child (temp int) +0:128 'coordTemp' (temp int) +0:128 c1: direct index for structure (layout(offset=0 ) uniform int) +0:128 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:128 Constant: +0:128 0 (const uint) +0:128 move second child to first child (temp 4-component vector of int) +0:128 'storeTempPre' (temp 4-component vector of int) +0:128 imageLoad (temp 4-component vector of int) +0:128 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:128 'coordTemp' (temp int) +0:128 move second child to first child (temp 4-component vector of int) +0:128 'storeTempPost' (temp 4-component vector of int) +0:128 'storeTempPre' (temp 4-component vector of int) +0:128 Post-Increment (temp 4-component vector of int) +0:128 'storeTempPost' (temp 4-component vector of int) +0:128 imageStore (temp void) +0:128 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:128 'coordTemp' (temp int) +0:128 'storeTempPost' (temp 4-component vector of int) +0:128 'storeTempPre' (temp 4-component vector of int) +0:130 Sequence +0:130 move second child to first child (temp int) +0:130 'coordTemp' (temp int) +0:130 c1: direct index for structure (layout(offset=0 ) uniform int) +0:130 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:130 Constant: +0:130 0 (const uint) +0:130 move second child to first child (temp 4-component vector of float) +0:130 'storeTempPre' (temp 4-component vector of float) +0:130 imageLoad (temp 4-component vector of float) +0:130 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:130 'coordTemp' (temp int) +0:130 move second child to first child (temp 4-component vector of float) +0:130 'storeTempPost' (temp 4-component vector of float) +0:130 'storeTempPre' (temp 4-component vector of float) +0:130 Post-Decrement (temp 4-component vector of float) +0:130 'storeTempPost' (temp 4-component vector of float) +0:130 imageStore (temp void) +0:130 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:130 'coordTemp' (temp int) +0:130 'storeTempPost' (temp 4-component vector of float) +0:130 'storeTempPre' (temp 4-component vector of float) +0:131 Sequence +0:131 move second child to first child (temp int) +0:131 'coordTemp' (temp int) +0:131 c1: direct index for structure (layout(offset=0 ) uniform int) +0:131 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:131 Constant: +0:131 0 (const uint) +0:131 move second child to first child (temp 4-component vector of int) +0:131 'storeTempPre' (temp 4-component vector of int) +0:131 imageLoad (temp 4-component vector of int) +0:131 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:131 'coordTemp' (temp int) +0:131 move second child to first child (temp 4-component vector of int) +0:131 'storeTempPost' (temp 4-component vector of int) +0:131 'storeTempPre' (temp 4-component vector of int) +0:131 Post-Increment (temp 4-component vector of int) +0:131 'storeTempPost' (temp 4-component vector of int) +0:131 imageStore (temp void) +0:131 'g_tTex1di4' (layout(rgba32i ) uniform iimage1D) +0:131 'coordTemp' (temp int) +0:131 'storeTempPost' (temp 4-component vector of int) +0:131 'storeTempPre' (temp 4-component vector of int) +0:132 Sequence +0:132 move second child to first child (temp int) +0:132 'coordTemp' (temp int) +0:132 c1: direct index for structure (layout(offset=0 ) uniform int) +0:132 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) +0:132 Constant: +0:132 0 (const uint) +0:132 move second child to first child (temp 4-component vector of uint) +0:132 'storeTempPre' (temp 4-component vector of uint) +0:132 imageLoad (temp 4-component vector of uint) +0:132 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:132 'coordTemp' (temp int) +0:132 move second child to first child (temp 4-component vector of uint) +0:132 'storeTempPost' (temp 4-component vector of uint) +0:132 'storeTempPre' (temp 4-component vector of uint) +0:132 Post-Decrement (temp 4-component vector of uint) +0:132 'storeTempPost' (temp 4-component vector of uint) +0:132 imageStore (temp void) +0:132 'g_tTex1du4' (layout(rgba32ui ) uniform uimage1D) +0:132 'coordTemp' (temp int) +0:132 'storeTempPost' (temp 4-component vector of uint) +0:132 'storeTempPre' (temp 4-component vector of uint) +0:134 move second child to first child (temp 4-component vector of float) +0:134 Color: direct index for structure (temp 4-component vector of float) +0:134 'psout' (temp structure{temp 4-component vector of float Color}) +0:134 Constant: +0:134 0 (const int) +0:134 Constant: +0:134 1.000000 +0:134 1.000000 +0:134 1.000000 +0:134 1.000000 +0:136 Sequence +0:136 Sequence +0:136 move second child to first child (temp 4-component vector of float) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) +0:136 Color: direct index for structure (temp 4-component vector of float) +0:136 'psout' (temp structure{temp 4-component vector of float Color}) +0:136 Constant: +0:136 0 (const int) +0:136 Branch: Return 0:? Linker Objects 0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) 0:? 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) @@ -408,18 +1706,18 @@ gl_FragCoord origin is upper left 0:? 'g_tTex2df4a' (layout(rgba32f ) uniform image2DArray) 0:? 'g_tTex2di4a' (layout(rgba32i ) uniform iimage2DArray) 0:? 'g_tTex2du4a' (layout(rgba32ui ) uniform uimage2DArray) -0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4, layout(offset=96 ) uniform 4-component vector of float uf4, layout(offset=112 ) uniform 4-component vector of int ui4, layout(offset=128 ) uniform 4-component vector of uint uu4}) 0:? 'Color' (layout(location=0 ) out 4-component vector of float) // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 190 +// Id's are bound by 596 Capability Shader Capability Sampled1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 165 + EntryPoint Fragment 4 "main" 571 ExecutionMode 4 OriginUpperLeft Name 4 "main" Name 11 "Fn1(vi4;" @@ -434,77 +1732,149 @@ gl_FragCoord origin is upper left Name 32 "x" Name 37 "Fn2(vf4;" Name 36 "x" - Name 56 "g_tTex1df4" - Name 60 "$Global" - MemberName 60($Global) 0 "c1" - MemberName 60($Global) 1 "c2" - MemberName 60($Global) 2 "c3" - MemberName 60($Global) 3 "c4" - MemberName 60($Global) 4 "o1" - MemberName 60($Global) 5 "o2" - MemberName 60($Global) 6 "o3" - MemberName 60($Global) 7 "o4" - Name 62 "" - Name 67 "r00" - Name 72 "r01" - Name 75 "g_tTex1di4" - Name 80 "r02" - Name 83 "g_tTex1du4" - Name 88 "r10" - Name 91 "g_tTex2df4" - Name 98 "r11" - Name 101 "g_tTex2di4" - Name 106 "r12" - Name 109 "g_tTex2du4" - Name 114 "r20" - Name 117 "g_tTex3df4" - Name 124 "r21" - Name 127 "g_tTex3di4" - Name 132 "r22" - Name 135 "g_tTex3du4" - Name 144 "param" - Name 150 "param" - Name 156 "param" - Name 158 "PS_OUTPUT" - MemberName 158(PS_OUTPUT) 0 "Color" - Name 160 "psout" - Name 165 "Color" - Name 171 "g_sSamp" - Name 174 "g_tTex1df4a" - Name 177 "g_tTex1di4a" - Name 180 "g_tTex1du4a" - Name 183 "g_tTex2df4a" - Name 186 "g_tTex2di4a" - Name 189 "g_tTex2du4a" - Decorate 56(g_tTex1df4) DescriptorSet 0 - Decorate 56(g_tTex1df4) Binding 0 - MemberDecorate 60($Global) 0 Offset 0 - MemberDecorate 60($Global) 1 Offset 8 - MemberDecorate 60($Global) 2 Offset 16 - MemberDecorate 60($Global) 3 Offset 32 - MemberDecorate 60($Global) 4 Offset 48 - MemberDecorate 60($Global) 5 Offset 56 - MemberDecorate 60($Global) 6 Offset 64 - MemberDecorate 60($Global) 7 Offset 80 - Decorate 60($Global) Block - Decorate 62 DescriptorSet 0 - Decorate 75(g_tTex1di4) DescriptorSet 0 - Decorate 83(g_tTex1du4) DescriptorSet 0 - Decorate 91(g_tTex2df4) DescriptorSet 0 - Decorate 101(g_tTex2di4) DescriptorSet 0 - Decorate 109(g_tTex2du4) DescriptorSet 0 - Decorate 117(g_tTex3df4) DescriptorSet 0 - Decorate 127(g_tTex3di4) DescriptorSet 0 - Decorate 135(g_tTex3du4) DescriptorSet 0 - Decorate 165(Color) Location 0 - Decorate 171(g_sSamp) DescriptorSet 0 - Decorate 171(g_sSamp) Binding 0 - Decorate 174(g_tTex1df4a) DescriptorSet 0 - Decorate 177(g_tTex1di4a) DescriptorSet 0 - Decorate 180(g_tTex1du4a) DescriptorSet 0 - Decorate 183(g_tTex2df4a) DescriptorSet 0 - Decorate 186(g_tTex2di4a) DescriptorSet 0 - Decorate 189(g_tTex2du4a) DescriptorSet 0 + Name 40 "SomeValue(" + Name 59 "$Global" + MemberName 59($Global) 0 "c1" + MemberName 59($Global) 1 "c2" + MemberName 59($Global) 2 "c3" + MemberName 59($Global) 3 "c4" + MemberName 59($Global) 4 "o1" + MemberName 59($Global) 5 "o2" + MemberName 59($Global) 6 "o3" + MemberName 59($Global) 7 "o4" + MemberName 59($Global) 8 "uf4" + MemberName 59($Global) 9 "ui4" + MemberName 59($Global) 10 "uu4" + Name 61 "" + Name 71 "g_tTex1df4" + Name 77 "r00" + Name 82 "r01" + Name 85 "g_tTex1di4" + Name 90 "r02" + Name 93 "g_tTex1du4" + Name 98 "r10" + Name 101 "g_tTex2df4" + Name 108 "r11" + Name 111 "g_tTex2di4" + Name 116 "r12" + Name 119 "g_tTex2du4" + Name 124 "r20" + Name 127 "g_tTex3df4" + Name 134 "r21" + Name 137 "g_tTex3di4" + Name 142 "r22" + Name 145 "g_tTex3du4" + Name 150 "lf4" + Name 155 "storeTemp" + Name 165 "storeTemp" + Name 172 "storeTemp" + Name 181 "val1" + Name 183 "coordTemp" + Name 186 "storeTemp" + Name 197 "coordTemp" + Name 200 "storeTemp" + Name 211 "coordTemp" + Name 214 "storeTemp" + Name 225 "coordTemp" + Name 228 "storeTemp" + Name 238 "coordTemp" + Name 241 "storeTemp" + Name 251 "coordTemp" + Name 254 "storeTemp" + Name 265 "coordTemp" + Name 268 "storeTemp" + Name 279 "coordTemp" + Name 282 "storeTemp" + Name 292 "coordTemp" + Name 295 "storeTemp" + Name 305 "storeTemp" + Name 315 "storeTemp" + Name 322 "storeTemp" + Name 329 "storeTemp" + Name 339 "storeTemp" + Name 347 "storeTemp" + Name 358 "param" + Name 364 "param" + Name 370 "param" + Name 372 "tempArg" + Name 373 "param" + Name 380 "tempArg" + Name 381 "param" + Name 388 "tempArg" + Name 389 "param" + Name 396 "coordTemp" + Name 399 "storeTemp" + Name 410 "coordTemp" + Name 413 "storeTemp" + Name 423 "coordTemp" + Name 426 "storeTemp" + Name 436 "coordTemp" + Name 439 "storeTemp" + Name 449 "coordTemp" + Name 452 "storeTemp" + Name 462 "coordTemp" + Name 465 "storeTemp" + Name 475 "coordTemp" + Name 478 "storeTempPre" + Name 482 "storeTempPost" + Name 490 "coordTemp" + Name 493 "storeTempPre" + Name 497 "storeTempPost" + Name 505 "coordTemp" + Name 508 "storeTempPre" + Name 512 "storeTempPost" + Name 520 "coordTemp" + Name 523 "storeTempPre" + Name 527 "storeTempPost" + Name 535 "coordTemp" + Name 538 "storeTempPre" + Name 542 "storeTempPost" + Name 550 "coordTemp" + Name 553 "storeTempPre" + Name 557 "storeTempPost" + Name 565 "PS_OUTPUT" + MemberName 565(PS_OUTPUT) 0 "Color" + Name 567 "psout" + Name 571 "Color" + Name 577 "g_sSamp" + Name 580 "g_tTex1df4a" + Name 583 "g_tTex1di4a" + Name 586 "g_tTex1du4a" + Name 589 "g_tTex2df4a" + Name 592 "g_tTex2di4a" + Name 595 "g_tTex2du4a" + MemberDecorate 59($Global) 0 Offset 0 + MemberDecorate 59($Global) 1 Offset 8 + MemberDecorate 59($Global) 2 Offset 16 + MemberDecorate 59($Global) 3 Offset 32 + MemberDecorate 59($Global) 4 Offset 48 + MemberDecorate 59($Global) 5 Offset 56 + MemberDecorate 59($Global) 6 Offset 64 + MemberDecorate 59($Global) 7 Offset 80 + MemberDecorate 59($Global) 8 Offset 96 + MemberDecorate 59($Global) 9 Offset 112 + MemberDecorate 59($Global) 10 Offset 128 + Decorate 59($Global) Block + Decorate 61 DescriptorSet 0 + Decorate 71(g_tTex1df4) DescriptorSet 0 + Decorate 71(g_tTex1df4) Binding 0 + Decorate 85(g_tTex1di4) DescriptorSet 0 + Decorate 93(g_tTex1du4) DescriptorSet 0 + Decorate 101(g_tTex2df4) DescriptorSet 0 + Decorate 111(g_tTex2di4) DescriptorSet 0 + Decorate 119(g_tTex2du4) DescriptorSet 0 + Decorate 127(g_tTex3df4) DescriptorSet 0 + Decorate 137(g_tTex3di4) DescriptorSet 0 + Decorate 145(g_tTex3du4) DescriptorSet 0 + Decorate 571(Color) Location 0 + Decorate 577(g_sSamp) DescriptorSet 0 + Decorate 577(g_sSamp) Binding 0 + Decorate 580(g_tTex1df4a) DescriptorSet 0 + Decorate 583(g_tTex1di4a) DescriptorSet 0 + Decorate 586(g_tTex1du4a) DescriptorSet 0 + Decorate 589(g_tTex2df4a) DescriptorSet 0 + Decorate 592(g_tTex2di4a) DescriptorSet 0 + Decorate 595(g_tTex2du4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -522,198 +1892,723 @@ gl_FragCoord origin is upper left 27: TypeFunction 2 8(ptr) 31: TypeFunction 2 15(ptr) 35: TypeFunction 2 22(ptr) - 48: 6(int) Constant 0 - 49: 7(ivec4) ConstantComposite 48 48 48 48 - 50: 13(int) Constant 0 - 51: 14(ivec4) ConstantComposite 50 50 50 50 - 52: 20(float) Constant 0 - 53: 21(fvec4) ConstantComposite 52 52 52 52 - 54: TypeImage 20(float) 1D nonsampled format:Rgba32f - 55: TypePointer UniformConstant 54 - 56(g_tTex1df4): 55(ptr) Variable UniformConstant - 58: TypeVector 6(int) 2 - 59: TypeVector 6(int) 3 - 60($Global): TypeStruct 6(int) 58(ivec2) 59(ivec3) 7(ivec4) 6(int) 58(ivec2) 59(ivec3) 7(ivec4) - 61: TypePointer Uniform 60($Global) - 62: 61(ptr) Variable Uniform - 63: TypePointer Uniform 6(int) - 73: TypeImage 6(int) 1D nonsampled format:Rgba32i - 74: TypePointer UniformConstant 73 - 75(g_tTex1di4): 74(ptr) Variable UniformConstant - 81: TypeImage 13(int) 1D nonsampled format:Rgba32ui - 82: TypePointer UniformConstant 81 - 83(g_tTex1du4): 82(ptr) Variable UniformConstant - 89: TypeImage 20(float) 2D nonsampled format:Rgba32f - 90: TypePointer UniformConstant 89 - 91(g_tTex2df4): 90(ptr) Variable UniformConstant - 93: 6(int) Constant 1 - 94: TypePointer Uniform 58(ivec2) - 99: TypeImage 6(int) 2D nonsampled format:Rgba32i + 39: TypeFunction 21(fvec4) + 51: 6(int) Constant 0 + 52: 7(ivec4) ConstantComposite 51 51 51 51 + 53: 13(int) Constant 0 + 54: 14(ivec4) ConstantComposite 53 53 53 53 + 55: 20(float) Constant 0 + 56: 21(fvec4) ConstantComposite 55 55 55 55 + 57: TypeVector 6(int) 2 + 58: TypeVector 6(int) 3 + 59($Global): TypeStruct 6(int) 57(ivec2) 58(ivec3) 7(ivec4) 6(int) 57(ivec2) 58(ivec3) 7(ivec4) 21(fvec4) 7(ivec4) 14(ivec4) + 60: TypePointer Uniform 59($Global) + 61: 60(ptr) Variable Uniform + 62: 6(int) Constant 3 + 63: TypePointer Uniform 7(ivec4) + 69: TypeImage 20(float) 1D nonsampled format:Rgba32f + 70: TypePointer UniformConstant 69 + 71(g_tTex1df4): 70(ptr) Variable UniformConstant + 73: TypePointer Uniform 6(int) + 83: TypeImage 6(int) 1D nonsampled format:Rgba32i + 84: TypePointer UniformConstant 83 + 85(g_tTex1di4): 84(ptr) Variable UniformConstant + 91: TypeImage 13(int) 1D nonsampled format:Rgba32ui + 92: TypePointer UniformConstant 91 + 93(g_tTex1du4): 92(ptr) Variable UniformConstant + 99: TypeImage 20(float) 2D nonsampled format:Rgba32f 100: TypePointer UniformConstant 99 - 101(g_tTex2di4): 100(ptr) Variable UniformConstant - 107: TypeImage 13(int) 2D nonsampled format:Rgba32ui - 108: TypePointer UniformConstant 107 - 109(g_tTex2du4): 108(ptr) Variable UniformConstant - 115: TypeImage 20(float) 3D nonsampled format:Rgba32f - 116: TypePointer UniformConstant 115 - 117(g_tTex3df4): 116(ptr) Variable UniformConstant - 119: 6(int) Constant 2 - 120: TypePointer Uniform 59(ivec3) - 125: TypeImage 6(int) 3D nonsampled format:Rgba32i + 101(g_tTex2df4): 100(ptr) Variable UniformConstant + 103: 6(int) Constant 1 + 104: TypePointer Uniform 57(ivec2) + 109: TypeImage 6(int) 2D nonsampled format:Rgba32i + 110: TypePointer UniformConstant 109 + 111(g_tTex2di4): 110(ptr) Variable UniformConstant + 117: TypeImage 13(int) 2D nonsampled format:Rgba32ui + 118: TypePointer UniformConstant 117 + 119(g_tTex2du4): 118(ptr) Variable UniformConstant + 125: TypeImage 20(float) 3D nonsampled format:Rgba32f 126: TypePointer UniformConstant 125 - 127(g_tTex3di4): 126(ptr) Variable UniformConstant - 133: TypeImage 13(int) 3D nonsampled format:Rgba32ui - 134: TypePointer UniformConstant 133 - 135(g_tTex3du4): 134(ptr) Variable UniformConstant - 158(PS_OUTPUT): TypeStruct 21(fvec4) - 159: TypePointer Function 158(PS_OUTPUT) - 161: 20(float) Constant 1065353216 - 162: 21(fvec4) ConstantComposite 161 161 161 161 - 164: TypePointer Output 21(fvec4) - 165(Color): 164(ptr) Variable Output - 169: TypeSampler - 170: TypePointer UniformConstant 169 - 171(g_sSamp): 170(ptr) Variable UniformConstant - 172: TypeImage 20(float) 1D array nonsampled format:Rgba32f - 173: TypePointer UniformConstant 172 -174(g_tTex1df4a): 173(ptr) Variable UniformConstant - 175: TypeImage 6(int) 1D array nonsampled format:Rgba32i - 176: TypePointer UniformConstant 175 -177(g_tTex1di4a): 176(ptr) Variable UniformConstant - 178: TypeImage 13(int) 1D array nonsampled format:Rgba32ui - 179: TypePointer UniformConstant 178 -180(g_tTex1du4a): 179(ptr) Variable UniformConstant - 181: TypeImage 20(float) 2D array nonsampled format:Rgba32f - 182: TypePointer UniformConstant 181 -183(g_tTex2df4a): 182(ptr) Variable UniformConstant - 184: TypeImage 6(int) 2D array nonsampled format:Rgba32i - 185: TypePointer UniformConstant 184 -186(g_tTex2di4a): 185(ptr) Variable UniformConstant - 187: TypeImage 13(int) 2D array nonsampled format:Rgba32ui - 188: TypePointer UniformConstant 187 -189(g_tTex2du4a): 188(ptr) Variable UniformConstant + 127(g_tTex3df4): 126(ptr) Variable UniformConstant + 129: 6(int) Constant 2 + 130: TypePointer Uniform 58(ivec3) + 135: TypeImage 6(int) 3D nonsampled format:Rgba32i + 136: TypePointer UniformConstant 135 + 137(g_tTex3di4): 136(ptr) Variable UniformConstant + 143: TypeImage 13(int) 3D nonsampled format:Rgba32ui + 144: TypePointer UniformConstant 143 + 145(g_tTex3du4): 144(ptr) Variable UniformConstant + 151: 6(int) Constant 8 + 152: TypePointer Uniform 21(fvec4) + 166: 6(int) Constant 4 + 167: 7(ivec4) ConstantComposite 129 129 62 166 + 173: 13(int) Constant 3 + 174: 13(int) Constant 2 + 175: 13(int) Constant 4 + 176: 14(ivec4) ConstantComposite 173 174 173 175 + 182: TypePointer Function 6(int) + 190: 20(float) Constant 1073741824 + 204: 20(float) Constant 1077936128 + 218: 20(float) Constant 1082130432 + 258: 6(int) Constant 65535 + 272: 6(int) Constant 61680 + 316: 6(int) Constant 5 + 317: 7(ivec4) ConstantComposite 316 129 62 166 + 323: 13(int) Constant 6 + 324: 14(ivec4) ConstantComposite 323 174 173 175 + 340: 6(int) Constant 6 + 341: 6(int) Constant 7 + 342: 7(ivec4) ConstantComposite 151 340 341 151 + 348: 13(int) Constant 9 + 349: 14(ivec4) ConstantComposite 348 174 173 175 + 404: 20(float) Constant 1065353216 + 565(PS_OUTPUT): TypeStruct 21(fvec4) + 566: TypePointer Function 565(PS_OUTPUT) + 568: 21(fvec4) ConstantComposite 404 404 404 404 + 570: TypePointer Output 21(fvec4) + 571(Color): 570(ptr) Variable Output + 575: TypeSampler + 576: TypePointer UniformConstant 575 + 577(g_sSamp): 576(ptr) Variable UniformConstant + 578: TypeImage 20(float) 1D array nonsampled format:Rgba32f + 579: TypePointer UniformConstant 578 +580(g_tTex1df4a): 579(ptr) Variable UniformConstant + 581: TypeImage 6(int) 1D array nonsampled format:Rgba32i + 582: TypePointer UniformConstant 581 +583(g_tTex1di4a): 582(ptr) Variable UniformConstant + 584: TypeImage 13(int) 1D array nonsampled format:Rgba32ui + 585: TypePointer UniformConstant 584 +586(g_tTex1du4a): 585(ptr) Variable UniformConstant + 587: TypeImage 20(float) 2D array nonsampled format:Rgba32f + 588: TypePointer UniformConstant 587 +589(g_tTex2df4a): 588(ptr) Variable UniformConstant + 590: TypeImage 6(int) 2D array nonsampled format:Rgba32i + 591: TypePointer UniformConstant 590 +592(g_tTex2di4a): 591(ptr) Variable UniformConstant + 593: TypeImage 13(int) 2D array nonsampled format:Rgba32ui + 594: TypePointer UniformConstant 593 +595(g_tTex2du4a): 594(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label - 67(r00): 22(ptr) Variable Function - 72(r01): 8(ptr) Variable Function - 80(r02): 15(ptr) Variable Function - 88(r10): 22(ptr) Variable Function - 98(r11): 8(ptr) Variable Function - 106(r12): 15(ptr) Variable Function - 114(r20): 22(ptr) Variable Function - 124(r21): 8(ptr) Variable Function - 132(r22): 15(ptr) Variable Function - 144(param): 22(ptr) Variable Function - 150(param): 8(ptr) Variable Function - 156(param): 15(ptr) Variable Function - 160(psout): 159(ptr) Variable Function - 57: 54 Load 56(g_tTex1df4) - 64: 63(ptr) AccessChain 62 48 - 65: 6(int) Load 64 - 66: 21(fvec4) ImageRead 57 65 - 68: 54 Load 56(g_tTex1df4) - 69: 63(ptr) AccessChain 62 48 - 70: 6(int) Load 69 - 71: 21(fvec4) ImageRead 68 70 - Store 67(r00) 71 - 76: 73 Load 75(g_tTex1di4) - 77: 63(ptr) AccessChain 62 48 - 78: 6(int) Load 77 - 79: 7(ivec4) ImageRead 76 78 - Store 72(r01) 79 - 84: 81 Load 83(g_tTex1du4) - 85: 63(ptr) AccessChain 62 48 - 86: 6(int) Load 85 - 87: 14(ivec4) ImageRead 84 86 - Store 80(r02) 87 - 92: 89 Load 91(g_tTex2df4) - 95: 94(ptr) AccessChain 62 93 - 96: 58(ivec2) Load 95 - 97: 21(fvec4) ImageRead 92 96 - Store 88(r10) 97 - 102: 99 Load 101(g_tTex2di4) - 103: 94(ptr) AccessChain 62 93 - 104: 58(ivec2) Load 103 - 105: 7(ivec4) ImageRead 102 104 - Store 98(r11) 105 - 110: 107 Load 109(g_tTex2du4) - 111: 94(ptr) AccessChain 62 93 - 112: 58(ivec2) Load 111 - 113: 14(ivec4) ImageRead 110 112 - Store 106(r12) 113 - 118: 115 Load 117(g_tTex3df4) - 121: 120(ptr) AccessChain 62 119 - 122: 59(ivec3) Load 121 - 123: 21(fvec4) ImageRead 118 122 - Store 114(r20) 123 - 128: 125 Load 127(g_tTex3di4) - 129: 120(ptr) AccessChain 62 119 - 130: 59(ivec3) Load 129 - 131: 7(ivec4) ImageRead 128 130 - Store 124(r21) 131 - 136: 133 Load 135(g_tTex3du4) - 137: 120(ptr) AccessChain 62 119 - 138: 59(ivec3) Load 137 - 139: 14(ivec4) ImageRead 136 138 - Store 132(r22) 139 - 140: 54 Load 56(g_tTex1df4) - 141: 63(ptr) AccessChain 62 48 - 142: 6(int) Load 141 - 143: 21(fvec4) ImageRead 140 142 - Store 144(param) 143 - 145: 21(fvec4) FunctionCall 25(Fn1(vf4;) 144(param) - 146: 73 Load 75(g_tTex1di4) - 147: 63(ptr) AccessChain 62 48 - 148: 6(int) Load 147 - 149: 7(ivec4) ImageRead 146 148 - Store 150(param) 149 - 151: 7(ivec4) FunctionCall 11(Fn1(vi4;) 150(param) - 152: 81 Load 83(g_tTex1du4) - 153: 63(ptr) AccessChain 62 48 - 154: 6(int) Load 153 - 155: 14(ivec4) ImageRead 152 154 - Store 156(param) 155 - 157: 14(ivec4) FunctionCall 18(Fn1(vu4;) 156(param) - 163: 22(ptr) AccessChain 160(psout) 48 - Store 163 162 - 166: 22(ptr) AccessChain 160(psout) 48 - 167: 21(fvec4) Load 166 - Store 165(Color) 167 + 77(r00): 22(ptr) Variable Function + 82(r01): 8(ptr) Variable Function + 90(r02): 15(ptr) Variable Function + 98(r10): 22(ptr) Variable Function + 108(r11): 8(ptr) Variable Function + 116(r12): 15(ptr) Variable Function + 124(r20): 22(ptr) Variable Function + 134(r21): 8(ptr) Variable Function + 142(r22): 15(ptr) Variable Function + 150(lf4): 22(ptr) Variable Function + 155(storeTemp): 22(ptr) Variable Function + 165(storeTemp): 8(ptr) Variable Function + 172(storeTemp): 15(ptr) Variable Function + 181(val1): 22(ptr) Variable Function + 183(coordTemp): 182(ptr) Variable Function + 186(storeTemp): 22(ptr) Variable Function + 197(coordTemp): 182(ptr) Variable Function + 200(storeTemp): 22(ptr) Variable Function + 211(coordTemp): 182(ptr) Variable Function + 214(storeTemp): 22(ptr) Variable Function + 225(coordTemp): 182(ptr) Variable Function + 228(storeTemp): 8(ptr) Variable Function + 238(coordTemp): 182(ptr) Variable Function + 241(storeTemp): 8(ptr) Variable Function + 251(coordTemp): 182(ptr) Variable Function + 254(storeTemp): 8(ptr) Variable Function + 265(coordTemp): 182(ptr) Variable Function + 268(storeTemp): 8(ptr) Variable Function + 279(coordTemp): 182(ptr) Variable Function + 282(storeTemp): 8(ptr) Variable Function + 292(coordTemp): 182(ptr) Variable Function + 295(storeTemp): 8(ptr) Variable Function + 305(storeTemp): 22(ptr) Variable Function + 315(storeTemp): 8(ptr) Variable Function + 322(storeTemp): 15(ptr) Variable Function + 329(storeTemp): 22(ptr) Variable Function + 339(storeTemp): 8(ptr) Variable Function + 347(storeTemp): 15(ptr) Variable Function + 358(param): 22(ptr) Variable Function + 364(param): 8(ptr) Variable Function + 370(param): 15(ptr) Variable Function + 372(tempArg): 22(ptr) Variable Function + 373(param): 22(ptr) Variable Function + 380(tempArg): 8(ptr) Variable Function + 381(param): 8(ptr) Variable Function + 388(tempArg): 15(ptr) Variable Function + 389(param): 15(ptr) Variable Function + 396(coordTemp): 182(ptr) Variable Function + 399(storeTemp): 22(ptr) Variable Function + 410(coordTemp): 182(ptr) Variable Function + 413(storeTemp): 8(ptr) Variable Function + 423(coordTemp): 182(ptr) Variable Function + 426(storeTemp): 15(ptr) Variable Function + 436(coordTemp): 182(ptr) Variable Function + 439(storeTemp): 22(ptr) Variable Function + 449(coordTemp): 182(ptr) Variable Function + 452(storeTemp): 8(ptr) Variable Function + 462(coordTemp): 182(ptr) Variable Function + 465(storeTemp): 15(ptr) Variable Function + 475(coordTemp): 182(ptr) Variable Function +478(storeTempPre): 22(ptr) Variable Function +482(storeTempPost): 22(ptr) Variable Function + 490(coordTemp): 182(ptr) Variable Function +493(storeTempPre): 15(ptr) Variable Function +497(storeTempPost): 15(ptr) Variable Function + 505(coordTemp): 182(ptr) Variable Function +508(storeTempPre): 8(ptr) Variable Function +512(storeTempPost): 8(ptr) Variable Function + 520(coordTemp): 182(ptr) Variable Function +523(storeTempPre): 22(ptr) Variable Function +527(storeTempPost): 22(ptr) Variable Function + 535(coordTemp): 182(ptr) Variable Function +538(storeTempPre): 8(ptr) Variable Function +542(storeTempPost): 8(ptr) Variable Function + 550(coordTemp): 182(ptr) Variable Function +553(storeTempPre): 15(ptr) Variable Function +557(storeTempPost): 15(ptr) Variable Function + 567(psout): 566(ptr) Variable Function + 72: 69 Load 71(g_tTex1df4) + 74: 73(ptr) AccessChain 61 51 + 75: 6(int) Load 74 + 76: 21(fvec4) ImageRead 72 75 + 78: 69 Load 71(g_tTex1df4) + 79: 73(ptr) AccessChain 61 51 + 80: 6(int) Load 79 + 81: 21(fvec4) ImageRead 78 80 + Store 77(r00) 81 + 86: 83 Load 85(g_tTex1di4) + 87: 73(ptr) AccessChain 61 51 + 88: 6(int) Load 87 + 89: 7(ivec4) ImageRead 86 88 + Store 82(r01) 89 + 94: 91 Load 93(g_tTex1du4) + 95: 73(ptr) AccessChain 61 51 + 96: 6(int) Load 95 + 97: 14(ivec4) ImageRead 94 96 + Store 90(r02) 97 + 102: 99 Load 101(g_tTex2df4) + 105: 104(ptr) AccessChain 61 103 + 106: 57(ivec2) Load 105 + 107: 21(fvec4) ImageRead 102 106 + Store 98(r10) 107 + 112: 109 Load 111(g_tTex2di4) + 113: 104(ptr) AccessChain 61 103 + 114: 57(ivec2) Load 113 + 115: 7(ivec4) ImageRead 112 114 + Store 108(r11) 115 + 120: 117 Load 119(g_tTex2du4) + 121: 104(ptr) AccessChain 61 103 + 122: 57(ivec2) Load 121 + 123: 14(ivec4) ImageRead 120 122 + Store 116(r12) 123 + 128: 125 Load 127(g_tTex3df4) + 131: 130(ptr) AccessChain 61 129 + 132: 58(ivec3) Load 131 + 133: 21(fvec4) ImageRead 128 132 + Store 124(r20) 133 + 138: 135 Load 137(g_tTex3di4) + 139: 130(ptr) AccessChain 61 129 + 140: 58(ivec3) Load 139 + 141: 7(ivec4) ImageRead 138 140 + Store 134(r21) 141 + 146: 143 Load 145(g_tTex3du4) + 147: 130(ptr) AccessChain 61 129 + 148: 58(ivec3) Load 147 + 149: 14(ivec4) ImageRead 146 148 + Store 142(r22) 149 + 153: 152(ptr) AccessChain 61 151 + 154: 21(fvec4) Load 153 + Store 150(lf4) 154 + 156: 21(fvec4) FunctionCall 40(SomeValue() + Store 155(storeTemp) 156 + 157: 69 Load 71(g_tTex1df4) + 158: 73(ptr) AccessChain 61 51 + 159: 6(int) Load 158 + 160: 21(fvec4) Load 155(storeTemp) + ImageWrite 157 159 160 + 161: 69 Load 71(g_tTex1df4) + 162: 73(ptr) AccessChain 61 51 + 163: 6(int) Load 162 + 164: 21(fvec4) Load 150(lf4) + ImageWrite 161 163 164 + Store 165(storeTemp) 167 + 168: 83 Load 85(g_tTex1di4) + 169: 73(ptr) AccessChain 61 51 + 170: 6(int) Load 169 + 171: 7(ivec4) Load 165(storeTemp) + ImageWrite 168 170 171 + Store 172(storeTemp) 176 + 177: 91 Load 93(g_tTex1du4) + 178: 73(ptr) AccessChain 61 51 + 179: 6(int) Load 178 + 180: 14(ivec4) Load 172(storeTemp) + ImageWrite 177 179 180 + 184: 73(ptr) AccessChain 61 51 + 185: 6(int) Load 184 + Store 183(coordTemp) 185 + 187: 69 Load 71(g_tTex1df4) + 188: 6(int) Load 183(coordTemp) + 189: 21(fvec4) ImageRead 187 188 + Store 186(storeTemp) 189 + 191: 21(fvec4) Load 186(storeTemp) + 192: 21(fvec4) VectorTimesScalar 191 190 + Store 186(storeTemp) 192 + 193: 69 Load 71(g_tTex1df4) + 194: 6(int) Load 183(coordTemp) + 195: 21(fvec4) Load 186(storeTemp) + ImageWrite 193 194 195 + 196: 21(fvec4) Load 186(storeTemp) + Store 181(val1) 196 + 198: 73(ptr) AccessChain 61 51 + 199: 6(int) Load 198 + Store 197(coordTemp) 199 + 201: 69 Load 71(g_tTex1df4) + 202: 6(int) Load 197(coordTemp) + 203: 21(fvec4) ImageRead 201 202 + Store 200(storeTemp) 203 + 205: 21(fvec4) Load 200(storeTemp) + 206: 21(fvec4) CompositeConstruct 204 204 204 204 + 207: 21(fvec4) FSub 205 206 + Store 200(storeTemp) 207 + 208: 69 Load 71(g_tTex1df4) + 209: 6(int) Load 197(coordTemp) + 210: 21(fvec4) Load 200(storeTemp) + ImageWrite 208 209 210 + 212: 73(ptr) AccessChain 61 51 + 213: 6(int) Load 212 + Store 211(coordTemp) 213 + 215: 69 Load 71(g_tTex1df4) + 216: 6(int) Load 211(coordTemp) + 217: 21(fvec4) ImageRead 215 216 + Store 214(storeTemp) 217 + 219: 21(fvec4) Load 214(storeTemp) + 220: 21(fvec4) CompositeConstruct 218 218 218 218 + 221: 21(fvec4) FAdd 219 220 + Store 214(storeTemp) 221 + 222: 69 Load 71(g_tTex1df4) + 223: 6(int) Load 211(coordTemp) + 224: 21(fvec4) Load 214(storeTemp) + ImageWrite 222 223 224 + 226: 73(ptr) AccessChain 61 51 + 227: 6(int) Load 226 + Store 225(coordTemp) 227 + 229: 83 Load 85(g_tTex1di4) + 230: 6(int) Load 225(coordTemp) + 231: 7(ivec4) ImageRead 229 230 + Store 228(storeTemp) 231 + 232: 7(ivec4) Load 228(storeTemp) + 233: 7(ivec4) CompositeConstruct 129 129 129 129 + 234: 7(ivec4) SDiv 232 233 + Store 228(storeTemp) 234 + 235: 83 Load 85(g_tTex1di4) + 236: 6(int) Load 225(coordTemp) + 237: 7(ivec4) Load 228(storeTemp) + ImageWrite 235 236 237 + 239: 73(ptr) AccessChain 61 51 + 240: 6(int) Load 239 + Store 238(coordTemp) 240 + 242: 83 Load 85(g_tTex1di4) + 243: 6(int) Load 238(coordTemp) + 244: 7(ivec4) ImageRead 242 243 + Store 241(storeTemp) 244 + 245: 7(ivec4) Load 241(storeTemp) + 246: 7(ivec4) CompositeConstruct 129 129 129 129 + 247: 7(ivec4) SMod 245 246 + Store 241(storeTemp) 247 + 248: 83 Load 85(g_tTex1di4) + 249: 6(int) Load 238(coordTemp) + 250: 7(ivec4) Load 241(storeTemp) + ImageWrite 248 249 250 + 252: 73(ptr) AccessChain 61 51 + 253: 6(int) Load 252 + Store 251(coordTemp) 253 + 255: 83 Load 85(g_tTex1di4) + 256: 6(int) Load 251(coordTemp) + 257: 7(ivec4) ImageRead 255 256 + Store 254(storeTemp) 257 + 259: 7(ivec4) Load 254(storeTemp) + 260: 7(ivec4) CompositeConstruct 258 258 258 258 + 261: 7(ivec4) BitwiseAnd 259 260 + Store 254(storeTemp) 261 + 262: 83 Load 85(g_tTex1di4) + 263: 6(int) Load 251(coordTemp) + 264: 7(ivec4) Load 254(storeTemp) + ImageWrite 262 263 264 + 266: 73(ptr) AccessChain 61 51 + 267: 6(int) Load 266 + Store 265(coordTemp) 267 + 269: 83 Load 85(g_tTex1di4) + 270: 6(int) Load 265(coordTemp) + 271: 7(ivec4) ImageRead 269 270 + Store 268(storeTemp) 271 + 273: 7(ivec4) Load 268(storeTemp) + 274: 7(ivec4) CompositeConstruct 272 272 272 272 + 275: 7(ivec4) BitwiseOr 273 274 + Store 268(storeTemp) 275 + 276: 83 Load 85(g_tTex1di4) + 277: 6(int) Load 265(coordTemp) + 278: 7(ivec4) Load 268(storeTemp) + ImageWrite 276 277 278 + 280: 73(ptr) AccessChain 61 51 + 281: 6(int) Load 280 + Store 279(coordTemp) 281 + 283: 83 Load 85(g_tTex1di4) + 284: 6(int) Load 279(coordTemp) + 285: 7(ivec4) ImageRead 283 284 + Store 282(storeTemp) 285 + 286: 7(ivec4) Load 282(storeTemp) + 287: 7(ivec4) CompositeConstruct 129 129 129 129 + 288: 7(ivec4) ShiftLeftLogical 286 287 + Store 282(storeTemp) 288 + 289: 83 Load 85(g_tTex1di4) + 290: 6(int) Load 279(coordTemp) + 291: 7(ivec4) Load 282(storeTemp) + ImageWrite 289 290 291 + 293: 73(ptr) AccessChain 61 51 + 294: 6(int) Load 293 + Store 292(coordTemp) 294 + 296: 83 Load 85(g_tTex1di4) + 297: 6(int) Load 292(coordTemp) + 298: 7(ivec4) ImageRead 296 297 + Store 295(storeTemp) 298 + 299: 7(ivec4) Load 295(storeTemp) + 300: 7(ivec4) CompositeConstruct 129 129 129 129 + 301: 7(ivec4) ShiftRightArithmetic 299 300 + Store 295(storeTemp) 301 + 302: 83 Load 85(g_tTex1di4) + 303: 6(int) Load 292(coordTemp) + 304: 7(ivec4) Load 295(storeTemp) + ImageWrite 302 303 304 + 306: 21(fvec4) FunctionCall 40(SomeValue() + Store 305(storeTemp) 306 + 307: 99 Load 101(g_tTex2df4) + 308: 104(ptr) AccessChain 61 103 + 309: 57(ivec2) Load 308 + 310: 21(fvec4) Load 305(storeTemp) + ImageWrite 307 309 310 + 311: 99 Load 101(g_tTex2df4) + 312: 104(ptr) AccessChain 61 103 + 313: 57(ivec2) Load 312 + 314: 21(fvec4) Load 150(lf4) + ImageWrite 311 313 314 + Store 315(storeTemp) 317 + 318: 109 Load 111(g_tTex2di4) + 319: 104(ptr) AccessChain 61 103 + 320: 57(ivec2) Load 319 + 321: 7(ivec4) Load 315(storeTemp) + ImageWrite 318 320 321 + Store 322(storeTemp) 324 + 325: 117 Load 119(g_tTex2du4) + 326: 104(ptr) AccessChain 61 103 + 327: 57(ivec2) Load 326 + 328: 14(ivec4) Load 322(storeTemp) + ImageWrite 325 327 328 + 330: 21(fvec4) FunctionCall 40(SomeValue() + Store 329(storeTemp) 330 + 331: 125 Load 127(g_tTex3df4) + 332: 130(ptr) AccessChain 61 129 + 333: 58(ivec3) Load 332 + 334: 21(fvec4) Load 329(storeTemp) + ImageWrite 331 333 334 + 335: 125 Load 127(g_tTex3df4) + 336: 130(ptr) AccessChain 61 129 + 337: 58(ivec3) Load 336 + 338: 21(fvec4) Load 150(lf4) + ImageWrite 335 337 338 + Store 339(storeTemp) 342 + 343: 135 Load 137(g_tTex3di4) + 344: 130(ptr) AccessChain 61 129 + 345: 58(ivec3) Load 344 + 346: 7(ivec4) Load 339(storeTemp) + ImageWrite 343 345 346 + Store 347(storeTemp) 349 + 350: 143 Load 145(g_tTex3du4) + 351: 130(ptr) AccessChain 61 129 + 352: 58(ivec3) Load 351 + 353: 14(ivec4) Load 347(storeTemp) + ImageWrite 350 352 353 + 354: 69 Load 71(g_tTex1df4) + 355: 73(ptr) AccessChain 61 51 + 356: 6(int) Load 355 + 357: 21(fvec4) ImageRead 354 356 + Store 358(param) 357 + 359: 21(fvec4) FunctionCall 25(Fn1(vf4;) 358(param) + 360: 83 Load 85(g_tTex1di4) + 361: 73(ptr) AccessChain 61 51 + 362: 6(int) Load 361 + 363: 7(ivec4) ImageRead 360 362 + Store 364(param) 363 + 365: 7(ivec4) FunctionCall 11(Fn1(vi4;) 364(param) + 366: 91 Load 93(g_tTex1du4) + 367: 73(ptr) AccessChain 61 51 + 368: 6(int) Load 367 + 369: 14(ivec4) ImageRead 366 368 + Store 370(param) 369 + 371: 14(ivec4) FunctionCall 18(Fn1(vu4;) 370(param) + 374: 2 FunctionCall 37(Fn2(vf4;) 373(param) + 375: 21(fvec4) Load 373(param) + Store 372(tempArg) 375 + 376: 69 Load 71(g_tTex1df4) + 377: 73(ptr) AccessChain 61 51 + 378: 6(int) Load 377 + 379: 21(fvec4) Load 372(tempArg) + ImageWrite 376 378 379 + 382: 2 FunctionCall 29(Fn2(vi4;) 381(param) + 383: 7(ivec4) Load 381(param) + Store 380(tempArg) 383 + 384: 83 Load 85(g_tTex1di4) + 385: 73(ptr) AccessChain 61 51 + 386: 6(int) Load 385 + 387: 7(ivec4) Load 380(tempArg) + ImageWrite 384 386 387 + 390: 2 FunctionCall 33(Fn2(vu4;) 389(param) + 391: 14(ivec4) Load 389(param) + Store 388(tempArg) 391 + 392: 91 Load 93(g_tTex1du4) + 393: 73(ptr) AccessChain 61 51 + 394: 6(int) Load 393 + 395: 14(ivec4) Load 388(tempArg) + ImageWrite 392 394 395 + 397: 73(ptr) AccessChain 61 51 + 398: 6(int) Load 397 + Store 396(coordTemp) 398 + 400: 69 Load 71(g_tTex1df4) + 401: 6(int) Load 396(coordTemp) + 402: 21(fvec4) ImageRead 400 401 + Store 399(storeTemp) 402 + 403: 21(fvec4) Load 399(storeTemp) + 405: 21(fvec4) CompositeConstruct 404 404 404 404 + 406: 21(fvec4) FAdd 403 405 + Store 399(storeTemp) 406 + 407: 69 Load 71(g_tTex1df4) + 408: 6(int) Load 396(coordTemp) + 409: 21(fvec4) Load 399(storeTemp) + ImageWrite 407 408 409 + 411: 73(ptr) AccessChain 61 51 + 412: 6(int) Load 411 + Store 410(coordTemp) 412 + 414: 83 Load 85(g_tTex1di4) + 415: 6(int) Load 410(coordTemp) + 416: 7(ivec4) ImageRead 414 415 + Store 413(storeTemp) 416 + 417: 7(ivec4) Load 413(storeTemp) + 418: 7(ivec4) CompositeConstruct 103 103 103 103 + 419: 7(ivec4) IAdd 417 418 + Store 413(storeTemp) 419 + 420: 83 Load 85(g_tTex1di4) + 421: 6(int) Load 410(coordTemp) + 422: 7(ivec4) Load 413(storeTemp) + ImageWrite 420 421 422 + 424: 73(ptr) AccessChain 61 51 + 425: 6(int) Load 424 + Store 423(coordTemp) 425 + 427: 91 Load 93(g_tTex1du4) + 428: 6(int) Load 423(coordTemp) + 429: 14(ivec4) ImageRead 427 428 + Store 426(storeTemp) 429 + 430: 14(ivec4) Load 426(storeTemp) + 431: 7(ivec4) CompositeConstruct 103 103 103 103 + 432: 14(ivec4) IAdd 430 431 + Store 426(storeTemp) 432 + 433: 91 Load 93(g_tTex1du4) + 434: 6(int) Load 423(coordTemp) + 435: 14(ivec4) Load 426(storeTemp) + ImageWrite 433 434 435 + 437: 73(ptr) AccessChain 61 51 + 438: 6(int) Load 437 + Store 436(coordTemp) 438 + 440: 69 Load 71(g_tTex1df4) + 441: 6(int) Load 436(coordTemp) + 442: 21(fvec4) ImageRead 440 441 + Store 439(storeTemp) 442 + 443: 21(fvec4) Load 439(storeTemp) + 444: 21(fvec4) CompositeConstruct 404 404 404 404 + 445: 21(fvec4) FSub 443 444 + Store 439(storeTemp) 445 + 446: 69 Load 71(g_tTex1df4) + 447: 6(int) Load 436(coordTemp) + 448: 21(fvec4) Load 439(storeTemp) + ImageWrite 446 447 448 + 450: 73(ptr) AccessChain 61 51 + 451: 6(int) Load 450 + Store 449(coordTemp) 451 + 453: 83 Load 85(g_tTex1di4) + 454: 6(int) Load 449(coordTemp) + 455: 7(ivec4) ImageRead 453 454 + Store 452(storeTemp) 455 + 456: 7(ivec4) Load 452(storeTemp) + 457: 7(ivec4) CompositeConstruct 103 103 103 103 + 458: 7(ivec4) ISub 456 457 + Store 452(storeTemp) 458 + 459: 83 Load 85(g_tTex1di4) + 460: 6(int) Load 449(coordTemp) + 461: 7(ivec4) Load 452(storeTemp) + ImageWrite 459 460 461 + 463: 73(ptr) AccessChain 61 51 + 464: 6(int) Load 463 + Store 462(coordTemp) 464 + 466: 91 Load 93(g_tTex1du4) + 467: 6(int) Load 462(coordTemp) + 468: 14(ivec4) ImageRead 466 467 + Store 465(storeTemp) 468 + 469: 14(ivec4) Load 465(storeTemp) + 470: 7(ivec4) CompositeConstruct 103 103 103 103 + 471: 14(ivec4) ISub 469 470 + Store 465(storeTemp) 471 + 472: 91 Load 93(g_tTex1du4) + 473: 6(int) Load 462(coordTemp) + 474: 14(ivec4) Load 465(storeTemp) + ImageWrite 472 473 474 + 476: 73(ptr) AccessChain 61 51 + 477: 6(int) Load 476 + Store 475(coordTemp) 477 + 479: 69 Load 71(g_tTex1df4) + 480: 6(int) Load 475(coordTemp) + 481: 21(fvec4) ImageRead 479 480 + Store 478(storeTempPre) 481 + 483: 21(fvec4) Load 478(storeTempPre) + Store 482(storeTempPost) 483 + 484: 21(fvec4) Load 482(storeTempPost) + 485: 21(fvec4) CompositeConstruct 404 404 404 404 + 486: 21(fvec4) FAdd 484 485 + Store 482(storeTempPost) 486 + 487: 69 Load 71(g_tTex1df4) + 488: 6(int) Load 475(coordTemp) + 489: 21(fvec4) Load 482(storeTempPost) + ImageWrite 487 488 489 + 491: 73(ptr) AccessChain 61 51 + 492: 6(int) Load 491 + Store 490(coordTemp) 492 + 494: 91 Load 93(g_tTex1du4) + 495: 6(int) Load 490(coordTemp) + 496: 14(ivec4) ImageRead 494 495 + Store 493(storeTempPre) 496 + 498: 14(ivec4) Load 493(storeTempPre) + Store 497(storeTempPost) 498 + 499: 14(ivec4) Load 497(storeTempPost) + 500: 7(ivec4) CompositeConstruct 103 103 103 103 + 501: 14(ivec4) ISub 499 500 + Store 497(storeTempPost) 501 + 502: 91 Load 93(g_tTex1du4) + 503: 6(int) Load 490(coordTemp) + 504: 14(ivec4) Load 497(storeTempPost) + ImageWrite 502 503 504 + 506: 73(ptr) AccessChain 61 51 + 507: 6(int) Load 506 + Store 505(coordTemp) 507 + 509: 83 Load 85(g_tTex1di4) + 510: 6(int) Load 505(coordTemp) + 511: 7(ivec4) ImageRead 509 510 + Store 508(storeTempPre) 511 + 513: 7(ivec4) Load 508(storeTempPre) + Store 512(storeTempPost) 513 + 514: 7(ivec4) Load 512(storeTempPost) + 515: 7(ivec4) CompositeConstruct 103 103 103 103 + 516: 7(ivec4) IAdd 514 515 + Store 512(storeTempPost) 516 + 517: 83 Load 85(g_tTex1di4) + 518: 6(int) Load 505(coordTemp) + 519: 7(ivec4) Load 512(storeTempPost) + ImageWrite 517 518 519 + 521: 73(ptr) AccessChain 61 51 + 522: 6(int) Load 521 + Store 520(coordTemp) 522 + 524: 69 Load 71(g_tTex1df4) + 525: 6(int) Load 520(coordTemp) + 526: 21(fvec4) ImageRead 524 525 + Store 523(storeTempPre) 526 + 528: 21(fvec4) Load 523(storeTempPre) + Store 527(storeTempPost) 528 + 529: 21(fvec4) Load 527(storeTempPost) + 530: 21(fvec4) CompositeConstruct 404 404 404 404 + 531: 21(fvec4) FSub 529 530 + Store 527(storeTempPost) 531 + 532: 69 Load 71(g_tTex1df4) + 533: 6(int) Load 520(coordTemp) + 534: 21(fvec4) Load 527(storeTempPost) + ImageWrite 532 533 534 + 536: 73(ptr) AccessChain 61 51 + 537: 6(int) Load 536 + Store 535(coordTemp) 537 + 539: 83 Load 85(g_tTex1di4) + 540: 6(int) Load 535(coordTemp) + 541: 7(ivec4) ImageRead 539 540 + Store 538(storeTempPre) 541 + 543: 7(ivec4) Load 538(storeTempPre) + Store 542(storeTempPost) 543 + 544: 7(ivec4) Load 542(storeTempPost) + 545: 7(ivec4) CompositeConstruct 103 103 103 103 + 546: 7(ivec4) IAdd 544 545 + Store 542(storeTempPost) 546 + 547: 83 Load 85(g_tTex1di4) + 548: 6(int) Load 535(coordTemp) + 549: 7(ivec4) Load 542(storeTempPost) + ImageWrite 547 548 549 + 551: 73(ptr) AccessChain 61 51 + 552: 6(int) Load 551 + Store 550(coordTemp) 552 + 554: 91 Load 93(g_tTex1du4) + 555: 6(int) Load 550(coordTemp) + 556: 14(ivec4) ImageRead 554 555 + Store 553(storeTempPre) 556 + 558: 14(ivec4) Load 553(storeTempPre) + Store 557(storeTempPost) 558 + 559: 14(ivec4) Load 557(storeTempPost) + 560: 7(ivec4) CompositeConstruct 103 103 103 103 + 561: 14(ivec4) ISub 559 560 + Store 557(storeTempPost) 561 + 562: 91 Load 93(g_tTex1du4) + 563: 6(int) Load 550(coordTemp) + 564: 14(ivec4) Load 557(storeTempPost) + ImageWrite 562 563 564 + 569: 22(ptr) AccessChain 567(psout) 51 + Store 569 568 + 572: 22(ptr) AccessChain 567(psout) 51 + 573: 21(fvec4) Load 572 + Store 571(Color) 573 Return FunctionEnd 11(Fn1(vi4;): 7(ivec4) Function None 9 10(x): 8(ptr) FunctionParameter 12: Label - 39: 7(ivec4) Load 10(x) - ReturnValue 39 + 42: 7(ivec4) Load 10(x) + ReturnValue 42 FunctionEnd 18(Fn1(vu4;): 14(ivec4) Function None 16 17(x): 15(ptr) FunctionParameter 19: Label - 42: 14(ivec4) Load 17(x) - ReturnValue 42 + 45: 14(ivec4) Load 17(x) + ReturnValue 45 FunctionEnd 25(Fn1(vf4;): 21(fvec4) Function None 23 24(x): 22(ptr) FunctionParameter 26: Label - 45: 21(fvec4) Load 24(x) - ReturnValue 45 + 48: 21(fvec4) Load 24(x) + ReturnValue 48 FunctionEnd 29(Fn2(vi4;): 2 Function None 27 28(x): 8(ptr) FunctionParameter 30: Label - Store 28(x) 49 + Store 28(x) 52 Return FunctionEnd 33(Fn2(vu4;): 2 Function None 31 32(x): 15(ptr) FunctionParameter 34: Label - Store 32(x) 51 + Store 32(x) 54 Return FunctionEnd 37(Fn2(vf4;): 2 Function None 35 36(x): 22(ptr) FunctionParameter 38: Label - Store 36(x) 53 + Store 36(x) 56 Return FunctionEnd + 40(SomeValue(): 21(fvec4) Function None 39 + 41: Label + 64: 63(ptr) AccessChain 61 62 + 65: 7(ivec4) Load 64 + 66: 21(fvec4) ConvertSToF 65 + ReturnValue 66 + FunctionEnd diff --git a/Test/hlsl.rw.bracket.frag b/Test/hlsl.rw.bracket.frag index e435b91d..650b5674 100644 --- a/Test/hlsl.rw.bracket.frag +++ b/Test/hlsl.rw.bracket.frag @@ -35,6 +35,10 @@ uniform int2 o2; uniform int3 o3; uniform int4 o4; +uniform float4 uf4; +uniform int4 ui4; +uniform uint4 uu4; + int4 Fn1(in int4 x) { return x; } uint4 Fn1(in uint4 x) { return x; } float4 Fn1(in float4 x) { return x; } @@ -43,19 +47,19 @@ void Fn2(out int4 x) { x = int4(0); } void Fn2(out uint4 x) { x = uint4(0); } void Fn2(out float4 x) { x = float4(0); } +float4 SomeValue() { return c4; } + PS_OUTPUT main() { PS_OUTPUT psout; - // Test as R-values - // 1D g_tTex1df4[c1]; float4 r00 = g_tTex1df4[c1]; int4 r01 = g_tTex1di4[c1]; uint4 r02 = g_tTex1du4[c1]; - + // 2D float4 r10 = g_tTex2df4[c2]; int4 r11 = g_tTex2di4[c2]; @@ -66,47 +70,66 @@ PS_OUTPUT main() int4 r21 = g_tTex3di4[c3]; uint4 r22 = g_tTex3du4[c3]; - // // Test as L-values - // // 1D - // g_tTex1df4[c1] = float4(1,2,3,4); - // g_tTex1di4[c1] = int4(1,2,3,4); - // g_tTex1du4[c1] = uint4(1,2,3,4); + float4 lf4 = uf4; + + // Test as L-values + // 1D + g_tTex1df4[c1] = SomeValue(); // complex L-value + g_tTex1df4[c1] = lf4; + g_tTex1di4[c1] = int4(2,2,3,4); + g_tTex1du4[c1] = uint4(3,2,3,4); + + // Test some operator= things, which need to do both a load and a store. + float4 val1 = (g_tTex1df4[c1] *= 2.0); + g_tTex1df4[c1] -= 3.0; + g_tTex1df4[c1] += 4.0; - // // 2D - // g_tTex2df4[c2] = float4(1,2,3,4); - // g_tTex2di4[c2] = int4(1,2,3,4); - // g_tTex2du4[c2] = uint4(1,2,3,4); + g_tTex1di4[c1] /= 2; + g_tTex1di4[c1] %= 2; + g_tTex1di4[c1] &= 0xffff; + g_tTex1di4[c1] |= 0xf0f0; + g_tTex1di4[c1] <<= 2; + g_tTex1di4[c1] >>= 2; + + // 2D + g_tTex2df4[c2] = SomeValue(); // complex L-value + g_tTex2df4[c2] = lf4; + g_tTex2di4[c2] = int4(5,2,3,4); + g_tTex2du4[c2] = uint4(6,2,3,4); - // // 3D - // g_tTex3df4[c3] = float4(1,2,3,4); - // g_tTex3di4[c3] = int4(1,2,3,4); - // g_tTex3du4[c3] = uint4(1,2,3,4); + // 3D + g_tTex3df4[c3] = SomeValue(); // complex L-value + g_tTex3df4[c3] = lf4; + g_tTex3di4[c3] = int4(8,6,7,8); + g_tTex3du4[c3] = uint4(9,2,3,4); // // Test function calling Fn1(g_tTex1df4[c1]); // in Fn1(g_tTex1di4[c1]); // in Fn1(g_tTex1du4[c1]); // in - // Fn2(g_tTex1df4[c1]); // out - // Fn2(g_tTex1di4[c1]); // out - // Fn2(g_tTex1du4[c1]); // out + Fn2(g_tTex1df4[c1]); // out + Fn2(g_tTex1di4[c1]); // out + Fn2(g_tTex1du4[c1]); // out - // // Test increment operators - // g_tTex1df4[c1]++; - // g_tTex1di4[c1]++; - // g_tTex1du4[c1]++; + // Test increment operators + // pre-ops + ++g_tTex1df4[c1]; + ++g_tTex1di4[c1]; + ++g_tTex1du4[c1]; - // g_tTex1df4[c1]--; - // g_tTex1di4[c1]--; - // g_tTex1du4[c1]--; + --g_tTex1df4[c1]; + --g_tTex1di4[c1]; + --g_tTex1du4[c1]; - // ++g_tTex1df4[c1]; - // ++g_tTex1di4[c1]; - // ++g_tTex1du4[c1]; + // post-ops + g_tTex1df4[c1]++; + g_tTex1du4[c1]--; + g_tTex1di4[c1]++; - // --g_tTex1df4[c1]; - // --g_tTex1di4[c1]; - // --g_tTex1du4[c1]; + g_tTex1df4[c1]--; + g_tTex1di4[c1]++; + g_tTex1du4[c1]--; psout.Color = 1.0; diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 58bc8a5b..96e5c348 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -2045,6 +2045,10 @@ bool TIntermBinary::promote() } break; + case EOpVectorTimesScalarAssign: + if (left->isVector() && right->isScalar()) + return true; + default: return false; } diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp index 626d2991..5dc25fc5 100755 --- a/hlsl/hlslGrammar.cpp +++ b/hlsl/hlslGrammar.cpp @@ -1783,6 +1783,8 @@ bool HlslGrammar::acceptAssignmentExpression(TIntermTyped*& node) } node = parseContext.handleAssign(loc, assignOp, node, rightNode); + node = parseContext.handleLvalue(loc, "assign", node); + if (node == nullptr) { parseContext.error(loc, "could not create assignment", "", ""); return false; @@ -1946,6 +1948,7 @@ bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node) return true; node = intermediate.addUnaryMath(unaryOp, node, loc); + node = parseContext.handleLvalue(loc, "", node); return node != nullptr; } @@ -2061,6 +2064,7 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node) case EOpPostDecrement: // DEC_OP node = intermediate.addUnaryMath(postOp, node, loc); + node = parseContext.handleLvalue(loc, "", node); break; default: assert(0); diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 204e9f08..5eccf61c 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -130,6 +130,249 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner& return numErrors == 0; } +bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const +{ + if (node == nullptr) + return false; + + const TIntermAggregate* lhsAsAggregate = node->getAsAggregate(); + if (lhsAsAggregate != nullptr && lhsAsAggregate->getOp() == EOpImageLoad) + return true; + + return false; +} + + +// +// This function handles l-value conversions and verifications. It uses, but is not synonymous +// with lValueErrorCheck. That function accepts an l-value directly, while this one must be +// given the surrounding tree - e.g, with an assignment, so we can convert the assign into a +// series of other image operations. +// +// Most things are passed through unmodified, except for error checking. +// +TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + TIntermBinary* nodeAsBinary = node->getAsBinaryNode(); + TIntermUnary* nodeAsUnary = node->getAsUnaryNode(); + TIntermAggregate* sequence = nullptr; + + TIntermTyped* lhs = nodeAsUnary ? nodeAsUnary->getOperand() : + nodeAsBinary ? nodeAsBinary->getLeft() : + nullptr; + + + // Early bail out if there is no conversion to apply + if (!shouldConvertLValue(lhs)) { + // TODO: >.. + // if (lhs != nullptr) + // if (lValueErrorCheck(loc, op, lhs)) + // return nullptr; + return node; + } + + // *** If we get here, we're going to apply some conversion to an l-value. + + // Helper to create a load. + const auto makeLoad = [&](TIntermSymbol* rhsTmp, TIntermTyped* object, TIntermTyped* coord, const TType& derefType) { + TIntermAggregate* loadOp = new TIntermAggregate(EOpImageLoad); + loadOp->setLoc(loc); + loadOp->getSequence().push_back(object); + loadOp->getSequence().push_back(intermediate.addSymbol(*coord->getAsSymbolNode())); + loadOp->setType(derefType); + + sequence = intermediate.growAggregate(sequence, + intermediate.addAssign(EOpAssign, rhsTmp, loadOp, loc), + loc); + }; + + // Helper to create a store. + const auto makeStore = [&](TIntermTyped* object, TIntermTyped* coord, TIntermSymbol* rhsTmp) { + TIntermAggregate* storeOp = new TIntermAggregate(EOpImageStore); + storeOp->getSequence().push_back(object); + storeOp->getSequence().push_back(coord); + storeOp->getSequence().push_back(intermediate.addSymbol(*rhsTmp)); + storeOp->setLoc(loc); + storeOp->setType(TType(EbtVoid)); + + sequence = intermediate.growAggregate(sequence, storeOp); + }; + + // Helper to create an assign. + const auto makeAssign = [&](TOperator assignOp, TIntermTyped* lhs, TIntermTyped* rhs) { + sequence = intermediate.growAggregate(sequence, + intermediate.addAssign(assignOp, lhs, rhs, loc), + loc); + }; + + // Helper to complete sequence by adding trailing variable, so we evaluate to the right value. + const auto finishSequence = [&](TIntermSymbol* rhsTmp, const TType& derefType) { + // Add a trailing use of the temp, so the sequence returns the proper value. + sequence = intermediate.growAggregate(sequence, intermediate.addSymbol(*rhsTmp)); + sequence->setOperator(EOpSequence); + sequence->setLoc(loc); + sequence->setType(derefType); + + return sequence; + }; + + // Helper to add unary op + const auto addUnary = [&](TOperator op, TIntermSymbol* rhsTmp) { + sequence = intermediate.growAggregate(sequence, + intermediate.addUnaryMath(op, intermediate.addSymbol(*rhsTmp), loc), + loc); + }; + + // helper to create a temporary variable + const auto addTmpVar = [&](const char* name, const TType& derefType) { + TVariable* tmpVar = makeInternalVariable(name, derefType); + tmpVar->getWritableType().getQualifier().makeTemporary(); + return intermediate.addSymbol(*tmpVar, loc); + }; + + TIntermAggregate* lhsAsAggregate = lhs->getAsAggregate(); + TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* coord = lhsAsAggregate->getSequence()[1]->getAsTyped(); + + const TLayoutFormat fmt = object->getType().getQualifier().layoutFormat; + // We only handle 4 component formats at the moment. + + assert(fmt == ElfRgba32f || fmt == ElfRgba32i || fmt == ElfRgba32ui); + const TType objDerefType(object->getType().getSampler().type, EvqTemporary, 4); + + if (nodeAsBinary) { + TIntermTyped* rhs = nodeAsBinary->getRight(); + const TOperator assignOp = nodeAsBinary->getOp(); + + bool isModifyOp = false; + + switch (assignOp) { + case EOpAddAssign: + case EOpSubAssign: + case EOpMulAssign: + case EOpVectorTimesMatrixAssign: + case EOpVectorTimesScalarAssign: + case EOpMatrixTimesScalarAssign: + case EOpMatrixTimesMatrixAssign: + case EOpDivAssign: + case EOpModAssign: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: + case EOpLeftShiftAssign: + case EOpRightShiftAssign: + isModifyOp = true; + // fall through... + case EOpAssign: + { + // Since this is an lvalue, we'll convert an image load to a sequence like this (to still provide the value): + // OpSequence + // OpImageStore(object, lhs, rhs) + // rhs + // But if it's not a simple symbol RHS (say, a fn call), we don't want to duplicate the RHS, so we'll convert + // instead to this: + // OpSequence + // rhsTmp = rhs + // OpImageStore(object, coord, rhsTmp) + // rhsTmp + // If this is a read-modify-write op, like +=, we issue: + // OpSequence + // coordtmp = load's param1 + // rhsTmp = OpImageLoad(object, coordTmp) + // rhsTmp op= rhs + // OpImageStore(object, coordTmp, rhsTmp) + // rhsTmp + + TIntermSymbol* rhsTmp = rhs->getAsSymbolNode(); + TIntermTyped* coordTmp = coord; + + if (rhsTmp == nullptr || isModifyOp) { + rhsTmp = addTmpVar("storeTemp", objDerefType); + + // Assign storeTemp = rhs + if (isModifyOp) { + // We have to make a temp var for the coordinate, to avoid evaluating it twice. + coordTmp = addTmpVar("coordTemp", coord->getType()); + makeAssign(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp) + } + + // rhsTmp op= rhs. + makeAssign(assignOp, intermediate.addSymbol(*rhsTmp), rhs); + } + + makeStore(object, coordTmp, rhsTmp); // add a store + return finishSequence(rhsTmp, objDerefType); // return rhsTmp from sequence + } + + default: + break; + } + } + + if (nodeAsUnary) { + const TOperator assignOp = nodeAsUnary->getOp(); + + switch (assignOp) { + case EOpPreIncrement: + case EOpPreDecrement: + { + // We turn this into: + // OpSequence + // coordtmp = load's param1 + // rhsTmp = OpImageLoad(object, coordTmp) + // rhsTmp op + // OpImageStore(object, coordTmp, rhsTmp) + // rhsTmp + + TIntermSymbol* rhsTmp = addTmpVar("storeTemp", objDerefType); + TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType()); + + makeAssign(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp) + addUnary(assignOp, rhsTmp); // op rhsTmp + makeStore(object, coordTmp, rhsTmp); // OpImageStore(object, coordTmp, rhsTmp) + return finishSequence(rhsTmp, objDerefType); // return rhsTmp from sequence + } + + case EOpPostIncrement: + case EOpPostDecrement: + { + // We turn this into: + // OpSequence + // coordtmp = load's param1 + // rhsTmp1 = OpImageLoad(object, coordTmp) + // rhsTmp2 = rhsTmp1 + // rhsTmp2 op + // OpImageStore(object, coordTmp, rhsTmp2) + // rhsTmp1 (pre-op value) + TIntermSymbol* rhsTmp1 = addTmpVar("storeTempPre", objDerefType); + TIntermSymbol* rhsTmp2 = addTmpVar("storeTempPost", objDerefType); + TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType()); + + makeAssign(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeLoad(rhsTmp1, object, coordTmp, objDerefType); // rhsTmp1 = OpImageLoad(object, coordTmp) + makeAssign(EOpAssign, rhsTmp2, rhsTmp1); // rhsTmp2 = rhsTmp1 + addUnary(assignOp, rhsTmp2); // rhsTmp op + makeStore(object, coordTmp, rhsTmp2); // OpImageStore(object, coordTmp, rhsTmp2) + return finishSequence(rhsTmp1, objDerefType); // return rhsTmp from sequence + + break; + } + + default: + break; + } + } + + // TODO: + // if (lhs) + // if (lValueErrorCheck(loc, op, lhs)) + // return nullptr; + + return node; +} + void HlslParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) { if (pragmaCallback) @@ -965,6 +1208,9 @@ void HlslParseContext::handleFunctionArgument(TFunction* function, TIntermTyped* // to intermediate.addAssign(). TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right) const { + if (left == nullptr || right == nullptr) + return nullptr; + const auto mustFlatten = [&](const TIntermTyped& node) { return shouldFlatten(node.getType()) && node.getAsSymbolNode() && flattenMap.find(node.getAsSymbolNode()->getId()) != flattenMap.end(); @@ -2288,12 +2534,13 @@ void HlslParseContext::addInputArgumentConversions(const TFunction& function, TI // // Returns a node of a subtree that evaluates to the return value of the function. // -TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode) const +TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& function, TIntermAggregate& intermNode) { TIntermSequence& arguments = intermNode.getSequence(); const auto needsConversion = [&](int argNum) { return function[argNum].type->getQualifier().isParamOutput() && (*function[argNum].type != arguments[argNum]->getAsTyped()->getType() || + shouldConvertLValue(arguments[argNum]) || shouldFlatten(arguments[argNum]->getAsTyped()->getType())); }; @@ -2341,7 +2588,8 @@ TIntermTyped* HlslParseContext::addOutputArgumentConversions(const TFunction& fu TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc()); // This makes the deepest level, the member-wise copy - TIntermTyped* tempAssign = handleAssign(arguments[i]->getLoc(), EOpAssign, arguments[i]->getAsTyped(), tempArgNode)->getAsAggregate(); + TIntermTyped* tempAssign = handleAssign(arguments[i]->getLoc(), EOpAssign, arguments[i]->getAsTyped(), tempArgNode); + tempAssign = handleLvalue(arguments[i]->getLoc(), "assign", tempAssign); conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc()); // replace the argument with another node for the same tempArg variable diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h index 78beadb3..8dcfe840 100755 --- a/hlsl/hlslParseHelper.h +++ b/hlsl/hlslParseHelper.h @@ -81,7 +81,7 @@ public: void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments); TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*); void addInputArgumentConversions(const TFunction&, TIntermNode*&) const; - TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const; + TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&); void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&); TFunction* handleConstructorCall(const TSourceLoc&, const TType&); void handleSemantic(TSourceLoc, TQualifier&, const TString& semantic); @@ -152,6 +152,9 @@ public: void pushSwitchSequence(TIntermSequence* sequence) { switchSequenceStack.push_back(sequence); } void popSwitchSequence() { switchSequenceStack.pop_back(); } + // Apply L-value conversions. E.g, turning a write to a RWTexture into an ImageStore. + TIntermTyped* handleLvalue(const TSourceLoc&, const char* op, TIntermTyped* node); + protected: void inheritGlobalDefaults(TQualifier& dst) const; TVariable* makeInternalVariable(const char* name, const TType&) const; @@ -161,6 +164,9 @@ protected: TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer); TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage); + // Return true if this node requires L-value conversion (e.g, to an imageStore). + bool shouldConvertLValue(const TIntermNode*) const; + // Array and struct flattening bool shouldFlatten(const TType& type) const { return shouldFlattenIO(type) || shouldFlattenUniform(type); } TIntermTyped* flattenAccess(TIntermTyped* base, int member); From 0de16da2c065501862c24b881d259a2479bc3f50 Mon Sep 17 00:00:00 2001 From: steve-lunarg Date: Sat, 8 Oct 2016 10:54:52 -0600 Subject: [PATCH 3/5] HLSL: phase 2c: use lValueErrorCheck in HLSL FE This commit splits lValueErrorCheck into machine dependent and independent parts. The GLSL form in TParseContext inherits from and invokes the machine dependent part in TParseContextBase. The base form checks language independent things. This split does not change the set of errors tested for: the test results are identical. The new base class interface is now used from the HLSL FE to test lvalues. There was one test diff due to this, where the test was writing to a uniform. It still does the same indirections, but does not attempt a uniform write. --- Test/baseResults/hlsl.struct.frag.out | 120 +++++++++--------- Test/hlsl.struct.frag | 4 +- .../MachineIndependent/ParseContextBase.cpp | 108 ++++++++++++++++ glslang/MachineIndependent/ParseHelper.cpp | 71 +++-------- glslang/MachineIndependent/ParseHelper.h | 7 +- hlsl/hlslParseHelper.cpp | 41 ++++-- hlsl/hlslParseHelper.h | 1 + 7 files changed, 222 insertions(+), 130 deletions(-) diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out index 04117d73..7605543f 100755 --- a/Test/baseResults/hlsl.struct.frag.out +++ b/Test/baseResults/hlsl.struct.frag.out @@ -14,15 +14,14 @@ gl_FragCoord origin is upper left 0:39 Compare Equal (temp bool) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) -0:40 move second child to first child (temp 4-component vector of float) -0:40 i: direct index for structure (temp 4-component vector of float) -0:40 s2: direct index for structure (layout(offset=48 ) uniform structure{temp 4-component vector of float i}) -0:40 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) -0:40 Constant: -0:40 1 (const uint) +0:40 i: direct index for structure (temp 4-component vector of float) +0:40 s2: direct index for structure (layout(offset=48 ) uniform structure{temp 4-component vector of float i}) +0:40 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) 0:40 Constant: -0:40 0 (const int) -0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) +0:40 1 (const uint) +0:40 Constant: +0:40 0 (const int) +0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) 0:42 Sequence 0:42 move second child to first child (temp 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) @@ -56,15 +55,14 @@ gl_FragCoord origin is upper left 0:39 Compare Equal (temp bool) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) -0:40 move second child to first child (temp 4-component vector of float) -0:40 i: direct index for structure (temp 4-component vector of float) -0:40 s2: direct index for structure (layout(offset=48 ) uniform structure{temp 4-component vector of float i}) -0:40 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) -0:40 Constant: -0:40 1 (const uint) +0:40 i: direct index for structure (temp 4-component vector of float) +0:40 s2: direct index for structure (layout(offset=48 ) uniform structure{temp 4-component vector of float i}) +0:40 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) 0:40 Constant: -0:40 0 (const int) -0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) +0:40 1 (const uint) +0:40 Constant: +0:40 0 (const int) +0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) 0:42 Sequence 0:42 move second child to first child (temp 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) @@ -85,12 +83,12 @@ gl_FragCoord origin is upper left // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 49 +// Id's are bound by 46 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" 29 34 35 38 40 42 45 46 47 48 + EntryPoint Fragment 4 "PixelShaderFunction" 29 31 32 35 37 39 42 43 44 45 ExecutionMode 4 OriginUpperLeft Name 4 "PixelShaderFunction" Name 8 "FS" @@ -110,15 +108,15 @@ gl_FragCoord origin is upper left MemberName 22($Global) 3 "ff6" Name 24 "" Name 29 "ff4" - Name 34 "@entryPointOutput" - Name 35 "input" - Name 38 "a" - Name 40 "b" - Name 42 "c" - Name 45 "d" - Name 46 "ff1" - Name 47 "ff2" - Name 48 "ff3" + Name 31 "@entryPointOutput" + Name 32 "input" + Name 35 "a" + Name 37 "b" + Name 39 "c" + Name 42 "d" + Name 43 "ff1" + Name 44 "ff2" + Name 45 "ff3" MemberDecorate 20(myS) 0 Offset 0 MemberDecorate 20(myS) 1 Offset 4 MemberDecorate 20(myS) 2 Offset 16 @@ -133,22 +131,22 @@ gl_FragCoord origin is upper left Decorate 29(ff4) Offset 4 Decorate 29(ff4) Location 7 Decorate 29(ff4) Binding 0 - Decorate 34(@entryPointOutput) Location 0 - Decorate 35(input) Location 0 - Decorate 38(a) Location 1 - Decorate 40(b) Flat - Decorate 40(b) Location 2 - Decorate 42(c) NoPerspective - Decorate 42(c) Centroid - Decorate 42(c) Location 3 - Decorate 45(d) Centroid - Decorate 45(d) Location 4 - Decorate 46(ff1) BuiltIn FrontFacing - Decorate 47(ff2) Offset 4 - Decorate 47(ff2) Location 5 - Decorate 48(ff3) Offset 4 - Decorate 48(ff3) Location 6 - Decorate 48(ff3) Binding 0 + Decorate 31(@entryPointOutput) Location 0 + Decorate 32(input) Location 0 + Decorate 35(a) Location 1 + Decorate 37(b) Flat + Decorate 37(b) Location 2 + Decorate 39(c) NoPerspective + Decorate 39(c) Centroid + Decorate 39(c) Location 3 + Decorate 42(d) Centroid + Decorate 42(d) Location 4 + Decorate 43(ff1) BuiltIn FrontFacing + Decorate 44(ff2) Offset 4 + Decorate 44(ff2) Location 5 + Decorate 45(ff3) Offset 4 + Decorate 45(ff3) Location 6 + Decorate 45(ff3) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeBool @@ -168,21 +166,20 @@ gl_FragCoord origin is upper left 27: 25(int) Constant 0 28: TypePointer Input 19(fvec4) 29(ff4): 28(ptr) Variable Input - 31: TypePointer Uniform 19(fvec4) - 33: TypePointer Output 19(fvec4) -34(@entryPointOutput): 33(ptr) Variable Output - 35(input): 28(ptr) Variable Input - 38(a): 28(ptr) Variable Input - 39: TypePointer Input 6(bool) - 40(b): 39(ptr) Variable Input - 41: TypePointer Input 18(float) - 42(c): 41(ptr) Variable Input - 43: TypeVector 18(float) 2 - 44: TypePointer Input 43(fvec2) - 45(d): 44(ptr) Variable Input - 46(ff1): 39(ptr) Variable Input - 47(ff2): 39(ptr) Variable Input - 48(ff3): 39(ptr) Variable Input + 30: TypePointer Output 19(fvec4) +31(@entryPointOutput): 30(ptr) Variable Output + 32(input): 28(ptr) Variable Input + 35(a): 28(ptr) Variable Input + 36: TypePointer Input 6(bool) + 37(b): 36(ptr) Variable Input + 38: TypePointer Input 18(float) + 39(c): 38(ptr) Variable Input + 40: TypeVector 18(float) 2 + 41: TypePointer Input 40(fvec2) + 42(d): 41(ptr) Variable Input + 43(ff1): 36(ptr) Variable Input + 44(ff2): 36(ptr) Variable Input + 45(ff3): 36(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label 10(s3): 9(ptr) Variable Function @@ -192,10 +189,7 @@ gl_FragCoord origin is upper left 14: 7(bvec3) CompositeExtract 12 0 15: 7(bvec3) LogicalEqual 13 14 16: 6(bool) All 15 - 30: 19(fvec4) Load 29(ff4) - 32: 31(ptr) AccessChain 24 26 27 - Store 32 30 - 36: 19(fvec4) Load 35(input) - Store 34(@entryPointOutput) 36 + 33: 19(fvec4) Load 32(input) + Store 31(@entryPointOutput) 33 Return FunctionEnd diff --git a/Test/hlsl.struct.frag b/Test/hlsl.struct.frag index 2c511a6e..456c9ef7 100644 --- a/Test/hlsl.struct.frag +++ b/Test/hlsl.struct.frag @@ -37,7 +37,7 @@ float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0 } s3; s3 == s3; - s2.i = s.ff4; + s2.i; s.ff4; // no assignments to uniforms, but preserve indirections. return input; -} \ No newline at end of file +} diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index fe2b8e6b..45bb1689 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -113,6 +113,114 @@ void C_DECL TParseContextBase::ppWarn(const TSourceLoc& loc, const char* szReaso va_end(args); } +// +// Both test and if necessary, spit out an error, to see if the node is really +// an l-value that can be operated on this way. +// +// Returns true if there was an error. +// +bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + TIntermBinary* binaryNode = node->getAsBinaryNode(); + + if (binaryNode) { + switch(binaryNode->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: // fall through + case EOpIndexDirectStruct: // fall through + case EOpVectorSwizzle: + return lValueErrorCheck(loc, op, binaryNode->getLeft()); + default: + break; + } + error(loc, " l-value required", op, "", ""); + + return true; + } + + const char* symbol = nullptr; + TIntermSymbol* symNode = node->getAsSymbolNode(); + if (symNode != nullptr) + symbol = symNode->getName().c_str(); + + const char* message = nullptr; + switch (node->getQualifier().storage) { + case EvqConst: message = "can't modify a const"; break; + case EvqConstReadOnly: message = "can't modify a const"; break; + case EvqUniform: message = "can't modify a uniform"; break; + case EvqBuffer: + if (node->getQualifier().readonly) + message = "can't modify a readonly buffer"; + break; + + default: + // + // Type that can't be written to? + // + switch (node->getBasicType()) { + case EbtSampler: + message = "can't modify a sampler"; + break; + case EbtAtomicUint: + message = "can't modify an atomic_uint"; + break; + case EbtVoid: + message = "can't modify void"; + break; + default: + break; + } + } + + if (message == nullptr && binaryNode == nullptr && symNode == nullptr) { + error(loc, " l-value required", op, "", ""); + + return true; + } + + // + // Everything else is okay, no error. + // + if (message == nullptr) + return false; + + // + // If we get here, we have an error and a message. + // + if (symNode) + error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message); + else + error(loc, " l-value required", op, "(%s)", message); + + return true; +} + +// Test for and give an error if the node can't be read from. +void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + if (! node) + return; + + TIntermBinary* binaryNode = node->getAsBinaryNode(); + if (binaryNode) { + switch(binaryNode->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: + case EOpIndexDirectStruct: + case EOpVectorSwizzle: + rValueErrorCheck(loc, op, binaryNode->getLeft()); + default: + break; + } + + return; + } + + TIntermSymbol* symNode = node->getAsSymbolNode(); + if (symNode && symNode->getQualifier().writeonly) + error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str()); +} + // Make a shared symbol have a non-shared version that can be edited by the current // compile, such that editing its type will not change the shared version and will // effect all nodes sharing it. diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 949ba007..de1e8ca7 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1902,14 +1902,14 @@ void TParseContext::variableCheck(TIntermTyped*& nodePtr) // Both test and if necessary, spit out an error, to see if the node is really // an l-value that can be operated on this way. // -// Returns true if the was an error. +// Returns true if there was an error. // bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) { TIntermBinary* binaryNode = node->getAsBinaryNode(); if (binaryNode) { - bool errorReturn; + bool errorReturn = false; switch(binaryNode->getOp()) { case EOpIndexDirect: @@ -1928,9 +1928,9 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt } } - // fall through + break; // left node is checked by base class case EOpIndexDirectStruct: - return lValueErrorCheck(loc, op, binaryNode->getLeft()); + break; // left node is checked by base class case EOpVectorSwizzle: errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft()); if (!errorReturn) { @@ -1955,12 +1955,18 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt default: break; } - error(loc, " l-value required", op, "", ""); - return true; + if (errorReturn) { + error(loc, " l-value required", op, "", ""); + return true; + } } + // Let the base class check errors + if (TParseContextBase::lValueErrorCheck(loc, op, node)) + return true; + // GLSL specific const char* symbol = nullptr; TIntermSymbol* symNode = node->getAsSymbolNode(); if (symNode != nullptr) @@ -1968,19 +1974,12 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt const char* message = nullptr; switch (node->getQualifier().storage) { - case EvqConst: message = "can't modify a const"; break; - case EvqConstReadOnly: message = "can't modify a const"; break; case EvqVaryingIn: message = "can't modify shader input"; break; case EvqInstanceId: message = "can't modify gl_InstanceID"; break; case EvqVertexId: message = "can't modify gl_VertexID"; break; case EvqFace: message = "can't modify gl_FrontFace"; break; case EvqFragCoord: message = "can't modify gl_FragCoord"; break; case EvqPointCoord: message = "can't modify gl_PointCoord"; break; - case EvqUniform: message = "can't modify a uniform"; break; - case EvqBuffer: - if (node->getQualifier().readonly) - message = "can't modify a readonly buffer"; - break; case EvqFragDepth: intermediate.setDepthReplacing(); // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader." @@ -1989,22 +1988,7 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt break; default: - // - // Type that can't be written to? - // - switch (node->getBasicType()) { - case EbtSampler: - message = "can't modify a sampler"; - break; - case EbtAtomicUint: - message = "can't modify an atomic_uint"; - break; - case EbtVoid: - message = "can't modify void"; - break; - default: - break; - } + break; } if (message == nullptr && binaryNode == nullptr && symNode == nullptr) { @@ -2013,7 +1997,6 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt return true; } - // // Everything else is okay, no error. // @@ -2034,30 +2017,14 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt // Test for and give an error if the node can't be read from. void TParseContext::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) { - if (! node) - return; + // Let the base class check errors + TParseContextBase::rValueErrorCheck(loc, op, node); - TIntermBinary* binaryNode = node->getAsBinaryNode(); - if (binaryNode) { - switch(binaryNode->getOp()) { - case EOpIndexDirect: - case EOpIndexIndirect: - case EOpIndexDirectStruct: - case EOpVectorSwizzle: - rValueErrorCheck(loc, op, binaryNode->getLeft()); - default: - break; - } - - return; - } - - TIntermSymbol* symNode = node->getAsSymbolNode(); - if (symNode && symNode->getQualifier().writeonly) - error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str()); #ifdef AMD_EXTENSIONS - else if (symNode && symNode->getQualifier().explicitInterp) - error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str()); + TIntermSymbol* symNode = node->getAsSymbolNode(); + if (!(symNode && symNode->getQualifier().writeonly)) // base class checks + if (symNode && symNode->getQualifier().explicitInterp) + error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str()); #endif } diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index eab78359..0f60ff7f 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -143,6 +143,9 @@ public: virtual void growGlobalUniformBlock(TSourceLoc&, TType&, TString& memberName); virtual bool insertGlobalUniformBlock(); + virtual bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*); + virtual void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*); + protected: TParseContextBase(TParseContextBase&); TParseContextBase& operator=(TParseContextBase&); @@ -278,8 +281,8 @@ public: void unaryOpError(const TSourceLoc&, const char* op, TString operand); void binaryOpError(const TSourceLoc&, const char* op, TString left, TString right); void variableCheck(TIntermTyped*& nodePtr); - bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*); - void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*); + bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override; + void rValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override; void constantValueCheck(TIntermTyped* node, const char* token); void integerCheck(const TIntermTyped* node, const char* token); void globalCheck(const TSourceLoc&, const char* token); diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 5eccf61c..5c1fd059 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -136,12 +136,36 @@ bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const return false; const TIntermAggregate* lhsAsAggregate = node->getAsAggregate(); + if (lhsAsAggregate != nullptr && lhsAsAggregate->getOp() == EOpImageLoad) return true; return false; } +// +// Both test and if necessary, spit out an error, to see if the node is really +// an l-value that can be operated on this way. +// +// Returns true if there was an error. +// +bool HlslParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) +{ + if (shouldConvertLValue(node)) { + // if we're writing to a texture, it must be an RW form. + + TIntermAggregate* lhsAsAggregate = node->getAsAggregate(); + TIntermTyped* object = lhsAsAggregate->getSequence()[0]->getAsTyped(); + + if (!object->getType().getSampler().isImage()) { + error(loc, "operator[] on a non-RW texture must be an r-value", "", ""); + return true; + } + } + + // Let the base class check errors + return TParseContextBase::lValueErrorCheck(loc, op, node); +} // // This function handles l-value conversions and verifications. It uses, but is not synonymous @@ -161,13 +185,11 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* nodeAsBinary ? nodeAsBinary->getLeft() : nullptr; - // Early bail out if there is no conversion to apply if (!shouldConvertLValue(lhs)) { - // TODO: >.. - // if (lhs != nullptr) - // if (lValueErrorCheck(loc, op, lhs)) - // return nullptr; + if (lhs != nullptr) + if (lValueErrorCheck(loc, op, lhs)) + return nullptr; return node; } @@ -356,8 +378,6 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* addUnary(assignOp, rhsTmp2); // rhsTmp op makeStore(object, coordTmp, rhsTmp2); // OpImageStore(object, coordTmp, rhsTmp2) return finishSequence(rhsTmp1, objDerefType); // return rhsTmp from sequence - - break; } default: @@ -365,10 +385,9 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* } } - // TODO: - // if (lhs) - // if (lValueErrorCheck(loc, op, lhs)) - // return nullptr; + if (lhs) + if (lValueErrorCheck(loc, op, lhs)) + return nullptr; return node; } diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h index 8dcfe840..d8e75466 100755 --- a/hlsl/hlslParseHelper.h +++ b/hlsl/hlslParseHelper.h @@ -154,6 +154,7 @@ public: // Apply L-value conversions. E.g, turning a write to a RWTexture into an ImageStore. TIntermTyped* handleLvalue(const TSourceLoc&, const char* op, TIntermTyped* node); + bool lValueErrorCheck(const TSourceLoc&, const char* op, TIntermTyped*) override; protected: void inheritGlobalDefaults(TQualifier& dst) const; From 07830e805b6c4c65ce9bf275c186e84ab2335200 Mon Sep 17 00:00:00 2001 From: steve-lunarg Date: Mon, 10 Oct 2016 10:00:14 -0600 Subject: [PATCH 4/5] HLSL: phase 2d: minor cleanup, & allow operator[] on non-rw textures Improve comments. A few tweaked lines allow [] on non-rw tx. Add test case for this. Improve VectorTimesScalar handling. --- Test/baseResults/hlsl.rw.bracket.frag.out | 207 +++--- Test/baseResults/hlsl.tx.bracket.frag.out | 702 ++++++++++++++++++++ Test/hlsl.rw.bracket.frag | 7 +- Test/hlsl.tx.bracket.frag | 73 ++ glslang/MachineIndependent/Intermediate.cpp | 6 +- gtests/Hlsl.FromFile.cpp | 1 + hlsl/hlslGrammar.cpp | 4 +- hlsl/hlslParseHelper.cpp | 15 +- 8 files changed, 923 insertions(+), 92 deletions(-) create mode 100644 Test/baseResults/hlsl.tx.bracket.frag.out create mode 100644 Test/hlsl.tx.bracket.frag diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out index b0dc68b7..c6e3c89e 100644 --- a/Test/baseResults/hlsl.rw.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.bracket.frag.out @@ -813,25 +813,39 @@ gl_FragCoord origin is upper left 0:132 'coordTemp' (temp int) 0:132 'storeTempPost' (temp 4-component vector of uint) 0:132 'storeTempPre' (temp 4-component vector of uint) -0:134 move second child to first child (temp 4-component vector of float) -0:134 Color: direct index for structure (temp 4-component vector of float) -0:134 'psout' (temp structure{temp 4-component vector of float Color}) -0:134 Constant: -0:134 0 (const int) -0:134 Constant: -0:134 1.000000 -0:134 1.000000 -0:134 1.000000 -0:134 1.000000 -0:136 Sequence -0:136 Sequence -0:136 move second child to first child (temp 4-component vector of float) +0:135 Sequence +0:135 move second child to first child (temp 4-component vector of float) +0:135 'storeTemp' (temp 4-component vector of float) +0:? imageLoad (temp 4-component vector of float) +0:135 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore (temp void) +0:135 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' (temp 4-component vector of float) +0:135 'storeTemp' (temp 4-component vector of float) +0:137 move second child to first child (temp 4-component vector of float) +0:137 Color: direct index for structure (temp 4-component vector of float) +0:137 'psout' (temp structure{temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Sequence +0:139 Sequence +0:139 move second child to first child (temp 4-component vector of float) 0:? 'Color' (layout(location=0 ) out 4-component vector of float) -0:136 Color: direct index for structure (temp 4-component vector of float) -0:136 'psout' (temp structure{temp 4-component vector of float Color}) -0:136 Constant: -0:136 0 (const int) -0:136 Branch: Return +0:139 Color: direct index for structure (temp 4-component vector of float) +0:139 'psout' (temp structure{temp 4-component vector of float Color}) +0:139 Constant: +0:139 0 (const int) +0:139 Branch: Return 0:? Linker Objects 0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) 0:? 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) @@ -1670,25 +1684,39 @@ gl_FragCoord origin is upper left 0:132 'coordTemp' (temp int) 0:132 'storeTempPost' (temp 4-component vector of uint) 0:132 'storeTempPre' (temp 4-component vector of uint) -0:134 move second child to first child (temp 4-component vector of float) -0:134 Color: direct index for structure (temp 4-component vector of float) -0:134 'psout' (temp structure{temp 4-component vector of float Color}) -0:134 Constant: -0:134 0 (const int) -0:134 Constant: -0:134 1.000000 -0:134 1.000000 -0:134 1.000000 -0:134 1.000000 -0:136 Sequence -0:136 Sequence -0:136 move second child to first child (temp 4-component vector of float) +0:135 Sequence +0:135 move second child to first child (temp 4-component vector of float) +0:135 'storeTemp' (temp 4-component vector of float) +0:? imageLoad (temp 4-component vector of float) +0:135 'g_tTex2df4' (layout(rgba32f ) uniform image2D) +0:? Constant: +0:? 2 (const int) +0:? 3 (const int) +0:135 imageStore (temp void) +0:135 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) +0:135 Constant: +0:135 1 (const int) +0:135 'storeTemp' (temp 4-component vector of float) +0:135 'storeTemp' (temp 4-component vector of float) +0:137 move second child to first child (temp 4-component vector of float) +0:137 Color: direct index for structure (temp 4-component vector of float) +0:137 'psout' (temp structure{temp 4-component vector of float Color}) +0:137 Constant: +0:137 0 (const int) +0:137 Constant: +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:137 1.000000 +0:139 Sequence +0:139 Sequence +0:139 move second child to first child (temp 4-component vector of float) 0:? 'Color' (layout(location=0 ) out 4-component vector of float) -0:136 Color: direct index for structure (temp 4-component vector of float) -0:136 'psout' (temp structure{temp 4-component vector of float Color}) -0:136 Constant: -0:136 0 (const int) -0:136 Branch: Return +0:139 Color: direct index for structure (temp 4-component vector of float) +0:139 'psout' (temp structure{temp 4-component vector of float Color}) +0:139 Constant: +0:139 0 (const int) +0:139 Branch: Return 0:? Linker Objects 0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) 0:? 'g_tTex1df4' (layout(binding=0 rgba32f ) uniform image1D) @@ -1711,13 +1739,13 @@ gl_FragCoord origin is upper left // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 596 +// Id's are bound by 602 Capability Shader Capability Sampled1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 571 + EntryPoint Fragment 4 "main" 577 ExecutionMode 4 OriginUpperLeft Name 4 "main" Name 11 "Fn1(vi4;" @@ -1832,17 +1860,18 @@ gl_FragCoord origin is upper left Name 550 "coordTemp" Name 553 "storeTempPre" Name 557 "storeTempPost" - Name 565 "PS_OUTPUT" - MemberName 565(PS_OUTPUT) 0 "Color" - Name 567 "psout" - Name 571 "Color" - Name 577 "g_sSamp" - Name 580 "g_tTex1df4a" - Name 583 "g_tTex1di4a" - Name 586 "g_tTex1du4a" - Name 589 "g_tTex2df4a" - Name 592 "g_tTex2di4a" - Name 595 "g_tTex2du4a" + Name 565 "storeTemp" + Name 571 "PS_OUTPUT" + MemberName 571(PS_OUTPUT) 0 "Color" + Name 573 "psout" + Name 577 "Color" + Name 583 "g_sSamp" + Name 586 "g_tTex1df4a" + Name 589 "g_tTex1di4a" + Name 592 "g_tTex1du4a" + Name 595 "g_tTex2df4a" + Name 598 "g_tTex2di4a" + Name 601 "g_tTex2du4a" MemberDecorate 59($Global) 0 Offset 0 MemberDecorate 59($Global) 1 Offset 8 MemberDecorate 59($Global) 2 Offset 16 @@ -1866,15 +1895,15 @@ gl_FragCoord origin is upper left Decorate 127(g_tTex3df4) DescriptorSet 0 Decorate 137(g_tTex3di4) DescriptorSet 0 Decorate 145(g_tTex3du4) DescriptorSet 0 - Decorate 571(Color) Location 0 - Decorate 577(g_sSamp) DescriptorSet 0 - Decorate 577(g_sSamp) Binding 0 - Decorate 580(g_tTex1df4a) DescriptorSet 0 - Decorate 583(g_tTex1di4a) DescriptorSet 0 - Decorate 586(g_tTex1du4a) DescriptorSet 0 - Decorate 589(g_tTex2df4a) DescriptorSet 0 - Decorate 592(g_tTex2di4a) DescriptorSet 0 - Decorate 595(g_tTex2du4a) DescriptorSet 0 + Decorate 577(Color) Location 0 + Decorate 583(g_sSamp) DescriptorSet 0 + Decorate 583(g_sSamp) Binding 0 + Decorate 586(g_tTex1df4a) DescriptorSet 0 + Decorate 589(g_tTex1di4a) DescriptorSet 0 + Decorate 592(g_tTex1du4a) DescriptorSet 0 + Decorate 595(g_tTex2df4a) DescriptorSet 0 + Decorate 598(g_tTex2di4a) DescriptorSet 0 + Decorate 601(g_tTex2du4a) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -1962,32 +1991,33 @@ gl_FragCoord origin is upper left 348: 13(int) Constant 9 349: 14(ivec4) ConstantComposite 348 174 173 175 404: 20(float) Constant 1065353216 - 565(PS_OUTPUT): TypeStruct 21(fvec4) - 566: TypePointer Function 565(PS_OUTPUT) - 568: 21(fvec4) ConstantComposite 404 404 404 404 - 570: TypePointer Output 21(fvec4) - 571(Color): 570(ptr) Variable Output - 575: TypeSampler - 576: TypePointer UniformConstant 575 - 577(g_sSamp): 576(ptr) Variable UniformConstant - 578: TypeImage 20(float) 1D array nonsampled format:Rgba32f - 579: TypePointer UniformConstant 578 -580(g_tTex1df4a): 579(ptr) Variable UniformConstant - 581: TypeImage 6(int) 1D array nonsampled format:Rgba32i + 567: 57(ivec2) ConstantComposite 129 62 + 571(PS_OUTPUT): TypeStruct 21(fvec4) + 572: TypePointer Function 571(PS_OUTPUT) + 574: 21(fvec4) ConstantComposite 404 404 404 404 + 576: TypePointer Output 21(fvec4) + 577(Color): 576(ptr) Variable Output + 581: TypeSampler 582: TypePointer UniformConstant 581 -583(g_tTex1di4a): 582(ptr) Variable UniformConstant - 584: TypeImage 13(int) 1D array nonsampled format:Rgba32ui + 583(g_sSamp): 582(ptr) Variable UniformConstant + 584: TypeImage 20(float) 1D array nonsampled format:Rgba32f 585: TypePointer UniformConstant 584 -586(g_tTex1du4a): 585(ptr) Variable UniformConstant - 587: TypeImage 20(float) 2D array nonsampled format:Rgba32f +586(g_tTex1df4a): 585(ptr) Variable UniformConstant + 587: TypeImage 6(int) 1D array nonsampled format:Rgba32i 588: TypePointer UniformConstant 587 -589(g_tTex2df4a): 588(ptr) Variable UniformConstant - 590: TypeImage 6(int) 2D array nonsampled format:Rgba32i +589(g_tTex1di4a): 588(ptr) Variable UniformConstant + 590: TypeImage 13(int) 1D array nonsampled format:Rgba32ui 591: TypePointer UniformConstant 590 -592(g_tTex2di4a): 591(ptr) Variable UniformConstant - 593: TypeImage 13(int) 2D array nonsampled format:Rgba32ui +592(g_tTex1du4a): 591(ptr) Variable UniformConstant + 593: TypeImage 20(float) 2D array nonsampled format:Rgba32f 594: TypePointer UniformConstant 593 -595(g_tTex2du4a): 594(ptr) Variable UniformConstant +595(g_tTex2df4a): 594(ptr) Variable UniformConstant + 596: TypeImage 6(int) 2D array nonsampled format:Rgba32i + 597: TypePointer UniformConstant 596 +598(g_tTex2di4a): 597(ptr) Variable UniformConstant + 599: TypeImage 13(int) 2D array nonsampled format:Rgba32ui + 600: TypePointer UniformConstant 599 +601(g_tTex2du4a): 600(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 77(r00): 22(ptr) Variable Function @@ -2067,7 +2097,8 @@ gl_FragCoord origin is upper left 550(coordTemp): 182(ptr) Variable Function 553(storeTempPre): 15(ptr) Variable Function 557(storeTempPost): 15(ptr) Variable Function - 567(psout): 566(ptr) Variable Function + 565(storeTemp): 22(ptr) Variable Function + 573(psout): 572(ptr) Variable Function 72: 69 Load 71(g_tTex1df4) 74: 73(ptr) AccessChain 61 51 75: 6(int) Load 74 @@ -2562,11 +2593,17 @@ gl_FragCoord origin is upper left 563: 6(int) Load 550(coordTemp) 564: 14(ivec4) Load 557(storeTempPost) ImageWrite 562 563 564 - 569: 22(ptr) AccessChain 567(psout) 51 - Store 569 568 - 572: 22(ptr) AccessChain 567(psout) 51 - 573: 21(fvec4) Load 572 - Store 571(Color) 573 + 566: 99 Load 101(g_tTex2df4) + 568: 21(fvec4) ImageRead 566 567 + Store 565(storeTemp) 568 + 569: 69 Load 71(g_tTex1df4) + 570: 21(fvec4) Load 565(storeTemp) + ImageWrite 569 103 570 + 575: 22(ptr) AccessChain 573(psout) 51 + Store 575 574 + 578: 22(ptr) AccessChain 573(psout) 51 + 579: 21(fvec4) Load 578 + Store 577(Color) 579 Return FunctionEnd 11(Fn1(vi4;): 7(ivec4) Function None 9 diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out new file mode 100644 index 00000000..0769cde4 --- /dev/null +++ b/Test/baseResults/hlsl.tx.bracket.frag.out @@ -0,0 +1,702 @@ +hlsl.tx.bracket.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:38 Function Definition: Fn1(vi4; (temp 4-component vector of int) +0:38 Function Parameters: +0:38 'x' (in 4-component vector of int) +0:? Sequence +0:38 Branch: Return with expression +0:38 'x' (in 4-component vector of int) +0:39 Function Definition: Fn1(vu4; (temp 4-component vector of uint) +0:39 Function Parameters: +0:39 'x' (in 4-component vector of uint) +0:? Sequence +0:39 Branch: Return with expression +0:39 'x' (in 4-component vector of uint) +0:40 Function Definition: Fn1(vf4; (temp 4-component vector of float) +0:40 Function Parameters: +0:40 'x' (in 4-component vector of float) +0:? Sequence +0:40 Branch: Return with expression +0:40 'x' (in 4-component vector of float) +0:42 Function Definition: SomeValue( (temp 4-component vector of float) +0:42 Function Parameters: +0:? Sequence +0:42 Branch: Return with expression +0:42 Convert int to float (temp 4-component vector of float) +0:42 c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int) +0:42 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:42 Constant: +0:42 3 (const uint) +0:45 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:45 Function Parameters: +0:? Sequence +0:49 textureFetch (temp 4-component vector of float) +0:49 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:49 c1: direct index for structure (layout(offset=0 ) uniform int) +0:49 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:49 Constant: +0:49 0 (const uint) +0:49 Constant: +0:49 0 (const int) +0:51 Sequence +0:51 move second child to first child (temp 4-component vector of float) +0:51 'r00' (temp 4-component vector of float) +0:51 textureFetch (temp 4-component vector of float) +0:51 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:51 c1: direct index for structure (layout(offset=0 ) uniform int) +0:51 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:51 Constant: +0:51 0 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child (temp 4-component vector of int) +0:52 'r01' (temp 4-component vector of int) +0:52 textureFetch (temp 4-component vector of int) +0:52 'g_tTex1di4' (uniform itexture1D) +0:52 c1: direct index for structure (layout(offset=0 ) uniform int) +0:52 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:52 Constant: +0:52 0 (const uint) +0:52 Constant: +0:52 0 (const int) +0:53 Sequence +0:53 move second child to first child (temp 4-component vector of uint) +0:53 'r02' (temp 4-component vector of uint) +0:53 textureFetch (temp 4-component vector of uint) +0:53 'g_tTex1du4' (uniform utexture1D) +0:53 c1: direct index for structure (layout(offset=0 ) uniform int) +0:53 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:53 Constant: +0:53 0 (const uint) +0:53 Constant: +0:53 0 (const int) +0:56 Sequence +0:56 move second child to first child (temp 4-component vector of float) +0:56 'r10' (temp 4-component vector of float) +0:56 textureFetch (temp 4-component vector of float) +0:56 'g_tTex2df4' (uniform texture2D) +0:56 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:56 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 0 (const int) +0:57 Sequence +0:57 move second child to first child (temp 4-component vector of int) +0:57 'r11' (temp 4-component vector of int) +0:57 textureFetch (temp 4-component vector of int) +0:57 'g_tTex2di4' (uniform itexture2D) +0:57 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:57 Constant: +0:57 1 (const uint) +0:57 Constant: +0:57 0 (const int) +0:58 Sequence +0:58 move second child to first child (temp 4-component vector of uint) +0:58 'r12' (temp 4-component vector of uint) +0:58 textureFetch (temp 4-component vector of uint) +0:58 'g_tTex2du4' (uniform utexture2D) +0:58 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:58 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:58 Constant: +0:58 1 (const uint) +0:58 Constant: +0:58 0 (const int) +0:61 Sequence +0:61 move second child to first child (temp 4-component vector of float) +0:61 'r20' (temp 4-component vector of float) +0:61 textureFetch (temp 4-component vector of float) +0:61 'g_tTex3df4' (uniform texture3D) +0:61 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:61 Constant: +0:61 2 (const uint) +0:61 Constant: +0:61 0 (const int) +0:62 Sequence +0:62 move second child to first child (temp 4-component vector of int) +0:62 'r21' (temp 4-component vector of int) +0:62 textureFetch (temp 4-component vector of int) +0:62 'g_tTex3di4' (uniform itexture3D) +0:62 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:62 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:62 Constant: +0:62 2 (const uint) +0:62 Constant: +0:62 0 (const int) +0:63 Sequence +0:63 move second child to first child (temp 4-component vector of uint) +0:63 'r22' (temp 4-component vector of uint) +0:63 textureFetch (temp 4-component vector of uint) +0:63 'g_tTex3du4' (uniform utexture3D) +0:63 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:63 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:63 Constant: +0:63 2 (const uint) +0:63 Constant: +0:63 0 (const int) +0:66 Function Call: Fn1(vf4; (temp 4-component vector of float) +0:66 textureFetch (temp 4-component vector of float) +0:66 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:66 c1: direct index for structure (layout(offset=0 ) uniform int) +0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:66 Constant: +0:66 0 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Function Call: Fn1(vi4; (temp 4-component vector of int) +0:67 textureFetch (temp 4-component vector of int) +0:67 'g_tTex1di4' (uniform itexture1D) +0:67 c1: direct index for structure (layout(offset=0 ) uniform int) +0:67 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:67 Constant: +0:67 0 (const uint) +0:67 Constant: +0:67 0 (const int) +0:68 Function Call: Fn1(vu4; (temp 4-component vector of uint) +0:68 textureFetch (temp 4-component vector of uint) +0:68 'g_tTex1du4' (uniform utexture1D) +0:68 c1: direct index for structure (layout(offset=0 ) uniform int) +0:68 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:68 Constant: +0:68 0 (const uint) +0:68 Constant: +0:68 0 (const int) +0:70 move second child to first child (temp 4-component vector of float) +0:70 Color: direct index for structure (temp 4-component vector of float) +0:70 'psout' (temp structure{temp 4-component vector of float Color}) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:72 Sequence +0:72 Sequence +0:72 move second child to first child (temp 4-component vector of float) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) +0:72 Color: direct index for structure (temp 4-component vector of float) +0:72 'psout' (temp structure{temp 4-component vector of float Color}) +0:72 Constant: +0:72 0 (const int) +0:72 Branch: Return +0:? Linker Objects +0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) +0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:? 'g_tTex1di4' (uniform itexture1D) +0:? 'g_tTex1du4' (uniform utexture1D) +0:? 'g_tTex2df4' (uniform texture2D) +0:? 'g_tTex2di4' (uniform itexture2D) +0:? 'g_tTex2du4' (uniform utexture2D) +0:? 'g_tTex3df4' (uniform texture3D) +0:? 'g_tTex3di4' (uniform itexture3D) +0:? 'g_tTex3du4' (uniform utexture3D) +0:? 'g_tTex1df4a' (uniform texture1DArray) +0:? 'g_tTex1di4a' (uniform itexture1DArray) +0:? 'g_tTex1du4a' (uniform utexture1DArray) +0:? 'g_tTex2df4a' (uniform texture2DArray) +0:? 'g_tTex2di4a' (uniform itexture2DArray) +0:? 'g_tTex2du4a' (uniform utexture2DArray) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:38 Function Definition: Fn1(vi4; (temp 4-component vector of int) +0:38 Function Parameters: +0:38 'x' (in 4-component vector of int) +0:? Sequence +0:38 Branch: Return with expression +0:38 'x' (in 4-component vector of int) +0:39 Function Definition: Fn1(vu4; (temp 4-component vector of uint) +0:39 Function Parameters: +0:39 'x' (in 4-component vector of uint) +0:? Sequence +0:39 Branch: Return with expression +0:39 'x' (in 4-component vector of uint) +0:40 Function Definition: Fn1(vf4; (temp 4-component vector of float) +0:40 Function Parameters: +0:40 'x' (in 4-component vector of float) +0:? Sequence +0:40 Branch: Return with expression +0:40 'x' (in 4-component vector of float) +0:42 Function Definition: SomeValue( (temp 4-component vector of float) +0:42 Function Parameters: +0:? Sequence +0:42 Branch: Return with expression +0:42 Convert int to float (temp 4-component vector of float) +0:42 c4: direct index for structure (layout(offset=32 ) uniform 4-component vector of int) +0:42 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:42 Constant: +0:42 3 (const uint) +0:45 Function Definition: main( (temp structure{temp 4-component vector of float Color}) +0:45 Function Parameters: +0:? Sequence +0:49 textureFetch (temp 4-component vector of float) +0:49 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:49 c1: direct index for structure (layout(offset=0 ) uniform int) +0:49 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:49 Constant: +0:49 0 (const uint) +0:49 Constant: +0:49 0 (const int) +0:51 Sequence +0:51 move second child to first child (temp 4-component vector of float) +0:51 'r00' (temp 4-component vector of float) +0:51 textureFetch (temp 4-component vector of float) +0:51 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:51 c1: direct index for structure (layout(offset=0 ) uniform int) +0:51 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:51 Constant: +0:51 0 (const uint) +0:51 Constant: +0:51 0 (const int) +0:52 Sequence +0:52 move second child to first child (temp 4-component vector of int) +0:52 'r01' (temp 4-component vector of int) +0:52 textureFetch (temp 4-component vector of int) +0:52 'g_tTex1di4' (uniform itexture1D) +0:52 c1: direct index for structure (layout(offset=0 ) uniform int) +0:52 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:52 Constant: +0:52 0 (const uint) +0:52 Constant: +0:52 0 (const int) +0:53 Sequence +0:53 move second child to first child (temp 4-component vector of uint) +0:53 'r02' (temp 4-component vector of uint) +0:53 textureFetch (temp 4-component vector of uint) +0:53 'g_tTex1du4' (uniform utexture1D) +0:53 c1: direct index for structure (layout(offset=0 ) uniform int) +0:53 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:53 Constant: +0:53 0 (const uint) +0:53 Constant: +0:53 0 (const int) +0:56 Sequence +0:56 move second child to first child (temp 4-component vector of float) +0:56 'r10' (temp 4-component vector of float) +0:56 textureFetch (temp 4-component vector of float) +0:56 'g_tTex2df4' (uniform texture2D) +0:56 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:56 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 0 (const int) +0:57 Sequence +0:57 move second child to first child (temp 4-component vector of int) +0:57 'r11' (temp 4-component vector of int) +0:57 textureFetch (temp 4-component vector of int) +0:57 'g_tTex2di4' (uniform itexture2D) +0:57 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:57 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:57 Constant: +0:57 1 (const uint) +0:57 Constant: +0:57 0 (const int) +0:58 Sequence +0:58 move second child to first child (temp 4-component vector of uint) +0:58 'r12' (temp 4-component vector of uint) +0:58 textureFetch (temp 4-component vector of uint) +0:58 'g_tTex2du4' (uniform utexture2D) +0:58 c2: direct index for structure (layout(offset=8 ) uniform 2-component vector of int) +0:58 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:58 Constant: +0:58 1 (const uint) +0:58 Constant: +0:58 0 (const int) +0:61 Sequence +0:61 move second child to first child (temp 4-component vector of float) +0:61 'r20' (temp 4-component vector of float) +0:61 textureFetch (temp 4-component vector of float) +0:61 'g_tTex3df4' (uniform texture3D) +0:61 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:61 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:61 Constant: +0:61 2 (const uint) +0:61 Constant: +0:61 0 (const int) +0:62 Sequence +0:62 move second child to first child (temp 4-component vector of int) +0:62 'r21' (temp 4-component vector of int) +0:62 textureFetch (temp 4-component vector of int) +0:62 'g_tTex3di4' (uniform itexture3D) +0:62 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:62 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:62 Constant: +0:62 2 (const uint) +0:62 Constant: +0:62 0 (const int) +0:63 Sequence +0:63 move second child to first child (temp 4-component vector of uint) +0:63 'r22' (temp 4-component vector of uint) +0:63 textureFetch (temp 4-component vector of uint) +0:63 'g_tTex3du4' (uniform utexture3D) +0:63 c3: direct index for structure (layout(offset=16 ) uniform 3-component vector of int) +0:63 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:63 Constant: +0:63 2 (const uint) +0:63 Constant: +0:63 0 (const int) +0:66 Function Call: Fn1(vf4; (temp 4-component vector of float) +0:66 textureFetch (temp 4-component vector of float) +0:66 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:66 c1: direct index for structure (layout(offset=0 ) uniform int) +0:66 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:66 Constant: +0:66 0 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Function Call: Fn1(vi4; (temp 4-component vector of int) +0:67 textureFetch (temp 4-component vector of int) +0:67 'g_tTex1di4' (uniform itexture1D) +0:67 c1: direct index for structure (layout(offset=0 ) uniform int) +0:67 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:67 Constant: +0:67 0 (const uint) +0:67 Constant: +0:67 0 (const int) +0:68 Function Call: Fn1(vu4; (temp 4-component vector of uint) +0:68 textureFetch (temp 4-component vector of uint) +0:68 'g_tTex1du4' (uniform utexture1D) +0:68 c1: direct index for structure (layout(offset=0 ) uniform int) +0:68 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:68 Constant: +0:68 0 (const uint) +0:68 Constant: +0:68 0 (const int) +0:70 move second child to first child (temp 4-component vector of float) +0:70 Color: direct index for structure (temp 4-component vector of float) +0:70 'psout' (temp structure{temp 4-component vector of float Color}) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:72 Sequence +0:72 Sequence +0:72 move second child to first child (temp 4-component vector of float) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) +0:72 Color: direct index for structure (temp 4-component vector of float) +0:72 'psout' (temp structure{temp 4-component vector of float Color}) +0:72 Constant: +0:72 0 (const int) +0:72 Branch: Return +0:? Linker Objects +0:? 'g_sSamp' (layout(binding=0 ) uniform sampler) +0:? 'g_tTex1df4' (layout(binding=0 ) uniform texture1D) +0:? 'g_tTex1di4' (uniform itexture1D) +0:? 'g_tTex1du4' (uniform utexture1D) +0:? 'g_tTex2df4' (uniform texture2D) +0:? 'g_tTex2di4' (uniform itexture2D) +0:? 'g_tTex2du4' (uniform utexture2D) +0:? 'g_tTex3df4' (uniform texture3D) +0:? 'g_tTex3di4' (uniform itexture3D) +0:? 'g_tTex3du4' (uniform utexture3D) +0:? 'g_tTex1df4a' (uniform texture1DArray) +0:? 'g_tTex1di4a' (uniform itexture1DArray) +0:? 'g_tTex1du4a' (uniform utexture1DArray) +0:? 'g_tTex2df4a' (uniform texture2DArray) +0:? 'g_tTex2di4a' (uniform itexture2DArray) +0:? 'g_tTex2du4a' (uniform utexture2DArray) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int c1, layout(offset=8 ) uniform 2-component vector of int c2, layout(offset=16 ) uniform 3-component vector of int c3, layout(offset=32 ) uniform 4-component vector of int c4, layout(offset=48 ) uniform int o1, layout(offset=56 ) uniform 2-component vector of int o2, layout(offset=64 ) uniform 3-component vector of int o3, layout(offset=80 ) uniform 4-component vector of int o4}) +0:? 'Color' (layout(location=0 ) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 183 + + Capability Shader + Capability Sampled1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 158 + ExecutionMode 4 OriginUpperLeft + Name 4 "main" + Name 11 "Fn1(vi4;" + Name 10 "x" + Name 18 "Fn1(vu4;" + Name 17 "x" + Name 25 "Fn1(vf4;" + Name 24 "x" + Name 28 "SomeValue(" + Name 41 "$Global" + MemberName 41($Global) 0 "c1" + MemberName 41($Global) 1 "c2" + MemberName 41($Global) 2 "c3" + MemberName 41($Global) 3 "c4" + MemberName 41($Global) 4 "o1" + MemberName 41($Global) 5 "o2" + MemberName 41($Global) 6 "o3" + MemberName 41($Global) 7 "o4" + Name 43 "" + Name 53 "g_tTex1df4" + Name 60 "r00" + Name 65 "r01" + Name 68 "g_tTex1di4" + Name 73 "r02" + Name 76 "g_tTex1du4" + Name 81 "r10" + Name 84 "g_tTex2df4" + Name 91 "r11" + Name 94 "g_tTex2di4" + Name 99 "r12" + Name 102 "g_tTex2du4" + Name 107 "r20" + Name 110 "g_tTex3df4" + Name 117 "r21" + Name 120 "g_tTex3di4" + Name 125 "r22" + Name 128 "g_tTex3du4" + Name 137 "param" + Name 143 "param" + Name 149 "param" + Name 151 "PS_OUTPUT" + MemberName 151(PS_OUTPUT) 0 "Color" + Name 153 "psout" + Name 158 "Color" + Name 164 "g_sSamp" + Name 167 "g_tTex1df4a" + Name 170 "g_tTex1di4a" + Name 173 "g_tTex1du4a" + Name 176 "g_tTex2df4a" + Name 179 "g_tTex2di4a" + Name 182 "g_tTex2du4a" + MemberDecorate 41($Global) 0 Offset 0 + MemberDecorate 41($Global) 1 Offset 8 + MemberDecorate 41($Global) 2 Offset 16 + MemberDecorate 41($Global) 3 Offset 32 + MemberDecorate 41($Global) 4 Offset 48 + MemberDecorate 41($Global) 5 Offset 56 + MemberDecorate 41($Global) 6 Offset 64 + MemberDecorate 41($Global) 7 Offset 80 + Decorate 41($Global) Block + Decorate 43 DescriptorSet 0 + Decorate 53(g_tTex1df4) DescriptorSet 0 + Decorate 53(g_tTex1df4) Binding 0 + Decorate 68(g_tTex1di4) DescriptorSet 0 + Decorate 76(g_tTex1du4) DescriptorSet 0 + Decorate 84(g_tTex2df4) DescriptorSet 0 + Decorate 94(g_tTex2di4) DescriptorSet 0 + Decorate 102(g_tTex2du4) DescriptorSet 0 + Decorate 110(g_tTex3df4) DescriptorSet 0 + Decorate 120(g_tTex3di4) DescriptorSet 0 + Decorate 128(g_tTex3du4) DescriptorSet 0 + Decorate 158(Color) Location 0 + Decorate 164(g_sSamp) DescriptorSet 0 + Decorate 164(g_sSamp) Binding 0 + Decorate 167(g_tTex1df4a) DescriptorSet 0 + Decorate 170(g_tTex1di4a) DescriptorSet 0 + Decorate 173(g_tTex1du4a) DescriptorSet 0 + Decorate 176(g_tTex2df4a) DescriptorSet 0 + Decorate 179(g_tTex2di4a) DescriptorSet 0 + Decorate 182(g_tTex2du4a) DescriptorSet 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 9: TypeFunction 7(ivec4) 8(ptr) + 13: TypeInt 32 0 + 14: TypeVector 13(int) 4 + 15: TypePointer Function 14(ivec4) + 16: TypeFunction 14(ivec4) 15(ptr) + 20: TypeFloat 32 + 21: TypeVector 20(float) 4 + 22: TypePointer Function 21(fvec4) + 23: TypeFunction 21(fvec4) 22(ptr) + 27: TypeFunction 21(fvec4) + 39: TypeVector 6(int) 2 + 40: TypeVector 6(int) 3 + 41($Global): TypeStruct 6(int) 39(ivec2) 40(ivec3) 7(ivec4) 6(int) 39(ivec2) 40(ivec3) 7(ivec4) + 42: TypePointer Uniform 41($Global) + 43: 42(ptr) Variable Uniform + 44: 6(int) Constant 3 + 45: TypePointer Uniform 7(ivec4) + 51: TypeImage 20(float) 1D sampled format:Unknown + 52: TypePointer UniformConstant 51 + 53(g_tTex1df4): 52(ptr) Variable UniformConstant + 55: 6(int) Constant 0 + 56: TypePointer Uniform 6(int) + 66: TypeImage 6(int) 1D sampled format:Unknown + 67: TypePointer UniformConstant 66 + 68(g_tTex1di4): 67(ptr) Variable UniformConstant + 74: TypeImage 13(int) 1D sampled format:Unknown + 75: TypePointer UniformConstant 74 + 76(g_tTex1du4): 75(ptr) Variable UniformConstant + 82: TypeImage 20(float) 2D sampled format:Unknown + 83: TypePointer UniformConstant 82 + 84(g_tTex2df4): 83(ptr) Variable UniformConstant + 86: 6(int) Constant 1 + 87: TypePointer Uniform 39(ivec2) + 92: TypeImage 6(int) 2D sampled format:Unknown + 93: TypePointer UniformConstant 92 + 94(g_tTex2di4): 93(ptr) Variable UniformConstant + 100: TypeImage 13(int) 2D sampled format:Unknown + 101: TypePointer UniformConstant 100 + 102(g_tTex2du4): 101(ptr) Variable UniformConstant + 108: TypeImage 20(float) 3D sampled format:Unknown + 109: TypePointer UniformConstant 108 + 110(g_tTex3df4): 109(ptr) Variable UniformConstant + 112: 6(int) Constant 2 + 113: TypePointer Uniform 40(ivec3) + 118: TypeImage 6(int) 3D sampled format:Unknown + 119: TypePointer UniformConstant 118 + 120(g_tTex3di4): 119(ptr) Variable UniformConstant + 126: TypeImage 13(int) 3D sampled format:Unknown + 127: TypePointer UniformConstant 126 + 128(g_tTex3du4): 127(ptr) Variable UniformConstant + 151(PS_OUTPUT): TypeStruct 21(fvec4) + 152: TypePointer Function 151(PS_OUTPUT) + 154: 20(float) Constant 1065353216 + 155: 21(fvec4) ConstantComposite 154 154 154 154 + 157: TypePointer Output 21(fvec4) + 158(Color): 157(ptr) Variable Output + 162: TypeSampler + 163: TypePointer UniformConstant 162 + 164(g_sSamp): 163(ptr) Variable UniformConstant + 165: TypeImage 20(float) 1D array sampled format:Unknown + 166: TypePointer UniformConstant 165 +167(g_tTex1df4a): 166(ptr) Variable UniformConstant + 168: TypeImage 6(int) 1D array sampled format:Unknown + 169: TypePointer UniformConstant 168 +170(g_tTex1di4a): 169(ptr) Variable UniformConstant + 171: TypeImage 13(int) 1D array sampled format:Unknown + 172: TypePointer UniformConstant 171 +173(g_tTex1du4a): 172(ptr) Variable UniformConstant + 174: TypeImage 20(float) 2D array sampled format:Unknown + 175: TypePointer UniformConstant 174 +176(g_tTex2df4a): 175(ptr) Variable UniformConstant + 177: TypeImage 6(int) 2D array sampled format:Unknown + 178: TypePointer UniformConstant 177 +179(g_tTex2di4a): 178(ptr) Variable UniformConstant + 180: TypeImage 13(int) 2D array sampled format:Unknown + 181: TypePointer UniformConstant 180 +182(g_tTex2du4a): 181(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 60(r00): 22(ptr) Variable Function + 65(r01): 8(ptr) Variable Function + 73(r02): 15(ptr) Variable Function + 81(r10): 22(ptr) Variable Function + 91(r11): 8(ptr) Variable Function + 99(r12): 15(ptr) Variable Function + 107(r20): 22(ptr) Variable Function + 117(r21): 8(ptr) Variable Function + 125(r22): 15(ptr) Variable Function + 137(param): 22(ptr) Variable Function + 143(param): 8(ptr) Variable Function + 149(param): 15(ptr) Variable Function + 153(psout): 152(ptr) Variable Function + 54: 51 Load 53(g_tTex1df4) + 57: 56(ptr) AccessChain 43 55 + 58: 6(int) Load 57 + 59: 21(fvec4) ImageFetch 54 58 Lod 55 + 61: 51 Load 53(g_tTex1df4) + 62: 56(ptr) AccessChain 43 55 + 63: 6(int) Load 62 + 64: 21(fvec4) ImageFetch 61 63 Lod 55 + Store 60(r00) 64 + 69: 66 Load 68(g_tTex1di4) + 70: 56(ptr) AccessChain 43 55 + 71: 6(int) Load 70 + 72: 7(ivec4) ImageFetch 69 71 Lod 55 + Store 65(r01) 72 + 77: 74 Load 76(g_tTex1du4) + 78: 56(ptr) AccessChain 43 55 + 79: 6(int) Load 78 + 80: 14(ivec4) ImageFetch 77 79 Lod 55 + Store 73(r02) 80 + 85: 82 Load 84(g_tTex2df4) + 88: 87(ptr) AccessChain 43 86 + 89: 39(ivec2) Load 88 + 90: 21(fvec4) ImageFetch 85 89 Lod 55 + Store 81(r10) 90 + 95: 92 Load 94(g_tTex2di4) + 96: 87(ptr) AccessChain 43 86 + 97: 39(ivec2) Load 96 + 98: 7(ivec4) ImageFetch 95 97 Lod 55 + Store 91(r11) 98 + 103: 100 Load 102(g_tTex2du4) + 104: 87(ptr) AccessChain 43 86 + 105: 39(ivec2) Load 104 + 106: 14(ivec4) ImageFetch 103 105 Lod 55 + Store 99(r12) 106 + 111: 108 Load 110(g_tTex3df4) + 114: 113(ptr) AccessChain 43 112 + 115: 40(ivec3) Load 114 + 116: 21(fvec4) ImageFetch 111 115 Lod 55 + Store 107(r20) 116 + 121: 118 Load 120(g_tTex3di4) + 122: 113(ptr) AccessChain 43 112 + 123: 40(ivec3) Load 122 + 124: 7(ivec4) ImageFetch 121 123 Lod 55 + Store 117(r21) 124 + 129: 126 Load 128(g_tTex3du4) + 130: 113(ptr) AccessChain 43 112 + 131: 40(ivec3) Load 130 + 132: 14(ivec4) ImageFetch 129 131 Lod 55 + Store 125(r22) 132 + 133: 51 Load 53(g_tTex1df4) + 134: 56(ptr) AccessChain 43 55 + 135: 6(int) Load 134 + 136: 21(fvec4) ImageFetch 133 135 Lod 55 + Store 137(param) 136 + 138: 21(fvec4) FunctionCall 25(Fn1(vf4;) 137(param) + 139: 66 Load 68(g_tTex1di4) + 140: 56(ptr) AccessChain 43 55 + 141: 6(int) Load 140 + 142: 7(ivec4) ImageFetch 139 141 Lod 55 + Store 143(param) 142 + 144: 7(ivec4) FunctionCall 11(Fn1(vi4;) 143(param) + 145: 74 Load 76(g_tTex1du4) + 146: 56(ptr) AccessChain 43 55 + 147: 6(int) Load 146 + 148: 14(ivec4) ImageFetch 145 147 Lod 55 + Store 149(param) 148 + 150: 14(ivec4) FunctionCall 18(Fn1(vu4;) 149(param) + 156: 22(ptr) AccessChain 153(psout) 55 + Store 156 155 + 159: 22(ptr) AccessChain 153(psout) 55 + 160: 21(fvec4) Load 159 + Store 158(Color) 160 + Return + FunctionEnd + 11(Fn1(vi4;): 7(ivec4) Function None 9 + 10(x): 8(ptr) FunctionParameter + 12: Label + 30: 7(ivec4) Load 10(x) + ReturnValue 30 + FunctionEnd + 18(Fn1(vu4;): 14(ivec4) Function None 16 + 17(x): 15(ptr) FunctionParameter + 19: Label + 33: 14(ivec4) Load 17(x) + ReturnValue 33 + FunctionEnd + 25(Fn1(vf4;): 21(fvec4) Function None 23 + 24(x): 22(ptr) FunctionParameter + 26: Label + 36: 21(fvec4) Load 24(x) + ReturnValue 36 + FunctionEnd + 28(SomeValue(): 21(fvec4) Function None 27 + 29: Label + 46: 45(ptr) AccessChain 43 44 + 47: 7(ivec4) Load 46 + 48: 21(fvec4) ConvertSToF 47 + ReturnValue 48 + FunctionEnd diff --git a/Test/hlsl.rw.bracket.frag b/Test/hlsl.rw.bracket.frag index 650b5674..9390e8de 100644 --- a/Test/hlsl.rw.bracket.frag +++ b/Test/hlsl.rw.bracket.frag @@ -74,7 +74,7 @@ PS_OUTPUT main() // Test as L-values // 1D - g_tTex1df4[c1] = SomeValue(); // complex L-value + g_tTex1df4[c1] = SomeValue(); // complex R-value g_tTex1df4[c1] = lf4; g_tTex1di4[c1] = int4(2,2,3,4); g_tTex1du4[c1] = uint4(3,2,3,4); @@ -103,7 +103,7 @@ PS_OUTPUT main() g_tTex3di4[c3] = int4(8,6,7,8); g_tTex3du4[c3] = uint4(9,2,3,4); - // // Test function calling + // Test function calling Fn1(g_tTex1df4[c1]); // in Fn1(g_tTex1di4[c1]); // in Fn1(g_tTex1du4[c1]); // in @@ -131,6 +131,9 @@ PS_OUTPUT main() g_tTex1di4[c1]++; g_tTex1du4[c1]--; + // read and write + g_tTex1df4[1] = g_tTex2df4[int2(2,3)]; + psout.Color = 1.0; return psout; diff --git a/Test/hlsl.tx.bracket.frag b/Test/hlsl.tx.bracket.frag new file mode 100644 index 00000000..0d3d81f8 --- /dev/null +++ b/Test/hlsl.tx.bracket.frag @@ -0,0 +1,73 @@ +SamplerState g_sSamp : register(s0); + +Texture1D g_tTex1df4 : register(t0); +Texture1D g_tTex1di4; +Texture1D g_tTex1du4; + +Texture2D g_tTex2df4; +Texture2D g_tTex2di4; +Texture2D g_tTex2du4; + +Texture3D g_tTex3df4; +Texture3D g_tTex3di4; +Texture3D g_tTex3du4; + +Texture1DArray g_tTex1df4a; +Texture1DArray g_tTex1di4a; +Texture1DArray g_tTex1du4a; + +Texture2DArray g_tTex2df4a; +Texture2DArray g_tTex2di4a; +Texture2DArray g_tTex2du4a; + +struct PS_OUTPUT +{ + float4 Color : SV_Target0; +}; + +uniform int c1; +uniform int2 c2; +uniform int3 c3; +uniform int4 c4; + +uniform int o1; +uniform int2 o2; +uniform int3 o3; +uniform int4 o4; + +int4 Fn1(in int4 x) { return x; } +uint4 Fn1(in uint4 x) { return x; } +float4 Fn1(in float4 x) { return x; } + +float4 SomeValue() { return c4; } + +PS_OUTPUT main() +{ + PS_OUTPUT psout; + + // 1D + g_tTex1df4[c1]; + + float4 r00 = g_tTex1df4[c1]; + int4 r01 = g_tTex1di4[c1]; + uint4 r02 = g_tTex1du4[c1]; + + // 2D + float4 r10 = g_tTex2df4[c2]; + int4 r11 = g_tTex2di4[c2]; + uint4 r12 = g_tTex2du4[c2]; + + // 3D + float4 r20 = g_tTex3df4[c3]; + int4 r21 = g_tTex3di4[c3]; + uint4 r22 = g_tTex3du4[c3]; + + // Test function calling + Fn1(g_tTex1df4[c1]); // in + Fn1(g_tTex1di4[c1]); // in + Fn1(g_tTex1du4[c1]); // in + + psout.Color = 1.0; + + return psout; +} diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 96e5c348..81fdedba 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -2046,8 +2046,9 @@ bool TIntermBinary::promote() break; case EOpVectorTimesScalarAssign: - if (left->isVector() && right->isScalar()) - return true; + if (!left->isVector() || !right->isScalar()) + return false; + break; default: return false; @@ -2069,6 +2070,7 @@ bool TIntermBinary::promote() case EOpExclusiveOrAssign: case EOpLeftShiftAssign: case EOpRightShiftAssign: + case EOpVectorTimesScalarAssign: if (getType() != left->getType()) return false; break; diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 9a160cf4..354a5dfe 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -191,6 +191,7 @@ INSTANTIATE_TEST_CASE_P( {"hlsl.switch.frag", "PixelShaderFunction"}, {"hlsl.swizzle.frag", "PixelShaderFunction"}, {"hlsl.templatetypes.frag", "PixelShaderFunction"}, + {"hlsl.tx.bracket.frag", "main"}, {"hlsl.typedef.frag", "PixelShaderFunction"}, {"hlsl.whileLoop.frag", "PixelShaderFunction"}, {"hlsl.void.frag", "PixelShaderFunction"}, diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp index 5dc25fc5..5f9ec267 100755 --- a/hlsl/hlslGrammar.cpp +++ b/hlsl/hlslGrammar.cpp @@ -1948,7 +1948,7 @@ bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node) return true; node = intermediate.addUnaryMath(unaryOp, node, loc); - node = parseContext.handleLvalue(loc, "", node); + node = parseContext.handleLvalue(loc, "unary operator", node); return node != nullptr; } @@ -2064,7 +2064,7 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node) case EOpPostDecrement: // DEC_OP node = intermediate.addUnaryMath(postOp, node, loc); - node = parseContext.handleLvalue(loc, "", node); + node = parseContext.handleLvalue(loc, "unary operator", node); break; default: assert(0); diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 5c1fd059..8d841592 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -130,6 +130,10 @@ bool HlslParseContext::parseShaderStrings(TPpContext& ppContext, TInputScanner& return numErrors == 0; } +// +// Return true if this l-value node should be converted in some manner. +// For instance: turning a load aggregate into a store in an l-value. +// bool HlslParseContext::shouldConvertLValue(const TIntermNode* node) const { if (node == nullptr) @@ -177,6 +181,9 @@ bool HlslParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, T // TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* op, TIntermTyped* node) { + if (node == nullptr) + return nullptr; + TIntermBinary* nodeAsBinary = node->getAsBinaryNode(); TIntermUnary* nodeAsUnary = node->getAsUnaryNode(); TIntermAggregate* sequence = nullptr; @@ -571,12 +578,18 @@ TIntermTyped* HlslParseContext::handleBracketOperator(const TSourceLoc& loc, TIn const TSampler& sampler = base->getType().getSampler(); if (sampler.isImage() || sampler.isTexture()) { const int vecSize = 4; // TODO: handle arbitrary sizes (get from qualifier) - TIntermAggregate* load = new TIntermAggregate(EOpImageLoad); + TIntermAggregate* load = new TIntermAggregate(sampler.isImage() ? EOpImageLoad : EOpTextureFetch); load->setType(TType(sampler.type, EvqTemporary, vecSize)); load->setLoc(loc); load->getSequence().push_back(base); load->getSequence().push_back(index); + + // Textures need a MIP. First indirection is always to mip 0. If there's another, we'll add it + // later. + if (sampler.isTexture()) + load->getSequence().push_back(intermediate.addConstantUnion(0, loc, true)); + return load; } } From b3da8a9cb30bee73e4646e50ff2ce6c21bef8ec1 Mon Sep 17 00:00:00 2001 From: steve-lunarg Date: Wed, 12 Oct 2016 12:38:12 -0600 Subject: [PATCH 5/5] HLSL: phase 2e: introduce lower level addBinaryNode/UnaryNode fns - hlsl.struct.frag variable changed to static, assignment replacd. - Created new low level functions addBinaryNode and addUnaryNode. These are used by higher level functions such as addAssignment, and do not do any argument promotion or conversion of any sort. - Two functions above are now used in RWTexture lvalue conversions. Also, other direction creations of unary or binary nodes now use them, e.g, addIndex. This cleans up some existing code. - removed handling of EOpVectorTimesScalar from promote() - removed comment from ParseHelper.cpp --- Test/baseResults/hlsl.struct.frag.out | 193 +++++++++--------- Test/hlsl.struct.frag | 4 +- glslang/MachineIndependent/Intermediate.cpp | 98 +++++---- glslang/MachineIndependent/ParseHelper.cpp | 1 - .../MachineIndependent/localintermediate.h | 7 + hlsl/hlslParseHelper.cpp | 23 ++- 6 files changed, 170 insertions(+), 156 deletions(-) diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out index 7605543f..5fef9599 100755 --- a/Test/baseResults/hlsl.struct.frag.out +++ b/Test/baseResults/hlsl.struct.frag.out @@ -14,22 +14,21 @@ gl_FragCoord origin is upper left 0:39 Compare Equal (temp bool) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) -0:40 i: direct index for structure (temp 4-component vector of float) -0:40 s2: direct index for structure (layout(offset=48 ) uniform structure{temp 4-component vector of float i}) -0:40 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) +0:40 move second child to first child (temp 4-component vector of float) +0:40 i: direct index for structure (temp 4-component vector of float) +0:40 's2' (global structure{temp 4-component vector of float i}) 0:40 Constant: -0:40 1 (const uint) -0:40 Constant: -0:40 0 (const int) -0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) +0:40 0 (const int) +0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) 0:42 Sequence 0:42 move second child to first child (temp 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:42 'input' (layout(location=0 ) in 4-component vector of float) 0:42 Branch: Return 0:? Linker Objects +0:? 's2' (global structure{temp 4-component vector of float i}) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) -0:? 'anon@0' (uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) 0:? 'input' (layout(location=0 ) in 4-component vector of float) 0:? 'a' (layout(location=1 ) smooth in 4-component vector of float) 0:? 'b' (layout(location=2 ) flat in bool) @@ -55,22 +54,21 @@ gl_FragCoord origin is upper left 0:39 Compare Equal (temp bool) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) 0:39 's3' (temp structure{temp 3-component vector of bool b3}) -0:40 i: direct index for structure (temp 4-component vector of float) -0:40 s2: direct index for structure (layout(offset=48 ) uniform structure{temp 4-component vector of float i}) -0:40 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) +0:40 move second child to first child (temp 4-component vector of float) +0:40 i: direct index for structure (temp 4-component vector of float) +0:40 's2' (global structure{temp 4-component vector of float i}) 0:40 Constant: -0:40 1 (const uint) -0:40 Constant: -0:40 0 (const int) -0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) +0:40 0 (const int) +0:? 'ff4' (layout(location=7 binding=0 offset=4 ) in 4-component vector of float) 0:42 Sequence 0:42 move second child to first child (temp 4-component vector of float) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) 0:42 'input' (layout(location=0 ) in 4-component vector of float) 0:42 Branch: Return 0:? Linker Objects +0:? 's2' (global structure{temp 4-component vector of float i}) 0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float) -0:? 'anon@0' (uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(offset=48 ) uniform structure{temp 4-component vector of float i} s2, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) +0:? 'anon@0' (uniform block{layout(offset=0 ) uniform structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d} s1, layout(binding=5 offset=1620 ) uniform float ff5, layout(binding=8 offset=1636 ) uniform float ff6}) 0:? 'input' (layout(location=0 ) in 4-component vector of float) 0:? 'a' (layout(location=1 ) smooth in 4-component vector of float) 0:? 'b' (layout(location=2 ) flat in bool) @@ -83,103 +81,95 @@ gl_FragCoord origin is upper left // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 46 +// Id's are bound by 49 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" 29 31 32 35 37 39 42 43 44 45 + EntryPoint Fragment 4 "PixelShaderFunction" 25 30 31 38 40 42 45 46 47 48 ExecutionMode 4 OriginUpperLeft Name 4 "PixelShaderFunction" Name 8 "FS" MemberName 8(FS) 0 "b3" Name 10 "s3" - Name 20 "myS" - MemberName 20(myS) 0 "b" - MemberName 20(myS) 1 "c" - MemberName 20(myS) 2 "a" - MemberName 20(myS) 3 "d" - Name 21 "" - MemberName 21 0 "i" - Name 22 "$Global" - MemberName 22($Global) 0 "s1" - MemberName 22($Global) 1 "s2" - MemberName 22($Global) 2 "ff5" - MemberName 22($Global) 3 "ff6" - Name 24 "" - Name 29 "ff4" - Name 31 "@entryPointOutput" - Name 32 "input" - Name 35 "a" - Name 37 "b" - Name 39 "c" - Name 42 "d" - Name 43 "ff1" - Name 44 "ff2" - Name 45 "ff3" - MemberDecorate 20(myS) 0 Offset 0 - MemberDecorate 20(myS) 1 Offset 4 - MemberDecorate 20(myS) 2 Offset 16 - MemberDecorate 20(myS) 3 Offset 32 - MemberDecorate 21 0 Offset 0 - MemberDecorate 22($Global) 0 Offset 0 - MemberDecorate 22($Global) 1 Offset 48 - MemberDecorate 22($Global) 2 Offset 1620 - MemberDecorate 22($Global) 3 Offset 1636 - Decorate 22($Global) Block - Decorate 24 DescriptorSet 0 - Decorate 29(ff4) Offset 4 - Decorate 29(ff4) Location 7 - Decorate 29(ff4) Binding 0 - Decorate 31(@entryPointOutput) Location 0 - Decorate 32(input) Location 0 - Decorate 35(a) Location 1 - Decorate 37(b) Flat - Decorate 37(b) Location 2 - Decorate 39(c) NoPerspective - Decorate 39(c) Centroid - Decorate 39(c) Location 3 - Decorate 42(d) Centroid - Decorate 42(d) Location 4 - Decorate 43(ff1) BuiltIn FrontFacing - Decorate 44(ff2) Offset 4 - Decorate 44(ff2) Location 5 - Decorate 45(ff3) Offset 4 - Decorate 45(ff3) Location 6 - Decorate 45(ff3) Binding 0 + Name 19 "" + MemberName 19 0 "i" + Name 21 "s2" + Name 25 "ff4" + Name 30 "@entryPointOutput" + Name 31 "input" + Name 34 "myS" + MemberName 34(myS) 0 "b" + MemberName 34(myS) 1 "c" + MemberName 34(myS) 2 "a" + MemberName 34(myS) 3 "d" + Name 35 "$Global" + MemberName 35($Global) 0 "s1" + MemberName 35($Global) 1 "ff5" + MemberName 35($Global) 2 "ff6" + Name 37 "" + Name 38 "a" + Name 40 "b" + Name 42 "c" + Name 45 "d" + Name 46 "ff1" + Name 47 "ff2" + Name 48 "ff3" + Decorate 25(ff4) Offset 4 + Decorate 25(ff4) Location 7 + Decorate 25(ff4) Binding 0 + Decorate 30(@entryPointOutput) Location 0 + Decorate 31(input) Location 0 + Decorate 35($Global) Block + Decorate 37 DescriptorSet 0 + Decorate 38(a) Location 1 + Decorate 40(b) Flat + Decorate 40(b) Location 2 + Decorate 42(c) NoPerspective + Decorate 42(c) Centroid + Decorate 42(c) Location 3 + Decorate 45(d) Centroid + Decorate 45(d) Location 4 + Decorate 46(ff1) BuiltIn FrontFacing + Decorate 47(ff2) Offset 4 + Decorate 47(ff2) Location 5 + Decorate 48(ff3) Offset 4 + Decorate 48(ff3) Location 6 + Decorate 48(ff3) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeBool 7: TypeVector 6(bool) 3 8(FS): TypeStruct 7(bvec3) 9: TypePointer Function 8(FS) - 17: TypeInt 32 0 - 18: TypeFloat 32 - 19: TypeVector 18(float) 4 - 20(myS): TypeStruct 17(int) 17(int) 19(fvec4) 19(fvec4) - 21: TypeStruct 19(fvec4) - 22($Global): TypeStruct 20(myS) 21(struct) 18(float) 18(float) - 23: TypePointer Uniform 22($Global) - 24: 23(ptr) Variable Uniform - 25: TypeInt 32 1 - 26: 25(int) Constant 1 - 27: 25(int) Constant 0 - 28: TypePointer Input 19(fvec4) - 29(ff4): 28(ptr) Variable Input - 30: TypePointer Output 19(fvec4) -31(@entryPointOutput): 30(ptr) Variable Output - 32(input): 28(ptr) Variable Input - 35(a): 28(ptr) Variable Input - 36: TypePointer Input 6(bool) - 37(b): 36(ptr) Variable Input - 38: TypePointer Input 18(float) - 39(c): 38(ptr) Variable Input - 40: TypeVector 18(float) 2 - 41: TypePointer Input 40(fvec2) - 42(d): 41(ptr) Variable Input - 43(ff1): 36(ptr) Variable Input - 44(ff2): 36(ptr) Variable Input - 45(ff3): 36(ptr) Variable Input + 17: TypeFloat 32 + 18: TypeVector 17(float) 4 + 19: TypeStruct 18(fvec4) + 20: TypePointer Private 19(struct) + 21(s2): 20(ptr) Variable Private + 22: TypeInt 32 1 + 23: 22(int) Constant 0 + 24: TypePointer Input 18(fvec4) + 25(ff4): 24(ptr) Variable Input + 27: TypePointer Private 18(fvec4) + 29: TypePointer Output 18(fvec4) +30(@entryPointOutput): 29(ptr) Variable Output + 31(input): 24(ptr) Variable Input + 34(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4) + 35($Global): TypeStruct 34(myS) 17(float) 17(float) + 36: TypePointer Uniform 35($Global) + 37: 36(ptr) Variable Uniform + 38(a): 24(ptr) Variable Input + 39: TypePointer Input 6(bool) + 40(b): 39(ptr) Variable Input + 41: TypePointer Input 17(float) + 42(c): 41(ptr) Variable Input + 43: TypeVector 17(float) 2 + 44: TypePointer Input 43(fvec2) + 45(d): 44(ptr) Variable Input + 46(ff1): 39(ptr) Variable Input + 47(ff2): 39(ptr) Variable Input + 48(ff3): 39(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label 10(s3): 9(ptr) Variable Function @@ -189,7 +179,10 @@ gl_FragCoord origin is upper left 14: 7(bvec3) CompositeExtract 12 0 15: 7(bvec3) LogicalEqual 13 14 16: 6(bool) All 15 - 33: 19(fvec4) Load 32(input) - Store 31(@entryPointOutput) 33 + 26: 18(fvec4) Load 25(ff4) + 28: 27(ptr) AccessChain 21(s2) 23 + Store 28 26 + 32: 18(fvec4) Load 31(input) + Store 30(@entryPointOutput) 32 Return FunctionEnd diff --git a/Test/hlsl.struct.frag b/Test/hlsl.struct.frag index 456c9ef7..e602c9ed 100644 --- a/Test/hlsl.struct.frag +++ b/Test/hlsl.struct.frag @@ -12,7 +12,7 @@ struct myS { myS s1; -struct { +static struct { float4 i; } s2; @@ -37,7 +37,7 @@ float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0 } s3; s3 == s3; - s2.i; s.ff4; // no assignments to uniforms, but preserve indirections. + s2.i = s.ff4; return input; } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 81fdedba..8e80bbd2 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -136,13 +136,7 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn // Need a new node holding things together. Make // one and promote it to the right type. // - TIntermBinary* node = new TIntermBinary(op); - if (loc.line == 0) - loc = right->getLoc(); - node->setLoc(loc); - - node->setLeft(left); - node->setRight(right); + TIntermBinary* node = addBinaryNode(op, left, right, loc); if (! node->promote()) return 0; @@ -172,6 +166,56 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn return node; } +// +// Low level: add binary node (no promotions or other argument modifications) +// +TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) const +{ + // build the node + TIntermBinary* node = new TIntermBinary(op); + if (loc.line == 0) + loc = left->getLoc(); + node->setLoc(loc); + node->setLeft(left); + node->setRight(right); + + return node; +} + +// +// like non-type form, but sets node's type. +// +TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc, const TType& type) const +{ + TIntermBinary* node = addBinaryNode(op, left, right, loc); + node->setType(type); + return node; +} + +// +// Low level: add unary node (no promotions or other argument modifications) +// +TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc) const +{ + TIntermUnary* node = new TIntermUnary(op); + if (loc.line == 0) + loc = child->getLoc(); + node->setLoc(loc); + node->setOperand(child); + + return node; +} + +// +// like non-type form, but sets node's type. +// +TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc, const TType& type) const +{ + TIntermUnary* node = addUnaryNode(op, child, loc); + node->setType(type); + return node; +} + // // Connect two nodes through an assignment. // @@ -200,12 +244,7 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm right = addShapeConversion(op, left->getType(), right); // build the node - TIntermBinary* node = new TIntermBinary(op); - if (loc.line == 0) - loc = left->getLoc(); - node->setLoc(loc); - node->setLeft(left); - node->setRight(right); + TIntermBinary* node = addBinaryNode(op, left, right, loc); if (! node->promote()) return nullptr; @@ -224,16 +263,8 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm // TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc loc) { - TIntermBinary* node = new TIntermBinary(op); - if (loc.line == 0) - loc = index->getLoc(); - node->setLoc(loc); - node->setLeft(base); - node->setRight(index); - // caller should set the type - - return node; + return addBinaryNode(op, base, index, loc); } // @@ -316,11 +347,7 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSo // // Make a new node for the operator. // - TIntermUnary* node = new TIntermUnary(op); - if (loc.line == 0) - loc = child->getLoc(); - node->setLoc(loc); - node->setOperand(child); + TIntermUnary* node = addUnaryNode(op, child, loc); if (! node->promote()) return 0; @@ -357,12 +384,7 @@ TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOper return folded; } - TIntermUnary* node = new TIntermUnary(op); - node->setLoc(child->getLoc()); - node->setOperand(child); - node->setType(returnType); - - return node; + return addUnaryNode(op, child, child->getLoc(), returnType); } else { // setAggregateOperater() calls fold() for constant folding TIntermTyped* node = setAggregateOperator(childNode, op, returnType, loc); @@ -725,9 +747,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt } TType newType(promoteTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows()); - newNode = new TIntermUnary(newOp, newType); - newNode->setLoc(node->getLoc()); - newNode->setOperand(node); + newNode = addUnaryNode(newOp, node, node->getLoc(), newType); // TODO: it seems that some unary folding operations should occur here, but are not @@ -2045,11 +2065,6 @@ bool TIntermBinary::promote() } break; - case EOpVectorTimesScalarAssign: - if (!left->isVector() || !right->isScalar()) - return false; - break; - default: return false; } @@ -2070,7 +2085,6 @@ bool TIntermBinary::promote() case EOpExclusiveOrAssign: case EOpLeftShiftAssign: case EOpRightShiftAssign: - case EOpVectorTimesScalarAssign: if (getType() != left->getType()) return false; break; diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index de1e8ca7..3187ffcc 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1966,7 +1966,6 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt if (TParseContextBase::lValueErrorCheck(loc, op, node)) return true; - // GLSL specific const char* symbol = nullptr; TIntermSymbol* symNode = node->getAsSymbolNode(); if (symNode != nullptr) diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index acfafb1e..348b78e0 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -236,6 +236,13 @@ public: TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&); TIntermTyped* addSwizzle(TVectorFields&, const TSourceLoc&); + // Low level functions to add nodes (no conversions or other higher level transformations) + // If a type is provided, the node's type will be set to it. + TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc) const; + TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc, const TType&) const; + TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const; + TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const; + // Constant folding (in Constant.cpp) TIntermTyped* fold(TIntermAggregate* aggrNode); TIntermTyped* foldConstructor(TIntermAggregate* aggrNode); diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 8d841592..3137bedb 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -228,9 +228,9 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* }; // Helper to create an assign. - const auto makeAssign = [&](TOperator assignOp, TIntermTyped* lhs, TIntermTyped* rhs) { + const auto makeBinary = [&](TOperator op, TIntermTyped* lhs, TIntermTyped* rhs) { sequence = intermediate.growAggregate(sequence, - intermediate.addAssign(assignOp, lhs, rhs, loc), + intermediate.addBinaryNode(op, lhs, rhs, loc, lhs->getType()), loc); }; @@ -246,9 +246,10 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* }; // Helper to add unary op - const auto addUnary = [&](TOperator op, TIntermSymbol* rhsTmp) { + const auto makeUnary = [&](TOperator op, TIntermSymbol* rhsTmp) { sequence = intermediate.growAggregate(sequence, - intermediate.addUnaryMath(op, intermediate.addSymbol(*rhsTmp), loc), + intermediate.addUnaryNode(op, intermediate.addSymbol(*rhsTmp), loc, + rhsTmp->getType()), loc); }; @@ -322,12 +323,12 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* if (isModifyOp) { // We have to make a temp var for the coordinate, to avoid evaluating it twice. coordTmp = addTmpVar("coordTemp", coord->getType()); - makeAssign(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1] makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp) } // rhsTmp op= rhs. - makeAssign(assignOp, intermediate.addSymbol(*rhsTmp), rhs); + makeBinary(assignOp, intermediate.addSymbol(*rhsTmp), rhs); } makeStore(object, coordTmp, rhsTmp); // add a store @@ -357,9 +358,9 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* TIntermSymbol* rhsTmp = addTmpVar("storeTemp", objDerefType); TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType()); - makeAssign(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1] makeLoad(rhsTmp, object, coordTmp, objDerefType); // rhsTmp = OpImageLoad(object, coordTmp) - addUnary(assignOp, rhsTmp); // op rhsTmp + makeUnary(assignOp, rhsTmp); // op rhsTmp makeStore(object, coordTmp, rhsTmp); // OpImageStore(object, coordTmp, rhsTmp) return finishSequence(rhsTmp, objDerefType); // return rhsTmp from sequence } @@ -379,10 +380,10 @@ TIntermTyped* HlslParseContext::handleLvalue(const TSourceLoc& loc, const char* TIntermSymbol* rhsTmp2 = addTmpVar("storeTempPost", objDerefType); TIntermTyped* coordTmp = addTmpVar("coordTemp", coord->getType()); - makeAssign(EOpAssign, coordTmp, coord); // coordtmp = load[param1] + makeBinary(EOpAssign, coordTmp, coord); // coordtmp = load[param1] makeLoad(rhsTmp1, object, coordTmp, objDerefType); // rhsTmp1 = OpImageLoad(object, coordTmp) - makeAssign(EOpAssign, rhsTmp2, rhsTmp1); // rhsTmp2 = rhsTmp1 - addUnary(assignOp, rhsTmp2); // rhsTmp op + makeBinary(EOpAssign, rhsTmp2, rhsTmp1); // rhsTmp2 = rhsTmp1 + makeUnary(assignOp, rhsTmp2); // rhsTmp op makeStore(object, coordTmp, rhsTmp2); // OpImageStore(object, coordTmp, rhsTmp2) return finishSequence(rhsTmp1, objDerefType); // return rhsTmp from sequence }