diff --git a/Test/330.frag b/Test/330.frag
index a23ab66447fee3b4073c95d7d40a895fbd09de1a..a3301a2c3b70fa50a2aab197b2816e130e1b15ef 100644
--- a/Test/330.frag
+++ b/Test/330.frag
@@ -125,4 +125,18 @@ layout(location=0, index=1) out vec4 outVar4; // ERROR overlapping
 layout(location=27, index=0) in vec4 indexIn; // ERROR, not on in
 layout(location=0, index=0) in; // ERROR, not just on in
 layout(location=0, index=0) out; // ERROR, need a variable
-layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block
\ No newline at end of file
+layout(location=26, index=0) out indexBlock { int a; } indexBlockI; // ERROR, not on a block
+
+uniform sampler1D samp1D;
+uniform sampler2DShadow samp2Ds;
+
+void qlod()
+{
+    vec2 lod;
+    float pf;
+    vec2 pf2;
+    vec3 pf3;
+
+    lod = textureQueryLod(samp1D, pf);      // ERROR, not until 400
+    lod = textureQueryLod(samp2Ds, pf2);    // ERROR, not until 400
+}
diff --git a/Test/400.frag b/Test/400.frag
index 7ca965fb35dee1c61525b1a36b37c6352d1f4c7f..a2c4691abe06901dffa1b929d04bc1ccc045f5e0 100644
--- a/Test/400.frag
+++ b/Test/400.frag
@@ -138,4 +138,48 @@ void interp()
     float f;
     interpolateAtCentroid(f);           // ERROR, not interpolant
     interpolateAtSample(outp, 0);       // ERROR, not interpolant
-}
\ No newline at end of file
+}
+
+uniform sampler1D samp1D;
+uniform isampler2D isamp2D;
+uniform usampler3D usamp3D;
+uniform samplerCube sampCube; 
+uniform isampler1DArray isamp1DA;
+uniform usampler2DArray usamp2DA;
+uniform isamplerCubeArray isampCubeA;
+
+uniform sampler1DShadow samp1Ds;
+uniform sampler2DShadow samp2Ds;
+uniform samplerCubeShadow sampCubes;
+uniform sampler1DArrayShadow samp1DAs;
+uniform sampler2DArrayShadow samp2DAs;
+uniform samplerCubeArrayShadow sampCubeAs;
+
+uniform samplerBuffer sampBuf;
+uniform sampler2DRect sampRect;
+
+void qlod()
+{
+    vec2 lod;
+    float pf;
+    vec2 pf2;
+    vec3 pf3;
+
+    lod = textureQueryLod(samp1D, pf);
+    lod = textureQueryLod(isamp2D, pf2);
+    lod = textureQueryLod(usamp3D, pf3);
+    lod = textureQueryLod(sampCube, pf3);
+    lod = textureQueryLod(isamp1DA, pf);
+    lod = textureQueryLod(usamp2DA, pf2);
+    lod = textureQueryLod(isampCubeA, pf3);
+
+    lod = textureQueryLod(samp1Ds, pf);
+    lod = textureQueryLod(samp2Ds, pf2);
+    lod = textureQueryLod(sampCubes, pf3);
+    lod = textureQueryLod(samp1DAs, pf);
+    lod = textureQueryLod(samp2DAs, pf2);
+    lod = textureQueryLod(sampCubeAs, pf3);
+
+    lod = textureQueryLod(sampBuf, pf);     // ERROR
+    lod = textureQueryLod(sampRect, pf2);   // ERROR
+}
diff --git a/Test/400.geom b/Test/400.geom
index 7fe9fc1c3880b6e6b69cdad8b23565a87bdac799..e2ca9b910bfa73c607e9b7314fac001a260b746a 100644
--- a/Test/400.geom
+++ b/Test/400.geom
@@ -101,3 +101,17 @@ void bits()
 }
 
 layout(location = 7, index = 1) out vec4 indexedOut;
+
+uniform sampler1D samp1D;
+uniform sampler2DShadow samp2Ds;
+
+void qlod()
+{
+    vec2 lod;
+    float pf;
+    vec2 pf2;
+    vec3 pf3;
+
+    lod = textureQueryLod(samp1D, pf);      // ERROR, only in fragment
+    lod = textureQueryLod(samp2Ds, pf2);    // ERROR, only in fragment
+}
diff --git a/Test/420.vert b/Test/420.vert
index 5007e20c9c4e20d1bc811174b2c879a61e45253b..49035ea470fade93a591f1756c44aa5a1e07b7a5 100644
--- a/Test/420.vert
+++ b/Test/420.vert
@@ -146,3 +146,14 @@ layout(r8ui) uniform iimage2D i6bad;     // ERROR, type mismatch
 uniform offcheck {
     layout(offset = 16) int foo;   // ERROR
 } offcheckI;
+
+uniform sampler1D samp1D;
+uniform sampler1DShadow samp1Ds;
+
+void qlod()
+{
+    int levels;
+
+    levels = textureQueryLevels(samp1D);   // ERROR, not until 430
+    levels = textureQueryLevels(samp1Ds);  // ERROR, not until 430
+}
\ No newline at end of file
diff --git a/Test/430.vert b/Test/430.vert
index 64dd42f239638f0a84952d1e140f49f6fb4bb423..84c322083b855ca253ade48c39391634d606342c 100644
--- a/Test/430.vert
+++ b/Test/430.vert
@@ -180,3 +180,44 @@ void fooq2()
     s += imageSamples(ii2dms);    
     s += imageSamples(i2dmsa);    
 }
+
+uniform sampler1D samp1D;
+uniform usampler2D usamp2D;
+uniform isampler3D isamp3D;
+uniform isamplerCube isampCube; 
+uniform isampler1DArray isamp1DA;
+uniform sampler2DArray samp2DA;
+uniform usamplerCubeArray usampCubeA;
+
+uniform sampler1DShadow samp1Ds;
+uniform sampler2DShadow samp2Ds;
+uniform samplerCubeShadow sampCubes;
+uniform sampler1DArrayShadow samp1DAs;
+uniform sampler2DArrayShadow samp2DAs;
+uniform samplerCubeArrayShadow sampCubeAs;
+
+uniform samplerBuffer sampBuf;
+uniform sampler2DRect sampRect;
+
+void qlod()
+{
+    int levels;
+
+    levels = textureQueryLevels(samp1D);
+    levels = textureQueryLevels(usamp2D);
+    levels = textureQueryLevels(isamp3D);
+    levels = textureQueryLevels(isampCube);
+    levels = textureQueryLevels(isamp1DA);
+    levels = textureQueryLevels(samp2DA);
+    levels = textureQueryLevels(usampCubeA);
+
+    levels = textureQueryLevels(samp1Ds);
+    levels = textureQueryLevels(samp2Ds);
+    levels = textureQueryLevels(sampCubes);
+    levels = textureQueryLevels(samp1DAs);
+    levels = textureQueryLevels(samp2DAs);
+    levels = textureQueryLevels(sampCubeAs);
+
+    levels = textureQueryLevels(sampBuf);    // ERROR
+    levels = textureQueryLevels(sampRect);   // ERROR
+}
diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out
index 3e17d923f7cdc57d09264ef07ab47866775ea988..2def6c7b3cc4f435f34c27b5b289bcf58d0dee45 100644
--- a/Test/baseResults/330.frag.out
+++ b/Test/baseResults/330.frag.out
@@ -33,7 +33,11 @@ ERROR: 0:126: 'index' : can only be used on an output
 ERROR: 0:126: 'location/component/index' : cannot declare a default, use a full declaration 
 ERROR: 0:127: 'location/component/index' : cannot declare a default, use a full declaration 
 ERROR: 0:128: 'output block' : not supported in this stage: fragment
