Merge pull request #1166 from tafuri/#1165-invalid_Store

#1165 invalid store
diff --git a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
new file mode 100644
index 0000000..b0115d7
--- /dev/null
+++ b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
@@ -0,0 +1,173 @@
+hlsl.store.rwbyteaddressbuffer.type.comp
+Shader version: 500
+local_size = (64, 1, 1)
+0:? Sequence
+0:5  Function Definition: @main(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dispatchThreadID' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      Test condition and select ( temp void)
+0:6        Condition
+0:6        Compare Equal ( temp bool)
+0:6          direct index ( temp uint)
+0:6            'dispatchThreadID' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6          Constant:
+0:6            0 (const uint)
+0:6        true case
+0:?         Sequence
+0:7          move second child to first child ( temp int)
+0:7            'byteAddrTemp' ( temp int)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:7          move second child to first child ( temp uint)
+0:7            indirect index (layout( row_major std430) buffer uint)
+0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7                Constant:
+0:7                  0 (const uint)
+0:7              'byteAddrTemp' ( temp int)
+0:7            Constant:
+0:7              2 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @main(vu3; ( temp void)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (64, 1, 1)
+0:? Sequence
+0:5  Function Definition: @main(vu3; ( temp void)
+0:5    Function Parameters: 
+0:5      'dispatchThreadID' ( in 3-component vector of uint)
+0:?     Sequence
+0:6      Test condition and select ( temp void)
+0:6        Condition
+0:6        Compare Equal ( temp bool)
+0:6          direct index ( temp uint)
+0:6            'dispatchThreadID' ( in 3-component vector of uint)
+0:6            Constant:
+0:6              0 (const int)
+0:6          Constant:
+0:6            0 (const uint)
+0:6        true case
+0:?         Sequence
+0:7          move second child to first child ( temp int)
+0:7            'byteAddrTemp' ( temp int)
+0:7            right-shift ( temp int)
+0:7              Constant:
+0:7                0 (const int)
+0:7              Constant:
+0:7                2 (const int)
+0:7          move second child to first child ( temp uint)
+0:7            indirect index (layout( row_major std430) buffer uint)
+0:7              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:7                'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:7                Constant:
+0:7                  0 (const uint)
+0:7              'byteAddrTemp' ( temp int)
+0:7            Constant:
+0:7              2 (const uint)
+0:5  Function Definition: main( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:5      move second child to first child ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?         'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+0:5      Function Call: @main(vu3; ( temp void)
+0:?         'dispatchThreadID' ( temp 3-component vector of uint)
+0:?   Linker Objects
+0:?     'buffer' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:?     'dispatchThreadID' ( in 3-component vector of uint GlobalInvocationID)
+
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 42
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main" 37
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 11  "@main(vu3;"
+                              Name 10  "dispatchThreadID"
+                              Name 23  "byteAddrTemp"
+                              Name 28  "buffer"
+                              MemberName 28(buffer) 0  "@data"
+                              Name 30  "buffer"
+                              Name 35  "dispatchThreadID"
+                              Name 37  "dispatchThreadID"
+                              Name 39  "param"
+                              Decorate 27 ArrayStride 4
+                              MemberDecorate 28(buffer) 0 Offset 0
+                              Decorate 28(buffer) BufferBlock
+                              Decorate 30(buffer) DescriptorSet 0
+                              Decorate 37(dispatchThreadID) BuiltIn GlobalInvocationId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 3
+               8:             TypePointer Function 7(ivec3)
+               9:             TypeFunction 2 8(ptr)
+              13:      6(int) Constant 0
+              14:             TypePointer Function 6(int)
+              17:             TypeBool
+              21:             TypeInt 32 1
+              22:             TypePointer Function 21(int)
+              24:     21(int) Constant 0
+              25:     21(int) Constant 2
+              27:             TypeRuntimeArray 6(int)
+      28(buffer):             TypeStruct 27
+              29:             TypePointer Uniform 28(buffer)
+      30(buffer):     29(ptr) Variable Uniform
+              32:      6(int) Constant 2
+              33:             TypePointer Uniform 6(int)
+              36:             TypePointer Input 7(ivec3)
+37(dispatchThreadID):     36(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+35(dispatchThreadID):      8(ptr) Variable Function
+       39(param):      8(ptr) Variable Function
+              38:    7(ivec3) Load 37(dispatchThreadID)
+                              Store 35(dispatchThreadID) 38
+              40:    7(ivec3) Load 35(dispatchThreadID)
+                              Store 39(param) 40
+              41:           2 FunctionCall 11(@main(vu3;) 39(param)
+                              Return
+                              FunctionEnd
+  11(@main(vu3;):           2 Function None 9
+10(dispatchThreadID):      8(ptr) FunctionParameter
+              12:             Label
+23(byteAddrTemp):     22(ptr) Variable Function
+              15:     14(ptr) AccessChain 10(dispatchThreadID) 13
+              16:      6(int) Load 15
+              18:    17(bool) IEqual 16 13
+                              SelectionMerge 20 None
+                              BranchConditional 18 19 20
+              19:               Label
+              26:     21(int)   ShiftRightArithmetic 24 25
+                                Store 23(byteAddrTemp) 26
+              31:     21(int)   Load 23(byteAddrTemp)
+              34:     33(ptr)   AccessChain 30(buffer) 24 31
+                                Store 34 32
+                                Branch 20
+              20:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 77c2744..af66987 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -21,23 +21,22 @@
 0:9            'pos' ( in uint)
 0:9            Constant:
 0:9              2 (const int)
-0:9        move second child to first child ( temp float)
-0:9          indirect index ( temp float)
+0:9        move second child to first child ( temp uint)
+0:9          indirect index (layout( row_major std430) buffer uint)
 0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            'byteAddrTemp' ( temp int)
-0:9          Convert uint to float ( temp float)
-0:9            indirect index (layout( row_major std430) buffer uint)
-0:9              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:9                Constant:
-0:9                  0 (const uint)
-0:9              right-shift ( temp int)
-0:9                'pos' ( in uint)
-0:9                Constant:
-0:9                  2 (const int)
+0:9          indirect index (layout( row_major std430) buffer uint)
+0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9              Constant:
+0:9                0 (const uint)
+0:9            right-shift ( temp int)
+0:9              'pos' ( in uint)
+0:9              Constant:
+0:9                2 (const int)
 0:?       Sequence
 0:10        move second child to first child ( temp int)
 0:10          'byteAddrTemp' ( temp int)
@@ -45,41 +44,42 @@
 0:10            'pos' ( in uint)
 0:10            Constant:
 0:10              2 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
 0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            'byteAddrTemp' ( temp int)
-0:10          direct index ( temp float)
-0:?             Sequence
-0:10              move second child to first child ( temp int)
-0:10                'byteAddrTemp' ( temp int)
-0:10                right-shift ( temp int)
-0:10                  'pos' ( in uint)
-0:10                  Constant:
-0:10                    2 (const int)
-0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:10                    Constant:
-0:10                      0 (const uint)
+0:10          Convert float to uint ( temp uint)
+0:10            direct index ( temp float)
+0:?               Sequence
+0:10                move second child to first child ( temp int)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  right-shift ( temp int)
+0:10                    'pos' ( in uint)
 0:10                    Constant:
-0:10                      0 (const uint)
-0:10                  add ( temp int)
+0:10                      2 (const int)
+0:?                 Construct vec2 ( temp 2-component vector of uint)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
 0:10                    'byteAddrTemp' ( temp int)
-0:10                    Constant:
-0:10                      1 (const int)
-0:10            Constant:
-0:10              0 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
+0:10                    add ( temp int)
+0:10                      'byteAddrTemp' ( temp int)
+0:10                      Constant:
+0:10                        1 (const int)
+0:10              Constant:
+0:10                0 (const int)
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
 0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:10              Constant:
@@ -88,32 +88,33 @@
 0:10              'byteAddrTemp' ( temp int)
 0:10              Constant:
 0:10                1 (const int)
-0:10          direct index ( temp float)
-0:?             Sequence
-0:10              move second child to first child ( temp int)
-0:10                'byteAddrTemp' ( temp int)
-0:10                right-shift ( temp int)
-0:10                  'pos' ( in uint)
-0:10                  Constant:
-0:10                    2 (const int)
-0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:10                    Constant:
-0:10                      0 (const uint)
+0:10          Convert float to uint ( temp uint)
+0:10            direct index ( temp float)
+0:?               Sequence
+0:10                move second child to first child ( temp int)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  right-shift ( temp int)
+0:10                    'pos' ( in uint)
 0:10                    Constant:
-0:10                      0 (const uint)
-0:10                  add ( temp int)
+0:10                      2 (const int)
+0:?                 Construct vec2 ( temp 2-component vector of uint)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
 0:10                    'byteAddrTemp' ( temp int)
-0:10                    Constant:
-0:10                      1 (const int)
-0:10            Constant:
-0:10              1 (const int)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
+0:10                    add ( temp int)
+0:10                      'byteAddrTemp' ( temp int)
+0:10                      Constant:
+0:10                        1 (const int)
+0:10              Constant:
+0:10                1 (const int)
 0:?       Sequence
 0:11        move second child to first child ( temp int)
 0:11          'byteAddrTemp' ( temp int)
@@ -121,50 +122,51 @@
 0:11            'pos' ( in uint)
 0:11            Constant:
 0:11              2 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
 0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            'byteAddrTemp' ( temp int)
-0:11          direct index ( temp float)
-0:?             Sequence
-0:11              move second child to first child ( temp int)
-0:11                'byteAddrTemp' ( temp int)
-0:11                right-shift ( temp int)
-0:11                  'pos' ( in uint)
-0:11                  Constant:
-0:11                    2 (const int)
-0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
+0:11          Convert float to uint ( temp uint)
+0:11            direct index ( temp float)
+0:?               Sequence
+0:11                move second child to first child ( temp int)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
-0:11                    Constant:
-0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
+0:11                  right-shift ( temp int)
+0:11                    'pos' ( in uint)
 0:11                    Constant:
 0:11                      2 (const int)
-0:11            Constant:
-0:11              0 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
+0:?                 Construct vec3 ( temp 3-component vector of uint)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    'byteAddrTemp' ( temp int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        1 (const int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        2 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
 0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:11              Constant:
@@ -173,43 +175,44 @@
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                1 (const int)
-0:11          direct index ( temp float)
-0:?             Sequence
-0:11              move second child to first child ( temp int)
-0:11                'byteAddrTemp' ( temp int)
-0:11                right-shift ( temp int)
-0:11                  'pos' ( in uint)
-0:11                  Constant:
-0:11                    2 (const int)
-0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
+0:11          Convert float to uint ( temp uint)
+0:11            direct index ( temp float)
+0:?               Sequence
+0:11                move second child to first child ( temp int)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
-0:11                    Constant:
-0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
+0:11                  right-shift ( temp int)
+0:11                    'pos' ( in uint)
 0:11                    Constant:
 0:11                      2 (const int)
-0:11            Constant:
-0:11              1 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
+0:?                 Construct vec3 ( temp 3-component vector of uint)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    'byteAddrTemp' ( temp int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        1 (const int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        2 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
 0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:11              Constant:
@@ -218,41 +221,42 @@
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                2 (const int)
-0:11          direct index ( temp float)
-0:?             Sequence
-0:11              move second child to first child ( temp int)
-0:11                'byteAddrTemp' ( temp int)
-0:11                right-shift ( temp int)
-0:11                  'pos' ( in uint)
-0:11                  Constant:
-0:11                    2 (const int)
-0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
+0:11          Convert float to uint ( temp uint)
+0:11            direct index ( temp float)
+0:?               Sequence
+0:11                move second child to first child ( temp int)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
-0:11                    Constant:
-0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
+0:11                  right-shift ( temp int)
+0:11                    'pos' ( in uint)
 0:11                    Constant:
 0:11                      2 (const int)
-0:11            Constant:
-0:11              2 (const int)
+0:?                 Construct vec3 ( temp 3-component vector of uint)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    'byteAddrTemp' ( temp int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        1 (const int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        2 (const int)
+0:11              Constant:
+0:11                2 (const int)
 0:?       Sequence
 0:12        move second child to first child ( temp int)
 0:12          'byteAddrTemp' ( temp int)
@@ -260,59 +264,60 @@
 0:12            'pos' ( in uint)
 0:12            Constant:
 0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            'byteAddrTemp' ( temp int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              0 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                0 (const int)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
@@ -321,52 +326,53 @@
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                1 (const int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              1 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                1 (const int)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
@@ -375,52 +381,53 @@
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                2 (const int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                2 (const int)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
@@ -429,50 +436,51 @@
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                3 (const int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              3 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                3 (const int)
 0:14      Branch: Return with expression
 0:14        Construct vec4 ( temp 4-component vector of float)
 0:14          Convert uint to float ( temp float)
@@ -526,23 +534,22 @@
 0:9            'pos' ( in uint)
 0:9            Constant:
 0:9              2 (const int)
-0:9        move second child to first child ( temp float)
-0:9          indirect index ( temp float)
+0:9        move second child to first child ( temp uint)
+0:9          indirect index (layout( row_major std430) buffer uint)
 0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:9              Constant:
 0:9                0 (const uint)
 0:9            'byteAddrTemp' ( temp int)
-0:9          Convert uint to float ( temp float)
-0:9            indirect index (layout( row_major std430) buffer uint)
-0:9              @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:9                'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:9                Constant:
-0:9                  0 (const uint)
-0:9              right-shift ( temp int)
-0:9                'pos' ( in uint)
-0:9                Constant:
-0:9                  2 (const int)
+0:9          indirect index (layout( row_major std430) buffer uint)
+0:9            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:9              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:9              Constant:
+0:9                0 (const uint)
+0:9            right-shift ( temp int)
+0:9              'pos' ( in uint)
+0:9              Constant:
+0:9                2 (const int)
 0:?       Sequence
 0:10        move second child to first child ( temp int)
 0:10          'byteAddrTemp' ( temp int)
@@ -550,41 +557,42 @@
 0:10            'pos' ( in uint)
 0:10            Constant:
 0:10              2 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
 0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:10              Constant:
 0:10                0 (const uint)
 0:10            'byteAddrTemp' ( temp int)
-0:10          direct index ( temp float)
-0:?             Sequence
-0:10              move second child to first child ( temp int)
-0:10                'byteAddrTemp' ( temp int)
-0:10                right-shift ( temp int)
-0:10                  'pos' ( in uint)
-0:10                  Constant:
-0:10                    2 (const int)
-0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:10                    Constant:
-0:10                      0 (const uint)
+0:10          Convert float to uint ( temp uint)
+0:10            direct index ( temp float)
+0:?               Sequence
+0:10                move second child to first child ( temp int)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  right-shift ( temp int)
+0:10                    'pos' ( in uint)
 0:10                    Constant:
-0:10                      0 (const uint)
-0:10                  add ( temp int)
+0:10                      2 (const int)
+0:?                 Construct vec2 ( temp 2-component vector of uint)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
 0:10                    'byteAddrTemp' ( temp int)
-0:10                    Constant:
-0:10                      1 (const int)
-0:10            Constant:
-0:10              0 (const int)
-0:10        move second child to first child ( temp float)
-0:10          indirect index ( temp float)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
+0:10                    add ( temp int)
+0:10                      'byteAddrTemp' ( temp int)
+0:10                      Constant:
+0:10                        1 (const int)
+0:10              Constant:
+0:10                0 (const int)
+0:10        move second child to first child ( temp uint)
+0:10          indirect index (layout( row_major std430) buffer uint)
 0:10            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:10              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:10              Constant:
@@ -593,32 +601,33 @@
 0:10              'byteAddrTemp' ( temp int)
 0:10              Constant:
 0:10                1 (const int)
-0:10          direct index ( temp float)
-0:?             Sequence
-0:10              move second child to first child ( temp int)
-0:10                'byteAddrTemp' ( temp int)
-0:10                right-shift ( temp int)
-0:10                  'pos' ( in uint)
-0:10                  Constant:
-0:10                    2 (const int)
-0:?               Construct vec2 ( temp 2-component vector of uint)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:10                    Constant:
-0:10                      0 (const uint)
+0:10          Convert float to uint ( temp uint)
+0:10            direct index ( temp float)
+0:?               Sequence
+0:10                move second child to first child ( temp int)
 0:10                  'byteAddrTemp' ( temp int)
-0:10                indirect index ( temp float)
-0:10                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:10                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                  right-shift ( temp int)
+0:10                    'pos' ( in uint)
 0:10                    Constant:
-0:10                      0 (const uint)
-0:10                  add ( temp int)
+0:10                      2 (const int)
+0:?                 Construct vec2 ( temp 2-component vector of uint)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
 0:10                    'byteAddrTemp' ( temp int)
-0:10                    Constant:
-0:10                      1 (const int)
-0:10            Constant:
-0:10              1 (const int)
+0:10                  indirect index ( temp float)
+0:10                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:10                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:10                      Constant:
+0:10                        0 (const uint)
+0:10                    add ( temp int)
+0:10                      'byteAddrTemp' ( temp int)
+0:10                      Constant:
+0:10                        1 (const int)
+0:10              Constant:
+0:10                1 (const int)
 0:?       Sequence
 0:11        move second child to first child ( temp int)
 0:11          'byteAddrTemp' ( temp int)
@@ -626,50 +635,51 @@
 0:11            'pos' ( in uint)
 0:11            Constant:
 0:11              2 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
 0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:11              Constant:
 0:11                0 (const uint)
 0:11            'byteAddrTemp' ( temp int)
-0:11          direct index ( temp float)
-0:?             Sequence
-0:11              move second child to first child ( temp int)
-0:11                'byteAddrTemp' ( temp int)
-0:11                right-shift ( temp int)
-0:11                  'pos' ( in uint)
-0:11                  Constant:
-0:11                    2 (const int)
-0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
+0:11          Convert float to uint ( temp uint)
+0:11            direct index ( temp float)
+0:?               Sequence
+0:11                move second child to first child ( temp int)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
-0:11                    Constant:
-0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
+0:11                  right-shift ( temp int)
+0:11                    'pos' ( in uint)
 0:11                    Constant:
 0:11                      2 (const int)
-0:11            Constant:
-0:11              0 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
+0:?                 Construct vec3 ( temp 3-component vector of uint)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    'byteAddrTemp' ( temp int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        1 (const int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        2 (const int)
+0:11              Constant:
+0:11                0 (const int)
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
 0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:11              Constant:
@@ -678,43 +688,44 @@
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                1 (const int)
-0:11          direct index ( temp float)
-0:?             Sequence
-0:11              move second child to first child ( temp int)
-0:11                'byteAddrTemp' ( temp int)
-0:11                right-shift ( temp int)
-0:11                  'pos' ( in uint)
-0:11                  Constant:
-0:11                    2 (const int)
-0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
+0:11          Convert float to uint ( temp uint)
+0:11            direct index ( temp float)
+0:?               Sequence
+0:11                move second child to first child ( temp int)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
-0:11                    Constant:
-0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
+0:11                  right-shift ( temp int)
+0:11                    'pos' ( in uint)
 0:11                    Constant:
 0:11                      2 (const int)
-0:11            Constant:
-0:11              1 (const int)
-0:11        move second child to first child ( temp float)
-0:11          indirect index ( temp float)
+0:?                 Construct vec3 ( temp 3-component vector of uint)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    'byteAddrTemp' ( temp int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        1 (const int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        2 (const int)
+0:11              Constant:
+0:11                1 (const int)
+0:11        move second child to first child ( temp uint)
+0:11          indirect index (layout( row_major std430) buffer uint)
 0:11            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:11              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:11              Constant:
@@ -723,41 +734,42 @@
 0:11              'byteAddrTemp' ( temp int)
 0:11              Constant:
 0:11                2 (const int)
-0:11          direct index ( temp float)
-0:?             Sequence
-0:11              move second child to first child ( temp int)
-0:11                'byteAddrTemp' ( temp int)
-0:11                right-shift ( temp int)
-0:11                  'pos' ( in uint)
-0:11                  Constant:
-0:11                    2 (const int)
-0:?               Construct vec3 ( temp 3-component vector of uint)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
+0:11          Convert float to uint ( temp uint)
+0:11            direct index ( temp float)
+0:?               Sequence
+0:11                move second child to first child ( temp int)
 0:11                  'byteAddrTemp' ( temp int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
-0:11                    Constant:
-0:11                      1 (const int)
-0:11                indirect index ( temp float)
-0:11                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:11                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:11                    Constant:
-0:11                      0 (const uint)
-0:11                  add ( temp int)
-0:11                    'byteAddrTemp' ( temp int)
+0:11                  right-shift ( temp int)
+0:11                    'pos' ( in uint)
 0:11                    Constant:
 0:11                      2 (const int)
-0:11            Constant:
-0:11              2 (const int)
+0:?                 Construct vec3 ( temp 3-component vector of uint)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    'byteAddrTemp' ( temp int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        1 (const int)
+0:11                  indirect index ( temp float)
+0:11                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:11                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:11                      Constant:
+0:11                        0 (const uint)
+0:11                    add ( temp int)
+0:11                      'byteAddrTemp' ( temp int)
+0:11                      Constant:
+0:11                        2 (const int)
+0:11              Constant:
+0:11                2 (const int)
 0:?       Sequence
 0:12        move second child to first child ( temp int)
 0:12          'byteAddrTemp' ( temp int)
@@ -765,59 +777,60 @@
 0:12            'pos' ( in uint)
 0:12            Constant:
 0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
 0:12                0 (const uint)
 0:12            'byteAddrTemp' ( temp int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              0 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                0 (const int)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
@@ -826,52 +839,53 @@
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                1 (const int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              1 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                1 (const int)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
@@ -880,52 +894,53 @@
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                2 (const int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              2 (const int)
-0:12        move second child to first child ( temp float)
-0:12          indirect index ( temp float)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                2 (const int)
+0:12        move second child to first child ( temp uint)
+0:12          indirect index (layout( row_major std430) buffer uint)
 0:12            @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
 0:12              'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
 0:12              Constant:
@@ -934,50 +949,51 @@
 0:12              'byteAddrTemp' ( temp int)
 0:12              Constant:
 0:12                3 (const int)
-0:12          direct index ( temp float)
-0:?             Sequence
-0:12              move second child to first child ( temp int)
-0:12                'byteAddrTemp' ( temp int)
-0:12                right-shift ( temp int)
-0:12                  'pos' ( in uint)
-0:12                  Constant:
-0:12                    2 (const int)
-0:?               Construct vec4 ( temp 4-component vector of uint)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
+0:12          Convert float to uint ( temp uint)
+0:12            direct index ( temp float)
+0:?               Sequence
+0:12                move second child to first child ( temp int)
 0:12                  'byteAddrTemp' ( temp int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      1 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
-0:12                    'byteAddrTemp' ( temp int)
+0:12                  right-shift ( temp int)
+0:12                    'pos' ( in uint)
 0:12                    Constant:
 0:12                      2 (const int)
-0:12                indirect index ( temp float)
-0:12                  @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
-0:12                    'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
-0:12                    Constant:
-0:12                      0 (const uint)
-0:12                  add ( temp int)
+0:?                 Construct vec4 ( temp 4-component vector of uint)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
 0:12                    'byteAddrTemp' ( temp int)
-0:12                    Constant:
-0:12                      3 (const int)
-0:12            Constant:
-0:12              3 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        1 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        2 (const int)
+0:12                  indirect index ( temp float)
+0:12                    @data: direct index for structure (layout( row_major std430) buffer implicitly-sized array of uint)
+0:12                      'sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer implicitly-sized array of uint @data})
+0:12                      Constant:
+0:12                        0 (const uint)
+0:12                    add ( temp int)
+0:12                      'byteAddrTemp' ( temp int)
+0:12                      Constant:
+0:12                        3 (const int)
+0:12              Constant:
+0:12                3 (const int)
 0:14      Branch: Return with expression
 0:14        Construct vec4 ( temp 4-component vector of float)
 0:14          Convert uint to float ( temp float)
@@ -1007,12 +1023,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 240
+// Id's are bound by 248
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 233 236
+                              EntryPoint Fragment 4  "main" 241 244
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "main"
@@ -1023,23 +1039,23 @@
                               MemberName 16(sbuf) 0  "@data"
                               Name 18  "sbuf"
                               Name 22  "byteAddrTemp"
-                              Name 35  "byteAddrTemp"
-                              Name 39  "byteAddrTemp"
-                              Name 70  "byteAddrTemp"
-                              Name 74  "byteAddrTemp"
-                              Name 129  "byteAddrTemp"
+                              Name 34  "byteAddrTemp"
+                              Name 38  "byteAddrTemp"
+                              Name 71  "byteAddrTemp"
+                              Name 75  "byteAddrTemp"
                               Name 133  "byteAddrTemp"
-                              Name 231  "pos"
-                              Name 233  "pos"
-                              Name 236  "@entryPointOutput"
-                              Name 237  "param"
+                              Name 137  "byteAddrTemp"
+                              Name 239  "pos"
+                              Name 241  "pos"
+                              Name 244  "@entryPointOutput"
+                              Name 245  "param"
                               Decorate 15 ArrayStride 4
                               MemberDecorate 16(sbuf) 0 Offset 0
                               Decorate 16(sbuf) BufferBlock
                               Decorate 18(sbuf) DescriptorSet 0
-                              Decorate 233(pos) Flat
-                              Decorate 233(pos) Location 0
-                              Decorate 236(@entryPointOutput) Location 0
+                              Decorate 241(pos) Flat
+                              Decorate 241(pos) Location 0
+                              Decorate 244(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -1056,29 +1072,29 @@
               24:     19(int) Constant 2
               26:     19(int) Constant 0
               30:             TypePointer Uniform 6(int)
-              46:     19(int) Constant 1
-              50:             TypeVector 6(int) 2
-              52:      6(int) Constant 0
+              45:     19(int) Constant 1
+              49:             TypeVector 6(int) 2
+              51:      6(int) Constant 0
               67:      6(int) Constant 1
-              88:             TypeVector 6(int) 3
-             126:      6(int) Constant 2
-             148:     19(int) Constant 3
-             152:             TypeVector 6(int) 4
-             220:      6(int) Constant 3
-             232:             TypePointer Input 6(int)
-        233(pos):    232(ptr) Variable Input
-             235:             TypePointer Output 9(fvec4)
-236(@entryPointOutput):    235(ptr) Variable Output
+              89:             TypeVector 6(int) 3
+             129:      6(int) Constant 2
+             152:     19(int) Constant 3
+             156:             TypeVector 6(int) 4
+             227:      6(int) Constant 3
+             240:             TypePointer Input 6(int)
+        241(pos):    240(ptr) Variable Input
+             243:             TypePointer Output 9(fvec4)
+244(@entryPointOutput):    243(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-        231(pos):      7(ptr) Variable Function
-      237(param):      7(ptr) Variable Function
-             234:      6(int) Load 233(pos)
-                              Store 231(pos) 234
-             238:      6(int) Load 231(pos)
-                              Store 237(param) 238
-             239:    9(fvec4) FunctionCall 12(@main(u1;) 237(param)
-                              Store 236(@entryPointOutput) 239
+        239(pos):      7(ptr) Variable Function
+      245(param):      7(ptr) Variable Function
+             242:      6(int) Load 241(pos)
+                              Store 239(pos) 242
+             246:      6(int) Load 239(pos)
+                              Store 245(param) 246
+             247:    9(fvec4) FunctionCall 12(@main(u1;) 245(param)
+                              Store 244(@entryPointOutput) 247
                               Return
                               FunctionEnd
    12(@main(u1;):    9(fvec4) Function None 10
@@ -1086,12 +1102,12 @@
               13:             Label
         14(size):      7(ptr) Variable Function
 22(byteAddrTemp):     21(ptr) Variable Function
-35(byteAddrTemp):     21(ptr) Variable Function
-39(byteAddrTemp):     21(ptr) Variable Function
-70(byteAddrTemp):     21(ptr) Variable Function
-74(byteAddrTemp):     21(ptr) Variable Function
-129(byteAddrTemp):     21(ptr) Variable Function
+34(byteAddrTemp):     21(ptr) Variable Function
+38(byteAddrTemp):     21(ptr) Variable Function
+71(byteAddrTemp):     21(ptr) Variable Function
+75(byteAddrTemp):     21(ptr) Variable Function
 133(byteAddrTemp):     21(ptr) Variable Function
+137(byteAddrTemp):     21(ptr) Variable Function
               20:     19(int) ArrayLength 18(sbuf) 0
                               Store 14(size) 20
               23:      6(int) Load 11(pos)
@@ -1102,208 +1118,216 @@
               29:     19(int) ShiftRightLogical 28 24
               31:     30(ptr) AccessChain 18(sbuf) 26 29
               32:      6(int) Load 31
-              33:    8(float) ConvertUToF 32
-              34:     30(ptr) AccessChain 18(sbuf) 26 27
-                              Store 34 33
-              36:      6(int) Load 11(pos)
-              37:     19(int) ShiftRightLogical 36 24
-                              Store 35(byteAddrTemp) 37
-              38:     19(int) Load 35(byteAddrTemp)
-              40:      6(int) Load 11(pos)
-              41:     19(int) ShiftRightLogical 40 24
-                              Store 39(byteAddrTemp) 41
-              42:     19(int) Load 39(byteAddrTemp)
-              43:     30(ptr) AccessChain 18(sbuf) 26 42
-              44:      6(int) Load 43
-              45:     19(int) Load 39(byteAddrTemp)
-              47:     19(int) IAdd 45 46
-              48:     30(ptr) AccessChain 18(sbuf) 26 47
-              49:      6(int) Load 48
-              51:   50(ivec2) CompositeConstruct 44 49
-              53:      6(int) CompositeExtract 51 0
-              54:     30(ptr) AccessChain 18(sbuf) 26 38
+              33:     30(ptr) AccessChain 18(sbuf) 26 27
+                              Store 33 32
+              35:      6(int) Load 11(pos)
+              36:     19(int) ShiftRightLogical 35 24
+                              Store 34(byteAddrTemp) 36
+              37:     19(int) Load 34(byteAddrTemp)
+              39:      6(int) Load 11(pos)
+              40:     19(int) ShiftRightLogical 39 24
+                              Store 38(byteAddrTemp) 40
+              41:     19(int) Load 38(byteAddrTemp)
+              42:     30(ptr) AccessChain 18(sbuf) 26 41
+              43:      6(int) Load 42
+              44:     19(int) Load 38(byteAddrTemp)
+              46:     19(int) IAdd 44 45
+              47:     30(ptr) AccessChain 18(sbuf) 26 46
+              48:      6(int) Load 47
+              50:   49(ivec2) CompositeConstruct 43 48
+              52:      6(int) CompositeExtract 50 0
+              53:      6(int) ConvertFToU 52
+              54:     30(ptr) AccessChain 18(sbuf) 26 37
                               Store 54 53
-              55:     19(int) Load 35(byteAddrTemp)
-              56:     19(int) IAdd 55 46
+              55:     19(int) Load 34(byteAddrTemp)
+              56:     19(int) IAdd 55 45
               57:      6(int) Load 11(pos)
               58:     19(int) ShiftRightLogical 57 24
-                              Store 39(byteAddrTemp) 58
-              59:     19(int) Load 39(byteAddrTemp)
+                              Store 38(byteAddrTemp) 58
+              59:     19(int) Load 38(byteAddrTemp)
               60:     30(ptr) AccessChain 18(sbuf) 26 59
               61:      6(int) Load 60
-              62:     19(int) Load 39(byteAddrTemp)
-              63:     19(int) IAdd 62 46
+              62:     19(int) Load 38(byteAddrTemp)
+              63:     19(int) IAdd 62 45
               64:     30(ptr) AccessChain 18(sbuf) 26 63
               65:      6(int) Load 64
-              66:   50(ivec2) CompositeConstruct 61 65
+              66:   49(ivec2) CompositeConstruct 61 65
               68:      6(int) CompositeExtract 66 1
-              69:     30(ptr) AccessChain 18(sbuf) 26 56
-                              Store 69 68
-              71:      6(int) Load 11(pos)
-              72:     19(int) ShiftRightLogical 71 24
-                              Store 70(byteAddrTemp) 72
-              73:     19(int) Load 70(byteAddrTemp)
-              75:      6(int) Load 11(pos)
-              76:     19(int) ShiftRightLogical 75 24
-                              Store 74(byteAddrTemp) 76
-              77:     19(int) Load 74(byteAddrTemp)
-              78:     30(ptr) AccessChain 18(sbuf) 26 77
-              79:      6(int) Load 78
-              80:     19(int) Load 74(byteAddrTemp)
-              81:     19(int) IAdd 80 46
-              82:     30(ptr) AccessChain 18(sbuf) 26 81
-              83:      6(int) Load 82
-              84:     19(int) Load 74(byteAddrTemp)
-              85:     19(int) IAdd 84 24
-              86:     30(ptr) AccessChain 18(sbuf) 26 85
-              87:      6(int) Load 86
-              89:   88(ivec3) CompositeConstruct 79 83 87
-              90:      6(int) CompositeExtract 89 0
-              91:     30(ptr) AccessChain 18(sbuf) 26 73
-                              Store 91 90
-              92:     19(int) Load 70(byteAddrTemp)
-              93:     19(int) IAdd 92 46
-              94:      6(int) Load 11(pos)
-              95:     19(int) ShiftRightLogical 94 24
-                              Store 74(byteAddrTemp) 95
-              96:     19(int) Load 74(byteAddrTemp)
-              97:     30(ptr) AccessChain 18(sbuf) 26 96
-              98:      6(int) Load 97
-              99:     19(int) Load 74(byteAddrTemp)
-             100:     19(int) IAdd 99 46
-             101:     30(ptr) AccessChain 18(sbuf) 26 100
-             102:      6(int) Load 101
-             103:     19(int) Load 74(byteAddrTemp)
-             104:     19(int) IAdd 103 24
-             105:     30(ptr) AccessChain 18(sbuf) 26 104
-             106:      6(int) Load 105
-             107:   88(ivec3) CompositeConstruct 98 102 106
-             108:      6(int) CompositeExtract 107 1
-             109:     30(ptr) AccessChain 18(sbuf) 26 93
-                              Store 109 108
-             110:     19(int) Load 70(byteAddrTemp)
-             111:     19(int) IAdd 110 24
-             112:      6(int) Load 11(pos)
-             113:     19(int) ShiftRightLogical 112 24
-                              Store 74(byteAddrTemp) 113
-             114:     19(int) Load 74(byteAddrTemp)
-             115:     30(ptr) AccessChain 18(sbuf) 26 114
-             116:      6(int) Load 115
-             117:     19(int) Load 74(byteAddrTemp)
-             118:     19(int) IAdd 117 46
-             119:     30(ptr) AccessChain 18(sbuf) 26 118
-             120:      6(int) Load 119
-             121:     19(int) Load 74(byteAddrTemp)
-             122:     19(int) IAdd 121 24
-             123:     30(ptr) AccessChain 18(sbuf) 26 122
-             124:      6(int) Load 123
-             125:   88(ivec3) CompositeConstruct 116 120 124
-             127:      6(int) CompositeExtract 125 2
-             128:     30(ptr) AccessChain 18(sbuf) 26 111
-                              Store 128 127
-             130:      6(int) Load 11(pos)
-             131:     19(int) ShiftRightLogical 130 24
-                              Store 129(byteAddrTemp) 131
-             132:     19(int) Load 129(byteAddrTemp)
+              69:      6(int) ConvertFToU 68
+              70:     30(ptr) AccessChain 18(sbuf) 26 56
+                              Store 70 69
+              72:      6(int) Load 11(pos)
+              73:     19(int) ShiftRightLogical 72 24
+                              Store 71(byteAddrTemp) 73
+              74:     19(int) Load 71(byteAddrTemp)
+              76:      6(int) Load 11(pos)
+              77:     19(int) ShiftRightLogical 76 24
+                              Store 75(byteAddrTemp) 77
+              78:     19(int) Load 75(byteAddrTemp)
+              79:     30(ptr) AccessChain 18(sbuf) 26 78
+              80:      6(int) Load 79
+              81:     19(int) Load 75(byteAddrTemp)
+              82:     19(int) IAdd 81 45
+              83:     30(ptr) AccessChain 18(sbuf) 26 82
+              84:      6(int) Load 83
+              85:     19(int) Load 75(byteAddrTemp)
+              86:     19(int) IAdd 85 24
+              87:     30(ptr) AccessChain 18(sbuf) 26 86
+              88:      6(int) Load 87
+              90:   89(ivec3) CompositeConstruct 80 84 88
+              91:      6(int) CompositeExtract 90 0
+              92:      6(int) ConvertFToU 91
+              93:     30(ptr) AccessChain 18(sbuf) 26 74
+                              Store 93 92
+              94:     19(int) Load 71(byteAddrTemp)
+              95:     19(int) IAdd 94 45
+              96:      6(int) Load 11(pos)
+              97:     19(int) ShiftRightLogical 96 24
+                              Store 75(byteAddrTemp) 97
+              98:     19(int) Load 75(byteAddrTemp)
+              99:     30(ptr) AccessChain 18(sbuf) 26 98
+             100:      6(int) Load 99
+             101:     19(int) Load 75(byteAddrTemp)
+             102:     19(int) IAdd 101 45
+             103:     30(ptr) AccessChain 18(sbuf) 26 102
+             104:      6(int) Load 103
+             105:     19(int) Load 75(byteAddrTemp)
+             106:     19(int) IAdd 105 24
+             107:     30(ptr) AccessChain 18(sbuf) 26 106
+             108:      6(int) Load 107
+             109:   89(ivec3) CompositeConstruct 100 104 108
+             110:      6(int) CompositeExtract 109 1
+             111:      6(int) ConvertFToU 110
+             112:     30(ptr) AccessChain 18(sbuf) 26 95
+                              Store 112 111
+             113:     19(int) Load 71(byteAddrTemp)
+             114:     19(int) IAdd 113 24
+             115:      6(int) Load 11(pos)
+             116:     19(int) ShiftRightLogical 115 24
+                              Store 75(byteAddrTemp) 116
+             117:     19(int) Load 75(byteAddrTemp)
+             118:     30(ptr) AccessChain 18(sbuf) 26 117
+             119:      6(int) Load 118
+             120:     19(int) Load 75(byteAddrTemp)
+             121:     19(int) IAdd 120 45
+             122:     30(ptr) AccessChain 18(sbuf) 26 121
+             123:      6(int) Load 122
+             124:     19(int) Load 75(byteAddrTemp)
+             125:     19(int) IAdd 124 24
+             126:     30(ptr) AccessChain 18(sbuf) 26 125
+             127:      6(int) Load 126
+             128:   89(ivec3) CompositeConstruct 119 123 127
+             130:      6(int) CompositeExtract 128 2
+             131:      6(int) ConvertFToU 130
+             132:     30(ptr) AccessChain 18(sbuf) 26 114
+                              Store 132 131
              134:      6(int) Load 11(pos)
              135:     19(int) ShiftRightLogical 134 24
                               Store 133(byteAddrTemp) 135
              136:     19(int) Load 133(byteAddrTemp)
-             137:     30(ptr) AccessChain 18(sbuf) 26 136
-             138:      6(int) Load 137
-             139:     19(int) Load 133(byteAddrTemp)
-             140:     19(int) IAdd 139 46
+             138:      6(int) Load 11(pos)
+             139:     19(int) ShiftRightLogical 138 24
+                              Store 137(byteAddrTemp) 139
+             140:     19(int) Load 137(byteAddrTemp)
              141:     30(ptr) AccessChain 18(sbuf) 26 140
              142:      6(int) Load 141
-             143:     19(int) Load 133(byteAddrTemp)
-             144:     19(int) IAdd 143 24
+             143:     19(int) Load 137(byteAddrTemp)
+             144:     19(int) IAdd 143 45
              145:     30(ptr) AccessChain 18(sbuf) 26 144
              146:      6(int) Load 145
-             147:     19(int) Load 133(byteAddrTemp)
-             149:     19(int) IAdd 147 148
-             150:     30(ptr) AccessChain 18(sbuf) 26 149
-             151:      6(int) Load 150
-             153:  152(ivec4) CompositeConstruct 138 142 146 151
-             154:      6(int) CompositeExtract 153 0
-             155:     30(ptr) AccessChain 18(sbuf) 26 132
-                              Store 155 154
-             156:     19(int) Load 129(byteAddrTemp)
-             157:     19(int) IAdd 156 46
-             158:      6(int) Load 11(pos)
-             159:     19(int) ShiftRightLogical 158 24
-                              Store 133(byteAddrTemp) 159
-             160:     19(int) Load 133(byteAddrTemp)
-             161:     30(ptr) AccessChain 18(sbuf) 26 160
-             162:      6(int) Load 161
-             163:     19(int) Load 133(byteAddrTemp)
-             164:     19(int) IAdd 163 46
-             165:     30(ptr) AccessChain 18(sbuf) 26 164
-             166:      6(int) Load 165
-             167:     19(int) Load 133(byteAddrTemp)
-             168:     19(int) IAdd 167 24
-             169:     30(ptr) AccessChain 18(sbuf) 26 168
-             170:      6(int) Load 169
-             171:     19(int) Load 133(byteAddrTemp)
-             172:     19(int) IAdd 171 148
-             173:     30(ptr) AccessChain 18(sbuf) 26 172
-             174:      6(int) Load 173
-             175:  152(ivec4) CompositeConstruct 162 166 170 174
-             176:      6(int) CompositeExtract 175 1
-             177:     30(ptr) AccessChain 18(sbuf) 26 157
-                              Store 177 176
-             178:     19(int) Load 129(byteAddrTemp)
-             179:     19(int) IAdd 178 24
-             180:      6(int) Load 11(pos)
-             181:     19(int) ShiftRightLogical 180 24
-                              Store 133(byteAddrTemp) 181
-             182:     19(int) Load 133(byteAddrTemp)
-             183:     30(ptr) AccessChain 18(sbuf) 26 182
-             184:      6(int) Load 183
-             185:     19(int) Load 133(byteAddrTemp)
-             186:     19(int) IAdd 185 46
-             187:     30(ptr) AccessChain 18(sbuf) 26 186
-             188:      6(int) Load 187
-             189:     19(int) Load 133(byteAddrTemp)
-             190:     19(int) IAdd 189 24
-             191:     30(ptr) AccessChain 18(sbuf) 26 190
-             192:      6(int) Load 191
-             193:     19(int) Load 133(byteAddrTemp)
-             194:     19(int) IAdd 193 148
-             195:     30(ptr) AccessChain 18(sbuf) 26 194
-             196:      6(int) Load 195
-             197:  152(ivec4) CompositeConstruct 184 188 192 196
-             198:      6(int) CompositeExtract 197 2
-             199:     30(ptr) AccessChain 18(sbuf) 26 179
-                              Store 199 198
-             200:     19(int) Load 129(byteAddrTemp)
-             201:     19(int) IAdd 200 148
-             202:      6(int) Load 11(pos)
-             203:     19(int) ShiftRightLogical 202 24
-                              Store 133(byteAddrTemp) 203
-             204:     19(int) Load 133(byteAddrTemp)
-             205:     30(ptr) AccessChain 18(sbuf) 26 204
-             206:      6(int) Load 205
+             147:     19(int) Load 137(byteAddrTemp)
+             148:     19(int) IAdd 147 24
+             149:     30(ptr) AccessChain 18(sbuf) 26 148
+             150:      6(int) Load 149
+             151:     19(int) Load 137(byteAddrTemp)
+             153:     19(int) IAdd 151 152
+             154:     30(ptr) AccessChain 18(sbuf) 26 153
+             155:      6(int) Load 154
+             157:  156(ivec4) CompositeConstruct 142 146 150 155
+             158:      6(int) CompositeExtract 157 0
+             159:      6(int) ConvertFToU 158
+             160:     30(ptr) AccessChain 18(sbuf) 26 136
+                              Store 160 159
+             161:     19(int) Load 133(byteAddrTemp)
+             162:     19(int) IAdd 161 45
+             163:      6(int) Load 11(pos)
+             164:     19(int) ShiftRightLogical 163 24
+                              Store 137(byteAddrTemp) 164
+             165:     19(int) Load 137(byteAddrTemp)
+             166:     30(ptr) AccessChain 18(sbuf) 26 165
+             167:      6(int) Load 166
+             168:     19(int) Load 137(byteAddrTemp)
+             169:     19(int) IAdd 168 45
+             170:     30(ptr) AccessChain 18(sbuf) 26 169
+             171:      6(int) Load 170
+             172:     19(int) Load 137(byteAddrTemp)
+             173:     19(int) IAdd 172 24
+             174:     30(ptr) AccessChain 18(sbuf) 26 173
+             175:      6(int) Load 174
+             176:     19(int) Load 137(byteAddrTemp)
+             177:     19(int) IAdd 176 152
+             178:     30(ptr) AccessChain 18(sbuf) 26 177
+             179:      6(int) Load 178
+             180:  156(ivec4) CompositeConstruct 167 171 175 179
+             181:      6(int) CompositeExtract 180 1
+             182:      6(int) ConvertFToU 181
+             183:     30(ptr) AccessChain 18(sbuf) 26 162
+                              Store 183 182
+             184:     19(int) Load 133(byteAddrTemp)
+             185:     19(int) IAdd 184 24
+             186:      6(int) Load 11(pos)
+             187:     19(int) ShiftRightLogical 186 24
+                              Store 137(byteAddrTemp) 187
+             188:     19(int) Load 137(byteAddrTemp)
+             189:     30(ptr) AccessChain 18(sbuf) 26 188
+             190:      6(int) Load 189
+             191:     19(int) Load 137(byteAddrTemp)
+             192:     19(int) IAdd 191 45
+             193:     30(ptr) AccessChain 18(sbuf) 26 192
+             194:      6(int) Load 193
+             195:     19(int) Load 137(byteAddrTemp)
+             196:     19(int) IAdd 195 24
+             197:     30(ptr) AccessChain 18(sbuf) 26 196
+             198:      6(int) Load 197
+             199:     19(int) Load 137(byteAddrTemp)
+             200:     19(int) IAdd 199 152
+             201:     30(ptr) AccessChain 18(sbuf) 26 200
+             202:      6(int) Load 201
+             203:  156(ivec4) CompositeConstruct 190 194 198 202
+             204:      6(int) CompositeExtract 203 2
+             205:      6(int) ConvertFToU 204
+             206:     30(ptr) AccessChain 18(sbuf) 26 185
+                              Store 206 205
              207:     19(int) Load 133(byteAddrTemp)
-             208:     19(int) IAdd 207 46
-             209:     30(ptr) AccessChain 18(sbuf) 26 208
-             210:      6(int) Load 209
-             211:     19(int) Load 133(byteAddrTemp)
-             212:     19(int) IAdd 211 24
-             213:     30(ptr) AccessChain 18(sbuf) 26 212
-             214:      6(int) Load 213
-             215:     19(int) Load 133(byteAddrTemp)
-             216:     19(int) IAdd 215 148
-             217:     30(ptr) AccessChain 18(sbuf) 26 216
-             218:      6(int) Load 217
-             219:  152(ivec4) CompositeConstruct 206 210 214 218
-             221:      6(int) CompositeExtract 219 3
-             222:     30(ptr) AccessChain 18(sbuf) 26 201
-                              Store 222 221
-             223:      6(int) Load 11(pos)
-             224:     19(int) ShiftRightLogical 223 24
-             225:     30(ptr) AccessChain 18(sbuf) 26 224
-             226:      6(int) Load 225
-             227:    8(float) ConvertUToF 226
-             228:    9(fvec4) CompositeConstruct 227 227 227 227
-                              ReturnValue 228
+             208:     19(int) IAdd 207 152
+             209:      6(int) Load 11(pos)
+             210:     19(int) ShiftRightLogical 209 24
+                              Store 137(byteAddrTemp) 210
+             211:     19(int) Load 137(byteAddrTemp)
+             212:     30(ptr) AccessChain 18(sbuf) 26 211
+             213:      6(int) Load 212
+             214:     19(int) Load 137(byteAddrTemp)
+             215:     19(int) IAdd 214 45
+             216:     30(ptr) AccessChain 18(sbuf) 26 215
+             217:      6(int) Load 216
+             218:     19(int) Load 137(byteAddrTemp)
+             219:     19(int) IAdd 218 24
+             220:     30(ptr) AccessChain 18(sbuf) 26 219
+             221:      6(int) Load 220
+             222:     19(int) Load 137(byteAddrTemp)
+             223:     19(int) IAdd 222 152
+             224:     30(ptr) AccessChain 18(sbuf) 26 223
+             225:      6(int) Load 224
+             226:  156(ivec4) CompositeConstruct 213 217 221 225
+             228:      6(int) CompositeExtract 226 3
+             229:      6(int) ConvertFToU 228
+             230:     30(ptr) AccessChain 18(sbuf) 26 208
+                              Store 230 229
+             231:      6(int) Load 11(pos)
+             232:     19(int) ShiftRightLogical 231 24
+             233:     30(ptr) AccessChain 18(sbuf) 26 232
+             234:      6(int) Load 233
+             235:    8(float) ConvertUToF 234
+             236:    9(fvec4) CompositeConstruct 235 235 235 235
+                              ReturnValue 236
                               FunctionEnd
diff --git a/Test/hlsl.store.rwbyteaddressbuffer.type.comp b/Test/hlsl.store.rwbyteaddressbuffer.type.comp
new file mode 100644
index 0000000..5400d81
--- /dev/null
+++ b/Test/hlsl.store.rwbyteaddressbuffer.type.comp
@@ -0,0 +1,8 @@
+RWByteAddressBuffer buffer;
+
+[numthreads(64, 1, 1)]
+void main( uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+    if(dispatchThreadID.x == 0)
+        buffer.Store(0, 2);
+}
\ No newline at end of file
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 594f1a1..fbb1e6e 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -302,6 +302,7 @@
         {"hlsl.shapeConvRet.frag", "main"},
         {"hlsl.snorm.uav.comp", "main"},
         {"hlsl.staticMemberFunction.frag", "main"},
+        {"hlsl.store.rwbyteaddressbuffer.type.comp", "main"},
         {"hlsl.stringtoken.frag", "main"},
         {"hlsl.string.frag", "main"},
         {"hlsl.struct.split-1.vert", "main"},
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index b7c0254..d5dab1a 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -3274,6 +3274,9 @@
                                                                                         : EOpIndexIndirect;
 
                 TIntermTyped* lValue = intermediate.addIndex(idxOp, argArray, offsetIdx, loc);
+                const TType derefType(argArray->getType(), 0);
+                lValue->setType(derefType);
+
                 TIntermTyped* rValue = (size == 1) ? argValue :
                     intermediate.addIndex(EOpIndexDirect, argValue, idxConst, loc);