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
This commit is contained in:
steve-lunarg 2016-10-06 20:12:24 -06:00
parent e3aa654c4b
commit 6b43d274e7
5 changed files with 869 additions and 6 deletions

View File

@ -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

114
Test/hlsl.rw.bracket.frag Normal file
View File

@ -0,0 +1,114 @@
SamplerState g_sSamp : register(s0);
RWTexture1D <float4> g_tTex1df4 : register(t0);
RWTexture1D <int4> g_tTex1di4;
RWTexture1D <uint4> g_tTex1du4;
RWTexture2D <float4> g_tTex2df4;
RWTexture2D <int4> g_tTex2di4;
RWTexture2D <uint4> g_tTex2du4;
RWTexture3D <float4> g_tTex3df4;
RWTexture3D <int4> g_tTex3di4;
RWTexture3D <uint4> g_tTex3du4;
RWTexture1DArray <float4> g_tTex1df4a;
RWTexture1DArray <int4> g_tTex1di4a;
RWTexture1DArray <uint4> g_tTex1du4a;
RWTexture2DArray <float4> g_tTex2df4a;
RWTexture2DArray <int4> g_tTex2di4a;
RWTexture2DArray <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; }
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;
}

View File

@ -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"},

View File

@ -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");
}

View File

@ -61,6 +61,7 @@ public:
void handlePragma(const TSourceLoc&, const TVector<TString>&);
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);