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.
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index b0dc68b..c6e3c89 100644
--- a/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -813,25 +813,39 @@
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 @@
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 @@
// 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 @@
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 @@
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 @@
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 @@
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 @@
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 0000000..0769cde
--- /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 650b567..9390e8d 100644
--- a/Test/hlsl.rw.bracket.frag
+++ b/Test/hlsl.rw.bracket.frag
@@ -74,7 +74,7 @@
// 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 @@
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 @@
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 0000000..0d3d81f
--- /dev/null
+++ b/Test/hlsl.tx.bracket.frag
@@ -0,0 +1,73 @@
+SamplerState g_sSamp : register(s0);
+
+Texture1D <float4> g_tTex1df4 : register(t0);
+Texture1D <int4> g_tTex1di4;
+Texture1D <uint4> g_tTex1du4;
+
+Texture2D <float4> g_tTex2df4;
+Texture2D <int4> g_tTex2di4;
+Texture2D <uint4> g_tTex2du4;
+
+Texture3D <float4> g_tTex3df4;
+Texture3D <int4> g_tTex3di4;
+Texture3D <uint4> g_tTex3du4;
+
+Texture1DArray <float4> g_tTex1df4a;
+Texture1DArray <int4> g_tTex1di4a;
+Texture1DArray <uint4> g_tTex1du4a;
+
+Texture2DArray <float4> g_tTex2df4a;
+Texture2DArray <int4> g_tTex2di4a;
+Texture2DArray <uint4> 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 96e5c34..81fdedb 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -2046,8 +2046,9 @@
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 @@
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 9a160cf..354a5df 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -191,6 +191,7 @@
{"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 5dc25fc..5f9ec26 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -1948,7 +1948,7 @@
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 @@
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 5c1fd05..8d84159 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -130,6 +130,10 @@
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 @@
//
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 @@
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;
}
}