Merge remote-tracking branch 'aosp/upstream-master' into update-shaderc

Includes:
88e88e59 HLSL: Non-functional: Remove dead .length() code.
516d92d3 HLSL: Non-functional: Drive existing method recognition by syntax, not by name.
78388726 HLSL: Non-functional: Don't process function name/parameters before expected a function declaration.
b7201f8e Merge pull request #756 from steve-lunarg/getdimensions-fix
ca71d946 HLSL: Grammar: Generalize accepting a declaration to accept an aggregate of subtrees.
3ce4536a HLSL: use LOD form of ImageQuerySize when needed.
057df293 HLSL: Fix #754: recognize type casts in if-statements separately from declarations.
621c0e3d Merge pull request #755 from steve-lunarg/sb-orderfix
40efe5ce WIP: HLSL: Fix ordering defect if global SB decl after fn param
33f85b6e SPV: Allow push constant buffers to not have an instance name.
789086a8 HLSL: Test for issue #699.
322cb192 Merge pull request #750 from dgkoch/rename_KHX_to_EXT
27ffb299 HLSL: Add 'class' keyword as (so far) synonym for 'struct'.
efc97279 Rename KHX to EXT to match the released specs
c18cae21 Merge pull request #748 from dgkoch/dgkoch_build_fixes2
d9b7a850 More build fixes
854fe247 HLSL: Fix #747: accept 'struct' in front of previously user-defined type name.
0479437a SPV: Fix #739: OpSelect can only operate on scalars and vectors.
173c0c01 Merge pull request #744 from realitix/sanitize_sh_link
9c3f7b60 Merge pull request #746 from dgkoch/dgkoch_build_fixes
efeefd98 Build: Another fix for issue #718: implement the hidden methods of tFinalize.
197082ca Fix build warnings on some platforms
bc3fdcc8 Sanitize ShaderLang.h
3494d71c PP: Fix issue #738: don't assert on characters within a string.
fb22b69f PP: Partially address issue #738: handle premature end of argument when token pasting.
45c1b5b9 Merge pull request #742 from steve-lunarg/f16tof32-typefix
fdbfb65e HLSL: small fix for index type in f16tof32 opcode
5a042c06 GLSL: Fix #741: rationalize per-block vs. per-member offset checking.
69a2c696 Merge pull request #736 from steve-lunarg/structbuffer-params
b67b4a70 PP: Address #737: accept 'h'/'H' floating-point suffix more broadly.
dd8287a1 WIP: HLSL: add structuredbuffer pass by reference in fn params

Test: checkbuild.py on Linux; unit tests on Windows
Change-Id: Icc17a9b321904417f9da43d5b0d2ca60e4d4e980
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index ff23598..5385eee 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1789,7 +1789,8 @@
     // Crucially, side effects must be avoided, and there are performance trade-offs.
     // Return true if good idea (and safe) for OpSelect, false otherwise.
     const auto selectPolicy = [&]() -> bool {
-        if (node->getBasicType() == glslang::EbtVoid)
+        if ((!node->getType().isScalar() && !node->getType().isVector()) ||
+            node->getBasicType() == glslang::EbtVoid)
             return false;
 
         if (node->getTrueBlock()  == nullptr ||
@@ -2740,7 +2741,8 @@
         for (int p = 0; p < (int)parameters.size(); ++p) {
             const glslang::TType& paramType = parameters[p]->getAsTyped()->getType();
             spv::Id typeId = convertGlslangToSpvType(paramType);
-            if (paramType.containsOpaque())
+            if (paramType.containsOpaque() ||
+                (paramType.getBasicType() == glslang::EbtBlock && paramType.getQualifier().storage == glslang::EvqBuffer))
                 typeId = builder.makePointer(TranslateStorageClass(paramType), typeId);
             else if (paramType.getQualifier().storage != glslang::EvqConstReadOnly)
                 typeId = builder.makePointer(spv::StorageClassFunction, typeId);
@@ -3220,7 +3222,8 @@
     for (int a = 0; a < (int)glslangArgs.size(); ++a) {
         const glslang::TType& paramType = glslangArgs[a]->getAsTyped()->getType();
         spv::Id arg;
-        if (paramType.containsOpaque()) {
+        if (paramType.containsOpaque() ||
+            (paramType.getBasicType() == glslang::EbtBlock && qualifiers[a] == glslang::EvqBuffer)) {
             builder.setAccessChain(lValues[lValueCount]);
             arg = builder.accessChainGetLValue();
             ++lValueCount;
diff --git a/Test/120.frag b/Test/120.frag
index 028d308..ea35b80 100644
--- a/Test/120.frag
+++ b/Test/120.frag
@@ -243,4 +243,6 @@
 	b ? foo121111() : foo12111();
 	b ? foo121111() : 4;  // ERROR
 	b ? 3 : foo12111();   // ERROR
-}
\ No newline at end of file
+}
+
+float halfFloat1 = 1.0h;   // syntax ERROR

diff --git a/Test/badChars.frag b/Test/badChars.frag
index d67bf3a..3e9700d 100644
--- a/Test/badChars.frag
+++ b/Test/badChars.frag
@@ -4,3 +4,4 @@
 #if
 #endif
 int aÿ
+#define A "ÿ
\ No newline at end of file
diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out
index 5028b75..c64eacc 100644
--- a/Test/baseResults/120.frag.out
+++ b/Test/baseResults/120.frag.out
@@ -52,7 +52,8 @@
 ERROR: 0:212: 'sampler2DRect' : Reserved word. 
 ERROR: 0:244: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type 'global void' and a right operand of type 'const int' (or there is no acceptable conversion)
 ERROR: 0:245: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type 'const int' and a right operand of type 'global void' (or there is no acceptable conversion)
-ERROR: 53 compilation errors.  No code generated.
+ERROR: 0:248: '' :  syntax error
+ERROR: 54 compilation errors.  No code generated.
 
 
 Shader version: 120
@@ -645,6 +646,7 @@
 0:?     's2DRbad' (uniform sampler2DRect)
 0:?     's2DR' (uniform sampler2DRect)
 0:?     's2DRS' (uniform sampler2DRectShadow)
+0:?     'halfFloat1' (global float)
 
 
 Linked fragment stage:
@@ -688,4 +690,5 @@
 0:?     's2DRbad' (uniform sampler2DRect)
 0:?     's2DR' (uniform sampler2DRect)
 0:?     's2DRS' (uniform sampler2DRectShadow)
+0:?     'halfFloat1' (global float)
 
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index cc6b13f..9de843f 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -47,12 +47,13 @@
 ERROR: 0:143: 'rgba32ui' : does not apply to signed integer images 
 ERROR: 0:144: 'r8ui' : does not apply to signed integer images 
 ERROR: 0:147: 'offset on block member' : not supported for this version or the enabled extensions 
+ERROR: 0:147: 'offset/align' : can only be used with std140 or std430 layout packing 
 ERROR: 0:157: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:157: 'assign' :  cannot convert from 'const float' to 'temp int'
 ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:158: 'assign' :  cannot convert from 'const float' to 'temp int'
 WARNING: 0:161: '[]' : assuming array size of one for compile-time checking of binding numbers for implicitly-sized array 
-ERROR: 50 compilation errors.  No code generated.
+ERROR: 51 compilation errors.  No code generated.
 
 
 Shader version: 420
diff --git a/Test/baseResults/430.vert.out b/Test/baseResults/430.vert.out
index 8cd1156..358d6c8 100644
--- a/Test/baseResults/430.vert.out
+++ b/Test/baseResults/430.vert.out
@@ -28,8 +28,9 @@
 ERROR: 0:65: 'uniform buffer-member align' : not supported for this version or the enabled extensions 
 ERROR: 0:65: 'offset on block member' : not supported for this version or the enabled extensions 
 ERROR: 0:66: 'offset on block member' : not supported for this version or the enabled extensions 
-ERROR: 0:64: 'offset/align' : can only be used with std140 or std430 layout packing 
-ERROR: 0:65: 'align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:64: 'align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:65: 'offset/align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:66: 'offset/align' : can only be used with std140 or std430 layout packing 
 ERROR: 0:71: 'offset on block member' : not supported for this version or the enabled extensions 
 ERROR: 0:74: 'gl_MaxTransformFeedbackBuffers' : required extension not requested: GL_ARB_enhanced_layouts
 ERROR: 0:75: 'gl_MaxTransformFeedbackInterleavedComponents' : required extension not requested: GL_ARB_enhanced_layouts
@@ -63,7 +64,7 @@
 ERROR: 0:221: 'assign' :  cannot convert from 'const float' to 'temp int'
 ERROR: 0:222: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:222: 'assign' :  cannot convert from 'const float' to 'temp int'
-ERROR: 63 compilation errors.  No code generated.
+ERROR: 64 compilation errors.  No code generated.
 
 
 Shader version: 430
diff --git a/Test/baseResults/440.frag.out b/Test/baseResults/440.frag.out
index bdc1b09..5600172 100644
--- a/Test/baseResults/440.frag.out
+++ b/Test/baseResults/440.frag.out
@@ -22,11 +22,11 @@
 ERROR: 0:39: 'output block' : not supported in this stage: fragment
 ERROR: 0:39: 'layout' : offset/align can only be used on a uniform or buffer 
 ERROR: 0:39: 'offset' : only applies to block members, not blocks 
-ERROR: 0:42: 'offset/align' : can only be used with std140 or std430 layout packing 
-ERROR: 0:43: 'offset/align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:42: 'align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:43: 'align' : can only be used with std140 or std430 layout packing 
 ERROR: 0:43: 'layout' : offset/align can only be used on a uniform or buffer 
 ERROR: 0:44: 'output block' : not supported in this stage: fragment
-ERROR: 0:44: 'offset/align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:44: 'align' : can only be used with std140 or std430 layout packing 
 ERROR: 0:44: 'layout' : offset/align can only be used on a uniform or buffer 
 ERROR: 0:46: 'offset' : cannot specify on a variable declaration 
 ERROR: 0:47: 'layout' : offset/align can only be used on a uniform or buffer 
@@ -37,8 +37,9 @@
 ERROR: 0:54: 'layout' : matrix or packing qualifiers can only be used on a uniform or buffer 
 ERROR: 0:55: 'layout' : cannot specify packing on a variable declaration 
 ERROR: 0:57: 'align' : must be a power of 2 
-ERROR: 0:58: 'align' : can only be used with std140 or std430 layout packing 
-ERROR: 0:63: 'align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:58: 'offset/align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:62: 'offset/align' : can only be used with std140 or std430 layout packing 
+ERROR: 0:63: 'offset/align' : can only be used with std140 or std430 layout packing 
 ERROR: 0:62: 'layout' : offset/align can only be used on a uniform or buffer 
 ERROR: 0:63: 'layout' : offset/align can only be used on a uniform or buffer 
 ERROR: 0:84: 'align' : must be a power of 2 
@@ -48,7 +49,7 @@
 ERROR: 0:105: 'align' : must be a power of 2 
 ERROR: 0:102: 'offset' : cannot lie in previous members 
 ERROR: 0:104: 'offset' : must be a multiple of the member's alignment 
-ERROR: 48 compilation errors.  No code generated.
+ERROR: 49 compilation errors.  No code generated.
 
 
 Shader version: 440
diff --git a/Test/baseResults/badChars.frag.out b/Test/baseResults/badChars.frag.out
index e9ebff7..9a2aeca 100644
--- a/Test/baseResults/badChars.frag.out
+++ b/Test/baseResults/badChars.frag.out
@@ -5,8 +5,9 @@
 ERROR: 0:4: 'preprocessor evaluation' : bad expression 
 ERROR: 0:4: '#if' : unexpected tokens following directive 
 ERROR: 0:6: '€' : unexpected token 
+ERROR: 0:7: 'string' : End of line in string 
 ERROR: 0:7: '' :  syntax error
-ERROR: 7 compilation errors.  No code generated.
+ERROR: 8 compilation errors.  No code generated.
 
 
 Shader version: 100
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index e426e75..7c73d8d 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -10,6 +10,8 @@
 0:65          'sizeQueryTemp' (temp uint)
 0:65          textureSize (temp uint)
 0:65            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:65            Constant:
+0:65              0 (const int)
 0:65        move second child to first child (temp uint)
 0:65          'WidthU' (temp uint)
 0:65          'sizeQueryTemp' (temp uint)
@@ -32,6 +34,8 @@
 0:69          'sizeQueryTemp' (temp uint)
 0:69          textureSize (temp uint)
 0:69            'g_tTex1di4' (uniform itexture1D)
+0:69            Constant:
+0:69              0 (const int)
 0:69        move second child to first child (temp uint)
 0:69          'WidthU' (temp uint)
 0:69          'sizeQueryTemp' (temp uint)
@@ -54,6 +58,8 @@
 0:73          'sizeQueryTemp' (temp uint)
 0:73          textureSize (temp uint)
 0:73            'g_tTex1du4' (uniform utexture1D)
+0:73            Constant:
+0:73              0 (const int)
 0:73        move second child to first child (temp uint)
 0:73          'WidthU' (temp uint)
 0:73          'sizeQueryTemp' (temp uint)
@@ -76,6 +82,8 @@
 0:77          'sizeQueryTemp' (temp 2-component vector of uint)
 0:77          textureSize (temp 2-component vector of uint)
 0:77            'g_tTex1df4a' (uniform texture1DArray)
+0:77            Constant:
+0:77              0 (const int)
 0:77        move second child to first child (temp uint)
 0:77          'WidthU' (temp uint)
 0:77          direct index (temp uint)
@@ -116,6 +124,8 @@
 0:81          'sizeQueryTemp' (temp 2-component vector of uint)
 0:81          textureSize (temp 2-component vector of uint)
 0:81            'g_tTex1di4a' (uniform itexture1DArray)
+0:81            Constant:
+0:81              0 (const int)
 0:81        move second child to first child (temp uint)
 0:81          'WidthU' (temp uint)
 0:81          direct index (temp uint)
@@ -156,6 +166,8 @@
 0:85          'sizeQueryTemp' (temp 2-component vector of uint)
 0:85          textureSize (temp 2-component vector of uint)
 0:85            'g_tTex1du4a' (uniform utexture1DArray)
+0:85            Constant:
+0:85              0 (const int)
 0:85        move second child to first child (temp uint)
 0:85          'WidthU' (temp uint)
 0:85          direct index (temp uint)
@@ -196,6 +208,8 @@
 0:89          'sizeQueryTemp' (temp 2-component vector of uint)
 0:89          textureSize (temp 2-component vector of uint)
 0:89            'g_tTex2df4' (uniform texture2D)
+0:89            Constant:
+0:89              0 (const int)
 0:89        move second child to first child (temp uint)
 0:89          'WidthU' (temp uint)
 0:89          direct index (temp uint)
@@ -236,6 +250,8 @@
 0:93          'sizeQueryTemp' (temp 2-component vector of uint)
 0:93          textureSize (temp 2-component vector of uint)
 0:93            'g_tTex2di4' (uniform itexture2D)
+0:93            Constant:
+0:93              0 (const int)
 0:93        move second child to first child (temp uint)
 0:93          'WidthU' (temp uint)
 0:93          direct index (temp uint)
@@ -276,6 +292,8 @@
 0:97          'sizeQueryTemp' (temp 2-component vector of uint)
 0:97          textureSize (temp 2-component vector of uint)
 0:97            'g_tTex2du4' (uniform utexture2D)
+0:97            Constant:
+0:97              0 (const int)
 0:97        move second child to first child (temp uint)
 0:97          'WidthU' (temp uint)
 0:97          direct index (temp uint)
@@ -316,6 +334,8 @@
 0:101          'sizeQueryTemp' (temp 3-component vector of uint)
 0:101          textureSize (temp 3-component vector of uint)
 0:101            'g_tTex2df4a' (uniform texture2DArray)
+0:101            Constant:
+0:101              0 (const int)
 0:101        move second child to first child (temp uint)
 0:101          'WidthU' (temp uint)
 0:101          direct index (temp uint)
@@ -368,6 +388,8 @@
 0:105          'sizeQueryTemp' (temp 3-component vector of uint)
 0:105          textureSize (temp 3-component vector of uint)
 0:105            'g_tTex2di4a' (uniform itexture2DArray)
+0:105            Constant:
+0:105              0 (const int)
 0:105        move second child to first child (temp uint)
 0:105          'WidthU' (temp uint)
 0:105          direct index (temp uint)
@@ -420,6 +442,8 @@
 0:109          'sizeQueryTemp' (temp 3-component vector of uint)
 0:109          textureSize (temp 3-component vector of uint)
 0:109            'g_tTex2du4a' (uniform utexture2DArray)
+0:109            Constant:
+0:109              0 (const int)
 0:109        move second child to first child (temp uint)
 0:109          'WidthU' (temp uint)
 0:109          direct index (temp uint)
@@ -472,6 +496,8 @@
 0:113          'sizeQueryTemp' (temp 3-component vector of uint)
 0:113          textureSize (temp 3-component vector of uint)
 0:113            'g_tTex3df4' (uniform texture3D)
+0:113            Constant:
+0:113              0 (const int)
 0:113        move second child to first child (temp uint)
 0:113          'WidthU' (temp uint)
 0:113          direct index (temp uint)
@@ -524,6 +550,8 @@
 0:117          'sizeQueryTemp' (temp 3-component vector of uint)
 0:117          textureSize (temp 3-component vector of uint)
 0:117            'g_tTex3di4' (uniform itexture3D)
+0:117            Constant:
+0:117              0 (const int)
 0:117        move second child to first child (temp uint)
 0:117          'WidthU' (temp uint)
 0:117          direct index (temp uint)
@@ -576,6 +604,8 @@
 0:121          'sizeQueryTemp' (temp 3-component vector of uint)
 0:121          textureSize (temp 3-component vector of uint)
 0:121            'g_tTex3du4' (uniform utexture3D)
+0:121            Constant:
+0:121              0 (const int)
 0:121        move second child to first child (temp uint)
 0:121          'WidthU' (temp uint)
 0:121          direct index (temp uint)
@@ -628,6 +658,8 @@
 0:125          'sizeQueryTemp' (temp 2-component vector of uint)
 0:125          textureSize (temp 2-component vector of uint)
 0:125            'g_tTexcdf4' (uniform textureCube)
+0:125            Constant:
+0:125              0 (const int)
 0:125        move second child to first child (temp uint)
 0:125          'WidthU' (temp uint)
 0:125          direct index (temp uint)
@@ -668,6 +700,8 @@
 0:129          'sizeQueryTemp' (temp 2-component vector of uint)
 0:129          textureSize (temp 2-component vector of uint)
 0:129            'g_tTexcdi4' (uniform itextureCube)
+0:129            Constant:
+0:129              0 (const int)
 0:129        move second child to first child (temp uint)
 0:129          'WidthU' (temp uint)
 0:129          direct index (temp uint)
@@ -708,6 +742,8 @@
 0:133          'sizeQueryTemp' (temp 2-component vector of uint)
 0:133          textureSize (temp 2-component vector of uint)
 0:133            'g_tTexcdu4' (uniform utextureCube)
+0:133            Constant:
+0:133              0 (const int)
 0:133        move second child to first child (temp uint)
 0:133          'WidthU' (temp uint)
 0:133          direct index (temp uint)
@@ -748,6 +784,8 @@
 0:137          'sizeQueryTemp' (temp 3-component vector of uint)
 0:137          textureSize (temp 3-component vector of uint)
 0:137            'g_tTexcdf4a' (uniform textureCubeArray)
+0:137            Constant:
+0:137              0 (const int)
 0:137        move second child to first child (temp uint)
 0:137          'WidthU' (temp uint)
 0:137          direct index (temp uint)
@@ -800,6 +838,8 @@
 0:141          'sizeQueryTemp' (temp 3-component vector of uint)
 0:141          textureSize (temp 3-component vector of uint)
 0:141            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:141            Constant:
+0:141              0 (const int)
 0:141        move second child to first child (temp uint)
 0:141          'WidthU' (temp uint)
 0:141          direct index (temp uint)
@@ -852,6 +892,8 @@
 0:145          'sizeQueryTemp' (temp 3-component vector of uint)
 0:145          textureSize (temp 3-component vector of uint)
 0:145            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:145            Constant:
+0:145              0 (const int)
 0:145        move second child to first child (temp uint)
 0:145          'WidthU' (temp uint)
 0:145          direct index (temp uint)
@@ -1128,6 +1170,8 @@
 0:65          'sizeQueryTemp' (temp uint)
 0:65          textureSize (temp uint)
 0:65            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:65            Constant:
+0:65              0 (const int)
 0:65        move second child to first child (temp uint)
 0:65          'WidthU' (temp uint)
 0:65          'sizeQueryTemp' (temp uint)
@@ -1150,6 +1194,8 @@
 0:69          'sizeQueryTemp' (temp uint)
 0:69          textureSize (temp uint)
 0:69            'g_tTex1di4' (uniform itexture1D)
+0:69            Constant:
+0:69              0 (const int)
 0:69        move second child to first child (temp uint)
 0:69          'WidthU' (temp uint)
 0:69          'sizeQueryTemp' (temp uint)
@@ -1172,6 +1218,8 @@
 0:73          'sizeQueryTemp' (temp uint)
 0:73          textureSize (temp uint)
 0:73            'g_tTex1du4' (uniform utexture1D)
+0:73            Constant:
+0:73              0 (const int)
 0:73        move second child to first child (temp uint)
 0:73          'WidthU' (temp uint)
 0:73          'sizeQueryTemp' (temp uint)
@@ -1194,6 +1242,8 @@
 0:77          'sizeQueryTemp' (temp 2-component vector of uint)
 0:77          textureSize (temp 2-component vector of uint)
 0:77            'g_tTex1df4a' (uniform texture1DArray)
+0:77            Constant:
+0:77              0 (const int)
 0:77        move second child to first child (temp uint)
 0:77          'WidthU' (temp uint)
 0:77          direct index (temp uint)
@@ -1234,6 +1284,8 @@
 0:81          'sizeQueryTemp' (temp 2-component vector of uint)
 0:81          textureSize (temp 2-component vector of uint)
 0:81            'g_tTex1di4a' (uniform itexture1DArray)
+0:81            Constant:
+0:81              0 (const int)
 0:81        move second child to first child (temp uint)
 0:81          'WidthU' (temp uint)
 0:81          direct index (temp uint)
@@ -1274,6 +1326,8 @@
 0:85          'sizeQueryTemp' (temp 2-component vector of uint)
 0:85          textureSize (temp 2-component vector of uint)
 0:85            'g_tTex1du4a' (uniform utexture1DArray)
+0:85            Constant:
+0:85              0 (const int)
 0:85        move second child to first child (temp uint)
 0:85          'WidthU' (temp uint)
 0:85          direct index (temp uint)
@@ -1314,6 +1368,8 @@
 0:89          'sizeQueryTemp' (temp 2-component vector of uint)
 0:89          textureSize (temp 2-component vector of uint)
 0:89            'g_tTex2df4' (uniform texture2D)
+0:89            Constant:
+0:89              0 (const int)
 0:89        move second child to first child (temp uint)
 0:89          'WidthU' (temp uint)
 0:89          direct index (temp uint)
@@ -1354,6 +1410,8 @@
 0:93          'sizeQueryTemp' (temp 2-component vector of uint)
 0:93          textureSize (temp 2-component vector of uint)
 0:93            'g_tTex2di4' (uniform itexture2D)
+0:93            Constant:
+0:93              0 (const int)
 0:93        move second child to first child (temp uint)
 0:93          'WidthU' (temp uint)
 0:93          direct index (temp uint)
@@ -1394,6 +1452,8 @@
 0:97          'sizeQueryTemp' (temp 2-component vector of uint)
 0:97          textureSize (temp 2-component vector of uint)
 0:97            'g_tTex2du4' (uniform utexture2D)
+0:97            Constant:
+0:97              0 (const int)
 0:97        move second child to first child (temp uint)
 0:97          'WidthU' (temp uint)
 0:97          direct index (temp uint)
@@ -1434,6 +1494,8 @@
 0:101          'sizeQueryTemp' (temp 3-component vector of uint)
 0:101          textureSize (temp 3-component vector of uint)
 0:101            'g_tTex2df4a' (uniform texture2DArray)
+0:101            Constant:
+0:101              0 (const int)
 0:101        move second child to first child (temp uint)
 0:101          'WidthU' (temp uint)
 0:101          direct index (temp uint)
@@ -1486,6 +1548,8 @@
 0:105          'sizeQueryTemp' (temp 3-component vector of uint)
 0:105          textureSize (temp 3-component vector of uint)
 0:105            'g_tTex2di4a' (uniform itexture2DArray)
+0:105            Constant:
+0:105              0 (const int)
 0:105        move second child to first child (temp uint)
 0:105          'WidthU' (temp uint)
 0:105          direct index (temp uint)
@@ -1538,6 +1602,8 @@
 0:109          'sizeQueryTemp' (temp 3-component vector of uint)
 0:109          textureSize (temp 3-component vector of uint)
 0:109            'g_tTex2du4a' (uniform utexture2DArray)
+0:109            Constant:
+0:109              0 (const int)
 0:109        move second child to first child (temp uint)
 0:109          'WidthU' (temp uint)
 0:109          direct index (temp uint)
@@ -1590,6 +1656,8 @@
 0:113          'sizeQueryTemp' (temp 3-component vector of uint)
 0:113          textureSize (temp 3-component vector of uint)
 0:113            'g_tTex3df4' (uniform texture3D)
+0:113            Constant:
+0:113              0 (const int)
 0:113        move second child to first child (temp uint)
 0:113          'WidthU' (temp uint)
 0:113          direct index (temp uint)
@@ -1642,6 +1710,8 @@
 0:117          'sizeQueryTemp' (temp 3-component vector of uint)
 0:117          textureSize (temp 3-component vector of uint)
 0:117            'g_tTex3di4' (uniform itexture3D)
+0:117            Constant:
+0:117              0 (const int)
 0:117        move second child to first child (temp uint)
 0:117          'WidthU' (temp uint)
 0:117          direct index (temp uint)
@@ -1694,6 +1764,8 @@
 0:121          'sizeQueryTemp' (temp 3-component vector of uint)
 0:121          textureSize (temp 3-component vector of uint)
 0:121            'g_tTex3du4' (uniform utexture3D)
+0:121            Constant:
+0:121              0 (const int)
 0:121        move second child to first child (temp uint)
 0:121          'WidthU' (temp uint)
 0:121          direct index (temp uint)
@@ -1746,6 +1818,8 @@
 0:125          'sizeQueryTemp' (temp 2-component vector of uint)
 0:125          textureSize (temp 2-component vector of uint)
 0:125            'g_tTexcdf4' (uniform textureCube)
+0:125            Constant:
+0:125              0 (const int)
 0:125        move second child to first child (temp uint)
 0:125          'WidthU' (temp uint)
 0:125          direct index (temp uint)
@@ -1786,6 +1860,8 @@
 0:129          'sizeQueryTemp' (temp 2-component vector of uint)
 0:129          textureSize (temp 2-component vector of uint)
 0:129            'g_tTexcdi4' (uniform itextureCube)
+0:129            Constant:
+0:129              0 (const int)
 0:129        move second child to first child (temp uint)
 0:129          'WidthU' (temp uint)
 0:129          direct index (temp uint)
@@ -1826,6 +1902,8 @@
 0:133          'sizeQueryTemp' (temp 2-component vector of uint)
 0:133          textureSize (temp 2-component vector of uint)
 0:133            'g_tTexcdu4' (uniform utextureCube)
+0:133            Constant:
+0:133              0 (const int)
 0:133        move second child to first child (temp uint)
 0:133          'WidthU' (temp uint)
 0:133          direct index (temp uint)
@@ -1866,6 +1944,8 @@
 0:137          'sizeQueryTemp' (temp 3-component vector of uint)
 0:137          textureSize (temp 3-component vector of uint)
 0:137            'g_tTexcdf4a' (uniform textureCubeArray)
+0:137            Constant:
+0:137              0 (const int)
 0:137        move second child to first child (temp uint)
 0:137          'WidthU' (temp uint)
 0:137          direct index (temp uint)
@@ -1918,6 +1998,8 @@
 0:141          'sizeQueryTemp' (temp 3-component vector of uint)
 0:141          textureSize (temp 3-component vector of uint)
 0:141            'g_tTexcdi4a' (uniform itextureCubeArray)
+0:141            Constant:
+0:141              0 (const int)
 0:141        move second child to first child (temp uint)
 0:141          'WidthU' (temp uint)
 0:141          direct index (temp uint)
@@ -1970,6 +2052,8 @@
 0:145          'sizeQueryTemp' (temp 3-component vector of uint)
 0:145          textureSize (temp 3-component vector of uint)
 0:145            'g_tTexcdu4a' (uniform utextureCubeArray)
+0:145            Constant:
+0:145              0 (const int)
 0:145        move second child to first child (temp uint)
 0:145          'WidthU' (temp uint)
 0:145          direct index (temp uint)
@@ -2251,118 +2335,118 @@
                               Name 10  "@main("
                               Name 14  "sizeQueryTemp"
                               Name 17  "g_tTex1df4"
-                              Name 21  "WidthU"
-                              Name 23  "sizeQueryTemp"
-                              Name 28  "NumberOfLevelsU"
-                              Name 31  "sizeQueryTemp"
-                              Name 34  "g_tTex1di4"
-                              Name 38  "sizeQueryTemp"
-                              Name 44  "sizeQueryTemp"
-                              Name 47  "g_tTex1du4"
-                              Name 51  "sizeQueryTemp"
-                              Name 59  "sizeQueryTemp"
-                              Name 62  "g_tTex1df4a"
-                              Name 69  "ElementsU"
-                              Name 73  "sizeQueryTemp"
-                              Name 82  "sizeQueryTemp"
-                              Name 85  "g_tTex1di4a"
-                              Name 92  "sizeQueryTemp"
-                              Name 101  "sizeQueryTemp"
-                              Name 104  "g_tTex1du4a"
-                              Name 111  "sizeQueryTemp"
-                              Name 120  "sizeQueryTemp"
-                              Name 123  "g_tTex2df4"
-                              Name 128  "HeightU"
-                              Name 131  "sizeQueryTemp"
-                              Name 140  "sizeQueryTemp"
-                              Name 143  "g_tTex2di4"
-                              Name 150  "sizeQueryTemp"
-                              Name 159  "sizeQueryTemp"
-                              Name 162  "g_tTex2du4"
-                              Name 169  "sizeQueryTemp"
-                              Name 180  "sizeQueryTemp"
-                              Name 183  "g_tTex2df4a"
-                              Name 194  "sizeQueryTemp"
-                              Name 205  "sizeQueryTemp"
-                              Name 208  "g_tTex2di4a"
-                              Name 217  "sizeQueryTemp"
-                              Name 228  "sizeQueryTemp"
-                              Name 231  "g_tTex2du4a"
-                              Name 240  "sizeQueryTemp"
-                              Name 251  "sizeQueryTemp"
-                              Name 254  "g_tTex3df4"
-                              Name 261  "DepthU"
-                              Name 264  "sizeQueryTemp"
-                              Name 275  "sizeQueryTemp"
-                              Name 278  "g_tTex3di4"
-                              Name 287  "sizeQueryTemp"
-                              Name 298  "sizeQueryTemp"
-                              Name 301  "g_tTex3du4"
-                              Name 310  "sizeQueryTemp"
-                              Name 321  "sizeQueryTemp"
-                              Name 324  "g_tTexcdf4"
-                              Name 331  "sizeQueryTemp"
-                              Name 340  "sizeQueryTemp"
-                              Name 343  "g_tTexcdi4"
-                              Name 350  "sizeQueryTemp"
-                              Name 359  "sizeQueryTemp"
-                              Name 362  "g_tTexcdu4"
-                              Name 369  "sizeQueryTemp"
-                              Name 378  "sizeQueryTemp"
-                              Name 381  "g_tTexcdf4a"
-                              Name 390  "sizeQueryTemp"
-                              Name 401  "sizeQueryTemp"
-                              Name 404  "g_tTexcdi4a"
-                              Name 413  "sizeQueryTemp"
-                              Name 424  "sizeQueryTemp"
-                              Name 427  "g_tTexcdu4a"
-                              Name 436  "sizeQueryTemp"
-                              Name 447  "sizeQueryTemp"
-                              Name 450  "g_tTex2dmsf4"
-                              Name 457  "NumberOfSamplesU"
-                              Name 460  "sizeQueryTemp"
-                              Name 463  "g_tTex2dmsi4"
-                              Name 472  "sizeQueryTemp"
-                              Name 475  "g_tTex2dmsu4"
-                              Name 484  "sizeQueryTemp"
-                              Name 487  "g_tTex2dmsf4a"
-                              Name 498  "sizeQueryTemp"
-                              Name 501  "g_tTex2dmsi4a"
-                              Name 512  "sizeQueryTemp"
-                              Name 515  "g_tTex2dmsu4a"
-                              Name 527  "psout"
+                              Name 22  "WidthU"
+                              Name 24  "sizeQueryTemp"
+                              Name 29  "NumberOfLevelsU"
+                              Name 32  "sizeQueryTemp"
+                              Name 35  "g_tTex1di4"
+                              Name 39  "sizeQueryTemp"
+                              Name 45  "sizeQueryTemp"
+                              Name 48  "g_tTex1du4"
+                              Name 52  "sizeQueryTemp"
+                              Name 60  "sizeQueryTemp"
+                              Name 63  "g_tTex1df4a"
+                              Name 70  "ElementsU"
+                              Name 74  "sizeQueryTemp"
+                              Name 83  "sizeQueryTemp"
+                              Name 86  "g_tTex1di4a"
+                              Name 93  "sizeQueryTemp"
+                              Name 102  "sizeQueryTemp"
+                              Name 105  "g_tTex1du4a"
+                              Name 112  "sizeQueryTemp"
+                              Name 121  "sizeQueryTemp"
+                              Name 124  "g_tTex2df4"
+                              Name 129  "HeightU"
+                              Name 132  "sizeQueryTemp"
+                              Name 141  "sizeQueryTemp"
+                              Name 144  "g_tTex2di4"
+                              Name 151  "sizeQueryTemp"
+                              Name 160  "sizeQueryTemp"
+                              Name 163  "g_tTex2du4"
+                              Name 170  "sizeQueryTemp"
+                              Name 181  "sizeQueryTemp"
+                              Name 184  "g_tTex2df4a"
+                              Name 195  "sizeQueryTemp"
+                              Name 206  "sizeQueryTemp"
+                              Name 209  "g_tTex2di4a"
+                              Name 218  "sizeQueryTemp"
+                              Name 229  "sizeQueryTemp"
+                              Name 232  "g_tTex2du4a"
+                              Name 241  "sizeQueryTemp"
+                              Name 252  "sizeQueryTemp"
+                              Name 255  "g_tTex3df4"
+                              Name 262  "DepthU"
+                              Name 265  "sizeQueryTemp"
+                              Name 276  "sizeQueryTemp"
+                              Name 279  "g_tTex3di4"
+                              Name 288  "sizeQueryTemp"
+                              Name 299  "sizeQueryTemp"
+                              Name 302  "g_tTex3du4"
+                              Name 311  "sizeQueryTemp"
+                              Name 322  "sizeQueryTemp"
+                              Name 325  "g_tTexcdf4"
+                              Name 332  "sizeQueryTemp"
+                              Name 341  "sizeQueryTemp"
+                              Name 344  "g_tTexcdi4"
+                              Name 351  "sizeQueryTemp"
+                              Name 360  "sizeQueryTemp"
+                              Name 363  "g_tTexcdu4"
+                              Name 370  "sizeQueryTemp"
+                              Name 379  "sizeQueryTemp"
+                              Name 382  "g_tTexcdf4a"
+                              Name 391  "sizeQueryTemp"
+                              Name 402  "sizeQueryTemp"
+                              Name 405  "g_tTexcdi4a"
+                              Name 414  "sizeQueryTemp"
+                              Name 425  "sizeQueryTemp"
+                              Name 428  "g_tTexcdu4a"
+                              Name 437  "sizeQueryTemp"
+                              Name 448  "sizeQueryTemp"
+                              Name 451  "g_tTex2dmsf4"
+                              Name 458  "NumberOfSamplesU"
+                              Name 461  "sizeQueryTemp"
+                              Name 464  "g_tTex2dmsi4"
+                              Name 473  "sizeQueryTemp"
+                              Name 476  "g_tTex2dmsu4"
+                              Name 485  "sizeQueryTemp"
+                              Name 488  "g_tTex2dmsf4a"
+                              Name 499  "sizeQueryTemp"
+                              Name 502  "g_tTex2dmsi4a"
+                              Name 513  "sizeQueryTemp"
+                              Name 516  "g_tTex2dmsu4a"
+                              Name 528  "psout"
                               Name 539  "flattenTemp"
                               Name 542  "Color"
                               Name 546  "Depth"
                               Name 551  "g_sSamp"
                               Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 17(g_tTex1df4) Binding 0
-                              Decorate 34(g_tTex1di4) DescriptorSet 0
-                              Decorate 47(g_tTex1du4) DescriptorSet 0
-                              Decorate 62(g_tTex1df4a) DescriptorSet 0
-                              Decorate 85(g_tTex1di4a) DescriptorSet 0
-                              Decorate 104(g_tTex1du4a) DescriptorSet 0
-                              Decorate 123(g_tTex2df4) DescriptorSet 0
-                              Decorate 143(g_tTex2di4) DescriptorSet 0
-                              Decorate 162(g_tTex2du4) DescriptorSet 0
-                              Decorate 183(g_tTex2df4a) DescriptorSet 0
-                              Decorate 208(g_tTex2di4a) DescriptorSet 0
-                              Decorate 231(g_tTex2du4a) DescriptorSet 0
-                              Decorate 254(g_tTex3df4) DescriptorSet 0
-                              Decorate 278(g_tTex3di4) DescriptorSet 0
-                              Decorate 301(g_tTex3du4) DescriptorSet 0
-                              Decorate 324(g_tTexcdf4) DescriptorSet 0
-                              Decorate 343(g_tTexcdi4) DescriptorSet 0
-                              Decorate 362(g_tTexcdu4) DescriptorSet 0
-                              Decorate 381(g_tTexcdf4a) DescriptorSet 0
-                              Decorate 404(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 427(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 450(g_tTex2dmsf4) DescriptorSet 0
-                              Decorate 463(g_tTex2dmsi4) DescriptorSet 0
-                              Decorate 475(g_tTex2dmsu4) DescriptorSet 0
-                              Decorate 487(g_tTex2dmsf4a) DescriptorSet 0
-                              Decorate 501(g_tTex2dmsi4a) DescriptorSet 0
-                              Decorate 515(g_tTex2dmsu4a) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 63(g_tTex1df4a) DescriptorSet 0
+                              Decorate 86(g_tTex1di4a) DescriptorSet 0
+                              Decorate 105(g_tTex1du4a) DescriptorSet 0
+                              Decorate 124(g_tTex2df4) DescriptorSet 0
+                              Decorate 144(g_tTex2di4) DescriptorSet 0
+                              Decorate 163(g_tTex2du4) DescriptorSet 0
+                              Decorate 184(g_tTex2df4a) DescriptorSet 0
+                              Decorate 209(g_tTex2di4a) DescriptorSet 0
+                              Decorate 232(g_tTex2du4a) DescriptorSet 0
+                              Decorate 255(g_tTex3df4) DescriptorSet 0
+                              Decorate 279(g_tTex3di4) DescriptorSet 0
+                              Decorate 302(g_tTex3du4) DescriptorSet 0
+                              Decorate 325(g_tTexcdf4) DescriptorSet 0
+                              Decorate 344(g_tTexcdi4) DescriptorSet 0
+                              Decorate 363(g_tTexcdu4) DescriptorSet 0
+                              Decorate 382(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 405(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 428(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 451(g_tTex2dmsf4) DescriptorSet 0
+                              Decorate 464(g_tTex2dmsi4) DescriptorSet 0
+                              Decorate 476(g_tTex2dmsu4) DescriptorSet 0
+                              Decorate 488(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 502(g_tTex2dmsi4a) DescriptorSet 0
+                              Decorate 516(g_tTex2dmsu4a) DescriptorSet 0
                               Decorate 542(Color) Location 0
                               Decorate 546(Depth) BuiltIn FragDepth
                               Decorate 551(g_sSamp) DescriptorSet 0
@@ -2379,96 +2463,96 @@
               16:             TypePointer UniformConstant 15
   17(g_tTex1df4):     16(ptr) Variable UniformConstant
               19:             TypeInt 32 1
-              25:     12(int) Constant 6
-              32:             TypeImage 19(int) 1D sampled format:Unknown
-              33:             TypePointer UniformConstant 32
-  34(g_tTex1di4):     33(ptr) Variable UniformConstant
-              45:             TypeImage 12(int) 1D sampled format:Unknown
-              46:             TypePointer UniformConstant 45
-  47(g_tTex1du4):     46(ptr) Variable UniformConstant
-              57:             TypeVector 12(int) 2
-              58:             TypePointer Function 57(ivec2)
-              60:             TypeImage 6(float) 1D array sampled format:Unknown
-              61:             TypePointer UniformConstant 60
- 62(g_tTex1df4a):     61(ptr) Variable UniformConstant
-              64:             TypeVector 19(int) 2
-              66:     12(int) Constant 0
-              70:     12(int) Constant 1
-              83:             TypeImage 19(int) 1D array sampled format:Unknown
-              84:             TypePointer UniformConstant 83
- 85(g_tTex1di4a):     84(ptr) Variable UniformConstant
-             102:             TypeImage 12(int) 1D array sampled format:Unknown
-             103:             TypePointer UniformConstant 102
-104(g_tTex1du4a):    103(ptr) Variable UniformConstant
-             121:             TypeImage 6(float) 2D sampled format:Unknown
-             122:             TypePointer UniformConstant 121
- 123(g_tTex2df4):    122(ptr) Variable UniformConstant
-             141:             TypeImage 19(int) 2D sampled format:Unknown
-             142:             TypePointer UniformConstant 141
- 143(g_tTex2di4):    142(ptr) Variable UniformConstant
-             160:             TypeImage 12(int) 2D sampled format:Unknown
-             161:             TypePointer UniformConstant 160
- 162(g_tTex2du4):    161(ptr) Variable UniformConstant
-             178:             TypeVector 12(int) 3
-             179:             TypePointer Function 178(ivec3)
-             181:             TypeImage 6(float) 2D array sampled format:Unknown
-             182:             TypePointer UniformConstant 181
-183(g_tTex2df4a):    182(ptr) Variable UniformConstant
-             185:             TypeVector 19(int) 3
-             191:     12(int) Constant 2
-             206:             TypeImage 19(int) 2D array sampled format:Unknown
-             207:             TypePointer UniformConstant 206
-208(g_tTex2di4a):    207(ptr) Variable UniformConstant
-             229:             TypeImage 12(int) 2D array sampled format:Unknown
-             230:             TypePointer UniformConstant 229
-231(g_tTex2du4a):    230(ptr) Variable UniformConstant
-             252:             TypeImage 6(float) 3D sampled format:Unknown
-             253:             TypePointer UniformConstant 252
- 254(g_tTex3df4):    253(ptr) Variable UniformConstant
-             276:             TypeImage 19(int) 3D sampled format:Unknown
-             277:             TypePointer UniformConstant 276
- 278(g_tTex3di4):    277(ptr) Variable UniformConstant
-             299:             TypeImage 12(int) 3D sampled format:Unknown
-             300:             TypePointer UniformConstant 299
- 301(g_tTex3du4):    300(ptr) Variable UniformConstant
-             322:             TypeImage 6(float) Cube sampled format:Unknown
-             323:             TypePointer UniformConstant 322
- 324(g_tTexcdf4):    323(ptr) Variable UniformConstant
-             341:             TypeImage 19(int) Cube sampled format:Unknown
-             342:             TypePointer UniformConstant 341
- 343(g_tTexcdi4):    342(ptr) Variable UniformConstant
-             360:             TypeImage 12(int) Cube sampled format:Unknown
-             361:             TypePointer UniformConstant 360
- 362(g_tTexcdu4):    361(ptr) Variable UniformConstant
-             379:             TypeImage 6(float) Cube array sampled format:Unknown
-             380:             TypePointer UniformConstant 379
-381(g_tTexcdf4a):    380(ptr) Variable UniformConstant
-             402:             TypeImage 19(int) Cube array sampled format:Unknown
-             403:             TypePointer UniformConstant 402
-404(g_tTexcdi4a):    403(ptr) Variable UniformConstant
-             425:             TypeImage 12(int) Cube array sampled format:Unknown
-             426:             TypePointer UniformConstant 425
-427(g_tTexcdu4a):    426(ptr) Variable UniformConstant
-             448:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
-             449:             TypePointer UniformConstant 448
-450(g_tTex2dmsf4):    449(ptr) Variable UniformConstant
-             461:             TypeImage 19(int) 2D multi-sampled sampled format:Unknown
-             462:             TypePointer UniformConstant 461
-463(g_tTex2dmsi4):    462(ptr) Variable UniformConstant
-             473:             TypeImage 12(int) 2D multi-sampled sampled format:Unknown
-             474:             TypePointer UniformConstant 473
-475(g_tTex2dmsu4):    474(ptr) Variable UniformConstant
-             485:             TypeImage 6(float) 2D array multi-sampled sampled format:Unknown
-             486:             TypePointer UniformConstant 485
-487(g_tTex2dmsf4a):    486(ptr) Variable UniformConstant
-             499:             TypeImage 19(int) 2D array multi-sampled sampled format:Unknown
-             500:             TypePointer UniformConstant 499
-501(g_tTex2dmsi4a):    500(ptr) Variable UniformConstant
-             513:             TypeImage 12(int) 2D array multi-sampled sampled format:Unknown
-             514:             TypePointer UniformConstant 513
-515(g_tTex2dmsu4a):    514(ptr) Variable UniformConstant
-             526:             TypePointer Function 8(PS_OUTPUT)
-             528:     19(int) Constant 0
+              20:     19(int) Constant 0
+              26:     12(int) Constant 6
+              33:             TypeImage 19(int) 1D sampled format:Unknown
+              34:             TypePointer UniformConstant 33
+  35(g_tTex1di4):     34(ptr) Variable UniformConstant
+              46:             TypeImage 12(int) 1D sampled format:Unknown
+              47:             TypePointer UniformConstant 46
+  48(g_tTex1du4):     47(ptr) Variable UniformConstant
+              58:             TypeVector 12(int) 2
+              59:             TypePointer Function 58(ivec2)
+              61:             TypeImage 6(float) 1D array sampled format:Unknown
+              62:             TypePointer UniformConstant 61
+ 63(g_tTex1df4a):     62(ptr) Variable UniformConstant
+              65:             TypeVector 19(int) 2
+              67:     12(int) Constant 0
+              71:     12(int) Constant 1
+              84:             TypeImage 19(int) 1D array sampled format:Unknown
+              85:             TypePointer UniformConstant 84
+ 86(g_tTex1di4a):     85(ptr) Variable UniformConstant
+             103:             TypeImage 12(int) 1D array sampled format:Unknown
+             104:             TypePointer UniformConstant 103
+105(g_tTex1du4a):    104(ptr) Variable UniformConstant
+             122:             TypeImage 6(float) 2D sampled format:Unknown
+             123:             TypePointer UniformConstant 122
+ 124(g_tTex2df4):    123(ptr) Variable UniformConstant
+             142:             TypeImage 19(int) 2D sampled format:Unknown
+             143:             TypePointer UniformConstant 142
+ 144(g_tTex2di4):    143(ptr) Variable UniformConstant
+             161:             TypeImage 12(int) 2D sampled format:Unknown
+             162:             TypePointer UniformConstant 161
+ 163(g_tTex2du4):    162(ptr) Variable UniformConstant
+             179:             TypeVector 12(int) 3
+             180:             TypePointer Function 179(ivec3)
+             182:             TypeImage 6(float) 2D array sampled format:Unknown
+             183:             TypePointer UniformConstant 182
+184(g_tTex2df4a):    183(ptr) Variable UniformConstant
+             186:             TypeVector 19(int) 3
+             192:     12(int) Constant 2
+             207:             TypeImage 19(int) 2D array sampled format:Unknown
+             208:             TypePointer UniformConstant 207
+209(g_tTex2di4a):    208(ptr) Variable UniformConstant
+             230:             TypeImage 12(int) 2D array sampled format:Unknown
+             231:             TypePointer UniformConstant 230
+232(g_tTex2du4a):    231(ptr) Variable UniformConstant
+             253:             TypeImage 6(float) 3D sampled format:Unknown
+             254:             TypePointer UniformConstant 253
+ 255(g_tTex3df4):    254(ptr) Variable UniformConstant
+             277:             TypeImage 19(int) 3D sampled format:Unknown
+             278:             TypePointer UniformConstant 277
+ 279(g_tTex3di4):    278(ptr) Variable UniformConstant
+             300:             TypeImage 12(int) 3D sampled format:Unknown
+             301:             TypePointer UniformConstant 300
+ 302(g_tTex3du4):    301(ptr) Variable UniformConstant
+             323:             TypeImage 6(float) Cube sampled format:Unknown
+             324:             TypePointer UniformConstant 323
+ 325(g_tTexcdf4):    324(ptr) Variable UniformConstant
+             342:             TypeImage 19(int) Cube sampled format:Unknown
+             343:             TypePointer UniformConstant 342
+ 344(g_tTexcdi4):    343(ptr) Variable UniformConstant
+             361:             TypeImage 12(int) Cube sampled format:Unknown
+             362:             TypePointer UniformConstant 361
+ 363(g_tTexcdu4):    362(ptr) Variable UniformConstant
+             380:             TypeImage 6(float) Cube array sampled format:Unknown
+             381:             TypePointer UniformConstant 380
+382(g_tTexcdf4a):    381(ptr) Variable UniformConstant
+             403:             TypeImage 19(int) Cube array sampled format:Unknown
+             404:             TypePointer UniformConstant 403
+405(g_tTexcdi4a):    404(ptr) Variable UniformConstant
+             426:             TypeImage 12(int) Cube array sampled format:Unknown
+             427:             TypePointer UniformConstant 426
+428(g_tTexcdu4a):    427(ptr) Variable UniformConstant
+             449:             TypeImage 6(float) 2D multi-sampled sampled format:Unknown
+             450:             TypePointer UniformConstant 449
+451(g_tTex2dmsf4):    450(ptr) Variable UniformConstant
+             462:             TypeImage 19(int) 2D multi-sampled sampled format:Unknown
+             463:             TypePointer UniformConstant 462
+464(g_tTex2dmsi4):    463(ptr) Variable UniformConstant
+             474:             TypeImage 12(int) 2D multi-sampled sampled format:Unknown
+             475:             TypePointer UniformConstant 474
+476(g_tTex2dmsu4):    475(ptr) Variable UniformConstant
+             486:             TypeImage 6(float) 2D array multi-sampled sampled format:Unknown
+             487:             TypePointer UniformConstant 486
+488(g_tTex2dmsf4a):    487(ptr) Variable UniformConstant
+             500:             TypeImage 19(int) 2D array multi-sampled sampled format:Unknown
+             501:             TypePointer UniformConstant 500
+502(g_tTex2dmsi4a):    501(ptr) Variable UniformConstant
+             514:             TypeImage 12(int) 2D array multi-sampled sampled format:Unknown
+             515:             TypePointer UniformConstant 514
+516(g_tTex2dmsu4a):    515(ptr) Variable UniformConstant
+             527:             TypePointer Function 8(PS_OUTPUT)
              529:    6(float) Constant 1065353216
              530:    7(fvec4) ConstantComposite 529 529 529 529
              531:             TypePointer Function 7(fvec4)
@@ -2483,10 +2567,10 @@
     551(g_sSamp):    550(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-539(flattenTemp):    526(ptr) Variable Function
+539(flattenTemp):    527(ptr) Variable Function
              540:8(PS_OUTPUT) FunctionCall 10(@main()
                               Store 539(flattenTemp) 540
-             543:    531(ptr) AccessChain 539(flattenTemp) 528
+             543:    531(ptr) AccessChain 539(flattenTemp) 20
              544:    7(fvec4) Load 543
                               Store 542(Color) 544
              547:    534(ptr) AccessChain 539(flattenTemp) 533
@@ -2497,616 +2581,616 @@
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
 14(sizeQueryTemp):     13(ptr) Variable Function
-      21(WidthU):     13(ptr) Variable Function
-23(sizeQueryTemp):     13(ptr) Variable Function
-28(NumberOfLevelsU):     13(ptr) Variable Function
-31(sizeQueryTemp):     13(ptr) Variable Function
-38(sizeQueryTemp):     13(ptr) Variable Function
-44(sizeQueryTemp):     13(ptr) Variable Function
-51(sizeQueryTemp):     13(ptr) Variable Function
-59(sizeQueryTemp):     58(ptr) Variable Function
-   69(ElementsU):     13(ptr) Variable Function
-73(sizeQueryTemp):     58(ptr) Variable Function
-82(sizeQueryTemp):     58(ptr) Variable Function
-92(sizeQueryTemp):     58(ptr) Variable Function
-101(sizeQueryTemp):     58(ptr) Variable Function
-111(sizeQueryTemp):     58(ptr) Variable Function
-120(sizeQueryTemp):     58(ptr) Variable Function
-    128(HeightU):     13(ptr) Variable Function
-131(sizeQueryTemp):     58(ptr) Variable Function
-140(sizeQueryTemp):     58(ptr) Variable Function
-150(sizeQueryTemp):     58(ptr) Variable Function
-159(sizeQueryTemp):     58(ptr) Variable Function
-169(sizeQueryTemp):     58(ptr) Variable Function
-180(sizeQueryTemp):    179(ptr) Variable Function
-194(sizeQueryTemp):    179(ptr) Variable Function
-205(sizeQueryTemp):    179(ptr) Variable Function
-217(sizeQueryTemp):    179(ptr) Variable Function
-228(sizeQueryTemp):    179(ptr) Variable Function
-240(sizeQueryTemp):    179(ptr) Variable Function
-251(sizeQueryTemp):    179(ptr) Variable Function
-     261(DepthU):     13(ptr) Variable Function
-264(sizeQueryTemp):    179(ptr) Variable Function
-275(sizeQueryTemp):    179(ptr) Variable Function
-287(sizeQueryTemp):    179(ptr) Variable Function
-298(sizeQueryTemp):    179(ptr) Variable Function
-310(sizeQueryTemp):    179(ptr) Variable Function
-321(sizeQueryTemp):     58(ptr) Variable Function
-331(sizeQueryTemp):     58(ptr) Variable Function
-340(sizeQueryTemp):     58(ptr) Variable Function
-350(sizeQueryTemp):     58(ptr) Variable Function
-359(sizeQueryTemp):     58(ptr) Variable Function
-369(sizeQueryTemp):     58(ptr) Variable Function
-378(sizeQueryTemp):    179(ptr) Variable Function
-390(sizeQueryTemp):    179(ptr) Variable Function
-401(sizeQueryTemp):    179(ptr) Variable Function
-413(sizeQueryTemp):    179(ptr) Variable Function
-424(sizeQueryTemp):    179(ptr) Variable Function
-436(sizeQueryTemp):    179(ptr) Variable Function
-447(sizeQueryTemp):     58(ptr) Variable Function
-457(NumberOfSamplesU):     13(ptr) Variable Function
-460(sizeQueryTemp):     58(ptr) Variable Function
-472(sizeQueryTemp):     58(ptr) Variable Function
-484(sizeQueryTemp):    179(ptr) Variable Function
-498(sizeQueryTemp):    179(ptr) Variable Function
-512(sizeQueryTemp):    179(ptr) Variable Function
-      527(psout):    526(ptr) Variable Function
+      22(WidthU):     13(ptr) Variable Function
+24(sizeQueryTemp):     13(ptr) Variable Function
+29(NumberOfLevelsU):     13(ptr) Variable Function
+32(sizeQueryTemp):     13(ptr) Variable Function
+39(sizeQueryTemp):     13(ptr) Variable Function
+45(sizeQueryTemp):     13(ptr) Variable Function
+52(sizeQueryTemp):     13(ptr) Variable Function
+60(sizeQueryTemp):     59(ptr) Variable Function
+   70(ElementsU):     13(ptr) Variable Function
+74(sizeQueryTemp):     59(ptr) Variable Function
+83(sizeQueryTemp):     59(ptr) Variable Function
+93(sizeQueryTemp):     59(ptr) Variable Function
+102(sizeQueryTemp):     59(ptr) Variable Function
+112(sizeQueryTemp):     59(ptr) Variable Function
+121(sizeQueryTemp):     59(ptr) Variable Function
+    129(HeightU):     13(ptr) Variable Function
+132(sizeQueryTemp):     59(ptr) Variable Function
+141(sizeQueryTemp):     59(ptr) Variable Function
+151(sizeQueryTemp):     59(ptr) Variable Function
+160(sizeQueryTemp):     59(ptr) Variable Function
+170(sizeQueryTemp):     59(ptr) Variable Function
+181(sizeQueryTemp):    180(ptr) Variable Function
+195(sizeQueryTemp):    180(ptr) Variable Function
+206(sizeQueryTemp):    180(ptr) Variable Function
+218(sizeQueryTemp):    180(ptr) Variable Function
+229(sizeQueryTemp):    180(ptr) Variable Function
+241(sizeQueryTemp):    180(ptr) Variable Function
+252(sizeQueryTemp):    180(ptr) Variable Function
+     262(DepthU):     13(ptr) Variable Function
+265(sizeQueryTemp):    180(ptr) Variable Function
+276(sizeQueryTemp):    180(ptr) Variable Function
+288(sizeQueryTemp):    180(ptr) Variable Function
+299(sizeQueryTemp):    180(ptr) Variable Function
+311(sizeQueryTemp):    180(ptr) Variable Function
+322(sizeQueryTemp):     59(ptr) Variable Function
+332(sizeQueryTemp):     59(ptr) Variable Function
+341(sizeQueryTemp):     59(ptr) Variable Function
+351(sizeQueryTemp):     59(ptr) Variable Function
+360(sizeQueryTemp):     59(ptr) Variable Function
+370(sizeQueryTemp):     59(ptr) Variable Function
+379(sizeQueryTemp):    180(ptr) Variable Function
+391(sizeQueryTemp):    180(ptr) Variable Function
+402(sizeQueryTemp):    180(ptr) Variable Function
+414(sizeQueryTemp):    180(ptr) Variable Function
+425(sizeQueryTemp):    180(ptr) Variable Function
+437(sizeQueryTemp):    180(ptr) Variable Function
+448(sizeQueryTemp):     59(ptr) Variable Function
+458(NumberOfSamplesU):     13(ptr) Variable Function
+461(sizeQueryTemp):     59(ptr) Variable Function
+473(sizeQueryTemp):     59(ptr) Variable Function
+485(sizeQueryTemp):    180(ptr) Variable Function
+499(sizeQueryTemp):    180(ptr) Variable Function
+513(sizeQueryTemp):    180(ptr) Variable Function
+      528(psout):    527(ptr) Variable Function
               18:          15 Load 17(g_tTex1df4)
-              20:     19(int) ImageQuerySize 18
-                              Store 14(sizeQueryTemp) 20
-              22:     12(int) Load 14(sizeQueryTemp)
-                              Store 21(WidthU) 22
-              24:          15 Load 17(g_tTex1df4)
-              26:     19(int) ImageQuerySizeLod 24 25
-                              Store 23(sizeQueryTemp) 26
-              27:     12(int) Load 23(sizeQueryTemp)
-                              Store 21(WidthU) 27
-              29:          15 Load 17(g_tTex1df4)
-              30:     19(int) ImageQueryLevels 29
-                              Store 28(NumberOfLevelsU) 30
-              35:          32 Load 34(g_tTex1di4)
-              36:     19(int) ImageQuerySize 35
-                              Store 31(sizeQueryTemp) 36
-              37:     12(int) Load 31(sizeQueryTemp)
-                              Store 21(WidthU) 37
-              39:          32 Load 34(g_tTex1di4)
-              40:     19(int) ImageQuerySizeLod 39 25
-                              Store 38(sizeQueryTemp) 40
-              41:     12(int) Load 38(sizeQueryTemp)
-                              Store 21(WidthU) 41
-              42:          32 Load 34(g_tTex1di4)
-              43:     19(int) ImageQueryLevels 42
-                              Store 28(NumberOfLevelsU) 43
-              48:          45 Load 47(g_tTex1du4)
-              49:     19(int) ImageQuerySize 48
-                              Store 44(sizeQueryTemp) 49
-              50:     12(int) Load 44(sizeQueryTemp)
-                              Store 21(WidthU) 50
-              52:          45 Load 47(g_tTex1du4)
-              53:     19(int) ImageQuerySizeLod 52 25
-                              Store 51(sizeQueryTemp) 53
-              54:     12(int) Load 51(sizeQueryTemp)
-                              Store 21(WidthU) 54
-              55:          45 Load 47(g_tTex1du4)
-              56:     19(int) ImageQueryLevels 55
-                              Store 28(NumberOfLevelsU) 56
-              63:          60 Load 62(g_tTex1df4a)
-              65:   64(ivec2) ImageQuerySize 63
-                              Store 59(sizeQueryTemp) 65
-              67:     13(ptr) AccessChain 59(sizeQueryTemp) 66
-              68:     12(int) Load 67
-                              Store 21(WidthU) 68
-              71:     13(ptr) AccessChain 59(sizeQueryTemp) 70
-              72:     12(int) Load 71
-                              Store 69(ElementsU) 72
-              74:          60 Load 62(g_tTex1df4a)
-              75:   64(ivec2) ImageQuerySizeLod 74 25
-                              Store 73(sizeQueryTemp) 75
-              76:     13(ptr) AccessChain 73(sizeQueryTemp) 66
-              77:     12(int) Load 76
-                              Store 21(WidthU) 77
-              78:     13(ptr) AccessChain 73(sizeQueryTemp) 70
-              79:     12(int) Load 78
-                              Store 69(ElementsU) 79
-              80:          60 Load 62(g_tTex1df4a)
-              81:     19(int) ImageQueryLevels 80
-                              Store 28(NumberOfLevelsU) 81
-              86:          83 Load 85(g_tTex1di4a)
-              87:   64(ivec2) ImageQuerySize 86
-                              Store 82(sizeQueryTemp) 87
-              88:     13(ptr) AccessChain 82(sizeQueryTemp) 66
-              89:     12(int) Load 88
-                              Store 21(WidthU) 89
-              90:     13(ptr) AccessChain 82(sizeQueryTemp) 70
-              91:     12(int) Load 90
-                              Store 69(ElementsU) 91
-              93:          83 Load 85(g_tTex1di4a)
-              94:   64(ivec2) ImageQuerySizeLod 93 25
-                              Store 92(sizeQueryTemp) 94
-              95:     13(ptr) AccessChain 92(sizeQueryTemp) 66
-              96:     12(int) Load 95
-                              Store 21(WidthU) 96
-              97:     13(ptr) AccessChain 92(sizeQueryTemp) 70
-              98:     12(int) Load 97
-                              Store 69(ElementsU) 98
-              99:          83 Load 85(g_tTex1di4a)
-             100:     19(int) ImageQueryLevels 99
-                              Store 28(NumberOfLevelsU) 100
-             105:         102 Load 104(g_tTex1du4a)
-             106:   64(ivec2) ImageQuerySize 105
-                              Store 101(sizeQueryTemp) 106
-             107:     13(ptr) AccessChain 101(sizeQueryTemp) 66
-             108:     12(int) Load 107
-                              Store 21(WidthU) 108
-             109:     13(ptr) AccessChain 101(sizeQueryTemp) 70
-             110:     12(int) Load 109
-                              Store 69(ElementsU) 110
-             112:         102 Load 104(g_tTex1du4a)
-             113:   64(ivec2) ImageQuerySizeLod 112 25
-                              Store 111(sizeQueryTemp) 113
-             114:     13(ptr) AccessChain 111(sizeQueryTemp) 66
-             115:     12(int) Load 114
-                              Store 21(WidthU) 115
-             116:     13(ptr) AccessChain 111(sizeQueryTemp) 70
-             117:     12(int) Load 116
-                              Store 69(ElementsU) 117
-             118:         102 Load 104(g_tTex1du4a)
-             119:     19(int) ImageQueryLevels 118
-                              Store 28(NumberOfLevelsU) 119
-             124:         121 Load 123(g_tTex2df4)
-             125:   64(ivec2) ImageQuerySize 124
-                              Store 120(sizeQueryTemp) 125
-             126:     13(ptr) AccessChain 120(sizeQueryTemp) 66
-             127:     12(int) Load 126
-                              Store 21(WidthU) 127
-             129:     13(ptr) AccessChain 120(sizeQueryTemp) 70
-             130:     12(int) Load 129
-                              Store 128(HeightU) 130
-             132:         121 Load 123(g_tTex2df4)
-             133:   64(ivec2) ImageQuerySizeLod 132 25
-                              Store 131(sizeQueryTemp) 133
-             134:     13(ptr) AccessChain 131(sizeQueryTemp) 66
-             135:     12(int) Load 134
-                              Store 21(WidthU) 135
-             136:     13(ptr) AccessChain 131(sizeQueryTemp) 70
-             137:     12(int) Load 136
-                              Store 128(HeightU) 137
-             138:         121 Load 123(g_tTex2df4)
-             139:     19(int) ImageQueryLevels 138
-                              Store 28(NumberOfLevelsU) 139
-             144:         141 Load 143(g_tTex2di4)
-             145:   64(ivec2) ImageQuerySize 144
-                              Store 140(sizeQueryTemp) 145
-             146:     13(ptr) AccessChain 140(sizeQueryTemp) 66
-             147:     12(int) Load 146
-                              Store 21(WidthU) 147
-             148:     13(ptr) AccessChain 140(sizeQueryTemp) 70
-             149:     12(int) Load 148
-                              Store 128(HeightU) 149
-             151:         141 Load 143(g_tTex2di4)
-             152:   64(ivec2) ImageQuerySizeLod 151 25
-                              Store 150(sizeQueryTemp) 152
-             153:     13(ptr) AccessChain 150(sizeQueryTemp) 66
-             154:     12(int) Load 153
-                              Store 21(WidthU) 154
-             155:     13(ptr) AccessChain 150(sizeQueryTemp) 70
-             156:     12(int) Load 155
-                              Store 128(HeightU) 156
-             157:         141 Load 143(g_tTex2di4)
-             158:     19(int) ImageQueryLevels 157
-                              Store 28(NumberOfLevelsU) 158
-             163:         160 Load 162(g_tTex2du4)
-             164:   64(ivec2) ImageQuerySize 163
-                              Store 159(sizeQueryTemp) 164
-             165:     13(ptr) AccessChain 159(sizeQueryTemp) 66
-             166:     12(int) Load 165
-                              Store 21(WidthU) 166
-             167:     13(ptr) AccessChain 159(sizeQueryTemp) 70
-             168:     12(int) Load 167
-                              Store 128(HeightU) 168
-             170:         160 Load 162(g_tTex2du4)
-             171:   64(ivec2) ImageQuerySizeLod 170 25
-                              Store 169(sizeQueryTemp) 171
-             172:     13(ptr) AccessChain 169(sizeQueryTemp) 66
-             173:     12(int) Load 172
-                              Store 21(WidthU) 173
-             174:     13(ptr) AccessChain 169(sizeQueryTemp) 70
-             175:     12(int) Load 174
-                              Store 128(HeightU) 175
-             176:         160 Load 162(g_tTex2du4)
-             177:     19(int) ImageQueryLevels 176
-                              Store 28(NumberOfLevelsU) 177
-             184:         181 Load 183(g_tTex2df4a)
-             186:  185(ivec3) ImageQuerySize 184
-                              Store 180(sizeQueryTemp) 186
-             187:     13(ptr) AccessChain 180(sizeQueryTemp) 66
-             188:     12(int) Load 187
-                              Store 21(WidthU) 188
-             189:     13(ptr) AccessChain 180(sizeQueryTemp) 70
-             190:     12(int) Load 189
-                              Store 128(HeightU) 190
-             192:     13(ptr) AccessChain 180(sizeQueryTemp) 191
-             193:     12(int) Load 192
-                              Store 69(ElementsU) 193
-             195:         181 Load 183(g_tTex2df4a)
-             196:  185(ivec3) ImageQuerySizeLod 195 25
-                              Store 194(sizeQueryTemp) 196
-             197:     13(ptr) AccessChain 194(sizeQueryTemp) 66
-             198:     12(int) Load 197
-                              Store 21(WidthU) 198
-             199:     13(ptr) AccessChain 194(sizeQueryTemp) 70
-             200:     12(int) Load 199
-                              Store 128(HeightU) 200
-             201:     13(ptr) AccessChain 194(sizeQueryTemp) 191
-             202:     12(int) Load 201
-                              Store 69(ElementsU) 202
-             203:         181 Load 183(g_tTex2df4a)
-             204:     19(int) ImageQueryLevels 203
-                              Store 28(NumberOfLevelsU) 204
-             209:         206 Load 208(g_tTex2di4a)
-             210:  185(ivec3) ImageQuerySize 209
-                              Store 205(sizeQueryTemp) 210
-             211:     13(ptr) AccessChain 205(sizeQueryTemp) 66
-             212:     12(int) Load 211
-                              Store 21(WidthU) 212
-             213:     13(ptr) AccessChain 205(sizeQueryTemp) 70
-             214:     12(int) Load 213
-                              Store 128(HeightU) 214
-             215:     13(ptr) AccessChain 205(sizeQueryTemp) 191
-             216:     12(int) Load 215
-                              Store 69(ElementsU) 216
-             218:         206 Load 208(g_tTex2di4a)
-             219:  185(ivec3) ImageQuerySizeLod 218 25
-                              Store 217(sizeQueryTemp) 219
-             220:     13(ptr) AccessChain 217(sizeQueryTemp) 66
-             221:     12(int) Load 220
-                              Store 21(WidthU) 221
-             222:     13(ptr) AccessChain 217(sizeQueryTemp) 70
-             223:     12(int) Load 222
-                              Store 128(HeightU) 223
-             224:     13(ptr) AccessChain 217(sizeQueryTemp) 191
-             225:     12(int) Load 224
-                              Store 69(ElementsU) 225
-             226:         206 Load 208(g_tTex2di4a)
-             227:     19(int) ImageQueryLevels 226
-                              Store 28(NumberOfLevelsU) 227
-             232:         229 Load 231(g_tTex2du4a)
-             233:  185(ivec3) ImageQuerySize 232
-                              Store 228(sizeQueryTemp) 233
-             234:     13(ptr) AccessChain 228(sizeQueryTemp) 66
-             235:     12(int) Load 234
-                              Store 21(WidthU) 235
-             236:     13(ptr) AccessChain 228(sizeQueryTemp) 70
-             237:     12(int) Load 236
-                              Store 128(HeightU) 237
-             238:     13(ptr) AccessChain 228(sizeQueryTemp) 191
-             239:     12(int) Load 238
-                              Store 69(ElementsU) 239
-             241:         229 Load 231(g_tTex2du4a)
-             242:  185(ivec3) ImageQuerySizeLod 241 25
-                              Store 240(sizeQueryTemp) 242
-             243:     13(ptr) AccessChain 240(sizeQueryTemp) 66
-             244:     12(int) Load 243
-                              Store 21(WidthU) 244
-             245:     13(ptr) AccessChain 240(sizeQueryTemp) 70
-             246:     12(int) Load 245
-                              Store 128(HeightU) 246
-             247:     13(ptr) AccessChain 240(sizeQueryTemp) 191
-             248:     12(int) Load 247
-                              Store 69(ElementsU) 248
-             249:         229 Load 231(g_tTex2du4a)
-             250:     19(int) ImageQueryLevels 249
-                              Store 28(NumberOfLevelsU) 250
-             255:         252 Load 254(g_tTex3df4)
-             256:  185(ivec3) ImageQuerySize 255
-                              Store 251(sizeQueryTemp) 256
-             257:     13(ptr) AccessChain 251(sizeQueryTemp) 66
-             258:     12(int) Load 257
-                              Store 21(WidthU) 258
-             259:     13(ptr) AccessChain 251(sizeQueryTemp) 70
-             260:     12(int) Load 259
-                              Store 128(HeightU) 260
-             262:     13(ptr) AccessChain 251(sizeQueryTemp) 191
-             263:     12(int) Load 262
-                              Store 261(DepthU) 263
-             265:         252 Load 254(g_tTex3df4)
-             266:  185(ivec3) ImageQuerySizeLod 265 25
-                              Store 264(sizeQueryTemp) 266
-             267:     13(ptr) AccessChain 264(sizeQueryTemp) 66
-             268:     12(int) Load 267
-                              Store 21(WidthU) 268
-             269:     13(ptr) AccessChain 264(sizeQueryTemp) 70
-             270:     12(int) Load 269
-                              Store 128(HeightU) 270
-             271:     13(ptr) AccessChain 264(sizeQueryTemp) 191
-             272:     12(int) Load 271
-                              Store 261(DepthU) 272
-             273:         252 Load 254(g_tTex3df4)
-             274:     19(int) ImageQueryLevels 273
-                              Store 28(NumberOfLevelsU) 274
-             279:         276 Load 278(g_tTex3di4)
-             280:  185(ivec3) ImageQuerySize 279
-                              Store 275(sizeQueryTemp) 280
-             281:     13(ptr) AccessChain 275(sizeQueryTemp) 66
-             282:     12(int) Load 281
-                              Store 21(WidthU) 282
-             283:     13(ptr) AccessChain 275(sizeQueryTemp) 70
-             284:     12(int) Load 283
-                              Store 128(HeightU) 284
-             285:     13(ptr) AccessChain 275(sizeQueryTemp) 191
-             286:     12(int) Load 285
-                              Store 261(DepthU) 286
-             288:         276 Load 278(g_tTex3di4)
-             289:  185(ivec3) ImageQuerySizeLod 288 25
-                              Store 287(sizeQueryTemp) 289
-             290:     13(ptr) AccessChain 287(sizeQueryTemp) 66
-             291:     12(int) Load 290
-                              Store 21(WidthU) 291
-             292:     13(ptr) AccessChain 287(sizeQueryTemp) 70
-             293:     12(int) Load 292
-                              Store 128(HeightU) 293
-             294:     13(ptr) AccessChain 287(sizeQueryTemp) 191
-             295:     12(int) Load 294
-                              Store 261(DepthU) 295
-             296:         276 Load 278(g_tTex3di4)
-             297:     19(int) ImageQueryLevels 296
-                              Store 28(NumberOfLevelsU) 297
-             302:         299 Load 301(g_tTex3du4)
-             303:  185(ivec3) ImageQuerySize 302
-                              Store 298(sizeQueryTemp) 303
-             304:     13(ptr) AccessChain 298(sizeQueryTemp) 66
-             305:     12(int) Load 304
-                              Store 21(WidthU) 305
-             306:     13(ptr) AccessChain 298(sizeQueryTemp) 70
-             307:     12(int) Load 306
-                              Store 128(HeightU) 307
-             308:     13(ptr) AccessChain 298(sizeQueryTemp) 191
-             309:     12(int) Load 308
-                              Store 261(DepthU) 309
-             311:         299 Load 301(g_tTex3du4)
-             312:  185(ivec3) ImageQuerySizeLod 311 25
-                              Store 310(sizeQueryTemp) 312
-             313:     13(ptr) AccessChain 310(sizeQueryTemp) 66
-             314:     12(int) Load 313
-                              Store 21(WidthU) 314
-             315:     13(ptr) AccessChain 310(sizeQueryTemp) 70
-             316:     12(int) Load 315
-                              Store 128(HeightU) 316
-             317:     13(ptr) AccessChain 310(sizeQueryTemp) 191
-             318:     12(int) Load 317
-                              Store 261(DepthU) 318
-             319:         299 Load 301(g_tTex3du4)
-             320:     19(int) ImageQueryLevels 319
-                              Store 28(NumberOfLevelsU) 320
-             325:         322 Load 324(g_tTexcdf4)
-             326:   64(ivec2) ImageQuerySize 325
-                              Store 321(sizeQueryTemp) 326
-             327:     13(ptr) AccessChain 321(sizeQueryTemp) 66
-             328:     12(int) Load 327
-                              Store 21(WidthU) 328
-             329:     13(ptr) AccessChain 321(sizeQueryTemp) 70
-             330:     12(int) Load 329
-                              Store 128(HeightU) 330
-             332:         322 Load 324(g_tTexcdf4)
-             333:   64(ivec2) ImageQuerySizeLod 332 25
-                              Store 331(sizeQueryTemp) 333
-             334:     13(ptr) AccessChain 331(sizeQueryTemp) 66
-             335:     12(int) Load 334
-                              Store 21(WidthU) 335
-             336:     13(ptr) AccessChain 331(sizeQueryTemp) 70
-             337:     12(int) Load 336
-                              Store 128(HeightU) 337
-             338:         322 Load 324(g_tTexcdf4)
-             339:     19(int) ImageQueryLevels 338
-                              Store 28(NumberOfLevelsU) 339
-             344:         341 Load 343(g_tTexcdi4)
-             345:   64(ivec2) ImageQuerySize 344
-                              Store 340(sizeQueryTemp) 345
-             346:     13(ptr) AccessChain 340(sizeQueryTemp) 66
-             347:     12(int) Load 346
-                              Store 21(WidthU) 347
-             348:     13(ptr) AccessChain 340(sizeQueryTemp) 70
-             349:     12(int) Load 348
-                              Store 128(HeightU) 349
-             351:         341 Load 343(g_tTexcdi4)
-             352:   64(ivec2) ImageQuerySizeLod 351 25
-                              Store 350(sizeQueryTemp) 352
-             353:     13(ptr) AccessChain 350(sizeQueryTemp) 66
-             354:     12(int) Load 353
-                              Store 21(WidthU) 354
-             355:     13(ptr) AccessChain 350(sizeQueryTemp) 70
-             356:     12(int) Load 355
-                              Store 128(HeightU) 356
-             357:         341 Load 343(g_tTexcdi4)
-             358:     19(int) ImageQueryLevels 357
-                              Store 28(NumberOfLevelsU) 358
-             363:         360 Load 362(g_tTexcdu4)
-             364:   64(ivec2) ImageQuerySize 363
-                              Store 359(sizeQueryTemp) 364
-             365:     13(ptr) AccessChain 359(sizeQueryTemp) 66
-             366:     12(int) Load 365
-                              Store 21(WidthU) 366
-             367:     13(ptr) AccessChain 359(sizeQueryTemp) 70
-             368:     12(int) Load 367
-                              Store 128(HeightU) 368
-             370:         360 Load 362(g_tTexcdu4)
-             371:   64(ivec2) ImageQuerySizeLod 370 25
-                              Store 369(sizeQueryTemp) 371
-             372:     13(ptr) AccessChain 369(sizeQueryTemp) 66
-             373:     12(int) Load 372
-                              Store 21(WidthU) 373
-             374:     13(ptr) AccessChain 369(sizeQueryTemp) 70
-             375:     12(int) Load 374
-                              Store 128(HeightU) 375
-             376:         360 Load 362(g_tTexcdu4)
-             377:     19(int) ImageQueryLevels 376
-                              Store 28(NumberOfLevelsU) 377
-             382:         379 Load 381(g_tTexcdf4a)
-             383:  185(ivec3) ImageQuerySize 382
-                              Store 378(sizeQueryTemp) 383
-             384:     13(ptr) AccessChain 378(sizeQueryTemp) 66
-             385:     12(int) Load 384
-                              Store 21(WidthU) 385
-             386:     13(ptr) AccessChain 378(sizeQueryTemp) 70
-             387:     12(int) Load 386
-                              Store 128(HeightU) 387
-             388:     13(ptr) AccessChain 378(sizeQueryTemp) 191
-             389:     12(int) Load 388
-                              Store 69(ElementsU) 389
-             391:         379 Load 381(g_tTexcdf4a)
-             392:  185(ivec3) ImageQuerySizeLod 391 25
-                              Store 390(sizeQueryTemp) 392
-             393:     13(ptr) AccessChain 390(sizeQueryTemp) 66
-             394:     12(int) Load 393
-                              Store 21(WidthU) 394
-             395:     13(ptr) AccessChain 390(sizeQueryTemp) 70
-             396:     12(int) Load 395
-                              Store 128(HeightU) 396
-             397:     13(ptr) AccessChain 390(sizeQueryTemp) 191
-             398:     12(int) Load 397
-                              Store 69(ElementsU) 398
-             399:         379 Load 381(g_tTexcdf4a)
-             400:     19(int) ImageQueryLevels 399
-                              Store 28(NumberOfLevelsU) 400
-             405:         402 Load 404(g_tTexcdi4a)
-             406:  185(ivec3) ImageQuerySize 405
-                              Store 401(sizeQueryTemp) 406
-             407:     13(ptr) AccessChain 401(sizeQueryTemp) 66
-             408:     12(int) Load 407
-                              Store 21(WidthU) 408
-             409:     13(ptr) AccessChain 401(sizeQueryTemp) 70
-             410:     12(int) Load 409
-                              Store 128(HeightU) 410
-             411:     13(ptr) AccessChain 401(sizeQueryTemp) 191
-             412:     12(int) Load 411
-                              Store 69(ElementsU) 412
-             414:         402 Load 404(g_tTexcdi4a)
-             415:  185(ivec3) ImageQuerySizeLod 414 25
-                              Store 413(sizeQueryTemp) 415
-             416:     13(ptr) AccessChain 413(sizeQueryTemp) 66
-             417:     12(int) Load 416
-                              Store 21(WidthU) 417
-             418:     13(ptr) AccessChain 413(sizeQueryTemp) 70
-             419:     12(int) Load 418
-                              Store 128(HeightU) 419
-             420:     13(ptr) AccessChain 413(sizeQueryTemp) 191
-             421:     12(int) Load 420
-                              Store 69(ElementsU) 421
-             422:         402 Load 404(g_tTexcdi4a)
-             423:     19(int) ImageQueryLevels 422
-                              Store 28(NumberOfLevelsU) 423
-             428:         425 Load 427(g_tTexcdu4a)
-             429:  185(ivec3) ImageQuerySize 428
-                              Store 424(sizeQueryTemp) 429
-             430:     13(ptr) AccessChain 424(sizeQueryTemp) 66
-             431:     12(int) Load 430
-                              Store 21(WidthU) 431
-             432:     13(ptr) AccessChain 424(sizeQueryTemp) 70
-             433:     12(int) Load 432
-                              Store 128(HeightU) 433
-             434:     13(ptr) AccessChain 424(sizeQueryTemp) 191
-             435:     12(int) Load 434
-                              Store 69(ElementsU) 435
-             437:         425 Load 427(g_tTexcdu4a)
-             438:  185(ivec3) ImageQuerySizeLod 437 25
-                              Store 436(sizeQueryTemp) 438
-             439:     13(ptr) AccessChain 436(sizeQueryTemp) 66
-             440:     12(int) Load 439
-                              Store 21(WidthU) 440
-             441:     13(ptr) AccessChain 436(sizeQueryTemp) 70
-             442:     12(int) Load 441
-                              Store 128(HeightU) 442
-             443:     13(ptr) AccessChain 436(sizeQueryTemp) 191
-             444:     12(int) Load 443
-                              Store 69(ElementsU) 444
-             445:         425 Load 427(g_tTexcdu4a)
-             446:     19(int) ImageQueryLevels 445
-                              Store 28(NumberOfLevelsU) 446
-             451:         448 Load 450(g_tTex2dmsf4)
-             452:   64(ivec2) ImageQuerySize 451
-                              Store 447(sizeQueryTemp) 452
-             453:     13(ptr) AccessChain 447(sizeQueryTemp) 66
-             454:     12(int) Load 453
-                              Store 21(WidthU) 454
-             455:     13(ptr) AccessChain 447(sizeQueryTemp) 70
-             456:     12(int) Load 455
-                              Store 128(HeightU) 456
-             458:         448 Load 450(g_tTex2dmsf4)
-             459:     19(int) ImageQuerySamples 458
-                              Store 457(NumberOfSamplesU) 459
-             464:         461 Load 463(g_tTex2dmsi4)
-             465:   64(ivec2) ImageQuerySize 464
-                              Store 460(sizeQueryTemp) 465
-             466:     13(ptr) AccessChain 460(sizeQueryTemp) 66
-             467:     12(int) Load 466
-                              Store 21(WidthU) 467
-             468:     13(ptr) AccessChain 460(sizeQueryTemp) 70
-             469:     12(int) Load 468
-                              Store 128(HeightU) 469
-             470:         461 Load 463(g_tTex2dmsi4)
-             471:     19(int) ImageQuerySamples 470
-                              Store 457(NumberOfSamplesU) 471
-             476:         473 Load 475(g_tTex2dmsu4)
-             477:   64(ivec2) ImageQuerySize 476
-                              Store 472(sizeQueryTemp) 477
-             478:     13(ptr) AccessChain 472(sizeQueryTemp) 66
-             479:     12(int) Load 478
-                              Store 21(WidthU) 479
-             480:     13(ptr) AccessChain 472(sizeQueryTemp) 70
-             481:     12(int) Load 480
-                              Store 128(HeightU) 481
-             482:         473 Load 475(g_tTex2dmsu4)
-             483:     19(int) ImageQuerySamples 482
-                              Store 457(NumberOfSamplesU) 483
-             488:         485 Load 487(g_tTex2dmsf4a)
-             489:  185(ivec3) ImageQuerySize 488
-                              Store 484(sizeQueryTemp) 489
-             490:     13(ptr) AccessChain 484(sizeQueryTemp) 66
-             491:     12(int) Load 490
-                              Store 21(WidthU) 491
-             492:     13(ptr) AccessChain 484(sizeQueryTemp) 70
-             493:     12(int) Load 492
-                              Store 128(HeightU) 493
-             494:     13(ptr) AccessChain 484(sizeQueryTemp) 191
-             495:     12(int) Load 494
-                              Store 69(ElementsU) 495
-             496:         485 Load 487(g_tTex2dmsf4a)
-             497:     19(int) ImageQuerySamples 496
-                              Store 457(NumberOfSamplesU) 497
-             502:         499 Load 501(g_tTex2dmsi4a)
-             503:  185(ivec3) ImageQuerySize 502
-                              Store 498(sizeQueryTemp) 503
-             504:     13(ptr) AccessChain 498(sizeQueryTemp) 66
-             505:     12(int) Load 504
-                              Store 21(WidthU) 505
-             506:     13(ptr) AccessChain 498(sizeQueryTemp) 70
-             507:     12(int) Load 506
-                              Store 128(HeightU) 507
-             508:     13(ptr) AccessChain 498(sizeQueryTemp) 191
-             509:     12(int) Load 508
-                              Store 69(ElementsU) 509
-             510:         499 Load 501(g_tTex2dmsi4a)
-             511:     19(int) ImageQuerySamples 510
-                              Store 457(NumberOfSamplesU) 511
-             516:         513 Load 515(g_tTex2dmsu4a)
-             517:  185(ivec3) ImageQuerySize 516
-                              Store 512(sizeQueryTemp) 517
-             518:     13(ptr) AccessChain 512(sizeQueryTemp) 66
-             519:     12(int) Load 518
-                              Store 21(WidthU) 519
-             520:     13(ptr) AccessChain 512(sizeQueryTemp) 70
-             521:     12(int) Load 520
-                              Store 128(HeightU) 521
-             522:     13(ptr) AccessChain 512(sizeQueryTemp) 191
-             523:     12(int) Load 522
-                              Store 69(ElementsU) 523
-             524:         513 Load 515(g_tTex2dmsu4a)
-             525:     19(int) ImageQuerySamples 524
-                              Store 457(NumberOfSamplesU) 525
-             532:    531(ptr) AccessChain 527(psout) 528
+              21:     19(int) ImageQuerySizeLod 18 20
+                              Store 14(sizeQueryTemp) 21
+              23:     12(int) Load 14(sizeQueryTemp)
+                              Store 22(WidthU) 23
+              25:          15 Load 17(g_tTex1df4)
+              27:     19(int) ImageQuerySizeLod 25 26
+                              Store 24(sizeQueryTemp) 27
+              28:     12(int) Load 24(sizeQueryTemp)
+                              Store 22(WidthU) 28
+              30:          15 Load 17(g_tTex1df4)
+              31:     19(int) ImageQueryLevels 30
+                              Store 29(NumberOfLevelsU) 31
+              36:          33 Load 35(g_tTex1di4)
+              37:     19(int) ImageQuerySizeLod 36 20
+                              Store 32(sizeQueryTemp) 37
+              38:     12(int) Load 32(sizeQueryTemp)
+                              Store 22(WidthU) 38
+              40:          33 Load 35(g_tTex1di4)
+              41:     19(int) ImageQuerySizeLod 40 26
+                              Store 39(sizeQueryTemp) 41
+              42:     12(int) Load 39(sizeQueryTemp)
+                              Store 22(WidthU) 42
+              43:          33 Load 35(g_tTex1di4)
+              44:     19(int) ImageQueryLevels 43
+                              Store 29(NumberOfLevelsU) 44
+              49:          46 Load 48(g_tTex1du4)
+              50:     19(int) ImageQuerySizeLod 49 20
+                              Store 45(sizeQueryTemp) 50
+              51:     12(int) Load 45(sizeQueryTemp)
+                              Store 22(WidthU) 51
+              53:          46 Load 48(g_tTex1du4)
+              54:     19(int) ImageQuerySizeLod 53 26
+                              Store 52(sizeQueryTemp) 54
+              55:     12(int) Load 52(sizeQueryTemp)
+                              Store 22(WidthU) 55
+              56:          46 Load 48(g_tTex1du4)
+              57:     19(int) ImageQueryLevels 56
+                              Store 29(NumberOfLevelsU) 57
+              64:          61 Load 63(g_tTex1df4a)
+              66:   65(ivec2) ImageQuerySizeLod 64 20
+                              Store 60(sizeQueryTemp) 66
+              68:     13(ptr) AccessChain 60(sizeQueryTemp) 67
+              69:     12(int) Load 68
+                              Store 22(WidthU) 69
+              72:     13(ptr) AccessChain 60(sizeQueryTemp) 71
+              73:     12(int) Load 72
+                              Store 70(ElementsU) 73
+              75:          61 Load 63(g_tTex1df4a)
+              76:   65(ivec2) ImageQuerySizeLod 75 26
+                              Store 74(sizeQueryTemp) 76
+              77:     13(ptr) AccessChain 74(sizeQueryTemp) 67
+              78:     12(int) Load 77
+                              Store 22(WidthU) 78
+              79:     13(ptr) AccessChain 74(sizeQueryTemp) 71
+              80:     12(int) Load 79
+                              Store 70(ElementsU) 80
+              81:          61 Load 63(g_tTex1df4a)
+              82:     19(int) ImageQueryLevels 81
+                              Store 29(NumberOfLevelsU) 82
+              87:          84 Load 86(g_tTex1di4a)
+              88:   65(ivec2) ImageQuerySizeLod 87 20
+                              Store 83(sizeQueryTemp) 88
+              89:     13(ptr) AccessChain 83(sizeQueryTemp) 67
+              90:     12(int) Load 89
+                              Store 22(WidthU) 90
+              91:     13(ptr) AccessChain 83(sizeQueryTemp) 71
+              92:     12(int) Load 91
+                              Store 70(ElementsU) 92
+              94:          84 Load 86(g_tTex1di4a)
+              95:   65(ivec2) ImageQuerySizeLod 94 26
+                              Store 93(sizeQueryTemp) 95
+              96:     13(ptr) AccessChain 93(sizeQueryTemp) 67
+              97:     12(int) Load 96
+                              Store 22(WidthU) 97
+              98:     13(ptr) AccessChain 93(sizeQueryTemp) 71
+              99:     12(int) Load 98
+                              Store 70(ElementsU) 99
+             100:          84 Load 86(g_tTex1di4a)
+             101:     19(int) ImageQueryLevels 100
+                              Store 29(NumberOfLevelsU) 101
+             106:         103 Load 105(g_tTex1du4a)
+             107:   65(ivec2) ImageQuerySizeLod 106 20
+                              Store 102(sizeQueryTemp) 107
+             108:     13(ptr) AccessChain 102(sizeQueryTemp) 67
+             109:     12(int) Load 108
+                              Store 22(WidthU) 109
+             110:     13(ptr) AccessChain 102(sizeQueryTemp) 71
+             111:     12(int) Load 110
+                              Store 70(ElementsU) 111
+             113:         103 Load 105(g_tTex1du4a)
+             114:   65(ivec2) ImageQuerySizeLod 113 26
+                              Store 112(sizeQueryTemp) 114
+             115:     13(ptr) AccessChain 112(sizeQueryTemp) 67
+             116:     12(int) Load 115
+                              Store 22(WidthU) 116
+             117:     13(ptr) AccessChain 112(sizeQueryTemp) 71
+             118:     12(int) Load 117
+                              Store 70(ElementsU) 118
+             119:         103 Load 105(g_tTex1du4a)
+             120:     19(int) ImageQueryLevels 119
+                              Store 29(NumberOfLevelsU) 120
+             125:         122 Load 124(g_tTex2df4)
+             126:   65(ivec2) ImageQuerySizeLod 125 20
+                              Store 121(sizeQueryTemp) 126
+             127:     13(ptr) AccessChain 121(sizeQueryTemp) 67
+             128:     12(int) Load 127
+                              Store 22(WidthU) 128
+             130:     13(ptr) AccessChain 121(sizeQueryTemp) 71
+             131:     12(int) Load 130
+                              Store 129(HeightU) 131
+             133:         122 Load 124(g_tTex2df4)
+             134:   65(ivec2) ImageQuerySizeLod 133 26
+                              Store 132(sizeQueryTemp) 134
+             135:     13(ptr) AccessChain 132(sizeQueryTemp) 67
+             136:     12(int) Load 135
+                              Store 22(WidthU) 136
+             137:     13(ptr) AccessChain 132(sizeQueryTemp) 71
+             138:     12(int) Load 137
+                              Store 129(HeightU) 138
+             139:         122 Load 124(g_tTex2df4)
+             140:     19(int) ImageQueryLevels 139
+                              Store 29(NumberOfLevelsU) 140
+             145:         142 Load 144(g_tTex2di4)
+             146:   65(ivec2) ImageQuerySizeLod 145 20
+                              Store 141(sizeQueryTemp) 146
+             147:     13(ptr) AccessChain 141(sizeQueryTemp) 67
+             148:     12(int) Load 147
+                              Store 22(WidthU) 148
+             149:     13(ptr) AccessChain 141(sizeQueryTemp) 71
+             150:     12(int) Load 149
+                              Store 129(HeightU) 150
+             152:         142 Load 144(g_tTex2di4)
+             153:   65(ivec2) ImageQuerySizeLod 152 26
+                              Store 151(sizeQueryTemp) 153
+             154:     13(ptr) AccessChain 151(sizeQueryTemp) 67
+             155:     12(int) Load 154
+                              Store 22(WidthU) 155
+             156:     13(ptr) AccessChain 151(sizeQueryTemp) 71
+             157:     12(int) Load 156
+                              Store 129(HeightU) 157
+             158:         142 Load 144(g_tTex2di4)
+             159:     19(int) ImageQueryLevels 158
+                              Store 29(NumberOfLevelsU) 159
+             164:         161 Load 163(g_tTex2du4)
+             165:   65(ivec2) ImageQuerySizeLod 164 20
+                              Store 160(sizeQueryTemp) 165
+             166:     13(ptr) AccessChain 160(sizeQueryTemp) 67
+             167:     12(int) Load 166
+                              Store 22(WidthU) 167
+             168:     13(ptr) AccessChain 160(sizeQueryTemp) 71
+             169:     12(int) Load 168
+                              Store 129(HeightU) 169
+             171:         161 Load 163(g_tTex2du4)
+             172:   65(ivec2) ImageQuerySizeLod 171 26
+                              Store 170(sizeQueryTemp) 172
+             173:     13(ptr) AccessChain 170(sizeQueryTemp) 67
+             174:     12(int) Load 173
+                              Store 22(WidthU) 174
+             175:     13(ptr) AccessChain 170(sizeQueryTemp) 71
+             176:     12(int) Load 175
+                              Store 129(HeightU) 176
+             177:         161 Load 163(g_tTex2du4)
+             178:     19(int) ImageQueryLevels 177
+                              Store 29(NumberOfLevelsU) 178
+             185:         182 Load 184(g_tTex2df4a)
+             187:  186(ivec3) ImageQuerySizeLod 185 20
+                              Store 181(sizeQueryTemp) 187
+             188:     13(ptr) AccessChain 181(sizeQueryTemp) 67
+             189:     12(int) Load 188
+                              Store 22(WidthU) 189
+             190:     13(ptr) AccessChain 181(sizeQueryTemp) 71
+             191:     12(int) Load 190
+                              Store 129(HeightU) 191
+             193:     13(ptr) AccessChain 181(sizeQueryTemp) 192
+             194:     12(int) Load 193
+                              Store 70(ElementsU) 194
+             196:         182 Load 184(g_tTex2df4a)
+             197:  186(ivec3) ImageQuerySizeLod 196 26
+                              Store 195(sizeQueryTemp) 197
+             198:     13(ptr) AccessChain 195(sizeQueryTemp) 67
+             199:     12(int) Load 198
+                              Store 22(WidthU) 199
+             200:     13(ptr) AccessChain 195(sizeQueryTemp) 71
+             201:     12(int) Load 200
+                              Store 129(HeightU) 201
+             202:     13(ptr) AccessChain 195(sizeQueryTemp) 192
+             203:     12(int) Load 202
+                              Store 70(ElementsU) 203
+             204:         182 Load 184(g_tTex2df4a)
+             205:     19(int) ImageQueryLevels 204
+                              Store 29(NumberOfLevelsU) 205
+             210:         207 Load 209(g_tTex2di4a)
+             211:  186(ivec3) ImageQuerySizeLod 210 20
+                              Store 206(sizeQueryTemp) 211
+             212:     13(ptr) AccessChain 206(sizeQueryTemp) 67
+             213:     12(int) Load 212
+                              Store 22(WidthU) 213
+             214:     13(ptr) AccessChain 206(sizeQueryTemp) 71
+             215:     12(int) Load 214
+                              Store 129(HeightU) 215
+             216:     13(ptr) AccessChain 206(sizeQueryTemp) 192
+             217:     12(int) Load 216
+                              Store 70(ElementsU) 217
+             219:         207 Load 209(g_tTex2di4a)
+             220:  186(ivec3) ImageQuerySizeLod 219 26
+                              Store 218(sizeQueryTemp) 220
+             221:     13(ptr) AccessChain 218(sizeQueryTemp) 67
+             222:     12(int) Load 221
+                              Store 22(WidthU) 222
+             223:     13(ptr) AccessChain 218(sizeQueryTemp) 71
+             224:     12(int) Load 223
+                              Store 129(HeightU) 224
+             225:     13(ptr) AccessChain 218(sizeQueryTemp) 192
+             226:     12(int) Load 225
+                              Store 70(ElementsU) 226
+             227:         207 Load 209(g_tTex2di4a)
+             228:     19(int) ImageQueryLevels 227
+                              Store 29(NumberOfLevelsU) 228
+             233:         230 Load 232(g_tTex2du4a)
+             234:  186(ivec3) ImageQuerySizeLod 233 20
+                              Store 229(sizeQueryTemp) 234
+             235:     13(ptr) AccessChain 229(sizeQueryTemp) 67
+             236:     12(int) Load 235
+                              Store 22(WidthU) 236
+             237:     13(ptr) AccessChain 229(sizeQueryTemp) 71
+             238:     12(int) Load 237
+                              Store 129(HeightU) 238
+             239:     13(ptr) AccessChain 229(sizeQueryTemp) 192
+             240:     12(int) Load 239
+                              Store 70(ElementsU) 240
+             242:         230 Load 232(g_tTex2du4a)
+             243:  186(ivec3) ImageQuerySizeLod 242 26
+                              Store 241(sizeQueryTemp) 243
+             244:     13(ptr) AccessChain 241(sizeQueryTemp) 67
+             245:     12(int) Load 244
+                              Store 22(WidthU) 245
+             246:     13(ptr) AccessChain 241(sizeQueryTemp) 71
+             247:     12(int) Load 246
+                              Store 129(HeightU) 247
+             248:     13(ptr) AccessChain 241(sizeQueryTemp) 192
+             249:     12(int) Load 248
+                              Store 70(ElementsU) 249
+             250:         230 Load 232(g_tTex2du4a)
+             251:     19(int) ImageQueryLevels 250
+                              Store 29(NumberOfLevelsU) 251
+             256:         253 Load 255(g_tTex3df4)
+             257:  186(ivec3) ImageQuerySizeLod 256 20
+                              Store 252(sizeQueryTemp) 257
+             258:     13(ptr) AccessChain 252(sizeQueryTemp) 67
+             259:     12(int) Load 258
+                              Store 22(WidthU) 259
+             260:     13(ptr) AccessChain 252(sizeQueryTemp) 71
+             261:     12(int) Load 260
+                              Store 129(HeightU) 261
+             263:     13(ptr) AccessChain 252(sizeQueryTemp) 192
+             264:     12(int) Load 263
+                              Store 262(DepthU) 264
+             266:         253 Load 255(g_tTex3df4)
+             267:  186(ivec3) ImageQuerySizeLod 266 26
+                              Store 265(sizeQueryTemp) 267
+             268:     13(ptr) AccessChain 265(sizeQueryTemp) 67
+             269:     12(int) Load 268
+                              Store 22(WidthU) 269
+             270:     13(ptr) AccessChain 265(sizeQueryTemp) 71
+             271:     12(int) Load 270
+                              Store 129(HeightU) 271
+             272:     13(ptr) AccessChain 265(sizeQueryTemp) 192
+             273:     12(int) Load 272
+                              Store 262(DepthU) 273
+             274:         253 Load 255(g_tTex3df4)
+             275:     19(int) ImageQueryLevels 274
+                              Store 29(NumberOfLevelsU) 275
+             280:         277 Load 279(g_tTex3di4)
+             281:  186(ivec3) ImageQuerySizeLod 280 20
+                              Store 276(sizeQueryTemp) 281
+             282:     13(ptr) AccessChain 276(sizeQueryTemp) 67
+             283:     12(int) Load 282
+                              Store 22(WidthU) 283
+             284:     13(ptr) AccessChain 276(sizeQueryTemp) 71
+             285:     12(int) Load 284
+                              Store 129(HeightU) 285
+             286:     13(ptr) AccessChain 276(sizeQueryTemp) 192
+             287:     12(int) Load 286
+                              Store 262(DepthU) 287
+             289:         277 Load 279(g_tTex3di4)
+             290:  186(ivec3) ImageQuerySizeLod 289 26
+                              Store 288(sizeQueryTemp) 290
+             291:     13(ptr) AccessChain 288(sizeQueryTemp) 67
+             292:     12(int) Load 291
+                              Store 22(WidthU) 292
+             293:     13(ptr) AccessChain 288(sizeQueryTemp) 71
+             294:     12(int) Load 293
+                              Store 129(HeightU) 294
+             295:     13(ptr) AccessChain 288(sizeQueryTemp) 192
+             296:     12(int) Load 295
+                              Store 262(DepthU) 296
+             297:         277 Load 279(g_tTex3di4)
+             298:     19(int) ImageQueryLevels 297
+                              Store 29(NumberOfLevelsU) 298
+             303:         300 Load 302(g_tTex3du4)
+             304:  186(ivec3) ImageQuerySizeLod 303 20
+                              Store 299(sizeQueryTemp) 304
+             305:     13(ptr) AccessChain 299(sizeQueryTemp) 67
+             306:     12(int) Load 305
+                              Store 22(WidthU) 306
+             307:     13(ptr) AccessChain 299(sizeQueryTemp) 71
+             308:     12(int) Load 307
+                              Store 129(HeightU) 308
+             309:     13(ptr) AccessChain 299(sizeQueryTemp) 192
+             310:     12(int) Load 309
+                              Store 262(DepthU) 310
+             312:         300 Load 302(g_tTex3du4)
+             313:  186(ivec3) ImageQuerySizeLod 312 26
+                              Store 311(sizeQueryTemp) 313
+             314:     13(ptr) AccessChain 311(sizeQueryTemp) 67
+             315:     12(int) Load 314
+                              Store 22(WidthU) 315
+             316:     13(ptr) AccessChain 311(sizeQueryTemp) 71
+             317:     12(int) Load 316
+                              Store 129(HeightU) 317
+             318:     13(ptr) AccessChain 311(sizeQueryTemp) 192
+             319:     12(int) Load 318
+                              Store 262(DepthU) 319
+             320:         300 Load 302(g_tTex3du4)
+             321:     19(int) ImageQueryLevels 320
+                              Store 29(NumberOfLevelsU) 321
+             326:         323 Load 325(g_tTexcdf4)
+             327:   65(ivec2) ImageQuerySizeLod 326 20
+                              Store 322(sizeQueryTemp) 327
+             328:     13(ptr) AccessChain 322(sizeQueryTemp) 67
+             329:     12(int) Load 328
+                              Store 22(WidthU) 329
+             330:     13(ptr) AccessChain 322(sizeQueryTemp) 71
+             331:     12(int) Load 330
+                              Store 129(HeightU) 331
+             333:         323 Load 325(g_tTexcdf4)
+             334:   65(ivec2) ImageQuerySizeLod 333 26
+                              Store 332(sizeQueryTemp) 334
+             335:     13(ptr) AccessChain 332(sizeQueryTemp) 67
+             336:     12(int) Load 335
+                              Store 22(WidthU) 336
+             337:     13(ptr) AccessChain 332(sizeQueryTemp) 71
+             338:     12(int) Load 337
+                              Store 129(HeightU) 338
+             339:         323 Load 325(g_tTexcdf4)
+             340:     19(int) ImageQueryLevels 339
+                              Store 29(NumberOfLevelsU) 340
+             345:         342 Load 344(g_tTexcdi4)
+             346:   65(ivec2) ImageQuerySizeLod 345 20
+                              Store 341(sizeQueryTemp) 346
+             347:     13(ptr) AccessChain 341(sizeQueryTemp) 67
+             348:     12(int) Load 347
+                              Store 22(WidthU) 348
+             349:     13(ptr) AccessChain 341(sizeQueryTemp) 71
+             350:     12(int) Load 349
+                              Store 129(HeightU) 350
+             352:         342 Load 344(g_tTexcdi4)
+             353:   65(ivec2) ImageQuerySizeLod 352 26
+                              Store 351(sizeQueryTemp) 353
+             354:     13(ptr) AccessChain 351(sizeQueryTemp) 67
+             355:     12(int) Load 354
+                              Store 22(WidthU) 355
+             356:     13(ptr) AccessChain 351(sizeQueryTemp) 71
+             357:     12(int) Load 356
+                              Store 129(HeightU) 357
+             358:         342 Load 344(g_tTexcdi4)
+             359:     19(int) ImageQueryLevels 358
+                              Store 29(NumberOfLevelsU) 359
+             364:         361 Load 363(g_tTexcdu4)
+             365:   65(ivec2) ImageQuerySizeLod 364 20
+                              Store 360(sizeQueryTemp) 365
+             366:     13(ptr) AccessChain 360(sizeQueryTemp) 67
+             367:     12(int) Load 366
+                              Store 22(WidthU) 367
+             368:     13(ptr) AccessChain 360(sizeQueryTemp) 71
+             369:     12(int) Load 368
+                              Store 129(HeightU) 369
+             371:         361 Load 363(g_tTexcdu4)
+             372:   65(ivec2) ImageQuerySizeLod 371 26
+                              Store 370(sizeQueryTemp) 372
+             373:     13(ptr) AccessChain 370(sizeQueryTemp) 67
+             374:     12(int) Load 373
+                              Store 22(WidthU) 374
+             375:     13(ptr) AccessChain 370(sizeQueryTemp) 71
+             376:     12(int) Load 375
+                              Store 129(HeightU) 376
+             377:         361 Load 363(g_tTexcdu4)
+             378:     19(int) ImageQueryLevels 377
+                              Store 29(NumberOfLevelsU) 378
+             383:         380 Load 382(g_tTexcdf4a)
+             384:  186(ivec3) ImageQuerySizeLod 383 20
+                              Store 379(sizeQueryTemp) 384
+             385:     13(ptr) AccessChain 379(sizeQueryTemp) 67
+             386:     12(int) Load 385
+                              Store 22(WidthU) 386
+             387:     13(ptr) AccessChain 379(sizeQueryTemp) 71
+             388:     12(int) Load 387
+                              Store 129(HeightU) 388
+             389:     13(ptr) AccessChain 379(sizeQueryTemp) 192
+             390:     12(int) Load 389
+                              Store 70(ElementsU) 390
+             392:         380 Load 382(g_tTexcdf4a)
+             393:  186(ivec3) ImageQuerySizeLod 392 26
+                              Store 391(sizeQueryTemp) 393
+             394:     13(ptr) AccessChain 391(sizeQueryTemp) 67
+             395:     12(int) Load 394
+                              Store 22(WidthU) 395
+             396:     13(ptr) AccessChain 391(sizeQueryTemp) 71
+             397:     12(int) Load 396
+                              Store 129(HeightU) 397
+             398:     13(ptr) AccessChain 391(sizeQueryTemp) 192
+             399:     12(int) Load 398
+                              Store 70(ElementsU) 399
+             400:         380 Load 382(g_tTexcdf4a)
+             401:     19(int) ImageQueryLevels 400
+                              Store 29(NumberOfLevelsU) 401
+             406:         403 Load 405(g_tTexcdi4a)
+             407:  186(ivec3) ImageQuerySizeLod 406 20
+                              Store 402(sizeQueryTemp) 407
+             408:     13(ptr) AccessChain 402(sizeQueryTemp) 67
+             409:     12(int) Load 408
+                              Store 22(WidthU) 409
+             410:     13(ptr) AccessChain 402(sizeQueryTemp) 71
+             411:     12(int) Load 410
+                              Store 129(HeightU) 411
+             412:     13(ptr) AccessChain 402(sizeQueryTemp) 192
+             413:     12(int) Load 412
+                              Store 70(ElementsU) 413
+             415:         403 Load 405(g_tTexcdi4a)
+             416:  186(ivec3) ImageQuerySizeLod 415 26
+                              Store 414(sizeQueryTemp) 416
+             417:     13(ptr) AccessChain 414(sizeQueryTemp) 67
+             418:     12(int) Load 417
+                              Store 22(WidthU) 418
+             419:     13(ptr) AccessChain 414(sizeQueryTemp) 71
+             420:     12(int) Load 419
+                              Store 129(HeightU) 420
+             421:     13(ptr) AccessChain 414(sizeQueryTemp) 192
+             422:     12(int) Load 421
+                              Store 70(ElementsU) 422
+             423:         403 Load 405(g_tTexcdi4a)
+             424:     19(int) ImageQueryLevels 423
+                              Store 29(NumberOfLevelsU) 424
+             429:         426 Load 428(g_tTexcdu4a)
+             430:  186(ivec3) ImageQuerySizeLod 429 20
+                              Store 425(sizeQueryTemp) 430
+             431:     13(ptr) AccessChain 425(sizeQueryTemp) 67
+             432:     12(int) Load 431
+                              Store 22(WidthU) 432
+             433:     13(ptr) AccessChain 425(sizeQueryTemp) 71
+             434:     12(int) Load 433
+                              Store 129(HeightU) 434
+             435:     13(ptr) AccessChain 425(sizeQueryTemp) 192
+             436:     12(int) Load 435
+                              Store 70(ElementsU) 436
+             438:         426 Load 428(g_tTexcdu4a)
+             439:  186(ivec3) ImageQuerySizeLod 438 26
+                              Store 437(sizeQueryTemp) 439
+             440:     13(ptr) AccessChain 437(sizeQueryTemp) 67
+             441:     12(int) Load 440
+                              Store 22(WidthU) 441
+             442:     13(ptr) AccessChain 437(sizeQueryTemp) 71
+             443:     12(int) Load 442
+                              Store 129(HeightU) 443
+             444:     13(ptr) AccessChain 437(sizeQueryTemp) 192
+             445:     12(int) Load 444
+                              Store 70(ElementsU) 445
+             446:         426 Load 428(g_tTexcdu4a)
+             447:     19(int) ImageQueryLevels 446
+                              Store 29(NumberOfLevelsU) 447
+             452:         449 Load 451(g_tTex2dmsf4)
+             453:   65(ivec2) ImageQuerySize 452
+                              Store 448(sizeQueryTemp) 453
+             454:     13(ptr) AccessChain 448(sizeQueryTemp) 67
+             455:     12(int) Load 454
+                              Store 22(WidthU) 455
+             456:     13(ptr) AccessChain 448(sizeQueryTemp) 71
+             457:     12(int) Load 456
+                              Store 129(HeightU) 457
+             459:         449 Load 451(g_tTex2dmsf4)
+             460:     19(int) ImageQuerySamples 459
+                              Store 458(NumberOfSamplesU) 460
+             465:         462 Load 464(g_tTex2dmsi4)
+             466:   65(ivec2) ImageQuerySize 465
+                              Store 461(sizeQueryTemp) 466
+             467:     13(ptr) AccessChain 461(sizeQueryTemp) 67
+             468:     12(int) Load 467
+                              Store 22(WidthU) 468
+             469:     13(ptr) AccessChain 461(sizeQueryTemp) 71
+             470:     12(int) Load 469
+                              Store 129(HeightU) 470
+             471:         462 Load 464(g_tTex2dmsi4)
+             472:     19(int) ImageQuerySamples 471
+                              Store 458(NumberOfSamplesU) 472
+             477:         474 Load 476(g_tTex2dmsu4)
+             478:   65(ivec2) ImageQuerySize 477
+                              Store 473(sizeQueryTemp) 478
+             479:     13(ptr) AccessChain 473(sizeQueryTemp) 67
+             480:     12(int) Load 479
+                              Store 22(WidthU) 480
+             481:     13(ptr) AccessChain 473(sizeQueryTemp) 71
+             482:     12(int) Load 481
+                              Store 129(HeightU) 482
+             483:         474 Load 476(g_tTex2dmsu4)
+             484:     19(int) ImageQuerySamples 483
+                              Store 458(NumberOfSamplesU) 484
+             489:         486 Load 488(g_tTex2dmsf4a)
+             490:  186(ivec3) ImageQuerySize 489
+                              Store 485(sizeQueryTemp) 490
+             491:     13(ptr) AccessChain 485(sizeQueryTemp) 67
+             492:     12(int) Load 491
+                              Store 22(WidthU) 492
+             493:     13(ptr) AccessChain 485(sizeQueryTemp) 71
+             494:     12(int) Load 493
+                              Store 129(HeightU) 494
+             495:     13(ptr) AccessChain 485(sizeQueryTemp) 192
+             496:     12(int) Load 495
+                              Store 70(ElementsU) 496
+             497:         486 Load 488(g_tTex2dmsf4a)
+             498:     19(int) ImageQuerySamples 497
+                              Store 458(NumberOfSamplesU) 498
+             503:         500 Load 502(g_tTex2dmsi4a)
+             504:  186(ivec3) ImageQuerySize 503
+                              Store 499(sizeQueryTemp) 504
+             505:     13(ptr) AccessChain 499(sizeQueryTemp) 67
+             506:     12(int) Load 505
+                              Store 22(WidthU) 506
+             507:     13(ptr) AccessChain 499(sizeQueryTemp) 71
+             508:     12(int) Load 507
+                              Store 129(HeightU) 508
+             509:     13(ptr) AccessChain 499(sizeQueryTemp) 192
+             510:     12(int) Load 509
+                              Store 70(ElementsU) 510
+             511:         500 Load 502(g_tTex2dmsi4a)
+             512:     19(int) ImageQuerySamples 511
+                              Store 458(NumberOfSamplesU) 512
+             517:         514 Load 516(g_tTex2dmsu4a)
+             518:  186(ivec3) ImageQuerySize 517
+                              Store 513(sizeQueryTemp) 518
+             519:     13(ptr) AccessChain 513(sizeQueryTemp) 67
+             520:     12(int) Load 519
+                              Store 22(WidthU) 520
+             521:     13(ptr) AccessChain 513(sizeQueryTemp) 71
+             522:     12(int) Load 521
+                              Store 129(HeightU) 522
+             523:     13(ptr) AccessChain 513(sizeQueryTemp) 192
+             524:     12(int) Load 523
+                              Store 70(ElementsU) 524
+             525:         514 Load 516(g_tTex2dmsu4a)
+             526:     19(int) ImageQuerySamples 525
+                              Store 458(NumberOfSamplesU) 526
+             532:    531(ptr) AccessChain 528(psout) 20
                               Store 532 530
-             535:    534(ptr) AccessChain 527(psout) 533
+             535:    534(ptr) AccessChain 528(psout) 533
                               Store 535 529
-             536:8(PS_OUTPUT) Load 527(psout)
+             536:8(PS_OUTPUT) Load 528(psout)
                               ReturnValue 536
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index f5c7db6..d211124 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -9,6 +9,8 @@
 0:21          'sizeQueryTemp' (temp uint)
 0:21          textureSize (temp uint)
 0:21            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:21            Constant:
+0:21              0 (const int)
 0:21        move second child to first child (temp uint)
 0:21          'WidthU' (temp uint)
 0:21          'sizeQueryTemp' (temp uint)
@@ -66,6 +68,8 @@
 0:21          'sizeQueryTemp' (temp uint)
 0:21          textureSize (temp uint)
 0:21            'g_tTex1df4' (layout(binding=0 ) uniform texture1D)
+0:21            Constant:
+0:21              0 (const int)
 0:21        move second child to first child (temp uint)
 0:21          'WidthU' (temp uint)
 0:21          'sizeQueryTemp' (temp uint)
@@ -125,10 +129,10 @@
                               Name 10  "@main("
                               Name 14  "sizeQueryTemp"
                               Name 17  "g_tTex1df4"
-                              Name 21  "WidthU"
-                              Name 23  "sizeQueryTemp"
-                              Name 28  "NumberOfLevelsU"
-                              Name 32  "vsout"
+                              Name 22  "WidthU"
+                              Name 24  "sizeQueryTemp"
+                              Name 29  "NumberOfLevelsU"
+                              Name 33  "vsout"
                               Name 42  "@entryPointOutput_Pos"
                               Name 47  "g_sSamp"
                               Decorate 17(g_tTex1df4) DescriptorSet 0
@@ -148,9 +152,9 @@
               16:             TypePointer UniformConstant 15
   17(g_tTex1df4):     16(ptr) Variable UniformConstant
               19:             TypeInt 32 1
-              25:     12(int) Constant 6
-              31:             TypePointer Function 8(VS_OUTPUT)
-              33:     19(int) Constant 0
+              20:     19(int) Constant 0
+              26:     12(int) Constant 6
+              32:             TypePointer Function 8(VS_OUTPUT)
               34:    6(float) Constant 0
               35:    7(fvec4) ConstantComposite 34 34 34 34
               36:             TypePointer Function 7(fvec4)
@@ -169,25 +173,25 @@
       10(@main():8(VS_OUTPUT) Function None 9
               11:             Label
 14(sizeQueryTemp):     13(ptr) Variable Function
-      21(WidthU):     13(ptr) Variable Function
-23(sizeQueryTemp):     13(ptr) Variable Function
-28(NumberOfLevelsU):     13(ptr) Variable Function
-       32(vsout):     31(ptr) Variable Function
+      22(WidthU):     13(ptr) Variable Function
+24(sizeQueryTemp):     13(ptr) Variable Function
+29(NumberOfLevelsU):     13(ptr) Variable Function
+       33(vsout):     32(ptr) Variable Function
               18:          15 Load 17(g_tTex1df4)
-              20:     19(int) ImageQuerySize 18
-                              Store 14(sizeQueryTemp) 20
-              22:     12(int) Load 14(sizeQueryTemp)
-                              Store 21(WidthU) 22
-              24:          15 Load 17(g_tTex1df4)
-              26:     19(int) ImageQuerySizeLod 24 25
-                              Store 23(sizeQueryTemp) 26
-              27:     12(int) Load 23(sizeQueryTemp)
-                              Store 21(WidthU) 27
-              29:          15 Load 17(g_tTex1df4)
-              30:     19(int) ImageQueryLevels 29
-                              Store 28(NumberOfLevelsU) 30
-              37:     36(ptr) AccessChain 32(vsout) 33
+              21:     19(int) ImageQuerySizeLod 18 20
+                              Store 14(sizeQueryTemp) 21
+              23:     12(int) Load 14(sizeQueryTemp)
+                              Store 22(WidthU) 23
+              25:          15 Load 17(g_tTex1df4)
+              27:     19(int) ImageQuerySizeLod 25 26
+                              Store 24(sizeQueryTemp) 27
+              28:     12(int) Load 24(sizeQueryTemp)
+                              Store 22(WidthU) 28
+              30:          15 Load 17(g_tTex1df4)
+              31:     19(int) ImageQueryLevels 30
+                              Store 29(NumberOfLevelsU) 31
+              37:     36(ptr) AccessChain 33(vsout) 20
                               Store 37 35
-              38:8(VS_OUTPUT) Load 32(vsout)
+              38:8(VS_OUTPUT) Load 33(vsout)
                               ReturnValue 38
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out
index a0a67aa..eed102c 100755
--- a/Test/baseResults/hlsl.if.frag.out
+++ b/Test/baseResults/hlsl.if.frag.out
@@ -80,6 +80,16 @@
 0:31          'ii' (temp float)
 0:32      Pre-Increment (temp int)
 0:32        'ii' (temp int)
+0:33      Test condition and select (temp void)
+0:33        Condition
+0:33        Compare Equal (temp bool)
+0:33          Convert int to float (temp float)
+0:33            'ii' (temp int)
+0:33          Constant:
+0:33            1.000000
+0:33        true case
+0:34        Pre-Increment (temp int)
+0:34          'ii' (temp int)
 0:2  Function Definition: PixelShaderFunction( (temp void)
 0:2    Function Parameters: 
 0:?     Sequence
@@ -179,6 +189,16 @@
 0:31          'ii' (temp float)
 0:32      Pre-Increment (temp int)
 0:32        'ii' (temp int)
+0:33      Test condition and select (temp void)
+0:33        Condition
+0:33        Compare Equal (temp bool)
+0:33          Convert int to float (temp float)
+0:33            'ii' (temp int)
+0:33          Constant:
+0:33            1.000000
+0:33        true case
+0:34        Pre-Increment (temp int)
+0:34          'ii' (temp int)
 0:2  Function Definition: PixelShaderFunction( (temp void)
 0:2    Function Parameters: 
 0:?     Sequence
@@ -195,24 +215,24 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 94
+// Id's are bound by 101
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 87 90
+                              EntryPoint Fragment 4  "PixelShaderFunction" 94 97
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 11  "@PixelShaderFunction(vf4;"
                               Name 10  "input"
                               Name 68  "ii"
                               Name 80  "ii"
-                              Name 85  "input"
-                              Name 87  "input"
-                              Name 90  "@entryPointOutput"
-                              Name 91  "param"
-                              Decorate 87(input) Location 0
-                              Decorate 90(@entryPointOutput) Location 0
+                              Name 92  "input"
+                              Name 94  "input"
+                              Name 97  "@entryPointOutput"
+                              Name 98  "param"
+                              Decorate 94(input) Location 0
+                              Decorate 97(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -228,20 +248,20 @@
               78:             TypeInt 32 1
               79:             TypePointer Function 78(int)
               82:     78(int) Constant 1
-              86:             TypePointer Input 7(fvec4)
-       87(input):     86(ptr) Variable Input
-              89:             TypePointer Output 7(fvec4)
-90(@entryPointOutput):     89(ptr) Variable Output
+              93:             TypePointer Input 7(fvec4)
+       94(input):     93(ptr) Variable Input
+              96:             TypePointer Output 7(fvec4)
+97(@entryPointOutput):     96(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       85(input):      8(ptr) Variable Function
-       91(param):      8(ptr) Variable Function
-              88:    7(fvec4) Load 87(input)
-                              Store 85(input) 88
-              92:    7(fvec4) Load 85(input)
-                              Store 91(param) 92
-              93:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 91(param)
-                              Store 90(@entryPointOutput) 93
+       92(input):      8(ptr) Variable Function
+       98(param):      8(ptr) Variable Function
+              95:    7(fvec4) Load 94(input)
+                              Store 92(input) 95
+              99:    7(fvec4) Load 92(input)
+                              Store 98(param) 99
+             100:    7(fvec4) FunctionCall 11(@PixelShaderFunction(vf4;) 98(param)
+                              Store 97(@entryPointOutput) 100
                               Return
                               FunctionEnd
 11(@PixelShaderFunction(vf4;):    7(fvec4) Function None 9
@@ -329,6 +349,17 @@
               81:     78(int) Load 80(ii)
               83:     78(int) IAdd 81 82
                               Store 80(ii) 83
-              84:    7(fvec4) Undef
-                              ReturnValue 84
+              84:     78(int) Load 80(ii)
+              85:    6(float) ConvertSToF 84
+              86:    15(bool) FOrdEqual 85 76
+                              SelectionMerge 88 None
+                              BranchConditional 86 87 88
+              87:               Label
+              89:     78(int)   Load 80(ii)
+              90:     78(int)   IAdd 89 82
+                                Store 80(ii) 90
+                                Branch 88
+              88:             Label
+              91:    7(fvec4) Undef
+                              ReturnValue 91
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
index 84ced71..1fd33c6 100644
--- a/Test/baseResults/hlsl.intrinsics.f1632.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out
@@ -11,7 +11,7 @@
 0:3          unpackHalf2x16 (temp 2-component vector of float)
 0:3            'inF0' (in uint)
 0:3          Constant:
-0:3            0.000000
+0:3            0 (const int)
 0:7  Function Definition: PixelShaderFunction1(vu1; (temp 1-component vector of float)
 0:7    Function Parameters: 
 0:7      'inF0' (in 1-component vector of uint)
@@ -32,7 +32,7 @@
 0:13                Constant:
 0:13                  0 (const int)
 0:13            Constant:
-0:13              0.000000
+0:13              0 (const int)
 0:13          direct index (temp float)
 0:13            unpackHalf2x16 (temp 2-component vector of float)
 0:13              direct index (temp uint)
@@ -40,7 +40,7 @@
 0:13                Constant:
 0:13                  1 (const int)
 0:13            Constant:
-0:13              0.000000
+0:13              0 (const int)
 0:17  Function Definition: PixelShaderFunction3(vu3; (temp 3-component vector of float)
 0:17    Function Parameters: 
 0:17      'inF0' (in 3-component vector of uint)
@@ -54,7 +54,7 @@
 0:18                Constant:
 0:18                  0 (const int)
 0:18            Constant:
-0:18              0.000000
+0:18              0 (const int)
 0:18          direct index (temp float)
 0:18            unpackHalf2x16 (temp 2-component vector of float)
 0:18              direct index (temp uint)
@@ -62,7 +62,7 @@
 0:18                Constant:
 0:18                  1 (const int)
 0:18            Constant:
-0:18              0.000000
+0:18              0 (const int)
 0:18          direct index (temp float)
 0:18            unpackHalf2x16 (temp 2-component vector of float)
 0:18              direct index (temp uint)
@@ -70,7 +70,7 @@
 0:18                Constant:
 0:18                  2 (const int)
 0:18            Constant:
-0:18              0.000000
+0:18              0 (const int)
 0:22  Function Definition: PixelShaderFunction(vu4; (temp 4-component vector of float)
 0:22    Function Parameters: 
 0:22      'inF0' (in 4-component vector of uint)
@@ -84,7 +84,7 @@
 0:23                Constant:
 0:23                  0 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:23          direct index (temp float)
 0:23            unpackHalf2x16 (temp 2-component vector of float)
 0:23              direct index (temp uint)
@@ -92,7 +92,7 @@
 0:23                Constant:
 0:23                  1 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:23          direct index (temp float)
 0:23            unpackHalf2x16 (temp 2-component vector of float)
 0:23              direct index (temp uint)
@@ -100,7 +100,7 @@
 0:23                Constant:
 0:23                  2 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:23          direct index (temp float)
 0:23            unpackHalf2x16 (temp 2-component vector of float)
 0:23              direct index (temp uint)
@@ -108,7 +108,7 @@
 0:23                Constant:
 0:23                  3 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:27  Function Definition: @main( (temp 4-component vector of float)
 0:27    Function Parameters: 
 0:?     Sequence
@@ -143,7 +143,7 @@
 0:3          unpackHalf2x16 (temp 2-component vector of float)
 0:3            'inF0' (in uint)
 0:3          Constant:
-0:3            0.000000
+0:3            0 (const int)
 0:7  Function Definition: PixelShaderFunction1(vu1; (temp 1-component vector of float)
 0:7    Function Parameters: 
 0:7      'inF0' (in 1-component vector of uint)
@@ -164,7 +164,7 @@
 0:13                Constant:
 0:13                  0 (const int)
 0:13            Constant:
-0:13              0.000000
+0:13              0 (const int)
 0:13          direct index (temp float)
 0:13            unpackHalf2x16 (temp 2-component vector of float)
 0:13              direct index (temp uint)
@@ -172,7 +172,7 @@
 0:13                Constant:
 0:13                  1 (const int)
 0:13            Constant:
-0:13              0.000000
+0:13              0 (const int)
 0:17  Function Definition: PixelShaderFunction3(vu3; (temp 3-component vector of float)
 0:17    Function Parameters: 
 0:17      'inF0' (in 3-component vector of uint)
@@ -186,7 +186,7 @@
 0:18                Constant:
 0:18                  0 (const int)
 0:18            Constant:
-0:18              0.000000
+0:18              0 (const int)
 0:18          direct index (temp float)
 0:18            unpackHalf2x16 (temp 2-component vector of float)
 0:18              direct index (temp uint)
@@ -194,7 +194,7 @@
 0:18                Constant:
 0:18                  1 (const int)
 0:18            Constant:
-0:18              0.000000
+0:18              0 (const int)
 0:18          direct index (temp float)
 0:18            unpackHalf2x16 (temp 2-component vector of float)
 0:18              direct index (temp uint)
@@ -202,7 +202,7 @@
 0:18                Constant:
 0:18                  2 (const int)
 0:18            Constant:
-0:18              0.000000
+0:18              0 (const int)
 0:22  Function Definition: PixelShaderFunction(vu4; (temp 4-component vector of float)
 0:22    Function Parameters: 
 0:22      'inF0' (in 4-component vector of uint)
@@ -216,7 +216,7 @@
 0:23                Constant:
 0:23                  0 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:23          direct index (temp float)
 0:23            unpackHalf2x16 (temp 2-component vector of float)
 0:23              direct index (temp uint)
@@ -224,7 +224,7 @@
 0:23                Constant:
 0:23                  1 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:23          direct index (temp float)
 0:23            unpackHalf2x16 (temp 2-component vector of float)
 0:23              direct index (temp uint)
@@ -232,7 +232,7 @@
 0:23                Constant:
 0:23                  2 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:23          direct index (temp float)
 0:23            unpackHalf2x16 (temp 2-component vector of float)
 0:23              direct index (temp uint)
@@ -240,7 +240,7 @@
 0:23                Constant:
 0:23                  3 (const int)
 0:23            Constant:
-0:23              0.000000
+0:23              0 (const int)
 0:27  Function Definition: @main( (temp 4-component vector of float)
 0:27    Function Parameters: 
 0:?     Sequence
diff --git a/Test/baseResults/hlsl.intrinsics.negative.frag.out b/Test/baseResults/hlsl.intrinsics.negative.frag.out
index 84df958..1ec75fc 100644
--- a/Test/baseResults/hlsl.intrinsics.negative.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.negative.frag.out
@@ -112,7 +112,7 @@
 0:12          Convert float to uint (temp uint)
 0:12            'inF0' (in float)
 0:12        Constant:
-0:12          0.000000
+0:12          0 (const int)
 0:13      findMSB (temp uint)
 0:13        Convert float to uint (temp uint)
 0:13          'inF0' (in float)
@@ -202,7 +202,7 @@
 0:52              Constant:
 0:52                0 (const int)
 0:52          Constant:
-0:52            0.000000
+0:52            0 (const int)
 0:52        direct index (temp float)
 0:52          unpackHalf2x16 (temp 2-component vector of float)
 0:52            direct index (temp uint)
@@ -211,7 +211,7 @@
 0:52              Constant:
 0:52                1 (const int)
 0:52          Constant:
-0:52            0.000000
+0:52            0 (const int)
 0:53      findMSB (temp 2-component vector of uint)
 0:53        Convert float to uint (temp 2-component vector of uint)
 0:53          'inF0' (in 2-component vector of float)
@@ -252,7 +252,7 @@
 0:68              Constant:
 0:68                0 (const int)
 0:68          Constant:
-0:68            0.000000
+0:68            0 (const int)
 0:68        direct index (temp float)
 0:68          unpackHalf2x16 (temp 2-component vector of float)
 0:68            direct index (temp uint)
@@ -261,7 +261,7 @@
 0:68              Constant:
 0:68                1 (const int)
 0:68          Constant:
-0:68            0.000000
+0:68            0 (const int)
 0:68        direct index (temp float)
 0:68          unpackHalf2x16 (temp 2-component vector of float)
 0:68            direct index (temp uint)
@@ -270,7 +270,7 @@
 0:68              Constant:
 0:68                2 (const int)
 0:68          Constant:
-0:68            0.000000
+0:68            0 (const int)
 0:69      findMSB (temp 3-component vector of uint)
 0:69        Convert float to uint (temp 3-component vector of uint)
 0:69          'inF0' (in 3-component vector of float)
@@ -315,7 +315,7 @@
 0:85              Constant:
 0:85                0 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:85        direct index (temp float)
 0:85          unpackHalf2x16 (temp 2-component vector of float)
 0:85            direct index (temp uint)
@@ -324,7 +324,7 @@
 0:85              Constant:
 0:85                1 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:85        direct index (temp float)
 0:85          unpackHalf2x16 (temp 2-component vector of float)
 0:85            direct index (temp uint)
@@ -333,7 +333,7 @@
 0:85              Constant:
 0:85                2 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:85        direct index (temp float)
 0:85          unpackHalf2x16 (temp 2-component vector of float)
 0:85            direct index (temp uint)
@@ -342,7 +342,7 @@
 0:85              Constant:
 0:85                3 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:86      findMSB (temp 4-component vector of uint)
 0:86        Convert float to uint (temp 4-component vector of uint)
 0:86          'inF0' (in 4-component vector of float)
@@ -574,7 +574,7 @@
 0:12          Convert float to uint (temp uint)
 0:12            'inF0' (in float)
 0:12        Constant:
-0:12          0.000000
+0:12          0 (const int)
 0:13      findMSB (temp uint)
 0:13        Convert float to uint (temp uint)
 0:13          'inF0' (in float)
@@ -664,7 +664,7 @@
 0:52              Constant:
 0:52                0 (const int)
 0:52          Constant:
-0:52            0.000000
+0:52            0 (const int)
 0:52        direct index (temp float)
 0:52          unpackHalf2x16 (temp 2-component vector of float)
 0:52            direct index (temp uint)
@@ -673,7 +673,7 @@
 0:52              Constant:
 0:52                1 (const int)
 0:52          Constant:
-0:52            0.000000
+0:52            0 (const int)
 0:53      findMSB (temp 2-component vector of uint)
 0:53        Convert float to uint (temp 2-component vector of uint)
 0:53          'inF0' (in 2-component vector of float)
@@ -714,7 +714,7 @@
 0:68              Constant:
 0:68                0 (const int)
 0:68          Constant:
-0:68            0.000000
+0:68            0 (const int)
 0:68        direct index (temp float)
 0:68          unpackHalf2x16 (temp 2-component vector of float)
 0:68            direct index (temp uint)
@@ -723,7 +723,7 @@
 0:68              Constant:
 0:68                1 (const int)
 0:68          Constant:
-0:68            0.000000
+0:68            0 (const int)
 0:68        direct index (temp float)
 0:68          unpackHalf2x16 (temp 2-component vector of float)
 0:68            direct index (temp uint)
@@ -732,7 +732,7 @@
 0:68              Constant:
 0:68                2 (const int)
 0:68          Constant:
-0:68            0.000000
+0:68            0 (const int)
 0:69      findMSB (temp 3-component vector of uint)
 0:69        Convert float to uint (temp 3-component vector of uint)
 0:69          'inF0' (in 3-component vector of float)
@@ -777,7 +777,7 @@
 0:85              Constant:
 0:85                0 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:85        direct index (temp float)
 0:85          unpackHalf2x16 (temp 2-component vector of float)
 0:85            direct index (temp uint)
@@ -786,7 +786,7 @@
 0:85              Constant:
 0:85                1 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:85        direct index (temp float)
 0:85          unpackHalf2x16 (temp 2-component vector of float)
 0:85            direct index (temp uint)
@@ -795,7 +795,7 @@
 0:85              Constant:
 0:85                2 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:85        direct index (temp float)
 0:85          unpackHalf2x16 (temp 2-component vector of float)
 0:85            direct index (temp uint)
@@ -804,7 +804,7 @@
 0:85              Constant:
 0:85                3 (const int)
 0:85          Constant:
-0:85            0.000000
+0:85            0 (const int)
 0:86      findMSB (temp 4-component vector of uint)
 0:86        Convert float to uint (temp 4-component vector of uint)
 0:86          'inF0' (in 4-component vector of float)
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
index 71a17c9..540fe2e 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -364,6 +364,8 @@
 0:70          'sizeQueryTemp' (temp uint)
 0:70          textureSize (temp uint)
 0:70            'g_tTex1df4' (uniform texture1D)
+0:70            Constant:
+0:70              0 (const int)
 0:70        move second child to first child (temp int)
 0:70          'WidthI' (temp int)
 0:70          Convert uint to int (temp int)
@@ -808,6 +810,8 @@
 0:70          'sizeQueryTemp' (temp uint)
 0:70          textureSize (temp uint)
 0:70            'g_tTex1df4' (uniform texture1D)
+0:70            Constant:
+0:70              0 (const int)
 0:70        move second child to first child (temp int)
 0:70          'WidthI' (temp int)
 0:70          Convert uint to int (temp int)
@@ -1284,7 +1288,7 @@
              276:    6(float) CompositeExtract 275 0
                               Store 268(r51) 276
              281:         278 Load 280(g_tTex1df4)
-             282:     14(int) ImageQuerySize 281
+             282:     14(int) ImageQuerySizeLod 281 53
                               Store 277(sizeQueryTemp) 282
              284:     15(int) Load 277(sizeQueryTemp)
              285:     14(int) Bitcast 284
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index 63d53c2..9ed9831 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -19,6 +19,8 @@
 0:40          'sizeQueryTemp' (temp uint)
 0:40          textureSize (temp uint)
 0:40            'g_tTex1df4' (uniform texture1D)
+0:40            Constant:
+0:40              0 (const int)
 0:40        move second child to first child (temp int)
 0:40          'WidthI' (temp int)
 0:40          Convert uint to int (temp int)
@@ -121,6 +123,8 @@
 0:40          'sizeQueryTemp' (temp uint)
 0:40          textureSize (temp uint)
 0:40            'g_tTex1df4' (uniform texture1D)
+0:40            Constant:
+0:40              0 (const int)
 0:40        move second child to first child (temp int)
 0:40          'WidthI' (temp int)
 0:40          Convert uint to int (temp int)
@@ -229,14 +233,14 @@
                               Name 19  ""
                               Name 28  "sizeQueryTemp"
                               Name 31  "g_tTex1df4"
-                              Name 35  "WidthI"
-                              Name 38  "sizeQueryTemp"
-                              Name 44  "NumberOfLevelsU"
-                              Name 47  "sizeQueryTemp"
-                              Name 50  "WidthU"
-                              Name 52  "NumberOfLevelsI"
-                              Name 56  "sizeQueryTemp"
-                              Name 65  "ps_output"
+                              Name 36  "WidthI"
+                              Name 39  "sizeQueryTemp"
+                              Name 45  "NumberOfLevelsU"
+                              Name 48  "sizeQueryTemp"
+                              Name 51  "WidthU"
+                              Name 53  "NumberOfLevelsI"
+                              Name 57  "sizeQueryTemp"
+                              Name 66  "ps_output"
                               Name 74  "color"
                               Name 80  "g_tTexbfs"
                               MemberDecorate 17($Global) 0 Offset 0
@@ -276,10 +280,10 @@
               29:             TypeImage 6(float) 1D sampled format:Unknown
               30:             TypePointer UniformConstant 29
   31(g_tTex1df4):     30(ptr) Variable UniformConstant
-              34:             TypePointer Function 12(int)
-              40:     13(int) Constant 6
-              64:             TypePointer Function 8(PS_OUTPUT)
-              66:     12(int) Constant 0
+              33:     12(int) Constant 0
+              35:             TypePointer Function 12(int)
+              41:     13(int) Constant 6
+              65:             TypePointer Function 8(PS_OUTPUT)
               67:    7(fvec4) ConstantComposite 24 24 24 24
               68:             TypePointer Function 7(fvec4)
               73:             TypePointer Output 7(fvec4)
@@ -298,53 +302,53 @@
       10(@main():8(PS_OUTPUT) Function None 9
               11:             Label
 28(sizeQueryTemp):     27(ptr) Variable Function
-      35(WidthI):     34(ptr) Variable Function
-38(sizeQueryTemp):     27(ptr) Variable Function
-44(NumberOfLevelsU):     27(ptr) Variable Function
-47(sizeQueryTemp):     27(ptr) Variable Function
-      50(WidthU):     27(ptr) Variable Function
-52(NumberOfLevelsI):     34(ptr) Variable Function
-56(sizeQueryTemp):     27(ptr) Variable Function
-   65(ps_output):     64(ptr) Variable Function
+      36(WidthI):     35(ptr) Variable Function
+39(sizeQueryTemp):     27(ptr) Variable Function
+45(NumberOfLevelsU):     27(ptr) Variable Function
+48(sizeQueryTemp):     27(ptr) Variable Function
+      51(WidthU):     27(ptr) Variable Function
+53(NumberOfLevelsI):     35(ptr) Variable Function
+57(sizeQueryTemp):     27(ptr) Variable Function
+   66(ps_output):     65(ptr) Variable Function
               22:     21(ptr) AccessChain 19 20
               23:    6(float) Load 22
               26:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 23 24 25
               32:          29 Load 31(g_tTex1df4)
-              33:     12(int) ImageQuerySize 32
-                              Store 28(sizeQueryTemp) 33
-              36:     13(int) Load 28(sizeQueryTemp)
-              37:     12(int) Bitcast 36
-                              Store 35(WidthI) 37
-              39:          29 Load 31(g_tTex1df4)
-              41:     12(int) ImageQuerySizeLod 39 40
-                              Store 38(sizeQueryTemp) 41
-              42:     13(int) Load 38(sizeQueryTemp)
-              43:     12(int) Bitcast 42
-                              Store 35(WidthI) 43
-              45:          29 Load 31(g_tTex1df4)
-              46:     12(int) ImageQueryLevels 45
-                              Store 44(NumberOfLevelsU) 46
-              48:          29 Load 31(g_tTex1df4)
-              49:     12(int) ImageQuerySizeLod 48 40
-                              Store 47(sizeQueryTemp) 49
-              51:     13(int) Load 47(sizeQueryTemp)
-                              Store 50(WidthU) 51
-              53:          29 Load 31(g_tTex1df4)
-              54:     12(int) ImageQueryLevels 53
-              55:     12(int) Bitcast 54
-                              Store 52(NumberOfLevelsI) 55
-              57:          29 Load 31(g_tTex1df4)
-              58:     12(int) ImageQuerySizeLod 57 40
-                              Store 56(sizeQueryTemp) 58
-              59:     13(int) Load 56(sizeQueryTemp)
-              60:     12(int) Bitcast 59
-                              Store 35(WidthI) 60
-              61:          29 Load 31(g_tTex1df4)
-              62:     12(int) ImageQueryLevels 61
-              63:     12(int) Bitcast 62
-                              Store 52(NumberOfLevelsI) 63
-              69:     68(ptr) AccessChain 65(ps_output) 66
+              34:     12(int) ImageQuerySizeLod 32 33
+                              Store 28(sizeQueryTemp) 34
+              37:     13(int) Load 28(sizeQueryTemp)
+              38:     12(int) Bitcast 37
+                              Store 36(WidthI) 38
+              40:          29 Load 31(g_tTex1df4)
+              42:     12(int) ImageQuerySizeLod 40 41
+                              Store 39(sizeQueryTemp) 42
+              43:     13(int) Load 39(sizeQueryTemp)
+              44:     12(int) Bitcast 43
+                              Store 36(WidthI) 44
+              46:          29 Load 31(g_tTex1df4)
+              47:     12(int) ImageQueryLevels 46
+                              Store 45(NumberOfLevelsU) 47
+              49:          29 Load 31(g_tTex1df4)
+              50:     12(int) ImageQuerySizeLod 49 41
+                              Store 48(sizeQueryTemp) 50
+              52:     13(int) Load 48(sizeQueryTemp)
+                              Store 51(WidthU) 52
+              54:          29 Load 31(g_tTex1df4)
+              55:     12(int) ImageQueryLevels 54
+              56:     12(int) Bitcast 55
+                              Store 53(NumberOfLevelsI) 56
+              58:          29 Load 31(g_tTex1df4)
+              59:     12(int) ImageQuerySizeLod 58 41
+                              Store 57(sizeQueryTemp) 59
+              60:     13(int) Load 57(sizeQueryTemp)
+              61:     12(int) Bitcast 60
+                              Store 36(WidthI) 61
+              62:          29 Load 31(g_tTex1df4)
+              63:     12(int) ImageQueryLevels 62
+              64:     12(int) Bitcast 63
+                              Store 53(NumberOfLevelsI) 64
+              69:     68(ptr) AccessChain 66(ps_output) 33
                               Store 69 67
-              70:8(PS_OUTPUT) Load 65(ps_output)
+              70:8(PS_OUTPUT) Load 66(ps_output)
                               ReturnValue 70
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.numericsuffixes.frag.out b/Test/baseResults/hlsl.numericsuffixes.frag.out
index fee6426..3637a2c 100644
--- a/Test/baseResults/hlsl.numericsuffixes.frag.out
+++ b/Test/baseResults/hlsl.numericsuffixes.frag.out
@@ -50,16 +50,36 @@
 0:15          'r08' (temp uint)
 0:15          Constant:
 0:15            58 (const uint)
-0:18      move second child to first child (temp 4-component vector of float)
-0:18        color: direct index for structure (temp 4-component vector of float)
-0:18          'ps_output' (temp structure{temp 4-component vector of float color})
+0:16      Sequence
+0:16        move second child to first child (temp float)
+0:16          'r09' (temp float)
+0:16          Constant:
+0:16            1.000000
+0:17      Sequence
+0:17        move second child to first child (temp float)
+0:17          'r10' (temp float)
+0:17          Constant:
+0:17            1.000000
+0:18      Sequence
+0:18        move second child to first child (temp float)
+0:18          'r11' (temp float)
 0:18          Constant:
-0:18            0 (const int)
-0:18        Construct vec4 (temp 4-component vector of float)
-0:18          Convert int to float (temp float)
-0:18            'r07' (temp int)
-0:19      Branch: Return with expression
-0:19        'ps_output' (temp structure{temp 4-component vector of float color})
+0:18            1.100000
+0:19      Sequence
+0:19        move second child to first child (temp float)
+0:19          'r12' (temp float)
+0:19          Constant:
+0:19            1.100000
+0:22      move second child to first child (temp 4-component vector of float)
+0:22        color: direct index for structure (temp 4-component vector of float)
+0:22          'ps_output' (temp structure{temp 4-component vector of float color})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Construct vec4 (temp 4-component vector of float)
+0:22          Convert int to float (temp float)
+0:22            'r07' (temp int)
+0:23      Branch: Return with expression
+0:23        'ps_output' (temp structure{temp 4-component vector of float color})
 0:5  Function Definition: main( (temp void)
 0:5    Function Parameters: 
 0:?     Sequence
@@ -128,16 +148,36 @@
 0:15          'r08' (temp uint)
 0:15          Constant:
 0:15            58 (const uint)
-0:18      move second child to first child (temp 4-component vector of float)
-0:18        color: direct index for structure (temp 4-component vector of float)
-0:18          'ps_output' (temp structure{temp 4-component vector of float color})
+0:16      Sequence
+0:16        move second child to first child (temp float)
+0:16          'r09' (temp float)
+0:16          Constant:
+0:16            1.000000
+0:17      Sequence
+0:17        move second child to first child (temp float)
+0:17          'r10' (temp float)
+0:17          Constant:
+0:17            1.000000
+0:18      Sequence
+0:18        move second child to first child (temp float)
+0:18          'r11' (temp float)
 0:18          Constant:
-0:18            0 (const int)
-0:18        Construct vec4 (temp 4-component vector of float)
-0:18          Convert int to float (temp float)
-0:18            'r07' (temp int)
-0:19      Branch: Return with expression
-0:19        'ps_output' (temp structure{temp 4-component vector of float color})
+0:18            1.100000
+0:19      Sequence
+0:19        move second child to first child (temp float)
+0:19          'r12' (temp float)
+0:19          Constant:
+0:19            1.100000
+0:22      move second child to first child (temp 4-component vector of float)
+0:22        color: direct index for structure (temp 4-component vector of float)
+0:22          'ps_output' (temp structure{temp 4-component vector of float color})
+0:22          Constant:
+0:22            0 (const int)
+0:22        Construct vec4 (temp 4-component vector of float)
+0:22          Convert int to float (temp float)
+0:22            'r07' (temp int)
+0:23      Branch: Return with expression
+0:23        'ps_output' (temp structure{temp 4-component vector of float color})
 0:5  Function Definition: main( (temp void)
 0:5    Function Parameters: 
 0:?     Sequence
@@ -153,12 +193,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 49
+// Id's are bound by 54
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 46
+                              EntryPoint Fragment 4  "main" 51
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "main"
                               Name 8  "PS_OUTPUT"
@@ -173,9 +213,13 @@
                               Name 28  "r06"
                               Name 30  "r07"
                               Name 32  "r08"
-                              Name 35  "ps_output"
-                              Name 46  "color"
-                              Decorate 46(color) Location 0
+                              Name 34  "r09"
+                              Name 35  "r10"
+                              Name 36  "r11"
+                              Name 38  "r12"
+                              Name 40  "ps_output"
+                              Name 51  "color"
+                              Decorate 51(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -195,16 +239,17 @@
               29:     24(int) Constant 6
               31:     24(int) Constant 57
               33:     15(int) Constant 58
-              34:             TypePointer Function 8(PS_OUTPUT)
-              36:     24(int) Constant 0
-              40:             TypePointer Function 7(fvec4)
-              45:             TypePointer Output 7(fvec4)
-       46(color):     45(ptr) Variable Output
+              37:    6(float) Constant 1066192077
+              39:             TypePointer Function 8(PS_OUTPUT)
+              41:     24(int) Constant 0
+              45:             TypePointer Function 7(fvec4)
+              50:             TypePointer Output 7(fvec4)
+       51(color):     50(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-              47:8(PS_OUTPUT) FunctionCall 10(@main()
-              48:    7(fvec4) CompositeExtract 47 0
-                              Store 46(color) 48
+              52:8(PS_OUTPUT) FunctionCall 10(@main()
+              53:    7(fvec4) CompositeExtract 52 0
+                              Store 51(color) 53
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
@@ -218,7 +263,11 @@
          28(r06):     25(ptr) Variable Function
          30(r07):     25(ptr) Variable Function
          32(r08):     16(ptr) Variable Function
-   35(ps_output):     34(ptr) Variable Function
+         34(r09):     12(ptr) Variable Function
+         35(r10):     12(ptr) Variable Function
+         36(r11):     12(ptr) Variable Function
+         38(r12):     12(ptr) Variable Function
+   40(ps_output):     39(ptr) Variable Function
                               Store 13(r00) 14
                               Store 17(r01) 18
                               Store 19(r02) 20
@@ -228,11 +277,15 @@
                               Store 28(r06) 29
                               Store 30(r07) 31
                               Store 32(r08) 33
-              37:     24(int) Load 30(r07)
-              38:    6(float) ConvertSToF 37
-              39:    7(fvec4) CompositeConstruct 38 38 38 38
-              41:     40(ptr) AccessChain 35(ps_output) 36
-                              Store 41 39
-              42:8(PS_OUTPUT) Load 35(ps_output)
-                              ReturnValue 42
+                              Store 34(r09) 14
+                              Store 35(r10) 14
+                              Store 36(r11) 37
+                              Store 38(r12) 37
+              42:     24(int) Load 30(r07)
+              43:    6(float) ConvertSToF 42
+              44:    7(fvec4) CompositeConstruct 43 43 43 43
+              46:     45(ptr) AccessChain 40(ps_output) 41
+                              Store 46 44
+              47:8(PS_OUTPUT) Load 40(ps_output)
+                              ReturnValue 47
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index 8b19c02..1876aee 100755
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -6,104 +6,110 @@
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
-0:34    Function Parameters: 
-0:34      'input' (in 4-component vector of float)
-0:34      's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40  Function Definition: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
+0:40    Function Parameters: 
+0:40      'input' (in 4-component vector of float)
+0:40      's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
 0:?     Sequence
-0:39      Compare Equal (temp bool)
-0:39        's3' (temp structure{temp 3-component vector of bool b3})
-0:39        's3' (temp structure{temp 3-component vector of bool b3})
+0:45      Compare Equal (temp bool)
+0:45        's3' (temp structure{temp 3-component vector of bool b3})
+0:45        's3' (temp structure{temp 3-component vector of bool b3})
+0:46      move second child to first child (temp 4-component vector of float)
+0:46        i: direct index for structure (temp 4-component vector of float)
+0:46          's2' (global structure{temp 4-component vector of float i})
+0:46          Constant:
+0:46            0 (const int)
+0:46        ff4: direct index for structure (temp 4-component vector of float)
+0:46          's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:46          Constant:
+0:46            7 (const int)
+0:50      move second child to first child (temp structure{})
+0:50        'e' (temp structure{})
+0:50        e: direct index for structure (temp structure{})
+0:50          'ce' (temp structure{temp structure{} e})
+0:50          Constant:
+0:50            0 (const int)
+0:52      Branch: Return with expression
+0:52        'input' (in 4-component vector of float)
+0:40  Function Definition: PixelShaderFunction( (temp void)
+0:40    Function Parameters: 
+0:?     Sequence
 0:40      move second child to first child (temp 4-component vector of float)
-0:40        i: direct index for structure (temp 4-component vector of float)
-0:40          's2' (global structure{temp 4-component vector of float i})
-0:40          Constant:
-0:40            0 (const int)
-0:40        ff4: direct index for structure (temp 4-component vector of float)
-0:40          's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40          Constant:
-0:40            7 (const int)
-0:42      Branch: Return with expression
-0:42        'input' (in 4-component vector of float)
-0:34  Function Definition: PixelShaderFunction( (temp void)
-0:34    Function Parameters: 
-0:?     Sequence
-0:34      move second child to first child (temp 4-component vector of float)
 0:?         'input' (temp 4-component vector of float)
 0:?         'input' (layout(location=0 ) in 4-component vector of float)
-0:34      Sequence
-0:34        move second child to first child (temp 4-component vector of float)
-0:34          a: direct index for structure (temp 4-component vector of float)
+0:40      Sequence
+0:40        move second child to first child (temp 4-component vector of float)
+0:40          a: direct index for structure (temp 4-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              0 (const int)
-0:34          a: direct index for structure (smooth temp 4-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              0 (const int)
-0:34        move second child to first child (temp bool)
-0:34          b: direct index for structure (temp bool)
+0:40            Constant:
+0:40              0 (const int)
+0:40          a: direct index for structure (smooth temp 4-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              0 (const int)
+0:40        move second child to first child (temp bool)
+0:40          b: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              1 (const int)
-0:34          b: direct index for structure (flat temp bool)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              1 (const int)
-0:34        move second child to first child (temp 1-component vector of float)
-0:34          c: direct index for structure (temp 1-component vector of float)
+0:40            Constant:
+0:40              1 (const int)
+0:40          b: direct index for structure (flat temp bool)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              1 (const int)
+0:40        move second child to first child (temp 1-component vector of float)
+0:40          c: direct index for structure (temp 1-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              2 (const int)
-0:34          c: direct index for structure (centroid noperspective temp 1-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              2 (const int)
-0:34        move second child to first child (temp 2-component vector of float)
-0:34          d: direct index for structure (temp 2-component vector of float)
+0:40            Constant:
+0:40              2 (const int)
+0:40          c: direct index for structure (centroid noperspective temp 1-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              2 (const int)
+0:40        move second child to first child (temp 2-component vector of float)
+0:40          d: direct index for structure (temp 2-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              3 (const int)
-0:34          d: direct index for structure (centroid sample temp 2-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              3 (const int)
-0:34        move second child to first child (temp bool)
-0:34          ff1: direct index for structure (temp bool)
+0:40            Constant:
+0:40              3 (const int)
+0:40          d: direct index for structure (centroid sample temp 2-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              3 (const int)
+0:40        move second child to first child (temp bool)
+0:40          ff1: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              4 (const int)
+0:40            Constant:
+0:40              4 (const int)
 0:?           's_ff1' (in bool Face)
-0:34        move second child to first child (temp bool)
-0:34          ff2: direct index for structure (temp bool)
+0:40        move second child to first child (temp bool)
+0:40          ff2: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              5 (const int)
-0:34          ff2: direct index for structure (temp bool)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              4 (const int)
-0:34        move second child to first child (temp bool)
-0:34          ff3: direct index for structure (temp bool)
+0:40            Constant:
+0:40              5 (const int)
+0:40          ff2: direct index for structure (temp bool)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              4 (const int)
+0:40        move second child to first child (temp bool)
+0:40          ff3: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              6 (const int)
-0:34          ff3: direct index for structure (temp bool)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              5 (const int)
-0:34        move second child to first child (temp 4-component vector of float)
-0:34          ff4: direct index for structure (temp 4-component vector of float)
+0:40            Constant:
+0:40              6 (const int)
+0:40          ff3: direct index for structure (temp bool)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              5 (const int)
+0:40        move second child to first child (temp 4-component vector of float)
+0:40          ff4: direct index for structure (temp 4-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              7 (const int)
-0:34          ff4: direct index for structure (temp 4-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              6 (const int)
-0:34      move second child to first child (temp 4-component vector of float)
+0:40            Constant:
+0:40              7 (const int)
+0:40          ff4: direct index for structure (temp 4-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              6 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:34        Function Call: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
+0:40        Function Call: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
 0:?           'input' (temp 4-component vector of float)
 0:?           's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
 0:?   Linker Objects
@@ -121,104 +127,110 @@
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:34  Function Definition: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
-0:34    Function Parameters: 
-0:34      'input' (in 4-component vector of float)
-0:34      's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40  Function Definition: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
+0:40    Function Parameters: 
+0:40      'input' (in 4-component vector of float)
+0:40      's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
 0:?     Sequence
-0:39      Compare Equal (temp bool)
-0:39        's3' (temp structure{temp 3-component vector of bool b3})
-0:39        's3' (temp structure{temp 3-component vector of bool b3})
+0:45      Compare Equal (temp bool)
+0:45        's3' (temp structure{temp 3-component vector of bool b3})
+0:45        's3' (temp structure{temp 3-component vector of bool b3})
+0:46      move second child to first child (temp 4-component vector of float)
+0:46        i: direct index for structure (temp 4-component vector of float)
+0:46          's2' (global structure{temp 4-component vector of float i})
+0:46          Constant:
+0:46            0 (const int)
+0:46        ff4: direct index for structure (temp 4-component vector of float)
+0:46          's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:46          Constant:
+0:46            7 (const int)
+0:50      move second child to first child (temp structure{})
+0:50        'e' (temp structure{})
+0:50        e: direct index for structure (temp structure{})
+0:50          'ce' (temp structure{temp structure{} e})
+0:50          Constant:
+0:50            0 (const int)
+0:52      Branch: Return with expression
+0:52        'input' (in 4-component vector of float)
+0:40  Function Definition: PixelShaderFunction( (temp void)
+0:40    Function Parameters: 
+0:?     Sequence
 0:40      move second child to first child (temp 4-component vector of float)
-0:40        i: direct index for structure (temp 4-component vector of float)
-0:40          's2' (global structure{temp 4-component vector of float i})
-0:40          Constant:
-0:40            0 (const int)
-0:40        ff4: direct index for structure (temp 4-component vector of float)
-0:40          's' (in structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:40          Constant:
-0:40            7 (const int)
-0:42      Branch: Return with expression
-0:42        'input' (in 4-component vector of float)
-0:34  Function Definition: PixelShaderFunction( (temp void)
-0:34    Function Parameters: 
-0:?     Sequence
-0:34      move second child to first child (temp 4-component vector of float)
 0:?         'input' (temp 4-component vector of float)
 0:?         'input' (layout(location=0 ) in 4-component vector of float)
-0:34      Sequence
-0:34        move second child to first child (temp 4-component vector of float)
-0:34          a: direct index for structure (temp 4-component vector of float)
+0:40      Sequence
+0:40        move second child to first child (temp 4-component vector of float)
+0:40          a: direct index for structure (temp 4-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              0 (const int)
-0:34          a: direct index for structure (smooth temp 4-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              0 (const int)
-0:34        move second child to first child (temp bool)
-0:34          b: direct index for structure (temp bool)
+0:40            Constant:
+0:40              0 (const int)
+0:40          a: direct index for structure (smooth temp 4-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              0 (const int)
+0:40        move second child to first child (temp bool)
+0:40          b: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              1 (const int)
-0:34          b: direct index for structure (flat temp bool)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              1 (const int)
-0:34        move second child to first child (temp 1-component vector of float)
-0:34          c: direct index for structure (temp 1-component vector of float)
+0:40            Constant:
+0:40              1 (const int)
+0:40          b: direct index for structure (flat temp bool)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              1 (const int)
+0:40        move second child to first child (temp 1-component vector of float)
+0:40          c: direct index for structure (temp 1-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              2 (const int)
-0:34          c: direct index for structure (centroid noperspective temp 1-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              2 (const int)
-0:34        move second child to first child (temp 2-component vector of float)
-0:34          d: direct index for structure (temp 2-component vector of float)
+0:40            Constant:
+0:40              2 (const int)
+0:40          c: direct index for structure (centroid noperspective temp 1-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              2 (const int)
+0:40        move second child to first child (temp 2-component vector of float)
+0:40          d: direct index for structure (temp 2-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              3 (const int)
-0:34          d: direct index for structure (centroid sample temp 2-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              3 (const int)
-0:34        move second child to first child (temp bool)
-0:34          ff1: direct index for structure (temp bool)
+0:40            Constant:
+0:40              3 (const int)
+0:40          d: direct index for structure (centroid sample temp 2-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              3 (const int)
+0:40        move second child to first child (temp bool)
+0:40          ff1: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              4 (const int)
+0:40            Constant:
+0:40              4 (const int)
 0:?           's_ff1' (in bool Face)
-0:34        move second child to first child (temp bool)
-0:34          ff2: direct index for structure (temp bool)
+0:40        move second child to first child (temp bool)
+0:40          ff2: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              5 (const int)
-0:34          ff2: direct index for structure (temp bool)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              4 (const int)
-0:34        move second child to first child (temp bool)
-0:34          ff3: direct index for structure (temp bool)
+0:40            Constant:
+0:40              5 (const int)
+0:40          ff2: direct index for structure (temp bool)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              4 (const int)
+0:40        move second child to first child (temp bool)
+0:40          ff3: direct index for structure (temp bool)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              6 (const int)
-0:34          ff3: direct index for structure (temp bool)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              5 (const int)
-0:34        move second child to first child (temp 4-component vector of float)
-0:34          ff4: direct index for structure (temp 4-component vector of float)
+0:40            Constant:
+0:40              6 (const int)
+0:40          ff3: direct index for structure (temp bool)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              5 (const int)
+0:40        move second child to first child (temp 4-component vector of float)
+0:40          ff4: direct index for structure (temp 4-component vector of float)
 0:?             's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              7 (const int)
-0:34          ff4: direct index for structure (temp 4-component vector of float)
-0:34            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
-0:34            Constant:
-0:34              6 (const int)
-0:34      move second child to first child (temp 4-component vector of float)
+0:40            Constant:
+0:40              7 (const int)
+0:40          ff4: direct index for structure (temp 4-component vector of float)
+0:40            's' (layout(location=1 ) in structure{smooth temp 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
+0:40            Constant:
+0:40              6 (const int)
+0:40      move second child to first child (temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
-0:34        Function Call: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
+0:40        Function Call: @PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41; (temp 4-component vector of float)
 0:?           'input' (temp 4-component vector of float)
 0:?           's' (temp structure{temp 4-component vector of float a, temp bool b, temp 1-component vector of float c, temp 2-component vector of float d, temp bool ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float ff4})
 0:?   Linker Objects
@@ -231,12 +243,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 97
+// Id's are bound by 105
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 43 48 71 86
+                              EntryPoint Fragment 4  "PixelShaderFunction" 51 56 79 94
                               ExecutionMode 4 OriginUpperLeft
                               Name 4  "PixelShaderFunction"
                               Name 11  "IN_S"
@@ -257,49 +269,54 @@
                               Name 28  ""
                               MemberName 28 0  "i"
                               Name 30  "s2"
-                              Name 41  "input"
-                              Name 43  "input"
-                              Name 45  "s"
-                              Name 46  "IN_S"
-                              MemberName 46(IN_S) 0  "a"
-                              MemberName 46(IN_S) 1  "b"
-                              MemberName 46(IN_S) 2  "c"
-                              MemberName 46(IN_S) 3  "d"
-                              MemberName 46(IN_S) 4  "ff2"
-                              MemberName 46(IN_S) 5  "ff3"
-                              MemberName 46(IN_S) 6  "ff4"
-                              Name 48  "s"
-                              Name 71  "s_ff1"
-                              Name 86  "@entryPointOutput"
-                              Name 87  "param"
-                              Name 89  "param"
-                              Name 93  "myS"
-                              MemberName 93(myS) 0  "b"
-                              MemberName 93(myS) 1  "c"
-                              MemberName 93(myS) 2  "a"
-                              MemberName 93(myS) 3  "d"
-                              Name 94  "$Global"
-                              MemberName 94($Global) 0  "s1"
-                              MemberName 94($Global) 1  "ff5"
-                              MemberName 94($Global) 2  "ff6"
-                              Name 96  ""
-                              Decorate 43(input) Location 0
-                              MemberDecorate 46(IN_S) 1 Flat
-                              MemberDecorate 46(IN_S) 2 NoPerspective
-                              MemberDecorate 46(IN_S) 2 Centroid
-                              MemberDecorate 46(IN_S) 3 Centroid
-                              Decorate 48(s) Location 1
-                              Decorate 71(s_ff1) BuiltIn FrontFacing
-                              Decorate 86(@entryPointOutput) Location 0
-                              MemberDecorate 93(myS) 0 Offset 0
-                              MemberDecorate 93(myS) 1 Offset 4
-                              MemberDecorate 93(myS) 2 Offset 16
-                              MemberDecorate 93(myS) 3 Offset 32
-                              MemberDecorate 94($Global) 0 Offset 0
-                              MemberDecorate 94($Global) 1 Offset 1620
-                              MemberDecorate 94($Global) 2 Offset 1636
-                              Decorate 94($Global) Block
-                              Decorate 96 DescriptorSet 0
+                              Name 38  "empty"
+                              Name 40  "e"
+                              Name 41  "containEmpty"
+                              MemberName 41(containEmpty) 0  "e"
+                              Name 43  "ce"
+                              Name 49  "input"
+                              Name 51  "input"
+                              Name 53  "s"
+                              Name 54  "IN_S"
+                              MemberName 54(IN_S) 0  "a"
+                              MemberName 54(IN_S) 1  "b"
+                              MemberName 54(IN_S) 2  "c"
+                              MemberName 54(IN_S) 3  "d"
+                              MemberName 54(IN_S) 4  "ff2"
+                              MemberName 54(IN_S) 5  "ff3"
+                              MemberName 54(IN_S) 6  "ff4"
+                              Name 56  "s"
+                              Name 79  "s_ff1"
+                              Name 94  "@entryPointOutput"
+                              Name 95  "param"
+                              Name 97  "param"
+                              Name 101  "myS"
+                              MemberName 101(myS) 0  "b"
+                              MemberName 101(myS) 1  "c"
+                              MemberName 101(myS) 2  "a"
+                              MemberName 101(myS) 3  "d"
+                              Name 102  "$Global"
+                              MemberName 102($Global) 0  "s1"
+                              MemberName 102($Global) 1  "ff5"
+                              MemberName 102($Global) 2  "ff6"
+                              Name 104  ""
+                              Decorate 51(input) Location 0
+                              MemberDecorate 54(IN_S) 1 Flat
+                              MemberDecorate 54(IN_S) 2 NoPerspective
+                              MemberDecorate 54(IN_S) 2 Centroid
+                              MemberDecorate 54(IN_S) 3 Centroid
+                              Decorate 56(s) Location 1
+                              Decorate 79(s_ff1) BuiltIn FrontFacing
+                              Decorate 94(@entryPointOutput) Location 0
+                              MemberDecorate 101(myS) 0 Offset 0
+                              MemberDecorate 101(myS) 1 Offset 4
+                              MemberDecorate 101(myS) 2 Offset 16
+                              MemberDecorate 101(myS) 3 Offset 32
+                              MemberDecorate 102($Global) 0 Offset 0
+                              MemberDecorate 102($Global) 1 Offset 1620
+                              MemberDecorate 102($Global) 2 Offset 1636
+                              Decorate 102($Global) Block
+                              Decorate 104 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -320,76 +337,80 @@
               32:     31(int) Constant 0
               33:     31(int) Constant 7
               36:             TypePointer Private 7(fvec4)
-              42:             TypePointer Input 7(fvec4)
-       43(input):     42(ptr) Variable Input
-        46(IN_S):             TypeStruct 7(fvec4) 9(bool) 6(float) 10(fvec2) 9(bool) 9(bool) 7(fvec4)
-              47:             TypePointer Input 46(IN_S)
-           48(s):     47(ptr) Variable Input
-              52:     31(int) Constant 1
-              53:             TypePointer Input 9(bool)
-              56:             TypePointer Function 9(bool)
-              58:     31(int) Constant 2
-              59:             TypePointer Input 6(float)
-              62:             TypePointer Function 6(float)
-              64:     31(int) Constant 3
-              65:             TypePointer Input 10(fvec2)
-              68:             TypePointer Function 10(fvec2)
-              70:     31(int) Constant 4
-       71(s_ff1):     53(ptr) Variable Input
-              74:     31(int) Constant 5
-              78:     31(int) Constant 6
-              85:             TypePointer Output 7(fvec4)
-86(@entryPointOutput):     85(ptr) Variable Output
-              92:             TypeInt 32 0
-         93(myS):             TypeStruct 92(int) 92(int) 7(fvec4) 7(fvec4)
-     94($Global):             TypeStruct 93(myS) 6(float) 6(float)
-              95:             TypePointer Uniform 94($Global)
-              96:     95(ptr) Variable Uniform
+       38(empty):             TypeStruct
+              39:             TypePointer Function 38(empty)
+41(containEmpty):             TypeStruct 38(empty)
+              42:             TypePointer Function 41(containEmpty)
+              50:             TypePointer Input 7(fvec4)
+       51(input):     50(ptr) Variable Input
+        54(IN_S):             TypeStruct 7(fvec4) 9(bool) 6(float) 10(fvec2) 9(bool) 9(bool) 7(fvec4)
+              55:             TypePointer Input 54(IN_S)
+           56(s):     55(ptr) Variable Input
+              60:     31(int) Constant 1
+              61:             TypePointer Input 9(bool)
+              64:             TypePointer Function 9(bool)
+              66:     31(int) Constant 2
+              67:             TypePointer Input 6(float)
+              70:             TypePointer Function 6(float)
+              72:     31(int) Constant 3
+              73:             TypePointer Input 10(fvec2)
+              76:             TypePointer Function 10(fvec2)
+              78:     31(int) Constant 4
+       79(s_ff1):     61(ptr) Variable Input
+              82:     31(int) Constant 5
+              86:     31(int) Constant 6
+              93:             TypePointer Output 7(fvec4)
+94(@entryPointOutput):     93(ptr) Variable Output
+             100:             TypeInt 32 0
+        101(myS):             TypeStruct 100(int) 100(int) 7(fvec4) 7(fvec4)
+    102($Global):             TypeStruct 101(myS) 6(float) 6(float)
+             103:             TypePointer Uniform 102($Global)
+             104:    103(ptr) Variable Uniform
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       41(input):      8(ptr) Variable Function
-           45(s):     12(ptr) Variable Function
-       87(param):      8(ptr) Variable Function
-       89(param):     12(ptr) Variable Function
-              44:    7(fvec4) Load 43(input)
-                              Store 41(input) 44
-              49:     42(ptr) AccessChain 48(s) 32
-              50:    7(fvec4) Load 49
-              51:      8(ptr) AccessChain 45(s) 32
-                              Store 51 50
-              54:     53(ptr) AccessChain 48(s) 52
-              55:     9(bool) Load 54
-              57:     56(ptr) AccessChain 45(s) 52
-                              Store 57 55
-              60:     59(ptr) AccessChain 48(s) 58
-              61:    6(float) Load 60
-              63:     62(ptr) AccessChain 45(s) 58
-                              Store 63 61
-              66:     65(ptr) AccessChain 48(s) 64
-              67:   10(fvec2) Load 66
-              69:     68(ptr) AccessChain 45(s) 64
-                              Store 69 67
-              72:     9(bool) Load 71(s_ff1)
-              73:     56(ptr) AccessChain 45(s) 70
-                              Store 73 72
-              75:     53(ptr) AccessChain 48(s) 70
-              76:     9(bool) Load 75
-              77:     56(ptr) AccessChain 45(s) 74
-                              Store 77 76
-              79:     53(ptr) AccessChain 48(s) 74
-              80:     9(bool) Load 79
-              81:     56(ptr) AccessChain 45(s) 78
+       49(input):      8(ptr) Variable Function
+           53(s):     12(ptr) Variable Function
+       95(param):      8(ptr) Variable Function
+       97(param):     12(ptr) Variable Function
+              52:    7(fvec4) Load 51(input)
+                              Store 49(input) 52
+              57:     50(ptr) AccessChain 56(s) 32
+              58:    7(fvec4) Load 57
+              59:      8(ptr) AccessChain 53(s) 32
+                              Store 59 58
+              62:     61(ptr) AccessChain 56(s) 60
+              63:     9(bool) Load 62
+              65:     64(ptr) AccessChain 53(s) 60
+                              Store 65 63
+              68:     67(ptr) AccessChain 56(s) 66
+              69:    6(float) Load 68
+              71:     70(ptr) AccessChain 53(s) 66
+                              Store 71 69
+              74:     73(ptr) AccessChain 56(s) 72
+              75:   10(fvec2) Load 74
+              77:     76(ptr) AccessChain 53(s) 72
+                              Store 77 75
+              80:     9(bool) Load 79(s_ff1)
+              81:     64(ptr) AccessChain 53(s) 78
                               Store 81 80
-              82:     42(ptr) AccessChain 48(s) 78
-              83:    7(fvec4) Load 82
-              84:      8(ptr) AccessChain 45(s) 33
-                              Store 84 83
-              88:    7(fvec4) Load 41(input)
-                              Store 87(param) 88
-              90:    11(IN_S) Load 45(s)
-                              Store 89(param) 90
-              91:    7(fvec4) FunctionCall 16(@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;) 87(param) 89(param)
-                              Store 86(@entryPointOutput) 91
+              83:     61(ptr) AccessChain 56(s) 78
+              84:     9(bool) Load 83
+              85:     64(ptr) AccessChain 53(s) 82
+                              Store 85 84
+              87:     61(ptr) AccessChain 56(s) 82
+              88:     9(bool) Load 87
+              89:     64(ptr) AccessChain 53(s) 86
+                              Store 89 88
+              90:     50(ptr) AccessChain 56(s) 86
+              91:    7(fvec4) Load 90
+              92:      8(ptr) AccessChain 53(s) 33
+                              Store 92 91
+              96:    7(fvec4) Load 49(input)
+                              Store 95(param) 96
+              98:    11(IN_S) Load 53(s)
+                              Store 97(param) 98
+              99:    7(fvec4) FunctionCall 16(@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;) 95(param) 97(param)
+                              Store 94(@entryPointOutput) 99
                               Return
                               FunctionEnd
 16(@PixelShaderFunction(vf4;struct-IN_S-vf4-b1-vf1-vf2-b1-b1-b1-vf41;):    7(fvec4) Function None 13
@@ -397,6 +418,8 @@
            15(s):     12(ptr) FunctionParameter
               17:             Label
           21(s3):     20(ptr) Variable Function
+           40(e):     39(ptr) Variable Function
+          43(ce):     42(ptr) Variable Function
               22:      19(FS) Load 21(s3)
               23:      19(FS) Load 21(s3)
               24:   18(bvec3) CompositeExtract 22 0
@@ -407,6 +430,9 @@
               35:    7(fvec4) Load 34
               37:     36(ptr) AccessChain 30(s2) 32
                               Store 37 35
-              38:    7(fvec4) Load 14(input)
-                              ReturnValue 38
+              44:     39(ptr) AccessChain 43(ce) 32
+              45:   38(empty) Load 44
+                              Store 40(e) 45
+              46:    7(fvec4) Load 14(input)
+                              ReturnValue 46
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.structStructName.frag.out b/Test/baseResults/hlsl.structStructName.frag.out
new file mode 100755
index 0000000..da4c400
--- /dev/null
+++ b/Test/baseResults/hlsl.structStructName.frag.out
@@ -0,0 +1,84 @@
+hlsl.structStructName.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: @main( (temp int)
+0:4    Function Parameters: 
+0:?     Sequence
+0:6      Branch: Return with expression
+0:6        s: direct index for structure (temp int)
+0:6          't' (temp structure{temp int s})
+0:6          Constant:
+0:6            0 (const int)
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      move second child to first child (temp int)
+0:?         '@entryPointOutput' (layout(location=0 ) out int)
+0:4        Function Call: @main( (temp int)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out int)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:4  Function Definition: @main( (temp int)
+0:4    Function Parameters: 
+0:?     Sequence
+0:6      Branch: Return with expression
+0:6        s: direct index for structure (temp int)
+0:6          't' (temp structure{temp int s})
+0:6          Constant:
+0:6            0 (const int)
+0:4  Function Definition: main( (temp void)
+0:4    Function Parameters: 
+0:?     Sequence
+0:4      move second child to first child (temp int)
+0:?         '@entryPointOutput' (layout(location=0 ) out int)
+0:4        Function Call: @main( (temp int)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout(location=0 ) out int)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 22
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 20
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 8  "@main("
+                              Name 10  "S"
+                              MemberName 10(S) 0  "s"
+                              Name 12  "t"
+                              Name 20  "@entryPointOutput"
+                              Decorate 20(@entryPointOutput) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeFunction 6(int)
+           10(S):             TypeStruct 6(int)
+              11:             TypePointer Function 10(S)
+              13:      6(int) Constant 0
+              14:             TypePointer Function 6(int)
+              19:             TypePointer Output 6(int)
+20(@entryPointOutput):     19(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+              21:      6(int) FunctionCall 8(@main()
+                              Store 20(@entryPointOutput) 21
+                              Return
+                              FunctionEnd
+       8(@main():      6(int) Function None 7
+               9:             Label
+           12(t):     11(ptr) Variable Function
+              15:     14(ptr) AccessChain 12(t) 13
+              16:      6(int) Load 15
+                              ReturnValue 16
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index 7f20d5f..ffa2d82 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -8,8 +8,8 @@
 0:?     Sequence
 0:8      AtomicAdd (temp void)
 0:8        indirect index (layout(row_major std430 ) buffer uint)
-0:8          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:8            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:8          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:8            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          right-shift (temp int)
@@ -23,8 +23,8 @@
 0:9        'u' (temp uint)
 0:9        AtomicAdd (temp uint)
 0:9          indirect index (layout(row_major std430 ) buffer uint)
-0:9            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:9              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -36,8 +36,8 @@
 0:9            1 (const int)
 0:10      AtomicAnd (temp void)
 0:10        indirect index (layout(row_major std430 ) buffer uint)
-0:10          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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          right-shift (temp int)
@@ -51,8 +51,8 @@
 0:11        'u' (temp uint)
 0:11        AtomicAnd (temp uint)
 0:11          indirect index (layout(row_major std430 ) buffer uint)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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            right-shift (temp int)
@@ -67,8 +67,8 @@
 0:12        Convert int to uint (temp uint)
 0:12          AtomicCompSwap (temp int)
 0:12            indirect index (layout(row_major std430 ) buffer uint)
-0:12              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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              right-shift (temp int)
@@ -84,8 +84,8 @@
 0:14        'u' (temp uint)
 0:14        AtomicExchange (temp uint)
 0:14          indirect index (layout(row_major std430 ) buffer uint)
-0:14            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:14              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:14            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:14              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            right-shift (temp int)
@@ -97,8 +97,8 @@
 0:14            1 (const int)
 0:15      AtomicMax (temp void)
 0:15        indirect index (layout(row_major std430 ) buffer uint)
-0:15          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:15            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:15          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:15            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:15            Constant:
 0:15              0 (const uint)
 0:15          right-shift (temp int)
@@ -112,8 +112,8 @@
 0:16        'u' (temp uint)
 0:16        AtomicMax (temp uint)
 0:16          indirect index (layout(row_major std430 ) buffer uint)
-0:16            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:16              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:16            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:16              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:16              Constant:
 0:16                0 (const uint)
 0:16            right-shift (temp int)
@@ -125,8 +125,8 @@
 0:16            1 (const int)
 0:17      AtomicMin (temp void)
 0:17        indirect index (layout(row_major std430 ) buffer uint)
-0:17          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:17            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:17          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:17            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:17            Constant:
 0:17              0 (const uint)
 0:17          right-shift (temp int)
@@ -140,8 +140,8 @@
 0:18        'u' (temp uint)
 0:18        AtomicMin (temp uint)
 0:18          indirect index (layout(row_major std430 ) buffer uint)
-0:18            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:18              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:18            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:18              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:18              Constant:
 0:18                0 (const uint)
 0:18            right-shift (temp int)
@@ -153,8 +153,8 @@
 0:18            1 (const int)
 0:19      AtomicOr (temp void)
 0:19        indirect index (layout(row_major std430 ) buffer uint)
-0:19          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:19            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:19          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:19            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:19            Constant:
 0:19              0 (const uint)
 0:19          right-shift (temp int)
@@ -168,8 +168,8 @@
 0:20        'u' (temp uint)
 0:20        AtomicOr (temp uint)
 0:20          indirect index (layout(row_major std430 ) buffer uint)
-0:20            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:20              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:20            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:20              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:20              Constant:
 0:20                0 (const uint)
 0:20            right-shift (temp int)
@@ -181,8 +181,8 @@
 0:20            1 (const int)
 0:21      AtomicXor (temp void)
 0:21        indirect index (layout(row_major std430 ) buffer uint)
-0:21          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:21            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:21          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:21            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:21            Constant:
 0:21              0 (const uint)
 0:21          right-shift (temp int)
@@ -196,8 +196,8 @@
 0:22        'u' (temp uint)
 0:22        AtomicXor (temp uint)
 0:22          indirect index (layout(row_major std430 ) buffer uint)
-0:22            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:22              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:22            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:22              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:22              Constant:
 0:22                0 (const uint)
 0:22            right-shift (temp int)
@@ -211,8 +211,8 @@
 0:24        Construct vec4 (temp 4-component vector of float)
 0:24          Convert uint to float (temp float)
 0:24            indirect index (layout(row_major std430 ) buffer uint)
-0:24              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:24                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:24              @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:24                'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:24                Constant:
 0:24                  0 (const uint)
 0:24              right-shift (temp int)
@@ -230,7 +230,7 @@
 0:5        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:?     'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -247,8 +247,8 @@
 0:?     Sequence
 0:8      AtomicAdd (temp void)
 0:8        indirect index (layout(row_major std430 ) buffer uint)
-0:8          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:8            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:8          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:8            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:8            Constant:
 0:8              0 (const uint)
 0:8          right-shift (temp int)
@@ -262,8 +262,8 @@
 0:9        'u' (temp uint)
 0:9        AtomicAdd (temp uint)
 0:9          indirect index (layout(row_major std430 ) buffer uint)
-0:9            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:9              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -275,8 +275,8 @@
 0:9            1 (const int)
 0:10      AtomicAnd (temp void)
 0:10        indirect index (layout(row_major std430 ) buffer uint)
-0:10          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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          right-shift (temp int)
@@ -290,8 +290,8 @@
 0:11        'u' (temp uint)
 0:11        AtomicAnd (temp uint)
 0:11          indirect index (layout(row_major std430 ) buffer uint)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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            right-shift (temp int)
@@ -306,8 +306,8 @@
 0:12        Convert int to uint (temp uint)
 0:12          AtomicCompSwap (temp int)
 0:12            indirect index (layout(row_major std430 ) buffer uint)
-0:12              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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              right-shift (temp int)
@@ -323,8 +323,8 @@
 0:14        'u' (temp uint)
 0:14        AtomicExchange (temp uint)
 0:14          indirect index (layout(row_major std430 ) buffer uint)
-0:14            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:14              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:14            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:14              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:14              Constant:
 0:14                0 (const uint)
 0:14            right-shift (temp int)
@@ -336,8 +336,8 @@
 0:14            1 (const int)
 0:15      AtomicMax (temp void)
 0:15        indirect index (layout(row_major std430 ) buffer uint)
-0:15          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:15            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:15          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:15            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:15            Constant:
 0:15              0 (const uint)
 0:15          right-shift (temp int)
@@ -351,8 +351,8 @@
 0:16        'u' (temp uint)
 0:16        AtomicMax (temp uint)
 0:16          indirect index (layout(row_major std430 ) buffer uint)
-0:16            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:16              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:16            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:16              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:16              Constant:
 0:16                0 (const uint)
 0:16            right-shift (temp int)
@@ -364,8 +364,8 @@
 0:16            1 (const int)
 0:17      AtomicMin (temp void)
 0:17        indirect index (layout(row_major std430 ) buffer uint)
-0:17          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:17            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:17          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:17            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:17            Constant:
 0:17              0 (const uint)
 0:17          right-shift (temp int)
@@ -379,8 +379,8 @@
 0:18        'u' (temp uint)
 0:18        AtomicMin (temp uint)
 0:18          indirect index (layout(row_major std430 ) buffer uint)
-0:18            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:18              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:18            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:18              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:18              Constant:
 0:18                0 (const uint)
 0:18            right-shift (temp int)
@@ -392,8 +392,8 @@
 0:18            1 (const int)
 0:19      AtomicOr (temp void)
 0:19        indirect index (layout(row_major std430 ) buffer uint)
-0:19          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:19            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:19          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:19            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:19            Constant:
 0:19              0 (const uint)
 0:19          right-shift (temp int)
@@ -407,8 +407,8 @@
 0:20        'u' (temp uint)
 0:20        AtomicOr (temp uint)
 0:20          indirect index (layout(row_major std430 ) buffer uint)
-0:20            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:20              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:20            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:20              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:20              Constant:
 0:20                0 (const uint)
 0:20            right-shift (temp int)
@@ -420,8 +420,8 @@
 0:20            1 (const int)
 0:21      AtomicXor (temp void)
 0:21        indirect index (layout(row_major std430 ) buffer uint)
-0:21          sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:21            'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:21          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:21            'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:21            Constant:
 0:21              0 (const uint)
 0:21          right-shift (temp int)
@@ -435,8 +435,8 @@
 0:22        'u' (temp uint)
 0:22        AtomicXor (temp uint)
 0:22          indirect index (layout(row_major std430 ) buffer uint)
-0:22            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:22              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:22            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:22              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:22              Constant:
 0:22                0 (const uint)
 0:22            right-shift (temp int)
@@ -450,8 +450,8 @@
 0:24        Construct vec4 (temp 4-component vector of float)
 0:24          Convert uint to float (temp float)
 0:24            indirect index (layout(row_major std430 ) buffer uint)
-0:24              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:24                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:24              @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:24                'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:24                Constant:
 0:24                  0 (const uint)
 0:24              right-shift (temp int)
@@ -469,7 +469,7 @@
 0:5        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:?     'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -486,8 +486,8 @@
                               Name 12  "@main(u1;"
                               Name 11  "pos"
                               Name 15  "sbuf"
-                              MemberName 15(sbuf) 0  "sbuf"
-                              Name 17  ""
+                              MemberName 15(sbuf) 0  "@data"
+                              Name 17  "sbuf"
                               Name 29  "u"
                               Name 78  "pos"
                               Name 80  "pos"
@@ -496,7 +496,7 @@
                               Decorate 14 ArrayStride 4
                               MemberDecorate 15(sbuf) 0 Offset 0
                               Decorate 15(sbuf) BufferBlock
-                              Decorate 17 DescriptorSet 0
+                              Decorate 17(sbuf) DescriptorSet 0
                               Decorate 80(pos) Location 0
                               Decorate 83(@entryPointOutput) Location 0
                2:             TypeVoid
@@ -509,7 +509,7 @@
               14:             TypeRuntimeArray 6(int)
         15(sbuf):             TypeStruct 14
               16:             TypePointer Uniform 15(sbuf)
-              17:     16(ptr) Variable Uniform
+        17(sbuf):     16(ptr) Variable Uniform
               18:             TypeInt 32 1
               19:     18(int) Constant 0
               20:     18(int) Constant 8
@@ -539,59 +539,59 @@
               13:             Label
            29(u):      7(ptr) Variable Function
               22:     18(int) ShiftRightArithmetic 20 21
-              24:     23(ptr) AccessChain 17 19 22
+              24:     23(ptr) AccessChain 17(sbuf) 19 22
               28:           2 AtomicIAdd 24 26 27 25
               30:     18(int) ShiftRightArithmetic 20 21
-              31:     23(ptr) AccessChain 17 19 30
+              31:     23(ptr) AccessChain 17(sbuf) 19 30
               32:      6(int) AtomicIAdd 31 26 27 25
                               Store 29(u) 32
               33:     18(int) ShiftRightArithmetic 20 21
-              34:     23(ptr) AccessChain 17 19 33
+              34:     23(ptr) AccessChain 17(sbuf) 19 33
               35:           2 AtomicAnd 34 26 27 25
               36:     18(int) ShiftRightArithmetic 20 21
-              37:     23(ptr) AccessChain 17 19 36
+              37:     23(ptr) AccessChain 17(sbuf) 19 36
               38:      6(int) AtomicAnd 37 26 27 25
                               Store 29(u) 38
               39:     18(int) ShiftRightArithmetic 20 21
-              40:     23(ptr) AccessChain 17 19 39
+              40:     23(ptr) AccessChain 17(sbuf) 19 39
               41:     18(int) AtomicCompareExchange 40 26 27 27 21 25
               42:      6(int) Bitcast 41
                               Store 29(u) 42
               43:     18(int) ShiftRightArithmetic 20 21
-              44:     23(ptr) AccessChain 17 19 43
+              44:     23(ptr) AccessChain 17(sbuf) 19 43
               45:      6(int) AtomicExchange 44 26 27 25
                               Store 29(u) 45
               46:     18(int) ShiftRightArithmetic 20 21
-              47:     23(ptr) AccessChain 17 19 46
+              47:     23(ptr) AccessChain 17(sbuf) 19 46
               48:           2 AtomicSMax 47 26 27 25
               49:     18(int) ShiftRightArithmetic 20 21
-              50:     23(ptr) AccessChain 17 19 49
+              50:     23(ptr) AccessChain 17(sbuf) 19 49
               51:      6(int) AtomicUMax 50 26 27 25
                               Store 29(u) 51
               52:     18(int) ShiftRightArithmetic 20 21
-              53:     23(ptr) AccessChain 17 19 52
+              53:     23(ptr) AccessChain 17(sbuf) 19 52
               54:           2 AtomicSMin 53 26 27 25
               55:     18(int) ShiftRightArithmetic 20 21
-              56:     23(ptr) AccessChain 17 19 55
+              56:     23(ptr) AccessChain 17(sbuf) 19 55
               57:      6(int) AtomicUMin 56 26 27 25
                               Store 29(u) 57
               58:     18(int) ShiftRightArithmetic 20 21
-              59:     23(ptr) AccessChain 17 19 58
+              59:     23(ptr) AccessChain 17(sbuf) 19 58
               60:           2 AtomicOr 59 26 27 25
               61:     18(int) ShiftRightArithmetic 20 21
-              62:     23(ptr) AccessChain 17 19 61
+              62:     23(ptr) AccessChain 17(sbuf) 19 61
               63:      6(int) AtomicOr 62 26 27 25
                               Store 29(u) 63
               64:     18(int) ShiftRightArithmetic 20 21
-              65:     23(ptr) AccessChain 17 19 64
+              65:     23(ptr) AccessChain 17(sbuf) 19 64
               66:           2 AtomicXor 65 26 27 25
               67:     18(int) ShiftRightArithmetic 20 21
-              68:     23(ptr) AccessChain 17 19 67
+              68:     23(ptr) AccessChain 17(sbuf) 19 67
               69:      6(int) AtomicXor 68 26 27 25
                               Store 29(u) 69
               70:      6(int) Load 11(pos)
               71:     18(int) ShiftRightLogical 70 21
-              72:     23(ptr) AccessChain 17 19 71
+              72:     23(ptr) AccessChain 17(sbuf) 19 71
               73:      6(int) Load 72
               74:    8(float) ConvertUToF 73
               75:    9(fvec4) CompositeConstruct 74 74 74 74
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index 57e6f0c..05db7f3 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -10,8 +10,8 @@
 0:7        move second child to first child (temp uint)
 0:7          'size' (temp uint)
 0:7          array length (temp uint)
-0:7            sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:7              'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:7            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:7              'sbuf' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:12      Branch: Return with expression
@@ -19,9 +19,9 @@
 0:10          add (temp 4-component vector of float)
 0:9            add (temp 4-component vector of float)
 0:9              Convert uint to float (temp float)
-0:9                indirect index (layout(row_major std430 ) readonly buffer uint)
-0:9                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:9                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+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 ) readonly 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)
@@ -42,14 +42,14 @@
 0:10                          2 (const int)
 0:?                     Construct vec2 (temp 2-component vector of uint)
 0:10                      indirect index (temp float)
-0:10                        sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:10                          'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:10                        @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:10                          'sbuf' (layout(row_major std430 ) readonly 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                      indirect index (temp float)
-0:10                        sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:10                          'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:10                        @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:10                          'sbuf' (layout(row_major std430 ) readonly 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)
@@ -74,14 +74,14 @@
 0:11                        2 (const int)
 0:?                   Construct vec3 (temp 3-component vector of uint)
 0:11                    indirect index (temp float)
-0:11                      sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:11                        'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:11                      @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:11                        'sbuf' (layout(row_major std430 ) readonly 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                      sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:11                        'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:11                      @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:11                        'sbuf' (layout(row_major std430 ) readonly 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)
@@ -89,8 +89,8 @@
 0:11                        Constant:
 0:11                          1 (const int)
 0:11                    indirect index (temp float)
-0:11                      sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:11                        'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:11                      @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:11                        'sbuf' (layout(row_major std430 ) readonly 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)
@@ -112,14 +112,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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)
@@ -127,8 +127,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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)
@@ -136,8 +136,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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)
@@ -155,7 +155,7 @@
 0:5        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:?     'sbuf' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -174,8 +174,8 @@
 0:7        move second child to first child (temp uint)
 0:7          'size' (temp uint)
 0:7          array length (temp uint)
-0:7            sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:7              'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:7            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:7              'sbuf' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:7              Constant:
 0:7                0 (const uint)
 0:12      Branch: Return with expression
@@ -183,9 +183,9 @@
 0:10          add (temp 4-component vector of float)
 0:9            add (temp 4-component vector of float)
 0:9              Convert uint to float (temp float)
-0:9                indirect index (layout(row_major std430 ) readonly buffer uint)
-0:9                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:9                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+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 ) readonly 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)
@@ -206,14 +206,14 @@
 0:10                          2 (const int)
 0:?                     Construct vec2 (temp 2-component vector of uint)
 0:10                      indirect index (temp float)
-0:10                        sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:10                          'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:10                        @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:10                          'sbuf' (layout(row_major std430 ) readonly 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                      indirect index (temp float)
-0:10                        sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:10                          'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:10                        @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:10                          'sbuf' (layout(row_major std430 ) readonly 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)
@@ -238,14 +238,14 @@
 0:11                        2 (const int)
 0:?                   Construct vec3 (temp 3-component vector of uint)
 0:11                    indirect index (temp float)
-0:11                      sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:11                        'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:11                      @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:11                        'sbuf' (layout(row_major std430 ) readonly 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                      sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:11                        'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:11                      @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:11                        'sbuf' (layout(row_major std430 ) readonly 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)
@@ -253,8 +253,8 @@
 0:11                        Constant:
 0:11                          1 (const int)
 0:11                    indirect index (temp float)
-0:11                      sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:11                        'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:11                      @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:11                        'sbuf' (layout(row_major std430 ) readonly 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)
@@ -276,14 +276,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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)
@@ -291,8 +291,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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)
@@ -300,8 +300,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:12                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:12                    'sbuf' (layout(row_major std430 ) readonly 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)
@@ -319,7 +319,7 @@
 0:5        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of uint sbuf})
+0:?     'sbuf' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -337,8 +337,8 @@
                               Name 11  "pos"
                               Name 14  "size"
                               Name 16  "sbuf"
-                              MemberName 16(sbuf) 0  "sbuf"
-                              Name 18  ""
+                              MemberName 16(sbuf) 0  "@data"
+                              Name 18  "sbuf"
                               Name 30  "byteAddrTemp"
                               Name 53  "byteAddrTemp"
                               Name 78  "byteAddrTemp"
@@ -350,7 +350,7 @@
                               MemberDecorate 16(sbuf) 0 NonWritable
                               MemberDecorate 16(sbuf) 0 Offset 0
                               Decorate 16(sbuf) BufferBlock
-                              Decorate 18 DescriptorSet 0
+                              Decorate 18(sbuf) DescriptorSet 0
                               Decorate 107(pos) Location 0
                               Decorate 110(@entryPointOutput) Location 0
                2:             TypeVoid
@@ -363,7 +363,7 @@
               15:             TypeRuntimeArray 6(int)
         16(sbuf):             TypeStruct 15
               17:             TypePointer Uniform 16(sbuf)
-              18:     17(ptr) Variable Uniform
+        18(sbuf):     17(ptr) Variable Uniform
               19:             TypeInt 32 1
               21:     19(int) Constant 0
               23:     19(int) Constant 2
@@ -403,11 +403,11 @@
 30(byteAddrTemp):     29(ptr) Variable Function
 53(byteAddrTemp):     29(ptr) Variable Function
 78(byteAddrTemp):     29(ptr) Variable Function
-              20:     19(int) ArrayLength 18 0
+              20:     19(int) ArrayLength 18(sbuf) 0
                               Store 14(size) 20
               22:      6(int) Load 11(pos)
               24:     19(int) ShiftRightLogical 22 23
-              26:     25(ptr) AccessChain 18 21 24
+              26:     25(ptr) AccessChain 18(sbuf) 21 24
               27:      6(int) Load 26
               28:    8(float) ConvertUToF 27
               31:      6(int) Load 11(pos)
@@ -415,11 +415,11 @@
               34:     19(int) ShiftRightLogical 33 23
                               Store 30(byteAddrTemp) 34
               35:     19(int) Load 30(byteAddrTemp)
-              36:     25(ptr) AccessChain 18 21 35
+              36:     25(ptr) AccessChain 18(sbuf) 21 35
               37:      6(int) Load 36
               38:     19(int) Load 30(byteAddrTemp)
               40:     19(int) IAdd 38 39
-              41:     25(ptr) AccessChain 18 21 40
+              41:     25(ptr) AccessChain 18(sbuf) 21 40
               42:      6(int) Load 41
               44:   43(ivec2) CompositeConstruct 37 42
               46:   45(fvec2) ConvertUToF 44
@@ -433,15 +433,15 @@
               57:     19(int) ShiftRightLogical 56 23
                               Store 53(byteAddrTemp) 57
               58:     19(int) Load 53(byteAddrTemp)
-              59:     25(ptr) AccessChain 18 21 58
+              59:     25(ptr) AccessChain 18(sbuf) 21 58
               60:      6(int) Load 59
               61:     19(int) Load 53(byteAddrTemp)
               62:     19(int) IAdd 61 39
-              63:     25(ptr) AccessChain 18 21 62
+              63:     25(ptr) AccessChain 18(sbuf) 21 62
               64:      6(int) Load 63
               65:     19(int) Load 53(byteAddrTemp)
               66:     19(int) IAdd 65 23
-              67:     25(ptr) AccessChain 18 21 66
+              67:     25(ptr) AccessChain 18(sbuf) 21 66
               68:      6(int) Load 67
               70:   69(ivec3) CompositeConstruct 60 64 68
               72:   71(fvec3) ConvertUToF 70
@@ -455,19 +455,19 @@
               82:     19(int) ShiftRightLogical 81 23
                               Store 78(byteAddrTemp) 82
               83:     19(int) Load 78(byteAddrTemp)
-              84:     25(ptr) AccessChain 18 21 83
+              84:     25(ptr) AccessChain 18(sbuf) 21 83
               85:      6(int) Load 84
               86:     19(int) Load 78(byteAddrTemp)
               87:     19(int) IAdd 86 39
-              88:     25(ptr) AccessChain 18 21 87
+              88:     25(ptr) AccessChain 18(sbuf) 21 87
               89:      6(int) Load 88
               90:     19(int) Load 78(byteAddrTemp)
               91:     19(int) IAdd 90 23
-              92:     25(ptr) AccessChain 18 21 91
+              92:     25(ptr) AccessChain 18(sbuf) 21 91
               93:      6(int) Load 92
               94:     19(int) Load 78(byteAddrTemp)
               96:     19(int) IAdd 94 95
-              97:     25(ptr) AccessChain 18 21 96
+              97:     25(ptr) AccessChain 18(sbuf) 21 96
               98:      6(int) Load 97
              100:   99(ivec4) CompositeConstruct 85 89 93 98
              101:    9(fvec4) ConvertUToF 100
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index 56b5abb..8ba0454 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -7,9 +7,9 @@
 0:12      'pos' (in uint)
 0:?     Sequence
 0:13      move second child to first child (temp float)
-0:13        indirect index (layout(row_major std430 ) coherent temp float)
-0:13          sbuf2: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of float)
-0:13            'anon@1' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of float sbuf2})
+0:13        indirect index (layout(row_major std430 ) buffer float)
+0:13          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:13            'sbuf2' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add (temp uint)
@@ -22,8 +22,8 @@
 0:17        move second child to first child (temp uint)
 0:17          'size' (temp uint)
 0:17          array length (temp uint)
-0:17            sbuf: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:17              'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:17            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:17              'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child (temp uint)
@@ -33,9 +33,9 @@
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        test: direct index for structure (temp bool)
-0:19          indirect index (layout(row_major std430 ) coherent temp structure{temp 3-component vector of float color, temp bool test})
-0:19            sbuf: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:19              'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:19          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:19            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:19              'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' (in uint)
@@ -46,17 +46,17 @@
 0:?           Construct vec4 (temp 4-component vector of float)
 0:20            add (temp 3-component vector of float)
 0:20              color: direct index for structure (temp 3-component vector of float)
-0:20                indirect index (layout(row_major std430 ) coherent temp structure{temp 3-component vector of float color, temp bool test})
-0:20                  sbuf: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:20                    'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:20                indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:20                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:20                    'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' (in uint)
 0:20                Constant:
 0:20                  0 (const int)
-0:20              indirect index (layout(row_major std430 ) coherent temp float)
-0:20                sbuf2: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of float)
-0:20                  'anon@1' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of float sbuf2})
+0:20              indirect index (layout(row_major std430 ) buffer float)
+0:20                @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:20                  'sbuf2' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' (in uint)
@@ -80,8 +80,8 @@
 0:12        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
-0:?     'anon@1' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of float sbuf2})
+0:?     'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
+0:?     'sbuf2' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -97,9 +97,9 @@
 0:12      'pos' (in uint)
 0:?     Sequence
 0:13      move second child to first child (temp float)
-0:13        indirect index (layout(row_major std430 ) coherent temp float)
-0:13          sbuf2: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of float)
-0:13            'anon@1' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of float sbuf2})
+0:13        indirect index (layout(row_major std430 ) buffer float)
+0:13          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:13            'sbuf2' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add (temp uint)
@@ -112,8 +112,8 @@
 0:17        move second child to first child (temp uint)
 0:17          'size' (temp uint)
 0:17          array length (temp uint)
-0:17            sbuf: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:17              'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:17            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:17              'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child (temp uint)
@@ -123,9 +123,9 @@
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        test: direct index for structure (temp bool)
-0:19          indirect index (layout(row_major std430 ) coherent temp structure{temp 3-component vector of float color, temp bool test})
-0:19            sbuf: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:19              'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:19          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:19            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:19              'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' (in uint)
@@ -136,17 +136,17 @@
 0:?           Construct vec4 (temp 4-component vector of float)
 0:20            add (temp 3-component vector of float)
 0:20              color: direct index for structure (temp 3-component vector of float)
-0:20                indirect index (layout(row_major std430 ) coherent temp structure{temp 3-component vector of float color, temp bool test})
-0:20                  sbuf: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:20                    'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:20                indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:20                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:20                    'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' (in uint)
 0:20                Constant:
 0:20                  0 (const int)
-0:20              indirect index (layout(row_major std430 ) coherent temp float)
-0:20                sbuf2: direct index for structure (layout(row_major std430 ) coherent buffer implicitly-sized array of float)
-0:20                  'anon@1' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of float sbuf2})
+0:20              indirect index (layout(row_major std430 ) buffer float)
+0:20                @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:20                  'sbuf2' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' (in uint)
@@ -170,8 +170,8 @@
 0:12        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
-0:?     'anon@1' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) coherent buffer implicitly-sized array of float sbuf2})
+0:?     'sbuf' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
+0:?     'sbuf2' (layout(row_major std430 ) coherent buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -188,15 +188,15 @@
                               Name 12  "@main(u1;"
                               Name 11  "pos"
                               Name 15  "sbuf2"
-                              MemberName 15(sbuf2) 0  "sbuf2"
-                              Name 17  ""
+                              MemberName 15(sbuf2) 0  "@data"
+                              Name 17  "sbuf2"
                               Name 26  "size"
                               Name 28  "sb_t"
                               MemberName 28(sb_t) 0  "color"
                               MemberName 28(sb_t) 1  "test"
                               Name 30  "sbuf"
-                              MemberName 30(sbuf) 0  "sbuf"
-                              Name 32  ""
+                              MemberName 30(sbuf) 0  "@data"
+                              Name 32  "sbuf"
                               Name 34  "stride"
                               Name 69  "pos"
                               Name 71  "pos"
@@ -206,7 +206,7 @@
                               MemberDecorate 15(sbuf2) 0 Coherent
                               MemberDecorate 15(sbuf2) 0 Offset 0
                               Decorate 15(sbuf2) BufferBlock
-                              Decorate 17 DescriptorSet 0
+                              Decorate 17(sbuf2) DescriptorSet 0
                               MemberDecorate 28(sb_t) 0 Coherent
                               MemberDecorate 28(sb_t) 0 Offset 0
                               MemberDecorate 28(sb_t) 1 Coherent
@@ -215,7 +215,7 @@
                               MemberDecorate 30(sbuf) 0 Coherent
                               MemberDecorate 30(sbuf) 0 Offset 0
                               Decorate 30(sbuf) BufferBlock
-                              Decorate 32 DescriptorSet 0
+                              Decorate 32(sbuf) DescriptorSet 0
                               Decorate 71(pos) Location 0
                               Decorate 74(@entryPointOutput) Location 0
                2:             TypeVoid
@@ -228,7 +228,7 @@
               14:             TypeRuntimeArray 8(float)
        15(sbuf2):             TypeStruct 14
               16:             TypePointer Uniform 15(sbuf2)
-              17:     16(ptr) Variable Uniform
+       17(sbuf2):     16(ptr) Variable Uniform
               18:             TypeInt 32 1
               19:     18(int) Constant 0
               21:      6(int) Constant 1
@@ -239,7 +239,7 @@
               29:             TypeRuntimeArray 28(sb_t)
         30(sbuf):             TypeStruct 29
               31:             TypePointer Uniform 30(sbuf)
-              32:     31(ptr) Variable Uniform
+        32(sbuf):     31(ptr) Variable Uniform
               35:      6(int) Constant 16
               37:     18(int) Constant 1
               38:             TypePointer Uniform 6(int)
@@ -270,23 +270,23 @@
       34(stride):      7(ptr) Variable Function
               20:      6(int) Load 11(pos)
               22:      6(int) IAdd 20 21
-              25:     24(ptr) AccessChain 17 19 22
+              25:     24(ptr) AccessChain 17(sbuf2) 19 22
                               Store 25 23
-              33:     18(int) ArrayLength 32 0
+              33:     18(int) ArrayLength 32(sbuf) 0
                               Store 26(size) 33
                               Store 34(stride) 35
               36:      6(int) Load 11(pos)
-              39:     38(ptr) AccessChain 32 19 36 37
+              39:     38(ptr) AccessChain 32(sbuf) 19 36 37
               40:      6(int) Load 39
               43:    41(bool) INotEqual 40 42
                               SelectionMerge 45 None
                               BranchConditional 43 44 61
               44:               Label
               46:      6(int)   Load 11(pos)
-              48:     47(ptr)   AccessChain 32 19 46 19
+              48:     47(ptr)   AccessChain 32(sbuf) 19 46 19
               49:   27(fvec3)   Load 48
               50:      6(int)   Load 11(pos)
-              51:     24(ptr)   AccessChain 17 19 50
+              51:     24(ptr)   AccessChain 17(sbuf2) 19 50
               52:    8(float)   Load 51
               53:   27(fvec3)   CompositeConstruct 52 52 52
               54:   27(fvec3)   FAdd 49 53
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
new file mode 100644
index 0000000..6fc1d45
--- /dev/null
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -0,0 +1,266 @@
+hlsl.structbuffer.fn.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: get(block--vu4[0]1;u1; (temp 4-component vector of uint)
+0:5    Function Parameters: 
+0:5      'sb' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:5      'bufferOffset' (in uint)
+0:?     Sequence
+0:6      Branch: Return with expression
+0:6        indirect index (layout(row_major std430 ) buffer 4-component vector of uint)
+0:6          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint)
+0:6            'sb' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          'bufferOffset' (in uint)
+0:10  Function Definition: set(block--vu4[0]1;u1;vu4; (temp void)
+0:10    Function Parameters: 
+0:10      'sb' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10      'bufferOffset' (in uint)
+0:10      'data' (in 4-component vector of uint)
+0:?     Sequence
+0:11      move second child to first child (temp 4-component vector of uint)
+0:11        indirect index (buffer 4-component vector of uint)
+0:11          @data: direct index for structure (buffer implicitly-sized array of 4-component vector of uint)
+0:11            'sb' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11            Constant:
+0:11              0 (const uint)
+0:11          'bufferOffset' (in uint)
+0:11        'data' (in 4-component vector of uint)
+0:20  Function Definition: @main(u1; (temp 4-component vector of float)
+0:20    Function Parameters: 
+0:20      'pos' (in uint)
+0:?     Sequence
+0:21      Function Call: set(block--vu4[0]1;u1;vu4; (temp void)
+0:21        'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21        Constant:
+0:21          2 (const uint)
+0:21        Function Call: get(block--vu4[0]1;u1; (temp 4-component vector of uint)
+0:21          'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21          Constant:
+0:21            3 (const uint)
+0:23      Branch: Return with expression
+0:23        Constant:
+0:23          0.000000
+0:23          0.000000
+0:23          0.000000
+0:23          0.000000
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      move second child to first child (temp uint)
+0:?         'pos' (temp uint)
+0:?         'pos' (layout(location=0 ) in uint)
+0:20      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:20        Function Call: @main(u1; (temp 4-component vector of float)
+0:?           'pos' (temp uint)
+0:?   Linker Objects
+0:?     'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf3' (layout(binding=12 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 3-component vector of uint @data})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'pos' (layout(location=0 ) in uint)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:5  Function Definition: get(block--vu4[0]1;u1; (temp 4-component vector of uint)
+0:5    Function Parameters: 
+0:5      'sb' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:5      'bufferOffset' (in uint)
+0:?     Sequence
+0:6      Branch: Return with expression
+0:6        indirect index (layout(row_major std430 ) buffer 4-component vector of uint)
+0:6          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint)
+0:6            'sb' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:6            Constant:
+0:6              0 (const uint)
+0:6          'bufferOffset' (in uint)
+0:10  Function Definition: set(block--vu4[0]1;u1;vu4; (temp void)
+0:10    Function Parameters: 
+0:10      'sb' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:10      'bufferOffset' (in uint)
+0:10      'data' (in 4-component vector of uint)
+0:?     Sequence
+0:11      move second child to first child (temp 4-component vector of uint)
+0:11        indirect index (buffer 4-component vector of uint)
+0:11          @data: direct index for structure (buffer implicitly-sized array of 4-component vector of uint)
+0:11            'sb' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:11            Constant:
+0:11              0 (const uint)
+0:11          'bufferOffset' (in uint)
+0:11        'data' (in 4-component vector of uint)
+0:20  Function Definition: @main(u1; (temp 4-component vector of float)
+0:20    Function Parameters: 
+0:20      'pos' (in uint)
+0:?     Sequence
+0:21      Function Call: set(block--vu4[0]1;u1;vu4; (temp void)
+0:21        'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21        Constant:
+0:21          2 (const uint)
+0:21        Function Call: get(block--vu4[0]1;u1; (temp 4-component vector of uint)
+0:21          'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:21          Constant:
+0:21            3 (const uint)
+0:23      Branch: Return with expression
+0:23        Constant:
+0:23          0.000000
+0:23          0.000000
+0:23          0.000000
+0:23          0.000000
+0:20  Function Definition: main( (temp void)
+0:20    Function Parameters: 
+0:?     Sequence
+0:20      move second child to first child (temp uint)
+0:?         'pos' (temp uint)
+0:?         'pos' (layout(location=0 ) in uint)
+0:20      move second child to first child (temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:20        Function Call: @main(u1; (temp 4-component vector of float)
+0:?           'pos' (temp uint)
+0:?   Linker Objects
+0:?     'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of 4-component vector of uint @data})
+0:?     'sbuf3' (layout(binding=12 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of 3-component vector of uint @data})
+0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
+0:?     'pos' (layout(location=0 ) in uint)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 71
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 59 62
+                              ExecutionMode 4 OriginUpperLeft
+                              Name 4  "main"
+                              Name 9  ""
+                              MemberName 9 0  "@data"
+                              Name 15  "get(block--vu4[0]1;u1;"
+                              Name 13  "sb"
+                              Name 14  "bufferOffset"
+                              Name 18  ""
+                              MemberName 18 0  "@data"
+                              Name 25  "set(block--vu4[0]1;u1;vu4;"
+                              Name 22  "sb"
+                              Name 23  "bufferOffset"
+                              Name 24  "data"
+                              Name 31  "@main(u1;"
+                              Name 30  "pos"
+                              Name 44  "sbuf2"
+                              Name 46  "sbuf"
+                              Name 48  "param"
+                              Name 50  "param"
+                              Name 51  "param"
+                              Name 57  "pos"
+                              Name 59  "pos"
+                              Name 62  "@entryPointOutput"
+                              Name 63  "param"
+                              Name 68  "sbuf3"
+                              MemberName 68(sbuf3) 0  "@data"
+                              Name 70  "sbuf3"
+                              Decorate 8 ArrayStride 16
+                              MemberDecorate 9 0 NonWritable
+                              MemberDecorate 9 0 Offset 0
+                              Decorate 9 BufferBlock
+                              Decorate 17 ArrayStride 16
+                              MemberDecorate 18 0 Offset 0
+                              Decorate 18 BufferBlock
+                              Decorate 44(sbuf2) DescriptorSet 0
+                              Decorate 46(sbuf) DescriptorSet 0
+                              Decorate 46(sbuf) Binding 10
+                              Decorate 59(pos) Location 0
+                              Decorate 62(@entryPointOutput) Location 0
+                              Decorate 67 ArrayStride 16
+                              MemberDecorate 68(sbuf3) 0 NonWritable
+                              MemberDecorate 68(sbuf3) 0 Offset 0
+                              Decorate 68(sbuf3) BufferBlock
+                              Decorate 70(sbuf3) DescriptorSet 0
+                              Decorate 70(sbuf3) Binding 12
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 4
+               8:             TypeRuntimeArray 7(ivec4)
+               9:             TypeStruct 8
+              10:             TypePointer Uniform 9(struct)
+              11:             TypePointer Function 6(int)
+              12:             TypeFunction 7(ivec4) 10(ptr) 11(ptr)
+              17:             TypeRuntimeArray 7(ivec4)
+              18:             TypeStruct 17
+              19:             TypePointer Uniform 18(struct)
+              20:             TypePointer Function 7(ivec4)
+              21:             TypeFunction 2 19(ptr) 11(ptr) 20(ptr)
+              27:             TypeFloat 32
+              28:             TypeVector 27(float) 4
+              29:             TypeFunction 28(fvec4) 11(ptr)
+              33:             TypeInt 32 1
+              34:     33(int) Constant 0
+              36:             TypePointer Uniform 7(ivec4)
+       44(sbuf2):     19(ptr) Variable Uniform
+              45:      6(int) Constant 2
+        46(sbuf):     10(ptr) Variable Uniform
+              47:      6(int) Constant 3
+              53:   27(float) Constant 0
+              54:   28(fvec4) ConstantComposite 53 53 53 53
+              58:             TypePointer Input 6(int)
+         59(pos):     58(ptr) Variable Input
+              61:             TypePointer Output 28(fvec4)
+62(@entryPointOutput):     61(ptr) Variable Output
+              66:             TypeVector 6(int) 3
+              67:             TypeRuntimeArray 66(ivec3)
+       68(sbuf3):             TypeStruct 67
+              69:             TypePointer Uniform 68(sbuf3)
+       70(sbuf3):     69(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+         57(pos):     11(ptr) Variable Function
+       63(param):     11(ptr) Variable Function
+              60:      6(int) Load 59(pos)
+                              Store 57(pos) 60
+              64:      6(int) Load 57(pos)
+                              Store 63(param) 64
+              65:   28(fvec4) FunctionCall 31(@main(u1;) 63(param)
+                              Store 62(@entryPointOutput) 65
+                              Return
+                              FunctionEnd
+15(get(block--vu4[0]1;u1;):    7(ivec4) Function None 12
+          13(sb):     10(ptr) FunctionParameter
+14(bufferOffset):     11(ptr) FunctionParameter
+              16:             Label
+              35:      6(int) Load 14(bufferOffset)
+              37:     36(ptr) AccessChain 13(sb) 34 35
+              38:    7(ivec4) Load 37
+                              ReturnValue 38
+                              FunctionEnd
+25(set(block--vu4[0]1;u1;vu4;):           2 Function None 21
+          22(sb):     19(ptr) FunctionParameter
+23(bufferOffset):     11(ptr) FunctionParameter
+        24(data):     20(ptr) FunctionParameter
+              26:             Label
+              41:      6(int) Load 23(bufferOffset)
+              42:    7(ivec4) Load 24(data)
+              43:     36(ptr) AccessChain 22(sb) 34 41
+                              Store 43 42
+                              Return
+                              FunctionEnd
+   31(@main(u1;):   28(fvec4) Function None 29
+         30(pos):     11(ptr) FunctionParameter
+              32:             Label
+       48(param):     11(ptr) Variable Function
+       50(param):     11(ptr) Variable Function
+       51(param):     20(ptr) Variable Function
+                              Store 48(param) 47
+              49:    7(ivec4) FunctionCall 15(get(block--vu4[0]1;u1;) 46(sbuf) 48(param)
+                              Store 50(param) 45
+                              Store 51(param) 49
+              52:           2 FunctionCall 25(set(block--vu4[0]1;u1;vu4;) 44(sbuf2) 50(param) 51(param)
+                              ReturnValue 54
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 75edf55..dea30d4 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -9,9 +9,9 @@
 0:13      Sequence
 0:13        move second child to first child (temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
 0:13          'mydata' (temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:13          indirect index (layout(binding=10 row_major std430 ) readonly buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:13            sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:13              'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:13          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:13            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:13              'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:13              Constant:
 0:13                0 (const uint)
 0:13            'pos' (in uint)
@@ -19,8 +19,8 @@
 0:17        move second child to first child (temp uint)
 0:17          'size' (temp uint)
 0:17          array length (temp uint)
-0:17            sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:17              'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:17            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:17              'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child (temp uint)
@@ -30,9 +30,9 @@
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        test: direct index for structure (temp bool)
-0:19          indirect index (layout(binding=10 row_major std430 ) readonly temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:19            sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:19              'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:19          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:19            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:19              'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' (in uint)
@@ -43,17 +43,17 @@
 0:?           Construct vec4 (temp 4-component vector of float)
 0:20            add (temp 3-component vector of float)
 0:20              color: direct index for structure (temp 3-component vector of float)
-0:20                indirect index (layout(binding=10 row_major std430 ) readonly temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:20                  sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:20                    'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:20                indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:20                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:20                    'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' (in uint)
 0:20                Constant:
 0:20                  0 (const int)
-0:20              indirect index (layout(row_major std430 ) readonly temp float)
-0:20                sbuf2: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of float)
-0:20                  'anon@1' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of float sbuf2})
+0:20              indirect index (layout(row_major std430 ) buffer float)
+0:20                @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:20                  'sbuf2' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' (in uint)
@@ -86,8 +86,8 @@
 0:12        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
-0:?     'anon@1' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of float sbuf2})
+0:?     'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
+0:?     'sbuf2' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -105,9 +105,9 @@
 0:13      Sequence
 0:13        move second child to first child (temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
 0:13          'mydata' (temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:13          indirect index (layout(binding=10 row_major std430 ) readonly buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:13            sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:13              'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:13          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:13            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:13              'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:13              Constant:
 0:13                0 (const uint)
 0:13            'pos' (in uint)
@@ -115,8 +115,8 @@
 0:17        move second child to first child (temp uint)
 0:17          'size' (temp uint)
 0:17          array length (temp uint)
-0:17            sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:17              'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:17            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:17              'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child (temp uint)
@@ -126,9 +126,9 @@
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        test: direct index for structure (temp bool)
-0:19          indirect index (layout(binding=10 row_major std430 ) readonly temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:19            sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:19              'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:19          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:19            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:19              'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' (in uint)
@@ -139,17 +139,17 @@
 0:?           Construct vec4 (temp 4-component vector of float)
 0:20            add (temp 3-component vector of float)
 0:20              color: direct index for structure (temp 3-component vector of float)
-0:20                indirect index (layout(binding=10 row_major std430 ) readonly temp structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:20                  sbuf: direct index for structure (layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
-0:20                    'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
+0:20                indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:20                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2})
+0:20                    'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' (in uint)
 0:20                Constant:
 0:20                  0 (const int)
-0:20              indirect index (layout(row_major std430 ) readonly temp float)
-0:20                sbuf2: direct index for structure (layout(row_major std430 ) readonly buffer implicitly-sized array of float)
-0:20                  'anon@1' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of float sbuf2})
+0:20              indirect index (layout(row_major std430 ) buffer float)
+0:20                @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:20                  'sbuf2' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' (in uint)
@@ -182,8 +182,8 @@
 0:12        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(binding=10 row_major std430 ) readonly buffer block{layout(binding=10 row_major std430 ) readonly buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} sbuf})
-0:?     'anon@1' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) readonly buffer implicitly-sized array of float sbuf2})
+0:?     'sbuf' (layout(binding=10 row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test, temp bool test2} @data})
+0:?     'sbuf2' (layout(row_major std430 ) readonly buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -209,13 +209,13 @@
                               MemberName 19(sb_t) 1  "test"
                               MemberName 19(sb_t) 2  "test2"
                               Name 21  "sbuf"
-                              MemberName 21(sbuf) 0  "sbuf"
-                              Name 23  ""
+                              MemberName 21(sbuf) 0  "@data"
+                              Name 23  "sbuf"
                               Name 40  "size"
                               Name 42  "stride"
                               Name 57  "sbuf2"
-                              MemberName 57(sbuf2) 0  "sbuf2"
-                              Name 59  ""
+                              MemberName 57(sbuf2) 0  "@data"
+                              Name 59  "sbuf2"
                               Name 85  "pos"
                               Name 87  "pos"
                               Name 90  "@entryPointOutput"
@@ -230,13 +230,13 @@
                               MemberDecorate 21(sbuf) 0 NonWritable
                               MemberDecorate 21(sbuf) 0 Offset 0
                               Decorate 21(sbuf) BufferBlock
-                              Decorate 23 DescriptorSet 0
-                              Decorate 23 Binding 10
+                              Decorate 23(sbuf) DescriptorSet 0
+                              Decorate 23(sbuf) Binding 10
                               Decorate 56 ArrayStride 4
                               MemberDecorate 57(sbuf2) 0 NonWritable
                               MemberDecorate 57(sbuf2) 0 Offset 0
                               Decorate 57(sbuf2) BufferBlock
-                              Decorate 59 DescriptorSet 0
+                              Decorate 59(sbuf2) DescriptorSet 0
                               Decorate 87(pos) Location 0
                               Decorate 90(@entryPointOutput) Location 0
                2:             TypeVoid
@@ -254,7 +254,7 @@
               20:             TypeRuntimeArray 19(sb_t)
         21(sbuf):             TypeStruct 20
               22:             TypePointer Uniform 21(sbuf)
-              23:     22(ptr) Variable Uniform
+        23(sbuf):     22(ptr) Variable Uniform
               24:             TypeInt 32 1
               25:     24(int) Constant 0
               27:             TypePointer Uniform 19(sb_t)
@@ -269,7 +269,7 @@
               56:             TypeRuntimeArray 8(float)
        57(sbuf2):             TypeStruct 56
               58:             TypePointer Uniform 57(sbuf2)
-              59:     58(ptr) Variable Uniform
+       59(sbuf2):     58(ptr) Variable Uniform
               61:             TypePointer Uniform 8(float)
               66:    8(float) Constant 0
               73:             TypePointer Function 8(float)
@@ -296,7 +296,7 @@
         40(size):      7(ptr) Variable Function
       42(stride):      7(ptr) Variable Function
               26:      6(int) Load 11(pos)
-              28:     27(ptr) AccessChain 23 25 26
+              28:     27(ptr) AccessChain 23(sbuf) 25 26
               29:    19(sb_t) Load 28
               30:   14(fvec3) CompositeExtract 29 0
               32:     31(ptr) AccessChain 18(mydata) 25
@@ -307,21 +307,21 @@
               37:      6(int) CompositeExtract 29 2
               39:     35(ptr) AccessChain 18(mydata) 38
                               Store 39 37
-              41:     24(int) ArrayLength 23 0
+              41:     24(int) ArrayLength 23(sbuf) 0
                               Store 40(size) 41
                               Store 42(stride) 43
               44:      6(int) Load 11(pos)
-              46:     45(ptr) AccessChain 23 25 44 34
+              46:     45(ptr) AccessChain 23(sbuf) 25 44 34
               47:      6(int) Load 46
               49:    15(bool) INotEqual 47 48
                               SelectionMerge 51 None
                               BranchConditional 49 50 72
               50:               Label
               52:      6(int)   Load 11(pos)
-              54:     53(ptr)   AccessChain 23 25 52 25
+              54:     53(ptr)   AccessChain 23(sbuf) 25 52 25
               55:   14(fvec3)   Load 54
               60:      6(int)   Load 11(pos)
-              62:     61(ptr)   AccessChain 59 25 60
+              62:     61(ptr)   AccessChain 59(sbuf2) 25 60
               63:    8(float)   Load 62
               64:   14(fvec3)   CompositeConstruct 63 63 63
               65:   14(fvec3)   FAdd 55 64
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index a319a2e..d905438 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -7,9 +7,9 @@
 0:12      'pos' (in uint)
 0:?     Sequence
 0:13      move second child to first child (temp float)
-0:13        indirect index (layout(row_major std430 ) temp float)
-0:13          sbuf2: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
-0:13            'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float sbuf2})
+0:13        indirect index (layout(row_major std430 ) buffer float)
+0:13          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:13            'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add (temp uint)
@@ -22,8 +22,8 @@
 0:17        move second child to first child (temp uint)
 0:17          'size' (temp uint)
 0:17          array length (temp uint)
-0:17            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:17              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:17            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:17              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child (temp uint)
@@ -33,9 +33,9 @@
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        test: direct index for structure (temp bool)
-0:19          indirect index (layout(row_major std430 ) temp structure{temp 3-component vector of float color, temp bool test})
-0:19            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:19              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:19          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:19            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:19              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' (in uint)
@@ -46,17 +46,17 @@
 0:?           Construct vec4 (temp 4-component vector of float)
 0:20            add (temp 3-component vector of float)
 0:20              color: direct index for structure (temp 3-component vector of float)
-0:20                indirect index (layout(row_major std430 ) temp structure{temp 3-component vector of float color, temp bool test})
-0:20                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:20                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:20                indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:20                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:20                    'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' (in uint)
 0:20                Constant:
 0:20                  0 (const int)
-0:20              indirect index (layout(row_major std430 ) temp float)
-0:20                sbuf2: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
-0:20                  'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float sbuf2})
+0:20              indirect index (layout(row_major std430 ) buffer float)
+0:20                @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:20                  'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' (in uint)
@@ -80,8 +80,8 @@
 0:12        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
-0:?     'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float sbuf2})
+0:?     'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
+0:?     'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -97,9 +97,9 @@
 0:12      'pos' (in uint)
 0:?     Sequence
 0:13      move second child to first child (temp float)
-0:13        indirect index (layout(row_major std430 ) temp float)
-0:13          sbuf2: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
-0:13            'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float sbuf2})
+0:13        indirect index (layout(row_major std430 ) buffer float)
+0:13          @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:13            'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:13            Constant:
 0:13              0 (const uint)
 0:13          add (temp uint)
@@ -112,8 +112,8 @@
 0:17        move second child to first child (temp uint)
 0:17          'size' (temp uint)
 0:17          array length (temp uint)
-0:17            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:17              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:17            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:17              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:17              Constant:
 0:17                0 (const uint)
 0:17        move second child to first child (temp uint)
@@ -123,9 +123,9 @@
 0:19      Test condition and select (temp void)
 0:19        Condition
 0:19        test: direct index for structure (temp bool)
-0:19          indirect index (layout(row_major std430 ) temp structure{temp 3-component vector of float color, temp bool test})
-0:19            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:19              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:19          indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:19            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:19              'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:19              Constant:
 0:19                0 (const uint)
 0:19            'pos' (in uint)
@@ -136,17 +136,17 @@
 0:?           Construct vec4 (temp 4-component vector of float)
 0:20            add (temp 3-component vector of float)
 0:20              color: direct index for structure (temp 3-component vector of float)
-0:20                indirect index (layout(row_major std430 ) temp structure{temp 3-component vector of float color, temp bool test})
-0:20                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
-0:20                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
+0:20                indirect index (layout(row_major std430 ) buffer structure{temp 3-component vector of float color, temp bool test})
+0:20                  @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test})
+0:20                    'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
 0:20                    Constant:
 0:20                      0 (const uint)
 0:20                  'pos' (in uint)
 0:20                Constant:
 0:20                  0 (const int)
-0:20              indirect index (layout(row_major std430 ) temp float)
-0:20                sbuf2: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
-0:20                  'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float sbuf2})
+0:20              indirect index (layout(row_major std430 ) buffer float)
+0:20                @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of float)
+0:20                  'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:20                  Constant:
 0:20                    0 (const uint)
 0:20                'pos' (in uint)
@@ -170,8 +170,8 @@
 0:12        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} sbuf})
-0:?     'anon@1' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float sbuf2})
+0:?     'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of structure{temp 3-component vector of float color, temp bool test} @data})
+0:?     'sbuf2' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of float @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -188,15 +188,15 @@
                               Name 12  "@main(u1;"
                               Name 11  "pos"
                               Name 15  "sbuf2"
-                              MemberName 15(sbuf2) 0  "sbuf2"
-                              Name 17  ""
+                              MemberName 15(sbuf2) 0  "@data"
+                              Name 17  "sbuf2"
                               Name 26  "size"
                               Name 28  "sb_t"
                               MemberName 28(sb_t) 0  "color"
                               MemberName 28(sb_t) 1  "test"
                               Name 30  "sbuf"
-                              MemberName 30(sbuf) 0  "sbuf"
-                              Name 32  ""
+                              MemberName 30(sbuf) 0  "@data"
+                              Name 32  "sbuf"
                               Name 34  "stride"
                               Name 69  "pos"
                               Name 71  "pos"
@@ -205,13 +205,13 @@
                               Decorate 14 ArrayStride 4
                               MemberDecorate 15(sbuf2) 0 Offset 0
                               Decorate 15(sbuf2) BufferBlock
-                              Decorate 17 DescriptorSet 0
+                              Decorate 17(sbuf2) DescriptorSet 0
                               MemberDecorate 28(sb_t) 0 Offset 0
                               MemberDecorate 28(sb_t) 1 Offset 12
                               Decorate 29 ArrayStride 16
                               MemberDecorate 30(sbuf) 0 Offset 0
                               Decorate 30(sbuf) BufferBlock
-                              Decorate 32 DescriptorSet 0
+                              Decorate 32(sbuf) DescriptorSet 0
                               Decorate 71(pos) Location 0
                               Decorate 74(@entryPointOutput) Location 0
                2:             TypeVoid
@@ -224,7 +224,7 @@
               14:             TypeRuntimeArray 8(float)
        15(sbuf2):             TypeStruct 14
               16:             TypePointer Uniform 15(sbuf2)
-              17:     16(ptr) Variable Uniform
+       17(sbuf2):     16(ptr) Variable Uniform
               18:             TypeInt 32 1
               19:     18(int) Constant 0
               21:      6(int) Constant 1
@@ -235,7 +235,7 @@
               29:             TypeRuntimeArray 28(sb_t)
         30(sbuf):             TypeStruct 29
               31:             TypePointer Uniform 30(sbuf)
-              32:     31(ptr) Variable Uniform
+        32(sbuf):     31(ptr) Variable Uniform
               35:      6(int) Constant 16
               37:     18(int) Constant 1
               38:             TypePointer Uniform 6(int)
@@ -266,23 +266,23 @@
       34(stride):      7(ptr) Variable Function
               20:      6(int) Load 11(pos)
               22:      6(int) IAdd 20 21
-              25:     24(ptr) AccessChain 17 19 22
+              25:     24(ptr) AccessChain 17(sbuf2) 19 22
                               Store 25 23
-              33:     18(int) ArrayLength 32 0
+              33:     18(int) ArrayLength 32(sbuf) 0
                               Store 26(size) 33
                               Store 34(stride) 35
               36:      6(int) Load 11(pos)
-              39:     38(ptr) AccessChain 32 19 36 37
+              39:     38(ptr) AccessChain 32(sbuf) 19 36 37
               40:      6(int) Load 39
               43:    41(bool) INotEqual 40 42
                               SelectionMerge 45 None
                               BranchConditional 43 44 61
               44:               Label
               46:      6(int)   Load 11(pos)
-              48:     47(ptr)   AccessChain 32 19 46 19
+              48:     47(ptr)   AccessChain 32(sbuf) 19 46 19
               49:   27(fvec3)   Load 48
               50:      6(int)   Load 11(pos)
-              51:     24(ptr)   AccessChain 17 19 50
+              51:     24(ptr)   AccessChain 17(sbuf2) 19 50
               52:    8(float)   Load 51
               53:   27(fvec3)   CompositeConstruct 52 52 52
               54:   27(fvec3)   FAdd 49 53
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 328642b..edbc677 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -10,8 +10,8 @@
 0:7        move second child to first child (temp uint)
 0:7          'size' (temp uint)
 0:7          array length (temp uint)
-0:7            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:7              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:7            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:7              'sbuf' (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:?       Sequence
@@ -23,15 +23,15 @@
 0:9              2 (const int)
 0:9        move second child to first child (temp float)
 0:9          indirect index (temp float)
-0:9            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:9              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:9                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -47,8 +47,8 @@
 0:10              2 (const int)
 0:10        move second child to first child (temp float)
 0:10          indirect index (temp float)
-0:10            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -62,14 +62,14 @@
 0:10                    2 (const int)
 0:?               Construct vec2 (temp 2-component vector of uint)
 0:10                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -80,8 +80,8 @@
 0:10              0 (const int)
 0:10        move second child to first child (temp float)
 0:10          indirect index (temp float)
-0:10            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -98,14 +98,14 @@
 0:10                    2 (const int)
 0:?               Construct vec2 (temp 2-component vector of uint)
 0:10                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -123,8 +123,8 @@
 0:11              2 (const int)
 0:11        move second child to first child (temp float)
 0:11          indirect index (temp float)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -138,14 +138,14 @@
 0:11                    2 (const int)
 0:?               Construct vec3 (temp 3-component vector of uint)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -153,8 +153,8 @@
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -165,8 +165,8 @@
 0:11              0 (const int)
 0:11        move second child to first child (temp float)
 0:11          indirect index (temp float)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -183,14 +183,14 @@
 0:11                    2 (const int)
 0:?               Construct vec3 (temp 3-component vector of uint)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -198,8 +198,8 @@
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -210,8 +210,8 @@
 0:11              1 (const int)
 0:11        move second child to first child (temp float)
 0:11          indirect index (temp float)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -228,14 +228,14 @@
 0:11                    2 (const int)
 0:?               Construct vec3 (temp 3-component vector of uint)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -243,8 +243,8 @@
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -262,8 +262,8 @@
 0:12              2 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -277,14 +277,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -292,8 +292,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -301,8 +301,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -313,8 +313,8 @@
 0:12              0 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -331,14 +331,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -346,8 +346,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -355,8 +355,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -367,8 +367,8 @@
 0:12              1 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -385,14 +385,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -400,8 +400,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -409,8 +409,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -421,8 +421,8 @@
 0:12              2 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -439,14 +439,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -454,8 +454,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -463,8 +463,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -477,8 +477,8 @@
 0:14        Construct vec4 (temp 4-component vector of float)
 0:14          Convert uint to float (temp float)
 0:14            indirect index (layout(row_major std430 ) buffer uint)
-0:14              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:14                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:14              @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:14                'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:14                Constant:
 0:14                  0 (const uint)
 0:14              right-shift (temp int)
@@ -496,7 +496,7 @@
 0:5        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:?     'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -515,8 +515,8 @@
 0:7        move second child to first child (temp uint)
 0:7          'size' (temp uint)
 0:7          array length (temp uint)
-0:7            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:7              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:7            @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:7              'sbuf' (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:?       Sequence
@@ -528,15 +528,15 @@
 0:9              2 (const int)
 0:9        move second child to first child (temp float)
 0:9          indirect index (temp float)
-0:9            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:9              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:9                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -552,8 +552,8 @@
 0:10              2 (const int)
 0:10        move second child to first child (temp float)
 0:10          indirect index (temp float)
-0:10            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -567,14 +567,14 @@
 0:10                    2 (const int)
 0:?               Construct vec2 (temp 2-component vector of uint)
 0:10                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -585,8 +585,8 @@
 0:10              0 (const int)
 0:10        move second child to first child (temp float)
 0:10          indirect index (temp float)
-0:10            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -603,14 +603,14 @@
 0:10                    2 (const int)
 0:?               Construct vec2 (temp 2-component vector of uint)
 0:10                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:10                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:10                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -628,8 +628,8 @@
 0:11              2 (const int)
 0:11        move second child to first child (temp float)
 0:11          indirect index (temp float)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -643,14 +643,14 @@
 0:11                    2 (const int)
 0:?               Construct vec3 (temp 3-component vector of uint)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -658,8 +658,8 @@
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -670,8 +670,8 @@
 0:11              0 (const int)
 0:11        move second child to first child (temp float)
 0:11          indirect index (temp float)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -688,14 +688,14 @@
 0:11                    2 (const int)
 0:?               Construct vec3 (temp 3-component vector of uint)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -703,8 +703,8 @@
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -715,8 +715,8 @@
 0:11              1 (const int)
 0:11        move second child to first child (temp float)
 0:11          indirect index (temp float)
-0:11            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -733,14 +733,14 @@
 0:11                    2 (const int)
 0:?               Construct vec3 (temp 3-component vector of uint)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -748,8 +748,8 @@
 0:11                    Constant:
 0:11                      1 (const int)
 0:11                indirect index (temp float)
-0:11                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:11                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -767,8 +767,8 @@
 0:12              2 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -782,14 +782,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -797,8 +797,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -806,8 +806,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -818,8 +818,8 @@
 0:12              0 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -836,14 +836,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -851,8 +851,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -860,8 +860,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -872,8 +872,8 @@
 0:12              1 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -890,14 +890,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -905,8 +905,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -914,8 +914,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -926,8 +926,8 @@
 0:12              2 (const int)
 0:12        move second child to first child (temp float)
 0:12          indirect index (temp float)
-0:12            sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12              'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -944,14 +944,14 @@
 0:12                    2 (const int)
 0:?               Construct vec4 (temp 4-component vector of uint)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -959,8 +959,8 @@
 0:12                    Constant:
 0:12                      1 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -968,8 +968,8 @@
 0:12                    Constant:
 0:12                      2 (const int)
 0:12                indirect index (temp float)
-0:12                  sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:12                    'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+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)
@@ -982,8 +982,8 @@
 0:14        Construct vec4 (temp 4-component vector of float)
 0:14          Convert uint to float (temp float)
 0:14            indirect index (layout(row_major std430 ) buffer uint)
-0:14              sbuf: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
-0:14                'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:14              @data: direct index for structure (layout(row_major std430 ) buffer implicitly-sized array of uint)
+0:14                'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:14                Constant:
 0:14                  0 (const uint)
 0:14              right-shift (temp int)
@@ -1001,7 +1001,7 @@
 0:5        Function Call: @main(u1; (temp 4-component vector of float)
 0:?           'pos' (temp uint)
 0:?   Linker Objects
-0:?     'anon@0' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint sbuf})
+0:?     'sbuf' (layout(row_major std430 ) buffer block{layout(row_major std430 ) buffer implicitly-sized array of uint @data})
 0:?     '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
 0:?     'pos' (layout(location=0 ) in uint)
 
@@ -1019,8 +1019,8 @@
                               Name 11  "pos"
                               Name 14  "size"
                               Name 16  "sbuf"
-                              MemberName 16(sbuf) 0  "sbuf"
-                              Name 18  ""
+                              MemberName 16(sbuf) 0  "@data"
+                              Name 18  "sbuf"
                               Name 22  "byteAddrTemp"
                               Name 35  "byteAddrTemp"
                               Name 39  "byteAddrTemp"
@@ -1035,7 +1035,7 @@
                               Decorate 15 ArrayStride 4
                               MemberDecorate 16(sbuf) 0 Offset 0
                               Decorate 16(sbuf) BufferBlock
-                              Decorate 18 DescriptorSet 0
+                              Decorate 18(sbuf) DescriptorSet 0
                               Decorate 233(pos) Location 0
                               Decorate 236(@entryPointOutput) Location 0
                2:             TypeVoid
@@ -1048,7 +1048,7 @@
               15:             TypeRuntimeArray 6(int)
         16(sbuf):             TypeStruct 15
               17:             TypePointer Uniform 16(sbuf)
-              18:     17(ptr) Variable Uniform
+        18(sbuf):     17(ptr) Variable Uniform
               19:             TypeInt 32 1
               21:             TypePointer Function 19(int)
               24:     19(int) Constant 2
@@ -1090,7 +1090,7 @@
 74(byteAddrTemp):     21(ptr) Variable Function
 129(byteAddrTemp):     21(ptr) Variable Function
 133(byteAddrTemp):     21(ptr) Variable Function
-              20:     19(int) ArrayLength 18 0
+              20:     19(int) ArrayLength 18(sbuf) 0
                               Store 14(size) 20
               23:      6(int) Load 11(pos)
               25:     19(int) ShiftRightLogical 23 24
@@ -1098,10 +1098,10 @@
               27:     19(int) Load 22(byteAddrTemp)
               28:      6(int) Load 11(pos)
               29:     19(int) ShiftRightLogical 28 24
-              31:     30(ptr) AccessChain 18 26 29
+              31:     30(ptr) AccessChain 18(sbuf) 26 29
               32:      6(int) Load 31
               33:    8(float) ConvertUToF 32
-              34:     30(ptr) AccessChain 18 26 27
+              34:     30(ptr) AccessChain 18(sbuf) 26 27
                               Store 34 33
               36:      6(int) Load 11(pos)
               37:     19(int) ShiftRightLogical 36 24
@@ -1111,15 +1111,15 @@
               41:     19(int) ShiftRightLogical 40 24
                               Store 39(byteAddrTemp) 41
               42:     19(int) Load 39(byteAddrTemp)
-              43:     30(ptr) AccessChain 18 26 42
+              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 26 47
+              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 26 38
+              54:     30(ptr) AccessChain 18(sbuf) 26 38
                               Store 54 53
               55:     19(int) Load 35(byteAddrTemp)
               56:     19(int) IAdd 55 46
@@ -1127,15 +1127,15 @@
               58:     19(int) ShiftRightLogical 57 24
                               Store 39(byteAddrTemp) 58
               59:     19(int) Load 39(byteAddrTemp)
-              60:     30(ptr) AccessChain 18 26 59
+              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
-              64:     30(ptr) AccessChain 18 26 63
+              64:     30(ptr) AccessChain 18(sbuf) 26 63
               65:      6(int) Load 64
               66:   50(ivec2) CompositeConstruct 61 65
               68:      6(int) CompositeExtract 66 1
-              69:     30(ptr) AccessChain 18 26 56
+              69:     30(ptr) AccessChain 18(sbuf) 26 56
                               Store 69 68
               71:      6(int) Load 11(pos)
               72:     19(int) ShiftRightLogical 71 24
@@ -1145,19 +1145,19 @@
               76:     19(int) ShiftRightLogical 75 24
                               Store 74(byteAddrTemp) 76
               77:     19(int) Load 74(byteAddrTemp)
-              78:     30(ptr) AccessChain 18 26 77
+              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 26 81
+              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 26 85
+              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 26 73
+              91:     30(ptr) AccessChain 18(sbuf) 26 73
                               Store 91 90
               92:     19(int) Load 70(byteAddrTemp)
               93:     19(int) IAdd 92 46
@@ -1165,19 +1165,19 @@
               95:     19(int) ShiftRightLogical 94 24
                               Store 74(byteAddrTemp) 95
               96:     19(int) Load 74(byteAddrTemp)
-              97:     30(ptr) AccessChain 18 26 96
+              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 26 100
+             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 26 104
+             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 26 93
+             109:     30(ptr) AccessChain 18(sbuf) 26 93
                               Store 109 108
              110:     19(int) Load 70(byteAddrTemp)
              111:     19(int) IAdd 110 24
@@ -1185,19 +1185,19 @@
              113:     19(int) ShiftRightLogical 112 24
                               Store 74(byteAddrTemp) 113
              114:     19(int) Load 74(byteAddrTemp)
-             115:     30(ptr) AccessChain 18 26 114
+             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 26 118
+             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 26 122
+             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 26 111
+             128:     30(ptr) AccessChain 18(sbuf) 26 111
                               Store 128 127
              130:      6(int) Load 11(pos)
              131:     19(int) ShiftRightLogical 130 24
@@ -1207,23 +1207,23 @@
              135:     19(int) ShiftRightLogical 134 24
                               Store 133(byteAddrTemp) 135
              136:     19(int) Load 133(byteAddrTemp)
-             137:     30(ptr) AccessChain 18 26 136
+             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
-             141:     30(ptr) AccessChain 18 26 140
+             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
-             145:     30(ptr) AccessChain 18 26 144
+             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 26 149
+             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 26 132
+             155:     30(ptr) AccessChain 18(sbuf) 26 132
                               Store 155 154
              156:     19(int) Load 129(byteAddrTemp)
              157:     19(int) IAdd 156 46
@@ -1231,23 +1231,23 @@
              159:     19(int) ShiftRightLogical 158 24
                               Store 133(byteAddrTemp) 159
              160:     19(int) Load 133(byteAddrTemp)
-             161:     30(ptr) AccessChain 18 26 160
+             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 26 164
+             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 26 168
+             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 26 172
+             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 26 157
+             177:     30(ptr) AccessChain 18(sbuf) 26 157
                               Store 177 176
              178:     19(int) Load 129(byteAddrTemp)
              179:     19(int) IAdd 178 24
@@ -1255,23 +1255,23 @@
              181:     19(int) ShiftRightLogical 180 24
                               Store 133(byteAddrTemp) 181
              182:     19(int) Load 133(byteAddrTemp)
-             183:     30(ptr) AccessChain 18 26 182
+             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 26 186
+             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 26 190
+             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 26 194
+             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 26 179
+             199:     30(ptr) AccessChain 18(sbuf) 26 179
                               Store 199 198
              200:     19(int) Load 129(byteAddrTemp)
              201:     19(int) IAdd 200 148
@@ -1279,27 +1279,27 @@
              203:     19(int) ShiftRightLogical 202 24
                               Store 133(byteAddrTemp) 203
              204:     19(int) Load 133(byteAddrTemp)
-             205:     30(ptr) AccessChain 18 26 204
+             205:     30(ptr) AccessChain 18(sbuf) 26 204
              206:      6(int) Load 205
              207:     19(int) Load 133(byteAddrTemp)
              208:     19(int) IAdd 207 46
-             209:     30(ptr) AccessChain 18 26 208
+             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 26 212
+             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 26 216
+             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 26 201
+             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 26 224
+             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
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index 1a74192..aeee253 100755
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -3,12 +3,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 509
+// Id's are bound by 532
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 11 22 212 288 485 503 508
+                              EntryPoint Fragment 4  "main" 11 22 212 288 485 526 531
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
@@ -24,13 +24,15 @@
                               Name 305  "b"
                               Name 342  "ub42"
                               Name 485  "FragColor"
-                              Name 503  "uiv4"
-                              Name 505  "ub"
-                              Name 508  "uuv4"
+                              Name 503  "m1"
+                              Name 510  "m2"
+                              Name 526  "uiv4"
+                              Name 528  "ub"
+                              Name 531  "uuv4"
                               Decorate 22(ui) Flat
                               Decorate 288(uui) Flat
-                              Decorate 503(uiv4) Flat
-                              Decorate 508(uuv4) Flat
+                              Decorate 526(uiv4) Flat
+                              Decorate 531(uuv4) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -65,14 +67,24 @@
              472:     18(int) Constant 17
              484:             TypePointer Output 7(fvec4)
   485(FragColor):    484(ptr) Variable Output
-             501:             TypeVector 18(int) 4
-             502:             TypePointer Input 501(ivec4)
-       503(uiv4):    502(ptr) Variable Input
-             504:             TypePointer Private 178(bool)
-         505(ub):    504(ptr) Variable Private
-             506:             TypeVector 141(int) 4
-             507:             TypePointer Input 506(ivec4)
-       508(uuv4):    507(ptr) Variable Input
+             501:             TypeMatrix 7(fvec4) 4
+             502:             TypePointer Function 501
+             504:    6(float) Constant 0
+             505:    7(fvec4) ConstantComposite 461 504 504 504
+             506:    7(fvec4) ConstantComposite 504 461 504 504
+             507:    7(fvec4) ConstantComposite 504 504 461 504
+             508:    7(fvec4) ConstantComposite 504 504 504 461
+             509:         501 ConstantComposite 505 506 507 508
+             511:    7(fvec4) ConstantComposite 504 504 504 504
+             512:         501 ConstantComposite 511 511 511 511
+             524:             TypeVector 18(int) 4
+             525:             TypePointer Input 524(ivec4)
+       526(uiv4):    525(ptr) Variable Input
+             527:             TypePointer Private 178(bool)
+         528(ub):    527(ptr) Variable Private
+             529:             TypeVector 141(int) 4
+             530:             TypePointer Input 529(ivec4)
+       531(uuv4):    530(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
             9(v):      8(ptr) Variable Function
@@ -81,6 +93,9 @@
           285(u):    284(ptr) Variable Function
           305(b):    304(ptr) Variable Function
              486:      8(ptr) Variable Function
+         503(m1):    502(ptr) Variable Function
+         510(m2):    502(ptr) Variable Function
+             513:    502(ptr) Variable Function
               12:    7(fvec4) Load 11(uv4)
               13:    7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
                               Store 9(v) 13
@@ -666,5 +681,24 @@
              489:             Label
              500:    7(fvec4) Load 486
                               Store 485(FragColor) 500
+                              Store 503(m1) 509
+                              Store 510(m2) 512
+             514:   178(bool) Load 305(b)
+                              SelectionMerge 516 None
+                              BranchConditional 514 515 518
+             515:               Label
+             517:         501   Load 503(m1)
+                                Store 513 517
+                                Branch 516
+             518:               Label
+             519:         501   Load 510(m2)
+                                Store 513 519
+                                Branch 516
+             516:             Label
+             520:      8(ptr) AccessChain 513 405
+             521:    7(fvec4) Load 520
+             522:    7(fvec4) Load 485(FragColor)
+             523:    7(fvec4) FAdd 522 521
+                              Store 485(FragColor) 523
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
index beaf906..9c23443 100755
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -13,11 +13,11 @@
                               EntryPoint Fragment 4  "main" 9
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
-                              SourceExtension  "GL_KHX_device_group"
+                              SourceExtension  "GL_EXT_device_group"
                               Name 4  "main"
                               Name 9  "color"
-                              Name 12  "gl_DeviceIndexKHR"
-                              Decorate 12(gl_DeviceIndexKHR) BuiltIn DeviceIndex
+                              Name 12  "gl_DeviceIndex"
+                              Decorate 12(gl_DeviceIndex) BuiltIn DeviceIndex
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -26,11 +26,11 @@
         9(color):      8(ptr) Variable Output
               10:             TypeInt 32 1
               11:             TypePointer UniformConstant 10(int)
-12(gl_DeviceIndexKHR):     11(ptr) Variable UniformConstant
+12(gl_DeviceIndex):     11(ptr) Variable UniformConstant
               15:    6(float) Constant 0
          4(main):           2 Function None 3
                5:             Label
-              13:     10(int) Load 12(gl_DeviceIndexKHR)
+              13:     10(int) Load 12(gl_DeviceIndex)
               14:    6(float) ConvertSToF 13
               16:    7(fvec4) CompositeConstruct 14 15 15 15
                               Store 9(color) 16
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
index bfd8b48..9571617 100755
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -13,11 +13,11 @@
                               EntryPoint Fragment 4  "main" 9
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
-                              SourceExtension  "GL_KHX_multiview"
+                              SourceExtension  "GL_EXT_multiview"
                               Name 4  "main"
                               Name 9  "color"
-                              Name 12  "gl_ViewIndexKHR"
-                              Decorate 12(gl_ViewIndexKHR) BuiltIn ViewIndex
+                              Name 12  "gl_ViewIndex"
+                              Decorate 12(gl_ViewIndex) BuiltIn ViewIndex
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -26,11 +26,11 @@
         9(color):      8(ptr) Variable Output
               10:             TypeInt 32 1
               11:             TypePointer UniformConstant 10(int)
-12(gl_ViewIndexKHR):     11(ptr) Variable UniformConstant
+12(gl_ViewIndex):     11(ptr) Variable UniformConstant
               15:    6(float) Constant 0
          4(main):           2 Function None 3
                5:             Label
-              13:     10(int) Load 12(gl_ViewIndexKHR)
+              13:     10(int) Load 12(gl_ViewIndex)
               14:    6(float) ConvertSToF 13
               16:    7(fvec4) CompositeConstruct 14 15 15 15
                               Store 9(color) 16
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
new file mode 100755
index 0000000..9559815
--- /dev/null
+++ b/Test/baseResults/spv.pushConstantAnon.vert.out
@@ -0,0 +1,66 @@
+spv.pushConstantAnon.vert
+Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 38
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 24
+                              Source GLSL 400
+                              Name 4  "main"
+                              Name 11  "Material"
+                              MemberName 11(Material) 0  "kind"
+                              MemberName 11(Material) 1  "fa"
+                              Name 13  ""
+                              Name 24  "color"
+                              Decorate 10 ArrayStride 4
+                              MemberDecorate 11(Material) 0 Offset 0
+                              MemberDecorate 11(Material) 1 Offset 4
+                              Decorate 11(Material) Block
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypeFloat 32
+               8:             TypeInt 32 0
+               9:      8(int) Constant 3
+              10:             TypeArray 7(float) 9
+    11(Material):             TypeStruct 6(int) 10
+              12:             TypePointer PushConstant 11(Material)
+              13:     12(ptr) Variable PushConstant
+              14:      6(int) Constant 0
+              15:             TypePointer PushConstant 6(int)
+              22:             TypeVector 7(float) 4
+              23:             TypePointer Output 22(fvec4)
+       24(color):     23(ptr) Variable Output
+              25:    7(float) Constant 1045220557
+              26:   22(fvec4) ConstantComposite 25 25 25 25
+              28:    7(float) Constant 1056964608
+              29:   22(fvec4) ConstantComposite 28 28 28 28
+              31:      6(int) Constant 1
+              32:             TypePointer PushConstant 7(float)
+         4(main):           2 Function None 3
+               5:             Label
+              16:     15(ptr) AccessChain 13 14
+              17:      6(int) Load 16
+                              SelectionMerge 21 None
+                              Switch 17 20 
+                                     case 1: 18
+                                     case 2: 19
+              20:               Label
+              33:     32(ptr)   AccessChain 13 31 31
+              34:    7(float)   Load 33
+              35:   22(fvec4)   CompositeConstruct 34 34 34 34
+                                Store 24(color) 35
+                                Branch 21
+              18:               Label
+                                Store 24(color) 26
+                                Branch 21
+              19:               Label
+                                Store 24(color) 29
+                                Branch 21
+              21:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out
index 6502faf..8d10b6b 100644
--- a/Test/baseResults/spv.ssbo.autoassign.frag.out
+++ b/Test/baseResults/spv.ssbo.autoassign.frag.out
@@ -16,15 +16,15 @@
                               MemberName 14(BufType) 0  "va"
                               MemberName 14(BufType) 1  "vb"
                               Name 16  "SB0"
-                              MemberName 16(SB0) 0  "SB0"
-                              Name 18  ""
+                              MemberName 16(SB0) 0  "@data"
+                              Name 18  "SB0"
                               Name 26  "TestCB"
                               MemberName 26(TestCB) 0  "W"
                               MemberName 26(TestCB) 1  "H"
                               Name 28  ""
                               Name 55  "SB1"
-                              MemberName 55(SB1) 0  "SB1"
-                              Name 57  ""
+                              MemberName 55(SB1) 0  "@data"
+                              Name 57  "SB1"
                               Name 86  "pos"
                               Name 88  "pos"
                               Name 91  "@entryPointOutput"
@@ -37,8 +37,8 @@
                               MemberDecorate 16(SB0) 0 NonWritable
                               MemberDecorate 16(SB0) 0 Offset 0
                               Decorate 16(SB0) BufferBlock
-                              Decorate 18 DescriptorSet 0
-                              Decorate 18 Binding 30
+                              Decorate 18(SB0) DescriptorSet 0
+                              Decorate 18(SB0) Binding 30
                               MemberDecorate 26(TestCB) 0 Offset 0
                               MemberDecorate 26(TestCB) 1 Offset 4
                               Decorate 26(TestCB) Block
@@ -47,8 +47,8 @@
                               Decorate 54 ArrayStride 32
                               MemberDecorate 55(SB1) 0 Offset 0
                               Decorate 55(SB1) BufferBlock
-                              Decorate 57 DescriptorSet 0
-                              Decorate 57 Binding 31
+                              Decorate 57(SB1) DescriptorSet 0
+                              Decorate 57(SB1) Binding 31
                               Decorate 88(pos) Location 0
                               Decorate 91(@entryPointOutput) Location 0
                2:             TypeVoid
@@ -61,7 +61,7 @@
               15:             TypeRuntimeArray 14(BufType)
          16(SB0):             TypeStruct 15
               17:             TypePointer Uniform 16(SB0)
-              18:     17(ptr) Variable Uniform
+         18(SB0):     17(ptr) Variable Uniform
               19:             TypeInt 32 1
               20:     19(int) Constant 0
               21:             TypeInt 32 0
@@ -77,7 +77,7 @@
               54:             TypeRuntimeArray 14(BufType)
          55(SB1):             TypeStruct 54
               56:             TypePointer Uniform 55(SB1)
-              57:     56(ptr) Variable Uniform
+         57(SB1):     56(ptr) Variable Uniform
               87:             TypePointer Input 7(fvec4)
          88(pos):     87(ptr) Variable Input
               90:             TypePointer Output 7(fvec4)
@@ -107,7 +107,7 @@
               35:     23(ptr) AccessChain 10(pos) 34
               36:    6(float) Load 35
               37:    6(float) FAdd 33 36
-              39:     38(ptr) AccessChain 18 20 37 20
+              39:     38(ptr) AccessChain 18(SB0) 20 37 20
               40:    7(fvec4) Load 39
               41:     23(ptr) AccessChain 10(pos) 22
               42:    6(float) Load 41
@@ -118,7 +118,7 @@
               47:     23(ptr) AccessChain 10(pos) 34
               48:    6(float) Load 47
               49:    6(float) FAdd 46 48
-              51:     38(ptr) AccessChain 18 20 49 50
+              51:     38(ptr) AccessChain 18(SB0) 20 49 50
               52:    7(fvec4) Load 51
               53:    7(fvec4) FAdd 40 52
                               Store 13(vTmp) 53
@@ -131,7 +131,7 @@
               64:     23(ptr) AccessChain 10(pos) 34
               65:    6(float) Load 64
               66:    6(float) FAdd 63 65
-              67:     38(ptr) AccessChain 57 20 66 20
+              67:     38(ptr) AccessChain 57(SB1) 20 66 20
               68:    7(fvec4) Load 67
               69:     23(ptr) AccessChain 10(pos) 22
               70:    6(float) Load 69
@@ -142,7 +142,7 @@
               75:     23(ptr) AccessChain 10(pos) 34
               76:    6(float) Load 75
               77:    6(float) FAdd 74 76
-              78:     38(ptr) AccessChain 57 20 77 50
+              78:     38(ptr) AccessChain 57(SB1) 20 77 50
               79:    7(fvec4) Load 78
               80:    7(fvec4) FAdd 68 79
               81:    7(fvec4) Load 13(vTmp)
diff --git a/Test/baseResults/tokenPaste.vert.out b/Test/baseResults/tokenPaste.vert.out
index 9a06c34..4bab57b 100755
--- a/Test/baseResults/tokenPaste.vert.out
+++ b/Test/baseResults/tokenPaste.vert.out
@@ -5,7 +5,10 @@
 ERROR: 0:49: '##' : combined tokens are too long 
 ERROR: 0:52: '##' : not supported for these tokens 
 ERROR: 0:69: '##' : combined token is invalid 
-ERROR: 5 compilation errors.  No code generated.
+ERROR: 0:82: 'macro expansion' : Too few args in Macro rec
+ERROR: 0:82: '##' : unexpected location 
+ERROR: 0:82: '##' : unexpected location 
+ERROR: 8 compilation errors.  No code generated.
 
 
 Shader version: 450
diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out
index 0e3057e..f4a81a0 100644
--- a/Test/baseResults/vulkan.frag.out
+++ b/Test/baseResults/vulkan.frag.out
@@ -19,7 +19,6 @@
 ERROR: 0:43: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan 
 ERROR: 0:43: 'push_constant' : can only be used with a block 
 ERROR: 0:45: 'push_constant' : cannot declare a default, can only be used on a block 
-ERROR: 0:47: 'push_constant' : requires an instance name 
 ERROR: 0:52: 'input_attachment_index' : can only be used with a subpass 
 ERROR: 0:53: 'input_attachment_index' : can only be used with a subpass 
 ERROR: 0:54: 'subpass' : requires an input_attachment_index layout qualifier 
@@ -41,7 +40,7 @@
 ERROR: 0:94: ':' :  wrong operand types: no operation ':' exists that takes a left-hand operand of type 'temp sampler2D' and a right operand of type 'temp sampler2D' (or there is no acceptable conversion)
 ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use 
 ERROR: 0:96: 'gl_NumSamples' : undeclared identifier 
-ERROR: 39 compilation errors.  No code generated.
+ERROR: 38 compilation errors.  No code generated.
 
 
 ERROR: Linking fragment stage: Only one push_constant block is allowed per stage
diff --git a/Test/hlsl.if.frag b/Test/hlsl.if.frag
index ba659e6..b62eda1 100644
--- a/Test/hlsl.if.frag
+++ b/Test/hlsl.if.frag
@@ -30,4 +30,6 @@
 	if (float ii = input.z)
 	    ++ii;
 	++ii;
+    if (float(ii) == 1.0)
+        ++ii;
 }
diff --git a/Test/hlsl.numericsuffixes.frag b/Test/hlsl.numericsuffixes.frag
index 60b2572..bccb786 100644
--- a/Test/hlsl.numericsuffixes.frag
+++ b/Test/hlsl.numericsuffixes.frag
@@ -13,6 +13,10 @@
     int   r06 = 6L;      // upper long int
     int   r07 = 071;     // octal
     uint  r08 = 072u;    // unsigned octal
+    float r09 = 1.h;     // half
+    float r10 = 1.H;     // half
+    float r11 = 1.1h;    // half
+    float r12 = 1.1H;    // half
 
     PS_OUTPUT ps_output;
     ps_output.color = r07; // gets 71 octal = 57 decimal
diff --git a/Test/hlsl.struct.frag b/Test/hlsl.struct.frag
index e602c9e..33199e0 100644
--- a/Test/hlsl.struct.frag
+++ b/Test/hlsl.struct.frag
@@ -12,7 +12,7 @@
 
 myS s1;
 
-static struct {
+static class {
     float4 i;
 } s2;
 
@@ -30,14 +30,24 @@
 float ff5 : packoffset(c101.y) : register(ps_5_0, s[5]);
 float ff6 : packoffset(c102.y) : register(s3[5]);
 
+struct empty {};

+

+struct containEmpty {

+    empty e;

+};

+
 float4 PixelShaderFunction(float4 input, IN_S s) : COLOR0
 {
-    struct FS {
+    class FS {
         bool3 b3;
     } s3;
 
     s3 == s3;
     s2.i = s.ff4;
 
+    containEmpty ce;
+    empty e;
+    e = ce.e;
+
     return input;
 }
diff --git a/Test/hlsl.structStructName.frag b/Test/hlsl.structStructName.frag
new file mode 100755
index 0000000..f8bf90c
--- /dev/null
+++ b/Test/hlsl.structStructName.frag
@@ -0,0 +1,7 @@
+struct S { int s; };

+

+int main()

+{

+    struct S t;

+    return t.s;

+}

diff --git a/Test/hlsl.structbuffer.fn.frag b/Test/hlsl.structbuffer.fn.frag
new file mode 100644
index 0000000..d043d3b
--- /dev/null
+++ b/Test/hlsl.structbuffer.fn.frag
@@ -0,0 +1,24 @@
+
+StructuredBuffer<uint4>  sbuf : register(t10);
+
+uint4 get(in StructuredBuffer<uint4> sb, uint bufferOffset)
+{
+    return sb[bufferOffset];
+}
+
+void set(in RWStructuredBuffer<uint4> sb, uint bufferOffset, uint4 data)
+{
+    sb[bufferOffset] = data;
+}
+
+RWStructuredBuffer<uint4> sbuf2;
+
+// Not shared, because of type difference.
+StructuredBuffer<uint3>  sbuf3 : register(t12);
+
+float4 main(uint pos : FOO) : SV_Target0
+{
+    set(sbuf2, 2, get(sbuf, 3));
+
+    return 0;
+}
diff --git a/Test/spv.Operations.frag b/Test/spv.Operations.frag
index 5c8c8af..52f0a30 100644
--- a/Test/spv.Operations.frag
+++ b/Test/spv.Operations.frag
@@ -135,4 +135,7 @@
     b = !b;

 

     FragColor = b ? vec4(i) + vec4(f) + v : v;

+

+    mat4 m1 = mat4(1.0), m2 = mat4(0.0);

+    FragColor += (b ? m1 : m2)[1];

 }

diff --git a/Test/spv.deviceGroup.frag b/Test/spv.deviceGroup.frag
index 9bc6b56..6496489 100644
--- a/Test/spv.deviceGroup.frag
+++ b/Test/spv.deviceGroup.frag
@@ -1,9 +1,9 @@
 #version 450
 
-#extension GL_KHX_device_group : enable
+#extension GL_EXT_device_group : enable
 
 out vec4 color;
 
 void main() {
-    color = vec4(gl_DeviceIndexKHR, 0, 0, 0);
+    color = vec4(gl_DeviceIndex, 0, 0, 0);
 }
diff --git a/Test/spv.multiView.frag b/Test/spv.multiView.frag
index 99348e2..47c2763 100644
--- a/Test/spv.multiView.frag
+++ b/Test/spv.multiView.frag
@@ -1,9 +1,9 @@
 #version 450
 
-#extension GL_KHX_multiview : enable
+#extension GL_EXT_multiview : enable
 
 out vec4 color;
 
 void main() {
-    color = vec4(gl_ViewIndexKHR, 0, 0, 0);
+    color = vec4(gl_ViewIndex, 0, 0, 0);
 }
diff --git a/Test/spv.pushConstantAnon.vert b/Test/spv.pushConstantAnon.vert
new file mode 100644
index 0000000..c4438b7
--- /dev/null
+++ b/Test/spv.pushConstantAnon.vert
@@ -0,0 +1,17 @@
+#version 400

+

+layout(push_constant) uniform Material {

+    int kind;

+    float fa[3];

+};

+

+out vec4 color;

+

+void main()

+{

+    switch (kind) {

+    case 1:  color = vec4(0.2); break;

+    case 2:  color = vec4(0.5); break;

+    default: color = vec4(fa[1]); break;

+    }

+}

diff --git a/Test/tokenPaste.vert b/Test/tokenPaste.vert
index 369b7b8..7aa113a 100644
--- a/Test/tokenPaste.vert
+++ b/Test/tokenPaste.vert
@@ -77,3 +77,6 @@
 #define M_NEST2(q) int q ## suff

 #define M_OUTER2(p) M_NEST2(p ## 20)

 uniform M_OUTER2(argPaste);

+

+#define rec(x)##

+rec(rec())
\ No newline at end of file
diff --git a/Test/vulkan.frag b/Test/vulkan.frag
index 16baf86..2b686eb 100644
--- a/Test/vulkan.frag
+++ b/Test/vulkan.frag
@@ -46,7 +46,7 @@
 

 layout(push_constant) uniform pcb2 {

     int a;

-};                                            // ERROR, no instance name

+};                                            // Okay now to have no instance name

 

 layout(input_attachment_index = 2) uniform subpassInput subD;

 layout(input_attachment_index = 3) uniform texture2D subDbad1;          // ERROR, not a texture

diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 76c6c5a..342c5d1 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -2,5 +2,5 @@
 // For the version, it uses the latest git tag followed by the number of commits.
 // For the date, it uses the current date (when then script is run).
 
-#define GLSLANG_REVISION "Overload400-PrecQual.1854"
-#define GLSLANG_DATE "27-Feb-2017"
+#define GLSLANG_REVISION "Overload400-PrecQual.1887"
+#define GLSLANG_DATE "08-Mar-2017"
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 1e99eb5..60cff60 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -3702,8 +3702,8 @@
     }
 
     if (profile != EEsProfile) {
-        commonBuiltins.append("uniform int gl_ViewIndexKHR;");
-        commonBuiltins.append("uniform int gl_DeviceIndexKHR;");  // GL_KHX_device_group
+        commonBuiltins.append("uniform int gl_ViewIndex;");
+        commonBuiltins.append("uniform int gl_DeviceIndex;");  // GL_EXT_device_group
     }
 
     // printf("%s\n", commonBuiltins.c_str());
@@ -5318,10 +5318,10 @@
         }
 
         if (profile != EEsProfile) {
-            symbolTable.setFunctionExtensions("gl_DeviceIndexKHR",  1, &E_GL_KHX_device_group);
-            BuiltInVariable("gl_DeviceIndexKHR", EbvDeviceIndex, symbolTable);
-            symbolTable.setFunctionExtensions("gl_ViewIndexKHR", 1, &E_GL_KHX_multiview);
-            BuiltInVariable("gl_ViewIndexKHR", EbvViewIndex, symbolTable);
+            symbolTable.setFunctionExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
+            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
+            symbolTable.setFunctionExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
+            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
         }
         break;
 
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 2ebd741..8abd9e3 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -1158,15 +1158,15 @@
         return nullptr;
 
     TIntermAggregate* aggNode = nullptr;
-    if (left)
+    if (left != nullptr)
         aggNode = left->getAsAggregate();
-    if (! aggNode || aggNode->getOp() != EOpNull) {
+    if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
         aggNode = new TIntermAggregate;
-        if (left)
+        if (left != nullptr)
             aggNode->getSequence().push_back(left);
     }
 
-    if (right)
+    if (right != nullptr)
         aggNode->getSequence().push_back(right);
 
     return aggNode;
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index db77b41..78f459a 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -5597,11 +5597,10 @@
 
     mergeObjectLayoutQualifiers(defaultQualification, currentBlockQualifier, true);
 
-    // "The offset qualifier can only be used on block members of blocks declared with std140 or std430 layouts."
     // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts."
-    if (currentBlockQualifier.hasAlign() || currentBlockQualifier.hasAlign()) {
+    if (currentBlockQualifier.hasAlign()) {
         if (defaultQualification.layoutPacking != ElpStd140 && defaultQualification.layoutPacking != ElpStd430) {
-            error(loc, "can only be used with std140 or std430 layout packing", "offset/align", "");
+            error(loc, "can only be used with std140 or std430 layout packing", "align", "");
             defaultQualification.layoutAlign = -1;
         }
     }
@@ -5643,9 +5642,12 @@
             }
         } else
             memberWithoutLocation = true;
-        if (memberQualifier.hasAlign()) {
+
+        // "The offset qualifier can only be used on block members of blocks declared with std140 or std430 layouts."
+        // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts."
+        if (memberQualifier.hasAlign() || memberQualifier.hasOffset()) {
             if (defaultQualification.layoutPacking != ElpStd140 && defaultQualification.layoutPacking != ElpStd430)
-                error(memberLoc, "can only be used with std140 or std430 layout packing", "align", "");
+                error(memberLoc, "can only be used with std140 or std430 layout packing", "offset/align", "");
         }
 
         TQualifier newMemberQualification = defaultQualification;
@@ -5795,11 +5797,8 @@
         error(loc, "cannot use sample qualifier on an interface block", "sample", "");
     if (qualifier.invariant)
         error(loc, "cannot use invariant qualifier on an interface block", "invariant", "");
-    if (qualifier.layoutPushConstant) {
+    if (qualifier.layoutPushConstant)
         intermediate.addPushConstantCount();
-        if (! instanceName)
-            error(loc, "requires an instance name", "push_constant", "");
-    }
 }
 
 //
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index 080a5e0..bed60fe 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -103,7 +103,11 @@
             mangledName += "M";
         break;
     case EbtStruct:
-        mangledName += "struct-";
+    case EbtBlock:
+        if (basicType == EbtStruct)
+            mangledName += "struct-";
+        else
+            mangledName += "block-";
         if (typeName)
             mangledName += *typeName;
         for (unsigned int i = 0; i < structure->size(); ++i) {
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 637ed93..6a09150 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -233,9 +233,9 @@
     extensionBehavior[E_GL_OES_texture_buffer]           = EBhDisable;
     extensionBehavior[E_GL_OES_texture_cube_map_array]   = EBhDisable;
 
-    // KHX extensions
-    extensionBehavior[E_GL_KHX_device_group]             = EBhDisable;
-    extensionBehavior[E_GL_KHX_multiview]                = EBhDisable;
+    // EXT extensions
+    extensionBehavior[E_GL_EXT_device_group]             = EBhDisable;
+    extensionBehavior[E_GL_EXT_multiview]                = EBhDisable;
 }
 
 // Get code that is not part of a shared symbol table, is specific to this shader,
@@ -687,7 +687,7 @@
 }
 
 #ifdef AMD_EXTENSIONS
-// Call for any operation needing GLSL float16 data-type support.
+// Call for any operation needing float16 data-type support.
 void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool builtIn)
 {
     if (!builtIn) {
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 26712d0..7f5d33d 100644
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -132,9 +132,9 @@
 const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
 const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
 
-// KHX extensions
-const char* const E_GL_KHX_device_group                 = "GL_KHX_device_group";
-const char* const E_GL_KHX_multiview                    = "GL_KHX_multiview";
+// EXT extensions
+const char* const E_GL_EXT_device_group                 = "GL_EXT_device_group";
+const char* const E_GL_EXT_multiview                    = "GL_EXT_multiview";
 
 // #line and #include
 const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp_style_line_directive";
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index ef8e83e..590290b 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -986,6 +986,8 @@
     int token;
     while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput) {
         token = tokenPaste(token, *ppToken);
+        if (token == tMarkerInput::marker || token == EndOfInput)
+            break;
         if (token == PpAtomIdentifier && MacroExpand(ppToken, false, newLineOkay) != 0)
             continue;
         expandedArg->putToken(token, ppToken);
@@ -1050,7 +1052,7 @@
     // TODO: preprocessor:  properly handle whitespace (or lack of it) between tokens when expanding
     if (token == PpAtomIdentifier) {
         int i;
-        for (i = mac->args.size() - 1; i >= 0; i--)
+        for (i = (int)mac->args.size() - 1; i >= 0; i--)
             if (strcmp(pp->atomStrings.getString(mac->args[i]), ppToken->name) == 0)
                 break;
         if (i >= 0) {
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
index f7b3522..f1c41ab 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -236,7 +236,7 @@
         void reset() { current = 0; }
 
     protected:
-        void putSubtoken(int);
+        void putSubtoken(char);
         int getSubtoken();
         void ungetSubtoken();
 
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index a304424..89748fb 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -101,9 +101,16 @@
 {
     bool HasDecimalOrExponent = false;
     int isDouble = 0;
+    bool generateFloat16 = false;
+    bool acceptFloat16 = parseContext.intermediate.getSource() == EShSourceHlsl;
+    bool isFloat16 = false;
+    bool requireHF = false;
 #ifdef AMD_EXTENSIONS
-    int isFloat16 = 0;
-    bool enableFloat16 = parseContext.version >= 450 && parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float);
+    if (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float)) {
+        acceptFloat16 = true;
+        generateFloat16 = true;
+        requireHF = true;
+    }
 #endif
 
     const auto saveName = [&](int ch) {
@@ -158,21 +165,27 @@
             saveName(ch2);
             isDouble = 1;
         }
+    } else if (acceptFloat16 && (ch == 'h' || ch == 'H')) {
 #ifdef AMD_EXTENSIONS
-    } else if (enableFloat16 && (ch == 'h' || ch == 'H')) {
-        parseContext.float16Check(ppToken->loc, "half floating-point suffix");
+        if (generateFloat16)
+            parseContext.float16Check(ppToken->loc, "half floating-point suffix");
+#endif
         if (!HasDecimalOrExponent)
             parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
-        int ch2 = getChar();
-        if (ch2 != 'f' && ch2 != 'F') {
-            ungetChar();
-            ungetChar();
+        if (requireHF) {
+            int ch2 = getChar();
+            if (ch2 != 'f' && ch2 != 'F') {
+                ungetChar();
+                ungetChar();
+            } else {
+                saveName(ch);
+                saveName(ch2);
+                isFloat16 = generateFloat16;
+            }
         } else {
             saveName(ch);
-            saveName(ch2);
-            isFloat16 = 1;
+            isFloat16 = generateFloat16;
         }
-#endif
     } else if (ch == 'f' || ch == 'F') {
         parseContext.profileRequires(ppToken->loc,  EEsProfile, 300, nullptr, "floating-point suffix");
         if (! parseContext.relaxedErrors())
@@ -197,10 +210,8 @@
     // Return the right token type
     if (isDouble)
         return PpAtomConstDouble;
-#ifdef AMD_EXTENSIONS
     else if (isFloat16)
         return PpAtomConstFloat16;
-#endif
     else
         return PpAtomConstFloat;
 }
@@ -216,6 +227,15 @@
     int ii = 0;
     unsigned long long ival = 0;
     bool enableInt64 = pp->parseContext.version >= 450 && pp->parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64);
+    bool acceptHalf = pp->parseContext.intermediate.getSource() == EShSourceHlsl;
+#ifdef AMD_EXTENSIONS
+    if (pp->parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float))
+        acceptHalf = true;
+#endif
+
+    const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
+                                                                     ch == 'f' || ch == 'F' ||
+                                                     (acceptHalf && (ch == 'h' || ch == 'H')); };
 
     ppToken->ival = 0;
     ppToken->i64val = 0;
@@ -380,7 +400,7 @@
                         ch = getch();
                     } while (ch >= '0' && ch <= '9');
                 }
-                if (ch == '.' || ch == 'e' || ch == 'f' || ch == 'E' || ch == 'F')
+                if (floatingPointChar(ch))
                     return pp->lFloatConst(len, ch, ppToken);
 
                 // wasn't a float, so must be octal...
@@ -435,9 +455,9 @@
                 }
                 ch = getch();
             } while (ch >= '0' && ch <= '9');
-            if (ch == '.' || ch == 'e' || ch == 'f' || ch == 'E' || ch == 'F') {
+            if (floatingPointChar(ch))
                 return pp->lFloatConst(len, ch, ppToken);
-            } else {
+            else {
                 // Finish handling signed and unsigned integers
                 int numericLen = len;
                 bool isUnsigned = false;
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
index 32d2b0b..7fa06a5 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.cpp
@@ -96,9 +96,8 @@
 namespace glslang {
 
 // push onto back of stream
-void TPpContext::TokenStream::putSubtoken(int subtoken)
+void TPpContext::TokenStream::putSubtoken(char subtoken)
 {
-    assert((subtoken & ~0xff) == 0);
     data.push_back(static_cast<unsigned char>(subtoken));
 }
 
@@ -125,7 +124,8 @@
     const char* s;
     char* str = NULL;
 
-    putSubtoken(token);
+    assert((token & ~0xff) == 0);
+    putSubtoken(static_cast<char>(token));
 
     switch (token) {
     case PpAtomIdentifier:
diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.h b/glslang/MachineIndependent/preprocessor/PpTokens.h
index 9695c2f..923fd9f 100644
--- a/glslang/MachineIndependent/preprocessor/PpTokens.h
+++ b/glslang/MachineIndependent/preprocessor/PpTokens.h
@@ -127,9 +127,7 @@
     PpAtomConstUint64,
     PpAtomConstFloat,
     PpAtomConstDouble,
-#ifdef AMD_EXTENSIONS
     PpAtomConstFloat16,
-#endif
     PpAtomConstString,
 
     // Identifiers
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 8628dff..8aa9baa 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -203,14 +203,6 @@
     EShMessages messages = EShMsgDefault // warnings and errors
     );
 
-SH_IMPORT_EXPORT int ShLink(
-    const ShHandle,               // linker object
-    const ShHandle h[],           // compiler objects to link together
-    const int numHandles,
-    ShHandle uniformMap,          // updated with new uniforms
-    short int** uniformsAccessed,  // returned with indexes of uniforms accessed
-    int* numUniformsAccessed);
-
 SH_IMPORT_EXPORT int ShLinkExt(
     const ShHandle,               // linker object
     const ShHandle h[],           // compiler objects to link together
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 910f439..689a015 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -226,10 +226,12 @@
         {"hlsl.structbuffer.atomics.frag", "main"},
         {"hlsl.structbuffer.byte.frag", "main"},
         {"hlsl.structbuffer.coherent.frag", "main"},
+        {"hlsl.structbuffer.fn.frag", "main"},
         {"hlsl.structbuffer.rw.frag", "main"},
         {"hlsl.structbuffer.rwbyte.frag", "main"},
         {"hlsl.structin.vert", "main"},
         {"hlsl.structIoFourWay.frag", "main"},
+        {"hlsl.structStructName.frag", "main"},
         {"hlsl.intrinsics.vert", "VertexShaderFunction"},
         {"hlsl.matType.frag", "PixelShaderFunction"},
         {"hlsl.matType.bool.frag", "main"},
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 10577bd..1043ecb 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -295,6 +295,7 @@
         "spv.separate.frag",
         "spv.shortCircuit.frag",
         "spv.pushConstant.vert",
+        "spv.pushConstantAnon.vert",
         "spv.subpass.frag",
         "spv.specConstant.vert",
         "spv.specConstant.comp",
diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp
index 974c895..4b4b0de 100755
--- a/hlsl/hlslGrammar.cpp
+++ b/hlsl/hlslGrammar.cpp
@@ -131,18 +131,13 @@
             continue;
 
         // externalDeclaration
-        TIntermNode* declarationNode1;
-        TIntermNode* declarationNode2 = nullptr;  // sometimes the grammar for a single declaration creates two
-        if (! acceptDeclaration(declarationNode1, declarationNode2))
+        if (! acceptDeclaration(unitNode))
             return false;
-
-        // hook it up
-        unitNode = intermediate.growAggregate(unitNode, declarationNode1);
-        if (declarationNode2 != nullptr)
-            unitNode = intermediate.growAggregate(unitNode, declarationNode2);
     }
 
     // set root of AST
+    if (unitNode && !unitNode->getAsAggregate())
+        unitNode = intermediate.growAggregate(nullptr, unitNode);
     intermediate.setTreeRoot(unitNode);
 
     return true;
@@ -292,21 +287,17 @@
 // as above.  (The 'identifier' in the first item in init_declarator list is the
 // same as 'identifier' for function declarations.)
 //
-// 'node' could get populated if the declaration creates code, like an initializer
-// or a function body.
+// This can generate more than one subtree, one per initializer or a function body.
+// All initializer subtrees are put in their own aggregate node, making one top-level
+// node for all the initializers. Each function created is a top-level node to grow
+// into the passed-in nodeList.
 //
-// 'node2' could get populated with a second decoration tree if a single source declaration
-// leads to two subtrees that need to be peers higher up.
+// If 'nodeList' is passed in as non-null, it must an aggregate to extend for
+// each top-level node the declaration creates. Otherwise, if only one top-level
+// node in generated here, that is want is returned in nodeList.
 //
-bool HlslGrammar::acceptDeclaration(TIntermNode*& node)
+bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList)
 {
-    TIntermNode* node2;
-    return acceptDeclaration(node, node2);
-}
-bool HlslGrammar::acceptDeclaration(TIntermNode*& node, TIntermNode*& node2)
-{
-    node = nullptr;
-    node2 = nullptr;
     bool list = false;
 
     // attributes
@@ -324,9 +315,8 @@
     // HLSL shaders, this will have to be a master level switch
     // As such, the sampler keyword in D3D10+ turns into an automatic sampler type, and is commonly used
     // For that reason, this line is commented out
-
-   // if (acceptSamplerDeclarationDX9(declaredType))
-   //     return true;
+    // if (acceptSamplerDeclarationDX9(declaredType))
+    //     return true;
 
     // fully_specified_type
     if (! acceptFullySpecifiedType(declaredType))
@@ -334,15 +324,22 @@
 
     // identifier
     HlslToken idToken;
+    TIntermAggregate* initializers = nullptr;
     while (acceptIdentifier(idToken)) {
-        TString* fnName = idToken.string;
+        if (peekTokenClass(EHTokLeftParen)) {
+            // looks like function parameters
+            TString* fnName = idToken.string;
 
-        // Potentially rename shader entry point function.  No-op most of the time.
-        parseContext.renameShaderFunction(fnName);
+            // Potentially rename shader entry point function.  No-op most of the time.
+            parseContext.renameShaderFunction(fnName);
 
-        // function_parameters
-        TFunction& function = *new TFunction(fnName, declaredType);
-        if (acceptFunctionParameters(function)) {
+            // function_parameters
+            TFunction& function = *new TFunction(fnName, declaredType);
+            if (!acceptFunctionParameters(function)) {
+                expected("function parameter list");
+                return false;
+            }
+
             // post_decls
             acceptPostDecls(function.getWritableType().getQualifier());
 
@@ -352,7 +349,7 @@
                     parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", "");
                 if (typedefDecl)
                     parseContext.error(idToken.loc, "function body can't be in a typedef", "{", "");
-                return acceptFunctionDefinition(function, node, node2, attributes);
+                return acceptFunctionDefinition(function, nodeList, attributes);
             } else {
                 if (typedefDecl)
                     parseContext.error(idToken.loc, "function typedefs not implemented", "{", "");
@@ -406,36 +403,13 @@
                 }
             }
 
-            TString* blockName = idToken.string;
-
-            // For structbuffers, we couldn't create the block type while accepting the
-            // template type, because we need the identifier name.  Now that we have that,
-            // we can create the buffer type.
-            // TODO: how to determine this without looking for implicit array sizes?
-            if (variableType.getBasicType() == EbtBlock) {
-                const int memberCount = variableType.getStruct()->size();
-                assert(memberCount > 0);
-
-                TType* contentType = (*variableType.getStruct())[memberCount-1].type;
-                
-                // Set the field name and qualifier from the declaration, now that we know it.
-                if (contentType->isRuntimeSizedArray()) {
-                    contentType->getQualifier() = variableType.getQualifier();
-                    blockName     = nullptr;        // this will be an anonymous block...
-                    contentType->setFieldName(*idToken.string); // field name is declaration name
-                    variableType.setTypeName(*idToken.string);
-                }
-            }
-
-            // Hand off the actual declaration
-
             // TODO: things scoped within an annotation need their own name space;
             // TODO: strings are not yet handled.
             if (variableType.getBasicType() != EbtString && parseContext.getAnnotationNestingLevel() == 0) {
                 if (typedefDecl)
                     parseContext.declareTypedef(idToken.loc, *idToken.string, variableType);
                 else if (variableType.getBasicType() == EbtBlock)
-                    parseContext.declareBlock(idToken.loc, variableType, blockName);
+                    parseContext.declareBlock(idToken.loc, variableType, idToken.string);
                 else {
                     if (variableType.getQualifier().storage == EvqUniform && ! variableType.containsOpaque()) {
                         // this isn't really an individual variable, but a member of the $Global buffer
@@ -444,10 +418,9 @@
                         // Declare the variable and add any initializer code to the AST.
                         // The top-level node is always made into an aggregate, as that's
                         // historically how the AST has been.
-                        node = intermediate.growAggregate(node,
-                                                          parseContext.declareVariable(idToken.loc, *idToken.string, variableType,
-                                                                                       expressionNode),
-                                                          idToken.loc);
+                        initializers = intermediate.growAggregate(initializers,
+                            parseContext.declareVariable(idToken.loc, *idToken.string, variableType, expressionNode),
+                            idToken.loc);
                     }
                 }
             }
@@ -459,9 +432,15 @@
         }
     };
 
-    // The top-level node is a sequence.
-    if (node != nullptr)
-        node->getAsAggregate()->setOperator(EOpSequence);
+    // The top-level initializer node is a sequence.
+    if (initializers != nullptr)
+        initializers->setOperator(EOpSequence);
+
+    // Add the initializers' aggregate to the nodeList we were handed.
+    if (nodeList)
+        nodeList = intermediate.growAggregate(nodeList, initializers);
+    else
+        nodeList = initializers;
 
     // SEMICOLON
     if (! acceptTokenClass(EHTokSemicolon)) {
@@ -492,6 +471,12 @@
     if (! acceptFullySpecifiedType(type))
         return false;
 
+    // filter out type casts
+    if (peekTokenClass(EHTokLeftParen)) {
+        recedeToken();
+        return false;
+    }
+
     // identifier
     HlslToken idToken;
     if (! acceptIdentifier(idToken)) {
@@ -1006,7 +991,7 @@
             break;
 
         // declaration
-        TIntermNode* node;
+        TIntermNode* node = nullptr;
         if (! acceptDeclaration(node)) {
             expected("declaration in annotation");
             return false;
@@ -1282,6 +1267,7 @@
         return acceptStructBufferType(type);
         break;
 
+    case EHTokClass:
     case EHTokStruct:
     case EHTokCBuffer:
     case EHTokTBuffer:
@@ -1291,9 +1277,8 @@
         // An identifier could be for a user-defined type.
         // Note we cache the symbol table lookup, to save for a later rule
         // when this is not a type.
-        token.symbol = parseContext.symbolTable.find(*token.string);
-        if (token.symbol && token.symbol->getAsVariable() && token.symbol->getAsVariable()->isUserType()) {
-            type.shallowCopy(token.symbol->getType());
+        token.symbol = parseContext.lookupUserType(*token.string, type);
+        if (token.symbol != nullptr) {
             advanceToken();
             return true;
         } else
@@ -1752,9 +1737,11 @@
 // struct
 //      : struct_type IDENTIFIER post_decls LEFT_BRACE struct_declaration_list RIGHT_BRACE
 //      | struct_type            post_decls LEFT_BRACE struct_declaration_list RIGHT_BRACE
+//      | struct_type IDENTIFIER // use of previously declared struct type
 //
 // struct_type
 //      : STRUCT
+//      | CLASS
 //      | CBUFFER
 //      | TBUFFER
 //
@@ -1770,8 +1757,9 @@
     // TBUFFER
     else if (acceptTokenClass(EHTokTBuffer))
         storageQualifier = EvqBuffer;
+    // CLASS
     // STRUCT
-    else if (! acceptTokenClass(EHTokStruct))
+    else if (! acceptTokenClass(EHTokClass) && ! acceptTokenClass(EHTokStruct))
         return false;
 
     // IDENTIFIER
@@ -1784,12 +1772,18 @@
     // post_decls
     TQualifier postDeclQualifier;
     postDeclQualifier.clear();
-    acceptPostDecls(postDeclQualifier);
+    bool postDeclsFound = acceptPostDecls(postDeclQualifier);
 
     // LEFT_BRACE
+    // struct_type IDENTIFIER
     if (! acceptTokenClass(EHTokLeftBrace)) {
-        expected("{");
-        return false;
+        if (structName.size() > 0 && !postDeclsFound && parseContext.lookupUserType(structName, type) != nullptr) {
+            // struct_type IDENTIFIER
+            return true;
+        } else {
+            expected("{");
+            return false;
+        }
     }
 
     // struct_declaration_list
@@ -1889,17 +1883,26 @@
     unsizedArray.addInnerSize(UnsizedArraySize);
     templateType->newArraySizes(unsizedArray);
     templateType->getQualifier().storage = storage;
-    templateType->getQualifier().readonly = readonly;
+
+    // field name is canonical for all structbuffers
+    templateType->setFieldName("@data");
 
     // Create block type.  TODO: hidden internal uint member when needed
+
     TTypeList* blockStruct = new TTypeList;
     TTypeLoc  member = { templateType, token.loc };
     blockStruct->push_back(member);
 
+    // This is the type of the buffer block (SSBO)
     TType blockType(blockStruct, "", templateType->getQualifier());
 
-    // It's not until we see the name during declaration that we can set the
-    // field name.  That happens in HlslGrammar::acceptDeclaration.
+    blockType.getQualifier().storage = storage;
+    blockType.getQualifier().readonly = readonly;
+
+    // We may have created an equivalent type before, in which case we should use its
+    // deep structure.
+    parseContext.shareStructBufferType(blockType);
+
     type.shallowCopy(blockType);
 
     return true;
@@ -2113,20 +2116,28 @@
 
 // Do the work to create the function definition in addition to
 // parsing the body (compound_statement).
-bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& node, TIntermNode*& node2, const TAttributeMap& attributes)
+bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& nodeList, const TAttributeMap& attributes)
 {
     TFunction& functionDeclarator = parseContext.handleFunctionDeclarator(token.loc, function, false /* not prototype */);
     TSourceLoc loc = token.loc;
 
+    // we might get back and entry-point
+    TIntermNode* entryPointNode = nullptr;
+
     // This does a pushScope()
-    node = parseContext.handleFunctionDefinition(loc, functionDeclarator, attributes, node2);
+    TIntermNode* functionNode = parseContext.handleFunctionDefinition(loc, functionDeclarator, attributes,
+                                                                      entryPointNode);
 
     // compound_statement
     TIntermNode* functionBody = nullptr;
     if (! acceptCompoundStatement(functionBody))
         return false;
 
-    parseContext.handleFunctionBody(loc, functionDeclarator, functionBody, node);
+    parseContext.handleFunctionBody(loc, functionDeclarator, functionBody, functionNode);
+
+    // Hook up the 1 or 2 function definitions.
+    nodeList = intermediate.growAggregate(nodeList, functionNode);
+    nodeList = intermediate.growAggregate(nodeList, entryPointNode);
 
     return true;
 }
@@ -2478,6 +2489,7 @@
 //      | function_call
 //      | postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET
 //      | postfix_expression DOT IDENTIFIER
+//      | postfix_expression DOT IDENTIFIER arguments
 //      | postfix_expression INC_OP
 //      | postfix_expression DEC_OP
 //
@@ -2527,8 +2539,8 @@
         ~tFinalize() { parseContext.finalizeFlattening(); }
         HlslParseContext& parseContext;
     private:
-        const tFinalize& operator=(const tFinalize& f);
-        tFinalize(const tFinalize& f);
+        const tFinalize& operator=(const tFinalize&) { return *this; }
+        tFinalize(const tFinalize& f) : parseContext(f.parseContext) { }
     } finalize(parseContext);
 
     // Initialize the flattening accumulation data, so we can track data across multiple bracket or
@@ -2559,23 +2571,29 @@
         case EOpIndexDirectStruct:
         {
             // DOT IDENTIFIER
-            // includes swizzles and struct members
+            // includes swizzles, member variables, and member functions
             HlslToken field;
             if (! acceptIdentifier(field)) {
                 expected("swizzle or member");
                 return false;
             }
 
-            TIntermTyped* base = node; // preserve for method function calls
-            node = parseContext.handleDotDereference(field.loc, node, *field.string);
+            if (peekTokenClass(EHTokLeftParen)) {
+                // member function
+                TIntermTyped* thisNode = node;
+                node = parseContext.handleBuiltInMethod(field.loc, node, *field.string);
+                if (node == nullptr) {
+                    expected("built-in method");
+                    return false;
+                }
 
-            // In the event of a method node, we look for an open paren and accept the function call.
-            if (node != nullptr && node->getAsMethodNode() != nullptr && peekTokenClass(EHTokLeftParen)) {
-                if (! acceptFunctionCall(field, node, base)) {
+                // arguments
+                if (! acceptFunctionCall(field, node, thisNode)) {
                     expected("function parameters");
                     return false;
                 }
-            }
+            } else
+                node = parseContext.handleDotDereference(field.loc, node, *field.string);
 
             break;
         }
@@ -3264,7 +3282,7 @@
         TSourceLoc loc = token.loc;
         TIntermTyped* sizeExpr = nullptr;
 
-        // Array sizing expression is optional.  If ommitted, array will be later sized by initializer list.
+        // Array sizing expression is optional.  If omitted, array will be later sized by initializer list.
         const bool hasArraySize = acceptAssignmentExpression(sizeExpr);
 
         if (! acceptTokenClass(EHTokRightBracket)) {
@@ -3289,11 +3307,18 @@
 //        COLON LAYOUT layout_qualifier_list
 //        annotations // optional
 //
-void HlslGrammar::acceptPostDecls(TQualifier& qualifier)
+// Return true if any tokens were accepted. That is,
+// false can be returned on successfully recognizing nothing,
+// not necessarily meaning bad syntax.
+//
+bool HlslGrammar::acceptPostDecls(TQualifier& qualifier)
 {
+    bool found = false;
+
     do {
         // COLON
         if (acceptTokenClass(EHTokColon)) {
+            found = true;
             HlslToken idToken;
             if (peekTokenClass(EHTokLayout))
                 acceptLayoutQualifierList(qualifier);
@@ -3301,18 +3326,18 @@
                 // PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN
                 if (! acceptTokenClass(EHTokLeftParen)) {
                     expected("(");
-                    return;
+                    return false;
                 }
                 HlslToken locationToken;
                 if (! acceptIdentifier(locationToken)) {
                     expected("c[subcomponent][.component]");
-                    return;
+                    return false;
                 }
                 HlslToken componentToken;
                 if (acceptTokenClass(EHTokDot)) {
                     if (! acceptIdentifier(componentToken)) {
                         expected("component");
-                        return;
+                        return false;
                     }
                 }
                 if (! acceptTokenClass(EHTokRightParen)) {
@@ -3322,19 +3347,19 @@
                 parseContext.handlePackOffset(locationToken.loc, qualifier, *locationToken.string, componentToken.string);
             } else if (! acceptIdentifier(idToken)) {
                 expected("layout, semantic, packoffset, or register");
-                return;
+                return false;
             } else if (*idToken.string == "register") {
                 // REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt (COMMA SPACEN)opt RIGHT_PAREN
                 // LEFT_PAREN
                 if (! acceptTokenClass(EHTokLeftParen)) {
                     expected("(");
-                    return;
+                    return false;
                 }
                 HlslToken registerDesc;  // for Type#
                 HlslToken profile;
                 if (! acceptIdentifier(registerDesc)) {
                     expected("register number description");
-                    return;
+                    return false;
                 }
                 if (registerDesc.string->size() > 1 && !isdigit((*registerDesc.string)[1]) &&
                                                        acceptTokenClass(EHTokComma)) {
@@ -3343,7 +3368,7 @@
                     profile = registerDesc;
                     if (! acceptIdentifier(registerDesc)) {
                         expected("register number description");
-                        return;
+                        return false;
                     }
                 }
                 int subComponent = 0;
@@ -3351,7 +3376,7 @@
                     // LEFT_BRACKET subcomponent RIGHT_BRACKET
                     if (! peekTokenClass(EHTokIntConstant)) {
                         expected("literal integer");
-                        return;
+                        return false;
                     }
                     subComponent = token.i;
                     advanceToken();
@@ -3365,7 +3390,7 @@
                 if (acceptTokenClass(EHTokComma)) {
                     if (! acceptIdentifier(spaceDesc)) {
                         expected ("space identifier");
-                        return;
+                        return false;
                     }
                 }
                 // RIGHT_PAREN
@@ -3378,12 +3403,15 @@
                 // semantic, in idToken.string
                 parseContext.handleSemantic(idToken.loc, qualifier, *idToken.string);
             }
-        } else if (peekTokenClass(EHTokLeftAngle))
+        } else if (peekTokenClass(EHTokLeftAngle)) {
+            found = true;
             acceptAnnotations(qualifier);
-        else
+        } else
             break;
 
     } while (true);
+
+    return found;
 }
 
 } // end namespace glslang
diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h
index c8753fd..8ff4e2e 100755
--- a/hlsl/hlslGrammar.h
+++ b/hlsl/hlslGrammar.h
@@ -65,7 +65,6 @@
         bool acceptIdentifier(HlslToken&);
         bool acceptCompilationUnit();
         bool acceptDeclaration(TIntermNode*&);
-        bool acceptDeclaration(TIntermNode*& node1, TIntermNode*& node2);
         bool acceptControlDeclaration(TIntermNode*& node);
         bool acceptSamplerDeclarationDX9(TType&);
         bool acceptSamplerState();
@@ -88,7 +87,7 @@
         bool acceptStructDeclarationList(TTypeList*&);
         bool acceptFunctionParameters(TFunction&);
         bool acceptParameterDeclaration(TFunction&);
-        bool acceptFunctionDefinition(TFunction&, TIntermNode*& node1, TIntermNode*& node2, const TAttributeMap&);
+        bool acceptFunctionDefinition(TFunction&, TIntermNode*& nodeList, const TAttributeMap&);
         bool acceptParenExpression(TIntermTyped*&);
         bool acceptExpression(TIntermTyped*&);
         bool acceptInitializer(TIntermTyped*&);
@@ -114,7 +113,7 @@
         bool acceptCaseLabel(TIntermNode*&);
         bool acceptDefaultLabel(TIntermNode*&);
         void acceptArraySpecifier(TArraySizes*&);
-        void acceptPostDecls(TQualifier&);
+        bool acceptPostDecls(TQualifier&);
         bool acceptDefaultParameterDeclaration(const TType&, TIntermTyped*&);
 
         HlslParseContext& parseContext;  // state of parsing and helper functions for building the intermediate
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index dcf4d96..e0dcc09 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -691,6 +691,22 @@
         }
     }
 
+    // Handle operator[] on structured buffers: this indexes into the array element of the buffer.
+    // indexStructBufferContent returns nullptr if it isn't a structuredbuffer (SSBO).
+    TIntermTyped* sbArray = indexStructBufferContent(loc, base);
+    if (sbArray != nullptr) {
+        if (sbArray == nullptr)
+            return nullptr;
+
+        // Now we'll apply the [] index to that array
+        const TOperator idxOp = (index->getQualifier().storage == EvqConst) ? EOpIndexDirect : EOpIndexIndirect;
+
+        TIntermTyped* element = intermediate.addIndex(idxOp, sbArray, index, loc);
+        const TType derefType(sbArray->getType(), 0);
+        element->setType(derefType);
+        return element;
+    }
+
     return nullptr;
 }
 
@@ -846,49 +862,18 @@
 }
 
 //
-// Handle seeing a base.field dereference in the grammar.
+// Handle seeing a base.field dereference in the grammar, where 'field' is a
+// swizzle or member variable.
 //
 TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TIntermTyped* base, const TString& field)
 {
     variableCheck(base);
 
-    //
-    // methods can't be resolved until we later see the function-calling syntax.
-    // Save away the name in the AST for now.  Processing is completed in
-    // handleLengthMethod(), etc.
-    //
-    if (field == "length") {
-        return intermediate.addMethod(base, TType(EbtInt), &field, loc);
-    } else if (isSamplerMethod(field) && base->getType().getBasicType() == EbtSampler) {
-        // If it's not a method on a sampler object, we fall through to let other objects have a go.
-        const TSampler& sampler = base->getType().getSampler();
-        if (! sampler.isPureSampler()) {
-            const int vecSize = sampler.isShadow() ? 1 : 4; // TODO: handle arbitrary sample return sizes
-            return intermediate.addMethod(base, TType(sampler.type, EvqTemporary, vecSize), &field, loc);
-        }
-    } else if (isStructBufferMethod(field) && 
-               base->getType().isRuntimeSizedArray() &&
-               (base->getQualifier().storage == EvqUniform || base->getQualifier().storage == EvqBuffer)) {
-        TType retType(base->getType(), 0);
-        return intermediate.addMethod(base, retType, &field, loc);
-    } else if (field == "Append" ||
-               field == "RestartStrip") {
-        // We cannot check the type here: it may be sanitized if we're not compiling a geometry shader, but
-        // the code is around in the shader source.
-        return intermediate.addMethod(base, TType(EbtVoid), &field, loc);
-    }
-
-    // It's not .length() if we get to here.
-
     if (base->isArray()) {
         error(loc, "cannot apply to an array:", ".", field.c_str());
-
         return base;
     }
 
-    // It's neither an array nor .length() if we get here,
-    // leaving swizzles and struct/block dereferences.
-
     TIntermTyped* result = base;
     if (base->isVector() || base->isScalar()) {
         TSwizzleSelectors<TVectorSelector> selectors;
@@ -997,6 +982,40 @@
     return result;
 }
 
+//
+// Handle seeing a base.field dereference in the grammar, where 'field' is a
+// built-in method name.
+//
+// Return nullptr if 'field' is not a built-in method.
+//
+TIntermTyped* HlslParseContext::handleBuiltInMethod(const TSourceLoc& loc, TIntermTyped* base, const TString& field)
+{
+    variableCheck(base);
+
+    //
+    // Methods can't be resolved until we finish seeing the function-calling syntax.
+    // Save away the name in the AST for now.
+    //
+    if (isSamplerMethod(field) && base->getType().getBasicType() == EbtSampler) {
+        // If it's not a method on a sampler object, we fall through to let other objects have a go.
+        const TSampler& sampler = base->getType().getSampler();
+        if (! sampler.isPureSampler()) {
+            const int vecSize = sampler.isShadow() ? 1 : 4; // TODO: handle arbitrary sample return sizes
+            return intermediate.addMethod(base, TType(sampler.type, EvqTemporary, vecSize), &field, loc);
+        }
+    } else if (isStructBufferType(base->getType())) {
+        TType retType(base->getType(), 0);
+        return intermediate.addMethod(base, retType, &field, loc);
+    } else if (field == "Append" ||
+               field == "RestartStrip") {
+        // We cannot check the type here: it may be sanitized if we're not compiling a geometry shader, but
+        // the code is around in the shader source.
+        return intermediate.addMethod(base, TType(EbtVoid), &field, loc);
+    }
+
+    return nullptr;
+}
+
 // Split the type of the given node into two structs:
 //   1. interstage IO
 //   2. everything else
@@ -1507,6 +1526,8 @@
 // Handle seeing the function prototype in front of a function definition in the grammar.
 // The body is handled after this function returns.
 //
+// Returns an aggregate of parameter-symbol nodes.
+//
 TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& loc, TFunction& function,
                                                              const TAttributeMap& attributes, TIntermNode*& entryPointTree)
 {
@@ -1919,9 +1940,11 @@
     if (function.getType().getBasicType() != EbtVoid)
         clearUniformInputOutput(function.getWritableType().getQualifier());
 
-    // parameters
+    // parameters.
+    // References to structuredbuffer types are left unmodified
     for (int i = 0; i < function.getParamCount(); i++)
-        clearUniformInputOutput(function[i].type->getQualifier());
+        if (!isReference(*function[i].type))
+            clearUniformInputOutput(function[i].type->getQualifier());
 }
 
 // Handle function returns, including type conversions to the function return type
@@ -2284,13 +2307,17 @@
 
     const TOperator op  = node->getAsOperator()->getOp();
     TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
-
-    TIntermTyped* argArray = argAggregate ? argAggregate->getSequence()[0]->getAsTyped() : nullptr;  // array
-
-    // Bail out if not a block method
-    if (argArray == nullptr || !argArray->getType().isRuntimeSizedArray())
+    if (argAggregate == nullptr)
         return;
 
+    // Buffer is the object upon which method is called, so always arg 0
+    TIntermTyped* bufferObj = argAggregate->getSequence()[0]->getAsTyped();
+
+    // Index to obtain the runtime sized array out of the buffer.
+    TIntermTyped* argArray = indexStructBufferContent(loc, bufferObj);
+    if (argArray == nullptr)
+        return;  // It might not be a struct buffer method.
+
     switch (op) {
     case EOpMethodLoad:
         {
@@ -2432,7 +2459,7 @@
 
     case EOpMethodGetDimensions:
         {
-            const int numArgs = argAggregate->getSequence().size();
+            const int numArgs = (int)argAggregate->getSequence().size();
             TIntermTyped* argNumItems = argAggregate->getSequence()[1]->getAsTyped();  // out num items
             TIntermTyped* argStride   = numArgs > 2 ? argAggregate->getSequence()[2]->getAsTyped() : nullptr;  // out stride
 
@@ -2681,6 +2708,7 @@
             const TSampler& sampler = texType.getSampler();
             const TSamplerDim dim = sampler.dim;
             const bool isImage = sampler.isImage();
+            const bool isMs = sampler.isMultiSample();
             const int numArgs = (int)argAggregate->getSequence().size();
 
             int numDims = 0;
@@ -2691,6 +2719,7 @@
             case Esd3D:     numDims = 3; break; // W, H, D
             case EsdCube:   numDims = 2; break; // W, H (cube)
             case EsdBuffer: numDims = 1; break; // W (buffers)
+            case EsdRect:   numDims = 2; break; // W, H (rect)
             default:
                 assert(0 && "unhandled texture dimension");
             }
@@ -2699,17 +2728,31 @@
             if (sampler.isArrayed())
                 ++numDims;
 
-            // Establish whether we're querying mip levels
-            const bool mipQuery = (numArgs > (numDims + 1)) && (!sampler.isMultiSample());
+            // Establish whether the method itself is querying mip levels.  This can be false even
+            // if the underlying query requires a MIP level, due to the available HLSL method overloads.
+            const bool mipQuery = (numArgs > (numDims + 1 + (isMs ? 1 : 0)));
+
+            // Establish whether we must use the LOD form of query (even if the method did not supply a mip level to query).
+            // True if:
+            //   1. 1D/2D/3D/Cube AND multisample==0 AND NOT image (those can be sent to the non-LOD query)
+            // or,
+            //   2. There is a LOD (because the non-LOD query cannot be used in that case, per spec)
+            const bool mipRequired =
+                ((dim == Esd1D || dim == Esd2D || dim == Esd3D || dim == EsdCube) && !isMs && !isImage) || // 1...
+                mipQuery; // 2...
 
             // AST assumes integer return.  Will be converted to float if required.
             TIntermAggregate* sizeQuery = new TIntermAggregate(isImage ? EOpImageQuerySize : EOpTextureQuerySize);
             sizeQuery->getSequence().push_back(argTex);
-            // If we're querying an explicit LOD, add the LOD, which is always arg #1
-            if (mipQuery) {
-                TIntermTyped* queryLod = argAggregate->getSequence()[1]->getAsTyped();
+
+            // If we're building an LOD query, add the LOD.
+            if (mipRequired) {
+                // If the base HLSL query had no MIP level given, use level 0.
+                TIntermTyped* queryLod = mipQuery ? argAggregate->getSequence()[1]->getAsTyped() :
+                    intermediate.addConstantUnion(0, loc, true);
                 sizeQuery->getSequence().push_back(queryLod);
             }
+
             sizeQuery->setType(TType(EbtUint, EvqTemporary, numDims));
             sizeQuery->setLoc(loc);
 
@@ -3567,7 +3610,7 @@
         {
             // input uvecN with low 16 bits of each component holding a float16.  convert to float32.
             TIntermTyped* argValue = node->getAsUnaryNode()->getOperand();
-            TIntermTyped* zero = intermediate.addConstantUnion(0.0, EbtFloat, loc, true);
+            TIntermTyped* zero = intermediate.addConstantUnion(0, loc, true);
             const int vecSize = argValue->getType().getVectorSize();
 
             TOperator constructOp = EOpNull;
@@ -3712,9 +3755,7 @@
     TIntermTyped* result = nullptr;
 
     TOperator op = function->getBuiltInOp();
-    if (op == EOpArrayLength)
-        result = handleLengthMethod(loc, function, arguments);
-    else if (op != EOpNull) {
+    if (op != EOpNull) {
         //
         // Then this should be a constructor.
         // Don't go through the symbol table for constructors.
@@ -3734,13 +3775,13 @@
         // Find it in the symbol table.
         //
         const TFunction* fnCandidate = nullptr;
-        bool builtIn;
+        bool builtIn = false;
 
         // TODO: this needs improvement: there's no way at present to look up a signature in
         // the symbol table for an arbitrary type.  This is a temporary hack until that ability exists.
         // It will have false positives, since it doesn't check arg counts or types.
         if (arguments && arguments->getAsAggregate()) {
-            if (arguments->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().isRuntimeSizedArray()) {
+            if (isStructBufferType(arguments->getAsAggregate()->getSequence()[0]->getAsTyped()->getType())) {
                 if (isStructBufferMethod(function->getName())) {
                     const TString mangle = function->getName() + "(";
                     TSymbol* symbol = symbolTable.find(mangle, &builtIn);
@@ -3828,41 +3869,6 @@
     return result;
 }
 
-// Finish processing object.length(). This started earlier in handleDotDereference(), where
-// the ".length" part was recognized and semantically checked, and finished here where the
-// function syntax "()" is recognized.
-//
-// Return resulting tree node.
-TIntermTyped* HlslParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction* function, TIntermNode* intermNode)
-{
-    int length = 0;
-
-    if (function->getParamCount() > 0)
-        error(loc, "method does not accept any arguments", function->getName().c_str(), "");
-    else {
-        const TType& type = intermNode->getAsTyped()->getType();
-        if (type.isArray()) {
-            if (type.isRuntimeSizedArray()) {
-                // Create a unary op and let the back end handle it
-                return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt));
-            } else
-                length = type.getOuterArraySize();
-        } else if (type.isMatrix())
-            length = type.getMatrixCols();
-        else if (type.isVector())
-            length = type.getVectorSize();
-        else {
-            // we should not get here, because earlier semantic checking should have prevented this path
-            error(loc, ".length()", "unexpected use of .length()", "");
-        }
-    }
-
-    if (length == 0)
-        length = 1;
-
-    return intermediate.addConstantUnion(length, loc);
-}
-
 //
 // Add any needed implicit conversions for function-call arguments to input parameters.
 //
@@ -5130,6 +5136,95 @@
     trackLinkage(*block);
 }
 
+//
+// Generate index to the array element in a structure buffer (SSBO)
+//
+TIntermTyped* HlslParseContext::indexStructBufferContent(const TSourceLoc& loc, TIntermTyped* buffer) const
+{
+    // Bail out if not a struct buffer
+    if (buffer == nullptr || ! isStructBufferType(buffer->getType()))
+        return nullptr;
+
+    // Runtime sized array is always the last element.
+    const TTypeList* bufferStruct = buffer->getType().getStruct();
+    TIntermTyped* arrayPosition = intermediate.addConstantUnion(unsigned(bufferStruct->size()-1), loc);
+
+    TIntermTyped* argArray = intermediate.addIndex(EOpIndexDirectStruct, buffer, arrayPosition, loc);
+    argArray->setType(*(*bufferStruct)[bufferStruct->size()-1].type);
+
+    return argArray;
+}
+
+//
+// IFF type is a structuredbuffer/byteaddressbuffer type, return the content
+// (template) type.   E.g, StructuredBuffer<MyType> -> MyType.  Else return nullptr.
+//
+TType* HlslParseContext::getStructBufferContentType(const TType& type) const
+{
+    if (type.getBasicType() != EbtBlock)
+        return nullptr;
+
+    const int memberCount = (int)type.getStruct()->size();
+    assert(memberCount > 0);
+
+    TType* contentType = (*type.getStruct())[memberCount-1].type;
+
+    return contentType->isRuntimeSizedArray() ? contentType : nullptr;
+}
+
+//
+// If an existing struct buffer has a sharable type, then share it.
+//
+void HlslParseContext::shareStructBufferType(TType& type)
+{
+    // PackOffset must be equivalent to share types on a per-member basis.
+    // Note: cannot use auto type due to recursion.  Thus, this is a std::function.
+    const std::function<bool(TType& lhs, TType& rhs)>
+    compareQualifiers = [&](TType& lhs, TType& rhs) -> bool {
+        if (lhs.getQualifier().layoutOffset != rhs.getQualifier().layoutOffset)
+            return false;
+
+        if (lhs.isStruct() != rhs.isStruct())
+            return false;
+
+        if (lhs.isStruct() && rhs.isStruct()) {
+            if (lhs.getStruct()->size() != rhs.getStruct()->size())
+                return false;
+
+            for (int i = 0; i < int(lhs.getStruct()->size()); ++i)
+                if (!compareQualifiers(*(*lhs.getStruct())[i].type, *(*rhs.getStruct())[i].type))
+                    return false;
+        }
+
+        return true;
+    };
+
+    // We need to compare certain qualifiers in addition to the type.
+    const auto typeEqual = [compareQualifiers](TType& lhs, TType& rhs) -> bool {
+        if (lhs.getQualifier().readonly != rhs.getQualifier().readonly)
+            return false;
+
+        // If both are structures, recursively look for packOffset equality
+        // as well as type equality.
+        return compareQualifiers(lhs, rhs) && lhs == rhs;
+    };
+
+    // This is an exhaustive O(N) search, but real world shaders have
+    // only a small number of these.
+    for (int idx = 0; idx < int(structBufferTypes.size()); ++idx) {
+        // If the deep structure matches, modulo qualifiers, use it
+        if (typeEqual(*structBufferTypes[idx], type)) {
+            type.shallowCopy(*structBufferTypes[idx]);
+            return;
+        }
+    }
+
+    // Otherwise, remember it:
+    TType* typeCopy = new TType;
+    typeCopy->shallowCopy(type);
+    structBufferTypes.push_back(typeCopy);
+}
+
 void HlslParseContext::paramFix(TType& type)
 {
     switch (type.getQualifier().storage) {
@@ -5140,6 +5235,18 @@
     case EvqTemporary:
         type.getQualifier().storage = EvqIn;
         break;
+    case EvqBuffer:
+        {
+            // SSBO parameter.  These do not go through the declareBlock path since they are fn parameters.
+            correctUniform(type.getQualifier());
+            TQualifier bufferQualifier = globalBufferDefaults;
+            mergeObjectLayoutQualifiers(bufferQualifier, type.getQualifier(), true);
+            bufferQualifier.storage = type.getQualifier().storage;
+            bufferQualifier.readonly = type.getQualifier().readonly;
+            bufferQualifier.coherent = type.getQualifier().coherent;
+            type.getQualifier() = bufferQualifier;
+            break;
+        }
     default:
         break;
     }
@@ -5971,6 +6078,19 @@
     ioTypeMap[type.getStruct()] = newLists;
 }
 
+// Lookup a user-type by name.
+// If found, fill in the type and return the defining symbol.
+// If not found, return nullptr.
+TSymbol* HlslParseContext::lookupUserType(const TString& typeName, TType& type)
+{
+    TSymbol* symbol = symbolTable.find(typeName);
+    if (symbol && symbol->getAsVariable() && symbol->getAsVariable()->isUserType()) {
+        type.shallowCopy(symbol->getType());
+        return symbol;
+    } else
+        return nullptr;
+}
+
 //
 // Do everything necessary to handle a variable (non-block) declaration.
 // Either redeclaring a variable, or making a new one, updating the symbol
@@ -6011,6 +6131,7 @@
             if (it != ioTypeMap.end())
                 type.setStruct(it->second.uniform);
         }
+
         break;
     default:
         break;
@@ -6648,8 +6769,6 @@
                 error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", "");
         }
 
-        if (memberQualifier.hasPacking())
-            error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), "");
         if (memberQualifier.hasLocation()) {
             switch (type.getQualifier().storage) {
             case EvqVaryingIn:
@@ -6661,10 +6780,6 @@
             }
         } else
             memberWithoutLocation = true;
-        if (memberQualifier.hasAlign()) {
-            if (defaultQualification.layoutPacking != ElpStd140 && defaultQualification.layoutPacking != ElpStd430)
-                error(memberLoc, "can only be used with std140 or std430 layout packing", "align", "");
-        }
 
         TQualifier newMemberQualification = defaultQualification;
         mergeQualifiers(newMemberQualification, memberQualifier);
diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h
index de1bc95..ecfdaa7 100755
--- a/hlsl/hlslParseHelper.h
+++ b/hlsl/hlslParseHelper.h
@@ -70,6 +70,7 @@
     TIntermTyped* handleBinaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* left, TIntermTyped* right);
     TIntermTyped* handleUnaryMath(const TSourceLoc&, const char* str, TOperator op, TIntermTyped* childNode);
     TIntermTyped* handleDotDereference(const TSourceLoc&, TIntermTyped* base, const TString& field);
+    TIntermTyped* handleBuiltInMethod(const TSourceLoc&, TIntermTyped* base, const TString& field);
     void assignLocations(TVariable& variable);
     TFunction& handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
     TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&, const TAttributeMap&, TIntermNode*& entryPointTree);
@@ -86,7 +87,6 @@
     void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeStructBufferMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     void decomposeGeometryMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
-    TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*);
     void addInputArgumentConversions(const TFunction&, TIntermTyped*&);
     TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermOperator&);
     void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&);
@@ -133,6 +133,7 @@
     const TFunction* findFunction(const TSourceLoc& loc, TFunction& call, bool& builtIn, TIntermTyped*& args);
     void declareTypedef(const TSourceLoc&, TString& identifier, const TType&);
     void declareStruct(const TSourceLoc&, TString& structName, TType&);
+    TSymbol* lookupUserType(const TString&, TType&);
     TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, TType&, TIntermTyped* initializer = 0);
     void lengthenList(const TSourceLoc&, TIntermSequence& list, int size);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&);
@@ -180,6 +181,9 @@
     void initFlattening() { flattenLevel.push_back(0); flattenOffset.push_back(0); }
     void finalizeFlattening() { flattenLevel.pop_back(); flattenOffset.pop_back(); }
 
+    // Share struct buffer deep types
+    void shareStructBufferType(TType&);
+
 protected:
     struct TFlattenData {
         TFlattenData() : nextBinding(TQualifier::layoutBindingEnd) { }
@@ -248,6 +252,14 @@
     bool isSamplerMethod(const TString& name) const;
     bool isStructBufferMethod(const TString& name) const;
 
+    TType* getStructBufferContentType(const TType& type) const;
+    bool isStructBufferType(const TType& type) const { return getStructBufferContentType(type) != nullptr; }
+    TIntermTyped* indexStructBufferContent(const TSourceLoc& loc, TIntermTyped* buffer) const;
+
+    // Return true if this type is a reference.  This is not currently a type method in case that's
+    // a language specific answer.
+    bool isReference(const TType& type) const { return isStructBufferType(type); }
+
     // Pass through to base class after remembering builtin mappings.
     using TParseContextBase::trackLinkage;
     void trackLinkage(TSymbol& variable) override;
@@ -330,6 +342,9 @@
     // Structure splitting data:
     TMap<int, TVariable*>              splitIoVars;  // variables with the builtin interstage IO removed, indexed by unique ID.
 
+    // Structuredbuffer shared types.  Typically there are only a few.
+    TVector<TType*> structBufferTypes;
+
     // The builtin interstage IO map considers e.g, EvqPosition on input and output separately, so that we
     // can build the linkage correctly if position appears on both sides.  Otherwise, multiple positions
     // are considered identical.
diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp
index 907ccd1..a80ee93 100755
--- a/hlsl/hlslScanContext.cpp
+++ b/hlsl/hlslScanContext.cpp
@@ -327,6 +327,7 @@
     (*KeywordMap)["RWStructuredBuffer"] =      EHTokRWStructuredBuffer;
     (*KeywordMap)["StructuredBuffer"] =        EHTokStructuredBuffer;
 
+    (*KeywordMap)["class"] =                   EHTokClass;
     (*KeywordMap)["struct"] =                  EHTokStruct;
     (*KeywordMap)["cbuffer"] =                 EHTokCBuffer;
     (*KeywordMap)["tbuffer"] =                 EHTokTBuffer;
@@ -354,7 +355,6 @@
     ReservedSet->insert("auto");
     ReservedSet->insert("catch");
     ReservedSet->insert("char");
-    ReservedSet->insert("class");
     ReservedSet->insert("const_cast");
     ReservedSet->insert("enum");
     ReservedSet->insert("explicit");
@@ -740,6 +740,7 @@
         return keyword;
 
     // variable, user type, ...
+    case EHTokClass:
     case EHTokStruct:
     case EHTokTypedef:
     case EHTokCBuffer:
diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h
index 824aa8c..1c8f528 100755
--- a/hlsl/hlslTokens.h
+++ b/hlsl/hlslTokens.h
@@ -268,6 +268,7 @@
     // variable, user type, ...
     EHTokIdentifier,
     EHTokTypeName,
+    EHTokClass,
     EHTokStruct,
     EHTokCBuffer,
     EHTokTBuffer,