-ERROR: 34 compilation errors.  No code generated.
+ERROR: 0:140: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:140: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'
+ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:141: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'
+ERROR: 38 compilation errors.  No code generated.
 
 
 Shader version: 330
@@ -70,6 +74,11 @@ ERROR: node is still EOpNull!
 0:24      move second child to first child (temp 4-component vector of float)
 0:24        'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
 0:24        'inVar' (smooth in 4-component vector of float)
+0:133  Function Definition: qlod( (global void)
+0:133    Function Parameters: 
+0:?     Sequence
+0:140      'lod' (temp 2-component vector of float)
+0:141      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'inVar' (smooth in 4-component vector of float)
 0:?     'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
@@ -102,6 +111,8 @@ ERROR: node is still EOpNull!
 0:?     'outVar4' (layout(location=0 index=1 ) out 4-component vector of float)
 0:?     'indexIn' (layout(location=27 index=0 ) smooth in 4-component vector of float)
 0:?     'indexBlockI' (layout(location=26 index=0 ) out block{out int a})
+0:?     'samp1D' (uniform sampler1D)
+0:?     'samp2Ds' (uniform sampler2DShadow)
 
 
 Linked fragment stage:
@@ -143,6 +154,11 @@ ERROR: node is still EOpNull!
 0:24      move second child to first child (temp 4-component vector of float)
 0:24        'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
 0:24        'inVar' (smooth in 4-component vector of float)
+0:133  Function Definition: qlod( (global void)
+0:133    Function Parameters: 
+0:?     Sequence
+0:140      'lod' (temp 2-component vector of float)
+0:141      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'inVar' (smooth in 4-component vector of float)
 0:?     'outVar' (layout(location=0 index=0 ) out 4-component vector of float)
@@ -175,4 +191,6 @@ ERROR: node is still EOpNull!
 0:?     'outVar4' (layout(location=0 index=1 ) out 4-component vector of float)
 0:?     'indexIn' (layout(location=27 index=0 ) smooth in 4-component vector of float)
 0:?     'indexBlockI' (layout(location=26 index=0 ) out block{out int a})
+0:?     'samp1D' (uniform sampler1D)
+0:?     'samp2Ds' (uniform sampler2DShadow)
 
diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out
index 5ecb9082499f53157885d9e6ac093ef70d09f187..7e09e8afd9527e0c0bb1b453a8f82bcc58289d6b 100644
--- a/Test/baseResults/400.frag.out
+++ b/Test/baseResults/400.frag.out
@@ -30,7 +30,11 @@ ERROR: 0:135: 'interpolateAtOffset' : first argument must be an interpolant, or
 ERROR: 0:136: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
 ERROR: 0:139: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element 
 ERROR: 0:140: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element 
-ERROR: 30 compilation errors.  No code generated.
+ERROR: 0:183: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:183: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'
+ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:184: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'
+ERROR: 34 compilation errors.  No code generated.
 
 
 Shader version: 400
@@ -402,6 +406,76 @@ ERROR: node is still EOpNull!
 0:140        'outp' (out 4-component vector of float)
 0:140        Constant:
 0:140          0 (const int)
+0:161  Function Definition: qlod( (global void)
+0:161    Function Parameters: 
+0:?     Sequence
+0:168      move second child to first child (temp 2-component vector of float)
+0:168        'lod' (temp 2-component vector of float)
+0:168        textureQueryLod (global 2-component vector of float)
+0:168          'samp1D' (uniform sampler1D)
+0:168          'pf' (temp float)
+0:169      move second child to first child (temp 2-component vector of float)
+0:169        'lod' (temp 2-component vector of float)
+0:169        textureQueryLod (global 2-component vector of float)
+0:169          'isamp2D' (uniform isampler2D)
+0:169          'pf2' (temp 2-component vector of float)
+0:170      move second child to first child (temp 2-component vector of float)
+0:170        'lod' (temp 2-component vector of float)
+0:170        textureQueryLod (global 2-component vector of float)
+0:170          'usamp3D' (uniform usampler3D)
+0:170          'pf3' (temp 3-component vector of float)
+0:171      move second child to first child (temp 2-component vector of float)
+0:171        'lod' (temp 2-component vector of float)
+0:171        textureQueryLod (global 2-component vector of float)
+0:171          'sampCube' (uniform samplerCube)
+0:171          'pf3' (temp 3-component vector of float)
+0:172      move second child to first child (temp 2-component vector of float)
+0:172        'lod' (temp 2-component vector of float)
+0:172        textureQueryLod (global 2-component vector of float)
+0:172          'isamp1DA' (uniform isampler1DArray)
+0:172          'pf' (temp float)
+0:173      move second child to first child (temp 2-component vector of float)
+0:173        'lod' (temp 2-component vector of float)
+0:173        textureQueryLod (global 2-component vector of float)
+0:173          'usamp2DA' (uniform usampler2DArray)
+0:173          'pf2' (temp 2-component vector of float)
+0:174      move second child to first child (temp 2-component vector of float)
+0:174        'lod' (temp 2-component vector of float)
+0:174        textureQueryLod (global 2-component vector of float)
+0:174          'isampCubeA' (uniform isamplerCubeArray)
+0:174          'pf3' (temp 3-component vector of float)
+0:176      move second child to first child (temp 2-component vector of float)
+0:176        'lod' (temp 2-component vector of float)
+0:176        textureQueryLod (global 2-component vector of float)
+0:176          'samp1Ds' (uniform sampler1DShadow)
+0:176          'pf' (temp float)
+0:177      move second child to first child (temp 2-component vector of float)
+0:177        'lod' (temp 2-component vector of float)
+0:177        textureQueryLod (global 2-component vector of float)
+0:177          'samp2Ds' (uniform sampler2DShadow)
+0:177          'pf2' (temp 2-component vector of float)
+0:178      move second child to first child (temp 2-component vector of float)
+0:178        'lod' (temp 2-component vector of float)
+0:178        textureQueryLod (global 2-component vector of float)
+0:178          'sampCubes' (uniform samplerCubeShadow)
+0:178          'pf3' (temp 3-component vector of float)
+0:179      move second child to first child (temp 2-component vector of float)
+0:179        'lod' (temp 2-component vector of float)
+0:179        textureQueryLod (global 2-component vector of float)
+0:179          'samp1DAs' (uniform sampler1DArrayShadow)
+0:179          'pf' (temp float)
+0:180      move second child to first child (temp 2-component vector of float)
+0:180        'lod' (temp 2-component vector of float)
+0:180        textureQueryLod (global 2-component vector of float)
+0:180          'samp2DAs' (uniform sampler2DArrayShadow)
+0:180          'pf2' (temp 2-component vector of float)
+0:181      move second child to first child (temp 2-component vector of float)
+0:181        'lod' (temp 2-component vector of float)
+0:181        textureQueryLod (global 2-component vector of float)
+0:181          'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:181          'pf3' (temp 3-component vector of float)
+0:183      'lod' (temp 2-component vector of float)
+0:184      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'c2D' (smooth in 2-component vector of float)
 0:?     'i' (flat in int)
@@ -432,6 +506,21 @@ ERROR: node is still EOpNull!
 0:?     'colorfc' (centroid flat in 2-component vector of float)
 0:?     's1' (smooth in structure{global float x})
 0:?     's2' (sample temp structure{global float x})
+0:?     'samp1D' (uniform sampler1D)
+0:?     'isamp2D' (uniform isampler2D)
+0:?     'usamp3D' (uniform usampler3D)
+0:?     'sampCube' (uniform samplerCube)
+0:?     'isamp1DA' (uniform isampler1DArray)
+0:?     'usamp2DA' (uniform usampler2DArray)
+0:?     'isampCubeA' (uniform isamplerCubeArray)
+0:?     'samp1Ds' (uniform sampler1DShadow)
+0:?     'samp2Ds' (uniform sampler2DShadow)
+0:?     'sampCubes' (uniform samplerCubeShadow)
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:?     'sampBuf' (uniform samplerBuffer)
+0:?     'sampRect' (uniform sampler2DRect)
 
 
 Linked fragment stage:
@@ -806,6 +895,76 @@ ERROR: node is still EOpNull!
 0:140        'outp' (out 4-component vector of float)
 0:140        Constant:
 0:140          0 (const int)
+0:161  Function Definition: qlod( (global void)
+0:161    Function Parameters: 
+0:?     Sequence
+0:168      move second child to first child (temp 2-component vector of float)
+0:168        'lod' (temp 2-component vector of float)
+0:168        textureQueryLod (global 2-component vector of float)
+0:168          'samp1D' (uniform sampler1D)
+0:168          'pf' (temp float)
+0:169      move second child to first child (temp 2-component vector of float)
+0:169        'lod' (temp 2-component vector of float)
+0:169        textureQueryLod (global 2-component vector of float)
+0:169          'isamp2D' (uniform isampler2D)
+0:169          'pf2' (temp 2-component vector of float)
+0:170      move second child to first child (temp 2-component vector of float)
+0:170        'lod' (temp 2-component vector of float)
+0:170        textureQueryLod (global 2-component vector of float)
+0:170          'usamp3D' (uniform usampler3D)
+0:170          'pf3' (temp 3-component vector of float)
+0:171      move second child to first child (temp 2-component vector of float)
+0:171        'lod' (temp 2-component vector of float)
+0:171        textureQueryLod (global 2-component vector of float)
+0:171          'sampCube' (uniform samplerCube)
+0:171          'pf3' (temp 3-component vector of float)
+0:172      move second child to first child (temp 2-component vector of float)
+0:172        'lod' (temp 2-component vector of float)
+0:172        textureQueryLod (global 2-component vector of float)
+0:172          'isamp1DA' (uniform isampler1DArray)
+0:172          'pf' (temp float)
+0:173      move second child to first child (temp 2-component vector of float)
+0:173        'lod' (temp 2-component vector of float)
+0:173        textureQueryLod (global 2-component vector of float)
+0:173          'usamp2DA' (uniform usampler2DArray)
+0:173          'pf2' (temp 2-component vector of float)
+0:174      move second child to first child (temp 2-component vector of float)
+0:174        'lod' (temp 2-component vector of float)
+0:174        textureQueryLod (global 2-component vector of float)
+0:174          'isampCubeA' (uniform isamplerCubeArray)
+0:174          'pf3' (temp 3-component vector of float)
+0:176      move second child to first child (temp 2-component vector of float)
+0:176        'lod' (temp 2-component vector of float)
+0:176        textureQueryLod (global 2-component vector of float)
+0:176          'samp1Ds' (uniform sampler1DShadow)
+0:176          'pf' (temp float)
+0:177      move second child to first child (temp 2-component vector of float)
+0:177        'lod' (temp 2-component vector of float)
+0:177        textureQueryLod (global 2-component vector of float)
+0:177          'samp2Ds' (uniform sampler2DShadow)
+0:177          'pf2' (temp 2-component vector of float)
+0:178      move second child to first child (temp 2-component vector of float)
+0:178        'lod' (temp 2-component vector of float)
+0:178        textureQueryLod (global 2-component vector of float)
+0:178          'sampCubes' (uniform samplerCubeShadow)
+0:178          'pf3' (temp 3-component vector of float)
+0:179      move second child to first child (temp 2-component vector of float)
+0:179        'lod' (temp 2-component vector of float)
+0:179        textureQueryLod (global 2-component vector of float)
+0:179          'samp1DAs' (uniform sampler1DArrayShadow)
+0:179          'pf' (temp float)
+0:180      move second child to first child (temp 2-component vector of float)
+0:180        'lod' (temp 2-component vector of float)
+0:180        textureQueryLod (global 2-component vector of float)
+0:180          'samp2DAs' (uniform sampler2DArrayShadow)
+0:180          'pf2' (temp 2-component vector of float)
+0:181      move second child to first child (temp 2-component vector of float)
+0:181        'lod' (temp 2-component vector of float)
+0:181        textureQueryLod (global 2-component vector of float)
+0:181          'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:181          'pf3' (temp 3-component vector of float)
+0:183      'lod' (temp 2-component vector of float)
+0:184      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'c2D' (smooth in 2-component vector of float)
 0:?     'i' (flat in int)
@@ -836,4 +995,19 @@ ERROR: node is still EOpNull!
 0:?     'colorfc' (centroid flat in 2-component vector of float)
 0:?     's1' (smooth in structure{global float x})
 0:?     's2' (sample temp structure{global float x})
+0:?     'samp1D' (uniform sampler1D)
+0:?     'isamp2D' (uniform isampler2D)
+0:?     'usamp3D' (uniform usampler3D)
+0:?     'sampCube' (uniform samplerCube)
+0:?     'isamp1DA' (uniform isampler1DArray)
+0:?     'usamp2DA' (uniform usampler2DArray)
+0:?     'isampCubeA' (uniform isamplerCubeArray)
+0:?     'samp1Ds' (uniform sampler1DShadow)
+0:?     'samp2Ds' (uniform sampler2DShadow)
+0:?     'sampCubes' (uniform samplerCubeShadow)
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:?     'sampBuf' (uniform samplerBuffer)
+0:?     'sampRect' (uniform sampler2DRect)
 
diff --git a/Test/baseResults/400.geom.out b/Test/baseResults/400.geom.out
index 09e0b66b084d3e89e84b3069ea50eb618996522d..856bf7f1cfb390db7e5a436e4186a772a3d6d563 100644
--- a/Test/baseResults/400.geom.out
+++ b/Test/baseResults/400.geom.out
@@ -19,7 +19,11 @@ ERROR: 0:65: 'invocations' : can only apply to 'in'
 ERROR: 0:67: 'in' : type must be an array: inbls
 ERROR: 0:71: 'triangles' : inconsistent input primitive for array size of inbla
 ERROR: 0:103: 'index' : there is no such layout identifier for this stage taking an assigned value 
-ERROR: 19 compilation errors.  No code generated.
+ERROR: 0:115: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:115: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'
+ERROR: 0:116: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:116: 'assign' :  cannot convert from 'const float' to 'temp 2-component vector of float'
+ERROR: 23 compilation errors.  No code generated.
 
 
 Shader version: 400
@@ -165,6 +169,11 @@ ERROR: node is still EOpNull!
 0:100        'i2' (temp 2-component vector of int)
 0:100        findMSB (global 2-component vector of int)
 0:100          'u2' (temp 2-component vector of uint)
+0:108  Function Definition: qlod( (global void)
+0:108    Function Parameters: 
+0:?     Sequence
+0:115      'lod' (temp 2-component vector of float)
+0:116      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'bn' (in 3-element array of block{in int a})
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
@@ -182,6 +191,8 @@ ERROR: node is still EOpNull!
 0:?     'inbls' (in block{in int a})
 0:?     'inbla' (in 17-element array of block{in int a})
 0:?     'indexedOut' (layout(location=7 stream=0 ) out 4-component vector of float)
+0:?     'samp1D' (uniform sampler1D)
+0:?     'samp2Ds' (uniform sampler2DShadow)
 
 
 Linked geometry stage:
@@ -331,6 +342,11 @@ ERROR: node is still EOpNull!
 0:100        'i2' (temp 2-component vector of int)
 0:100        findMSB (global 2-component vector of int)
 0:100          'u2' (temp 2-component vector of uint)
+0:108  Function Definition: qlod( (global void)
+0:108    Function Parameters: 
+0:?     Sequence
+0:115      'lod' (temp 2-component vector of float)
+0:116      'lod' (temp 2-component vector of float)
 0:?   Linker Objects
 0:?     'bn' (in 3-element array of block{in int a})
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
@@ -348,4 +364,6 @@ ERROR: node is still EOpNull!
 0:?     'inbls' (in block{in int a})
 0:?     'inbla' (in 17-element array of block{in int a})
 0:?     'indexedOut' (layout(location=7 stream=0 ) out 4-component vector of float)
+0:?     'samp1D' (uniform sampler1D)
+0:?     'samp2Ds' (uniform sampler2DShadow)
 
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index 13c61eb92a26a5f71611df77e865b82c4b050ffc..2901c3967ac62303c7cb273b48d0a6406b045921 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -49,7 +49,11 @@ ERROR: 0:142: 'r8_snorm' : does not apply to signed integer images
 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: 48 compilation errors.  No code generated.
+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'
+ERROR: 52 compilation errors.  No code generated.
 
 
 Shader version: 420
@@ -239,6 +243,11 @@ ERROR: node is still EOpNull!
 0:135        'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)
 0:136      Function Call: passr(iI21; (global void)
 0:136        'iimg2D' (layout(r32i ) uniform iimage2D)
+0:153  Function Definition: qlod( (global void)
+0:153    Function Parameters: 
+0:?     Sequence
+0:157      'levels' (temp int)
+0:158      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v2' (smooth out 2-component vector of float)
 0:?     'bad' (in 10-element array of 4-component vector of float)
@@ -290,6 +299,8 @@ ERROR: node is still EOpNull!
 0:?     'i5bad' (layout(rgba32ui ) uniform iimage2D)
 0:?     'i6bad' (layout(r8ui ) uniform iimage2D)
 0:?     'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})
+0:?     'samp1D' (uniform sampler1D)
+0:?     'samp1Ds' (uniform sampler1DShadow)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
 
@@ -484,6 +495,11 @@ ERROR: node is still EOpNull!
 0:135        'qualim2' (layout(r32i ) coherent volatile readonly uniform iimage2D)
 0:136      Function Call: passr(iI21; (global void)
 0:136        'iimg2D' (layout(r32i ) uniform iimage2D)
+0:153  Function Definition: qlod( (global void)
+0:153    Function Parameters: 
+0:?     Sequence
+0:157      'levels' (temp int)
+0:158      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v2' (smooth out 2-component vector of float)
 0:?     'bad' (in 10-element array of 4-component vector of float)
@@ -535,6 +551,8 @@ ERROR: node is still EOpNull!
 0:?     'i5bad' (layout(rgba32ui ) uniform iimage2D)
 0:?     'i6bad' (layout(r8ui ) uniform iimage2D)
 0:?     'offcheckI' (layout(column_major shared ) uniform block{layout(column_major shared offset=16 ) uniform int foo})
+0:?     'samp1D' (uniform sampler1D)
+0:?     'samp1Ds' (uniform sampler1DShadow)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/430.vert.out b/Test/baseResults/430.vert.out
index 02cd5124c343ee583ec5a4e398c2e3d6aa9c31df..5242983cef7a1825c838e89f502e38ee2b985770 100644
--- a/Test/baseResults/430.vert.out
+++ b/Test/baseResults/430.vert.out
@@ -59,7 +59,11 @@ ERROR: 0:168: 'textureSamples and imageSamples' : not supported for this version
 ERROR: 0:169: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions 
 ERROR: 0:170: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions 
 ERROR: 0:171: 'textureSamples and imageSamples' : not supported for this version or the enabled extensions 
-ERROR: 59 compilation errors.  No code generated.
+ERROR: 0:221: 'textureQueryLevels' : no matching overloaded function found 
+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.
 
 
 Shader version: 430
@@ -139,6 +143,63 @@ ERROR: node is still EOpNull!
 0:181        's' (temp int)
 0:181        imageQuerySamples (global int)
 0:181          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
+0:202  Function Definition: qlod( (global void)
+0:202    Function Parameters: 
+0:?     Sequence
+0:206      move second child to first child (temp int)
+0:206        'levels' (temp int)
+0:206        textureQueryLevels (global int)
+0:206          'samp1D' (uniform sampler1D)
+0:207      move second child to first child (temp int)
+0:207        'levels' (temp int)
+0:207        textureQueryLevels (global int)
+0:207          'usamp2D' (uniform usampler2D)
+0:208      move second child to first child (temp int)
+0:208        'levels' (temp int)
+0:208        textureQueryLevels (global int)
+0:208          'isamp3D' (uniform isampler3D)
+0:209      move second child to first child (temp int)
+0:209        'levels' (temp int)
+0:209        textureQueryLevels (global int)
+0:209          'isampCube' (uniform isamplerCube)
+0:210      move second child to first child (temp int)
+0:210        'levels' (temp int)
+0:210        textureQueryLevels (global int)
+0:210          'isamp1DA' (uniform isampler1DArray)
+0:211      move second child to first child (temp int)
+0:211        'levels' (temp int)
+0:211        textureQueryLevels (global int)
+0:211          'samp2DA' (uniform sampler2DArray)
+0:212      move second child to first child (temp int)
+0:212        'levels' (temp int)
+0:212        textureQueryLevels (global int)
+0:212          'usampCubeA' (uniform usamplerCubeArray)
+0:214      move second child to first child (temp int)
+0:214        'levels' (temp int)
+0:214        textureQueryLevels (global int)
+0:214          'samp1Ds' (uniform sampler1DShadow)
+0:215      move second child to first child (temp int)
+0:215        'levels' (temp int)
+0:215        textureQueryLevels (global int)
+0:215          'samp2Ds' (uniform sampler2DShadow)
+0:216      move second child to first child (temp int)
+0:216        'levels' (temp int)
+0:216        textureQueryLevels (global int)
+0:216          'sampCubes' (uniform samplerCubeShadow)
+0:217      move second child to first child (temp int)
+0:217        'levels' (temp int)
+0:217        textureQueryLevels (global int)
+0:217          'samp1DAs' (uniform sampler1DArrayShadow)
+0:218      move second child to first child (temp int)
+0:218        'levels' (temp int)
+0:218        textureQueryLevels (global int)
+0:218          'samp2DAs' (uniform sampler2DArrayShadow)
+0:219      move second child to first child (temp int)
+0:219        'levels' (temp int)
+0:219        textureQueryLevels (global int)
+0:219          'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:221      'levels' (temp int)
+0:222      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v4' (layout(location=3 ) temp 4-component vector of float)
 0:?     'uv4' (layout(location=4 ) uniform 4-component vector of float)
@@ -184,6 +245,21 @@ ERROR: node is still EOpNull!
 0:?     'us2dmsa' (uniform usampler2DMSArray)
 0:?     'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
 0:?     'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
+0:?     'samp1D' (uniform sampler1D)
+0:?     'usamp2D' (uniform usampler2D)
+0:?     'isamp3D' (uniform isampler3D)
+0:?     'isampCube' (uniform isamplerCube)
+0:?     'isamp1DA' (uniform isampler1DArray)
+0:?     'samp2DA' (uniform sampler2DArray)
+0:?     'usampCubeA' (uniform usamplerCubeArray)
+0:?     'samp1Ds' (uniform sampler1DShadow)
+0:?     'samp2Ds' (uniform sampler2DShadow)
+0:?     'sampCubes' (uniform samplerCubeShadow)
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:?     'sampBuf' (uniform samplerBuffer)
+0:?     'sampRect' (uniform sampler2DRect)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
 
@@ -271,6 +347,63 @@ ERROR: node is still EOpNull!
 0:181        's' (temp int)
 0:181        imageQuerySamples (global int)
 0:181          'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
+0:202  Function Definition: qlod( (global void)
+0:202    Function Parameters: 
+0:?     Sequence
+0:206      move second child to first child (temp int)
+0:206        'levels' (temp int)
+0:206        textureQueryLevels (global int)
+0:206          'samp1D' (uniform sampler1D)
+0:207      move second child to first child (temp int)
+0:207        'levels' (temp int)
+0:207        textureQueryLevels (global int)
+0:207          'usamp2D' (uniform usampler2D)
+0:208      move second child to first child (temp int)
+0:208        'levels' (temp int)
+0:208        textureQueryLevels (global int)
+0:208          'isamp3D' (uniform isampler3D)
+0:209      move second child to first child (temp int)
+0:209        'levels' (temp int)
+0:209        textureQueryLevels (global int)
+0:209          'isampCube' (uniform isamplerCube)
+0:210      move second child to first child (temp int)
+0:210        'levels' (temp int)
+0:210        textureQueryLevels (global int)
+0:210          'isamp1DA' (uniform isampler1DArray)
+0:211      move second child to first child (temp int)
+0:211        'levels' (temp int)
+0:211        textureQueryLevels (global int)
+0:211          'samp2DA' (uniform sampler2DArray)
+0:212      move second child to first child (temp int)
+0:212        'levels' (temp int)
+0:212        textureQueryLevels (global int)
+0:212          'usampCubeA' (uniform usamplerCubeArray)
+0:214      move second child to first child (temp int)
+0:214        'levels' (temp int)
+0:214        textureQueryLevels (global int)
+0:214          'samp1Ds' (uniform sampler1DShadow)
+0:215      move second child to first child (temp int)
+0:215        'levels' (temp int)
+0:215        textureQueryLevels (global int)
+0:215          'samp2Ds' (uniform sampler2DShadow)
+0:216      move second child to first child (temp int)
+0:216        'levels' (temp int)
+0:216        textureQueryLevels (global int)
+0:216          'sampCubes' (uniform samplerCubeShadow)
+0:217      move second child to first child (temp int)
+0:217        'levels' (temp int)
+0:217        textureQueryLevels (global int)
+0:217          'samp1DAs' (uniform sampler1DArrayShadow)
+0:218      move second child to first child (temp int)
+0:218        'levels' (temp int)
+0:218        textureQueryLevels (global int)
+0:218          'samp2DAs' (uniform sampler2DArrayShadow)
+0:219      move second child to first child (temp int)
+0:219        'levels' (temp int)
+0:219        textureQueryLevels (global int)
+0:219          'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:221      'levels' (temp int)
+0:222      'levels' (temp int)
 0:?   Linker Objects
 0:?     'v4' (layout(location=3 ) temp 4-component vector of float)
 0:?     'uv4' (layout(location=4 ) uniform 4-component vector of float)
@@ -316,6 +449,21 @@ ERROR: node is still EOpNull!
 0:?     'us2dmsa' (uniform usampler2DMSArray)
 0:?     'ii2dms' (layout(rgba32i ) uniform iimage2DMS)
 0:?     'i2dmsa' (layout(rgba32f ) uniform image2DMSArray)
+0:?     'samp1D' (uniform sampler1D)
+0:?     'usamp2D' (uniform usampler2D)
+0:?     'isamp3D' (uniform isampler3D)
+0:?     'isampCube' (uniform isamplerCube)
+0:?     'isamp1DA' (uniform isampler1DArray)
+0:?     'samp2DA' (uniform sampler2DArray)
+0:?     'usampCubeA' (uniform usamplerCubeArray)
+0:?     'samp1Ds' (uniform sampler1DShadow)
+0:?     'samp2Ds' (uniform sampler2DShadow)
+0:?     'sampCubes' (uniform samplerCubeShadow)
+0:?     'samp1DAs' (uniform sampler1DArrayShadow)
+0:?     'samp2DAs' (uniform sampler2DArrayShadow)
+0:?     'sampCubeAs' (uniform samplerCubeArrayShadow)
+0:?     'sampBuf' (uniform samplerBuffer)
+0:?     'sampRect' (uniform sampler2DRect)
 0:?     'gl_VertexID' (gl_VertexId int VertexId)
 0:?     'gl_InstanceID' (gl_InstanceId int InstanceId)
 
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
new file mode 100644
index 0000000000000000000000000000000000000000..2b2b57f8d0cc8760548bb2d4de2fad9dbc30c840
--- /dev/null
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -0,0 +1,282 @@
+spv.queryL.frag
+Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked fragment stage:
+
+
+// Module Version 99
+// Generated by (magic number): 51a00bb
+// Id's are bound by 211
+
+                              Source GLSL 430
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginLowerLeft
+                              Name 4  "main"
+                              Name 9  "lod"
+                              Name 13  "samp1D"
+                              Name 16  "pf"
+                              Name 23  "isamp2D"
+                              Name 25  "pf2"
+                              Name 34  "usamp3D"
+                              Name 38  "pf3"
+                              Name 46  "sampCube"
+                              Name 55  "isamp1DA"
+                              Name 64  "usamp2DA"
+                              Name 73  "isampCubeA"
+                              Name 82  "samp1Ds"
+                              Name 91  "samp2Ds"
+                              Name 100  "sampCubes"
+                              Name 109  "samp1DAs"
+                              Name 118  "samp2DAs"
+                              Name 127  "sampCubeAs"
+                              Name 134  "levels"
+                              Name 140  "usamp2D"
+                              Name 148  "isamp3D"
+                              Name 156  "isampCube"
+                              Name 168  "samp2DA"
+                              Name 176  "usampCubeA"
+                              Name 206  "sampBuf"
+                              Name 210  "sampRect"
+                              Decorate 206(sampBuf) NoStaticUse
+                              Decorate 210(sampRect) NoStaticUse
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 2
+               8:             TypePointer Function 7(fvec2)
+              10:             TypeImage 6(float) 1D sampled format:Unknown
+              11:             TypeSampledImage 10
+              12:             TypePointer UniformConstant 11
+      13(samp1D):     12(ptr) Variable UniformConstant
+              15:             TypePointer Function 6(float)
+              19:             TypeInt 32 1
+              20:             TypeImage 19(int) 2D sampled format:Unknown
+              21:             TypeSampledImage 20
+              22:             TypePointer UniformConstant 21
+     23(isamp2D):     22(ptr) Variable UniformConstant
+              30:             TypeInt 32 0
+              31:             TypeImage 30(int) 3D sampled format:Unknown
+              32:             TypeSampledImage 31
+              33:             TypePointer UniformConstant 32
+     34(usamp3D):     33(ptr) Variable UniformConstant
+              36:             TypeVector 6(float) 3
+              37:             TypePointer Function 36(fvec3)
+              43:             TypeImage 6(float) Cube sampled format:Unknown
+              44:             TypeSampledImage 43
+              45:             TypePointer UniformConstant 44
+    46(sampCube):     45(ptr) Variable UniformConstant
+              52:             TypeImage 19(int) 1D array sampled format:Unknown
+              53:             TypeSampledImage 52
+              54:             TypePointer UniformConstant 53
+    55(isamp1DA):     54(ptr) Variable UniformConstant
+              61:             TypeImage 30(int) 2D array sampled format:Unknown
+              62:             TypeSampledImage 61
+              63:             TypePointer UniformConstant 62
+    64(usamp2DA):     63(ptr) Variable UniformConstant
+              70:             TypeImage 19(int) Cube array sampled format:Unknown
+              71:             TypeSampledImage 70
+              72:             TypePointer UniformConstant 71
+  73(isampCubeA):     72(ptr) Variable UniformConstant
+              79:             TypeImage 6(float) 1D depth sampled format:Unknown
+              80:             TypeSampledImage 79
+              81:             TypePointer UniformConstant 80
+     82(samp1Ds):     81(ptr) Variable UniformConstant
+              88:             TypeImage 6(float) 2D depth sampled format:Unknown
+              89:             TypeSampledImage 88
+              90:             TypePointer UniformConstant 89
+     91(samp2Ds):     90(ptr) Variable UniformConstant
+              97:             TypeImage 6(float) Cube depth sampled format:Unknown
+              98:             TypeSampledImage 97
+              99:             TypePointer UniformConstant 98
+  100(sampCubes):     99(ptr) Variable UniformConstant
+             106:             TypeImage 6(float) 1D depth array sampled format:Unknown
+             107:             TypeSampledImage 106
+             108:             TypePointer UniformConstant 107
+   109(samp1DAs):    108(ptr) Variable UniformConstant
+             115:             TypeImage 6(float) 2D depth array sampled format:Unknown
+             116:             TypeSampledImage 115
+             117:             TypePointer UniformConstant 116
+   118(samp2DAs):    117(ptr) Variable UniformConstant
+             124:             TypeImage 6(float) Cube depth array sampled format:Unknown
+             125:             TypeSampledImage 124
+             126:             TypePointer UniformConstant 125
+ 127(sampCubeAs):    126(ptr) Variable UniformConstant
+             133:             TypePointer Function 19(int)
+             137:             TypeImage 30(int) 2D sampled format:Unknown
+             138:             TypeSampledImage 137
+             139:             TypePointer UniformConstant 138
+    140(usamp2D):    139(ptr) Variable UniformConstant
+             145:             TypeImage 19(int) 3D sampled format:Unknown
+             146:             TypeSampledImage 145
+             147:             TypePointer UniformConstant 146
+    148(isamp3D):    147(ptr) Variable UniformConstant
+             153:             TypeImage 19(int) Cube sampled format:Unknown
+             154:             TypeSampledImage 153
+             155:             TypePointer UniformConstant 154
+  156(isampCube):    155(ptr) Variable UniformConstant
+             165:             TypeImage 6(float) 2D array sampled format:Unknown
+             166:             TypeSampledImage 165
+             167:             TypePointer UniformConstant 166
+    168(samp2DA):    167(ptr) Variable UniformConstant
+             173:             TypeImage 30(int) Cube array sampled format:Unknown
+             174:             TypeSampledImage 173
+             175:             TypePointer UniformConstant 174
+ 176(usampCubeA):    175(ptr) Variable UniformConstant
+             203:             TypeImage 6(float) Buffer sampled format:Unknown
+             204:             TypeSampledImage 203
+             205:             TypePointer UniformConstant 204
+    206(sampBuf):    205(ptr) Variable UniformConstant
+             207:             TypeImage 6(float) Rect sampled format:Unknown
+             208:             TypeSampledImage 207
+             209:             TypePointer UniformConstant 208
+   210(sampRect):    209(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+          9(lod):      8(ptr) Variable Function
+          16(pf):     15(ptr) Variable Function
+         25(pf2):      8(ptr) Variable Function
+         38(pf3):     37(ptr) Variable Function
+     134(levels):    133(ptr) Variable Function
+              14:          11 Load 13(samp1D)
+              17:    6(float) Load 16(pf)
+              18:    7(fvec2) ImageQueryLod 14 17
+                              Store 9(lod) 18
+              24:          21 Load 23(isamp2D)
+              26:    7(fvec2) Load 25(pf2)
+              27:    7(fvec2) ImageQueryLod 24 26
+              28:    7(fvec2) Load 9(lod)
+              29:    7(fvec2) FAdd 28 27
+                              Store 9(lod) 29
+              35:          32 Load 34(usamp3D)
+              39:   36(fvec3) Load 38(pf3)
+              40:    7(fvec2) ImageQueryLod 35 39
+              41:    7(fvec2) Load 9(lod)
+              42:    7(fvec2) FAdd 41 40
+                              Store 9(lod) 42
+              47:          44 Load 46(sampCube)
+              48:   36(fvec3) Load 38(pf3)
+              49:    7(fvec2) ImageQueryLod 47 48
+              50:    7(fvec2) Load 9(lod)
+              51:    7(fvec2) FAdd 50 49
+                              Store 9(lod) 51
+              56:          53 Load 55(isamp1DA)
+              57:    6(float) Load 16(pf)
+              58:    7(fvec2) ImageQueryLod 56 57
+              59:    7(fvec2) Load 9(lod)
+              60:    7(fvec2) FAdd 59 58
+                              Store 9(lod) 60
+              65:          62 Load 64(usamp2DA)
+              66:    7(fvec2) Load 25(pf2)
+              67:    7(fvec2) ImageQueryLod 65 66
+              68:    7(fvec2) Load 9(lod)
+              69:    7(fvec2) FAdd 68 67
+                              Store 9(lod) 69
+              74:          71 Load 73(isampCubeA)
+              75:   36(fvec3) Load 38(pf3)
+              76:    7(fvec2) ImageQueryLod 74 75
+              77:    7(fvec2) Load 9(lod)
+              78:    7(fvec2) FAdd 77 76
+                              Store 9(lod) 78
+              83:          80 Load 82(samp1Ds)
+              84:    6(float) Load 16(pf)
+              85:    7(fvec2) ImageQueryLod 83 84
+              86:    7(fvec2) Load 9(lod)
+              87:    7(fvec2) FAdd 86 85
+                              Store 9(lod) 87
+              92:          89 Load 91(samp2Ds)
+              93:    7(fvec2) Load 25(pf2)
+              94:    7(fvec2) ImageQueryLod 92 93
+              95:    7(fvec2) Load 9(lod)
+              96:    7(fvec2) FAdd 95 94
+                              Store 9(lod) 96
+             101:          98 Load 100(sampCubes)
+             102:   36(fvec3) Load 38(pf3)
+             103:    7(fvec2) ImageQueryLod 101 102
+             104:    7(fvec2) Load 9(lod)
+             105:    7(fvec2) FAdd 104 103
+                              Store 9(lod) 105
+             110:         107 Load 109(samp1DAs)
+             111:    6(float) Load 16(pf)
+             112:    7(fvec2) ImageQueryLod 110 111
+             113:    7(fvec2) Load 9(lod)
+             114:    7(fvec2) FAdd 113 112
+                              Store 9(lod) 114
+             119:         116 Load 118(samp2DAs)
+             120:    7(fvec2) Load 25(pf2)
+             121:    7(fvec2) ImageQueryLod 119 120
+             122:    7(fvec2) Load 9(lod)
+             123:    7(fvec2) FAdd 122 121
+                              Store 9(lod) 123
+             128:         125 Load 127(sampCubeAs)
+             129:   36(fvec3) Load 38(pf3)
+             130:    7(fvec2) ImageQueryLod 128 129
+             131:    7(fvec2) Load 9(lod)
+             132:    7(fvec2) FAdd 131 130
+                              Store 9(lod) 132
+             135:          11 Load 13(samp1D)
+             136:     19(int) ImageQueryLevels 135
+                              Store 134(levels) 136
+             141:         138 Load 140(usamp2D)
+             142:     19(int) ImageQueryLevels 141
+             143:     19(int) Load 134(levels)
+             144:     19(int) IAdd 143 142
+                              Store 134(levels) 144
+             149:         146 Load 148(isamp3D)
+             150:     19(int) ImageQueryLevels 149
+             151:     19(int) Load 134(levels)
+             152:     19(int) IAdd 151 150
+                              Store 134(levels) 152
+             157:         154 Load 156(isampCube)
+             158:     19(int) ImageQueryLevels 157
+             159:     19(int) Load 134(levels)
+             160:     19(int) IAdd 159 158
+                              Store 134(levels) 160
+             161:          53 Load 55(isamp1DA)
+             162:     19(int) ImageQueryLevels 161
+             163:     19(int) Load 134(levels)
+             164:     19(int) IAdd 163 162
+                              Store 134(levels) 164
+             169:         166 Load 168(samp2DA)
+             170:     19(int) ImageQueryLevels 169
+             171:     19(int) Load 134(levels)
+             172:     19(int) IAdd 171 170
+                              Store 134(levels) 172
+             177:         174 Load 176(usampCubeA)
+             178:     19(int) ImageQueryLevels 177
+             179:     19(int) Load 134(levels)
+             180:     19(int) IAdd 179 178
+                              Store 134(levels) 180
+             181:          80 Load 82(samp1Ds)
+             182:     19(int) ImageQueryLevels 181
+                              Store 134(levels) 182
+             183:          89 Load 91(samp2Ds)
+             184:     19(int) ImageQueryLevels 183
+             185:     19(int) Load 134(levels)
+             186:     19(int) IAdd 185 184
+                              Store 134(levels) 186
+             187:          98 Load 100(sampCubes)
+             188:     19(int) ImageQueryLevels 187
+             189:     19(int) Load 134(levels)
+             190:     19(int) IAdd 189 188
+                              Store 134(levels) 190
+             191:         107 Load 109(samp1DAs)
+             192:     19(int) ImageQueryLevels 191
+             193:     19(int) Load 134(levels)
+             194:     19(int) IAdd 193 192
+                              Store 134(levels) 194
+             195:         116 Load 118(samp2DAs)
+             196:     19(int) ImageQueryLevels 195
+             197:     19(int) Load 134(levels)
+             198:     19(int) IAdd 197 196
+                              Store 134(levels) 198
+             199:         125 Load 127(sampCubeAs)
+             200:     19(int) ImageQueryLevels 199
+             201:     19(int) Load 134(levels)
+             202:     19(int) IAdd 201 200
+                              Store 134(levels) 202
+                              Return
+                              FunctionEnd
diff --git a/Test/spv.queryL.frag b/Test/spv.queryL.frag
new file mode 100644
index 0000000000000000000000000000000000000000..6f4ad5c8897274e23bef95f307c501bcbde41600
--- /dev/null
+++ b/Test/spv.queryL.frag
@@ -0,0 +1,64 @@
+#version 430 core
+
+uniform sampler1D samp1D;
+uniform isampler2D isamp2D;
+uniform usampler2D usamp2D;
+uniform isampler3D isamp3D;
+uniform usampler3D usamp3D;
+uniform samplerCube sampCube; 
+uniform isamplerCube isampCube; 
+uniform isampler1DArray isamp1DA;
+uniform sampler2DArray samp2DA;
+uniform usampler2DArray usamp2DA;
+uniform isamplerCubeArray isampCubeA;
+uniform usamplerCubeArray usampCubeA;
+
+uniform sampler1DShadow samp1Ds;
+uniform sampler2DShadow samp2Ds;
+uniform samplerCubeShadow sampCubes;
+uniform sampler1DArrayShadow samp1DAs;
+uniform sampler2DArrayShadow samp2DAs;
+uniform samplerCubeArrayShadow sampCubeAs;
+
+uniform samplerBuffer sampBuf;
+uniform sampler2DRect sampRect;
+
+void main()
+{
+    vec2 lod;
+    float pf;
+    vec2 pf2;
+    vec3 pf3;
+
+    lod = textureQueryLod(samp1D, pf);
+    lod += textureQueryLod(isamp2D, pf2);
+    lod += textureQueryLod(usamp3D, pf3);
+    lod += textureQueryLod(sampCube, pf3);
+    lod += textureQueryLod(isamp1DA, pf);
+    lod += textureQueryLod(usamp2DA, pf2);
+    lod += textureQueryLod(isampCubeA, pf3);
+
+    lod += textureQueryLod(samp1Ds, pf);
+    lod += textureQueryLod(samp2Ds, pf2);
+    lod += textureQueryLod(sampCubes, pf3);
+    lod += textureQueryLod(samp1DAs, pf);
+    lod += textureQueryLod(samp2DAs, pf2);
+    lod += textureQueryLod(sampCubeAs, pf3);
+
+    int levels;
+
+    levels = textureQueryLevels(samp1D);
+    levels += textureQueryLevels(usamp2D);
+    levels += textureQueryLevels(isamp3D);
+    levels += textureQueryLevels(isampCube);
+    levels += textureQueryLevels(isamp1DA);
+    levels += textureQueryLevels(samp2DA);
+    levels += textureQueryLevels(usampCubeA);
+
+    levels = textureQueryLevels(samp1Ds);
+    levels += textureQueryLevels(samp2Ds);
+    levels += textureQueryLevels(sampCubes);
+    levels += textureQueryLevels(samp1DAs);
+    levels += textureQueryLevels(samp2DAs);
+    levels += textureQueryLevels(sampCubeAs);
+}
diff --git a/Test/test-spirv-list b/Test/test-spirv-list
index a7d8c8de0d2a2fe5cd1c8fcf3e9a7c3503a0e629..bddd8aa81c2a058d882c59ef3feaf943d094024d 100644
--- a/Test/test-spirv-list
+++ b/Test/test-spirv-list
@@ -80,3 +80,4 @@ spv.voidFunction.frag
 spv.whileLoop.frag
 spv.atomic.comp
 spv.AofA.frag
+spv.queryL.frag
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index a6bdb45e0ad311a87775fcda4ba4a7cb5566e4f4..aa5dcd95902c8c55da1fc6c494d29ed31b549214 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 "3.0.755"
+#define GLSLANG_REVISION "3.0.756"
 #define GLSLANG_DATE "15-Sep-2015"
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index 0411a46ebc5a6771924722efb893ae6950490ad8..df7ab84d84d7c706f7f097c8bdc8e92458796b33 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -1848,7 +1848,8 @@ void TBuiltIns::initialize(int version, EProfile profile)
     if (version >= 130)
         add2ndGenerationSamplingImaging(version, profile);
 
-    // printf("%s\n", commonBuiltins.c_str());
+    //printf("%s\n", commonBuiltins.c_str());
+    //printf("%s\n", stageBuiltins[EShLangFragment].c_str());
 }
 
 //
@@ -1946,21 +1947,21 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile)
 //
 void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
 {
-    //
-    // textureSize
-    //
-
     if (sampler.image && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 430)))
         return;
 
+    //
+    // textureSize() and imageSize()
+    //
+
+    int sizeDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0);
     if (profile == EEsProfile)
         commonBuiltins.append("highp ");
-    int dims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0);
-    if (dims == 1)
+    if (sizeDims == 1)
         commonBuiltins.append("int");
     else {
         commonBuiltins.append("ivec");
-        commonBuiltins.append(postfixes[dims]);
+        commonBuiltins.append(postfixes[sizeDims]);
     }
     if (sampler.image)
         commonBuiltins.append(" imageSize(readonly writeonly volatile coherent ");
@@ -1972,6 +1973,10 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi
     else
         commonBuiltins.append(");\n");
 
+    //
+    // textureSamples() and imageSamples()
+    //
+
     // GL_ARB_shader_texture_image_samples
     // TODO: spec issue? there are no memory qualifiers; how to query a writeonly/readonly image, etc?
     if (profile != EEsProfile && version >= 430 && sampler.ms) {
@@ -1983,6 +1988,32 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, TString& typeName, int versi
         commonBuiltins.append(typeName);
         commonBuiltins.append(");\n");
     }
+
+    //
+    // textureQueryLod(), fragment stage only
+    //
+
+    if (profile != EEsProfile && version >= 400 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
+        stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
+        stageBuiltins[EShLangFragment].append(typeName);
+        if (dimMap[sampler.dim] == 1)
+            stageBuiltins[EShLangFragment].append(", float");
+        else {
+            stageBuiltins[EShLangFragment].append(", vec");
+            stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
+        }
+        stageBuiltins[EShLangFragment].append(");\n");
+    }
+
+    //
+    // textureQueryLevels()
+    //
+
+    if (profile != EEsProfile && version >= 430 && ! sampler.image && sampler.dim != EsdRect && ! sampler.ms && sampler.dim != EsdBuffer) {
+        commonBuiltins.append("int textureQueryLevels(");
+        commonBuiltins.append(typeName);
+        commonBuiltins.append(");\n");
+    }
 }
 
 //