diff --git a/Test/120.frag b/Test/120.frag
index 18c3cd74b2b07559f71514a74a1e5e9ce2eec947..9035aed7b4160ba54ecef7ebb9346b26020a68a6 100644
--- a/Test/120.frag
+++ b/Test/120.frag
@@ -185,6 +185,10 @@ void foo2323()
     v = texture3DProjLod(s3D, v, f); // ERROR
     v = texture1DProjLod(s1D, v, f); // ERROR
     v = shadow2DProjLod(s2DS, v, f); // ERROR
+
+    v = texture1DGradARB(s1D, f, f, f);         // ERROR
+    v = texture2DProjGradARB(s2D, v, v2, v2);   // ERROR
+    v = shadow2DProjGradARB(s2DS, v, v2, v2);   // ERROR
 }
 
 #extension GL_ARB_shader_texture_lod : require
@@ -198,9 +202,14 @@ void foo2324()
     v = texture3DProjLod(s3D, v, f);
     v = texture1DProjLod(s1D, v, f);
     v = shadow2DProjLod(s2DS, v, f);
+
+    v = texture1DGradARB(s1D, f, f, f);
+    v = texture2DProjGradARB(s2D, v, v2, v2);
+    v = shadow2DProjGradARB(s2DS, v, v2, v2);
+    v = shadow2DRectProjGradARB(s2DS, v, v2, v2);  // ERROR
 }
 
-uniform sampler2DRect s2DRbad;
+uniform sampler2DRect s2DRbad;  // ERROR
 
 void foo121111()
 {
@@ -224,4 +233,6 @@ void foo12111()
     v = texture2DRectProj(s2DR, v4);
     v = shadow2DRect(s2DRS, v3);
     v = shadow2DRectProj(s2DRS, v4);
+
+    v = shadow2DRectProjGradARB(s2DRS, v, v2, v2);
 }
diff --git a/Test/baseResults/120.frag.out b/Test/baseResults/120.frag.out
index 714fa46f5687c1431544e2c64d4da0e8aa9cf44a..d82b91b8a4475796ea2e905e9288a3a0852a854a 100644
--- a/Test/baseResults/120.frag.out
+++ b/Test/baseResults/120.frag.out
@@ -46,9 +46,13 @@ ERROR: 0:184: 'texture2DLod' : required extension not requested: GL_ARB_shader_t
 ERROR: 0:185: 'texture3DProjLod' : required extension not requested: GL_ARB_shader_texture_lod
 ERROR: 0:186: 'texture1DProjLod' : required extension not requested: GL_ARB_shader_texture_lod
 ERROR: 0:187: 'shadow2DProjLod' : required extension not requested: GL_ARB_shader_texture_lod
-WARNING: 0:190: '#extension' : extension is only partially supported: GL_ARB_shader_texture_lod
-ERROR: 0:203: 'sampler2DRect' : Reserved word. 
-ERROR: 48 compilation errors.  No code generated.
+ERROR: 0:189: 'texture1DGradARB' : required extension not requested: GL_ARB_shader_texture_lod
+ERROR: 0:190: 'texture2DProjGradARB' : required extension not requested: GL_ARB_shader_texture_lod
+ERROR: 0:191: 'shadow2DProjGradARB' : required extension not requested: GL_ARB_shader_texture_lod
+ERROR: 0:209: 'shadow2DRectProjGradARB' : no matching overloaded function found 
+ERROR: 0:209: 'assign' :  cannot convert from 'const float' to '4-component vector of float'
+ERROR: 0:212: 'sampler2DRect' : Reserved word. 
+ERROR: 53 compilation errors.  No code generated.
 
 
 Shader version: 120
@@ -472,70 +476,120 @@ ERROR: node is still EOpNull!
 0:187          's2DS' (uniform sampler2DShadow)
 0:187          'v' (4-component vector of float)
 0:187          'f' (float)
-0:192  Function Definition: foo2324( (void)
-0:192    Function Parameters: 
+0:189      move second child to first child (4-component vector of float)
+0:189        'v' (4-component vector of float)
+0:189        Function Call: texture1DGradARB(s11;f1;f1;f1; (4-component vector of float)
+0:189          's1D' (uniform sampler1D)
+0:189          'f' (float)
+0:189          'f' (float)
+0:189          'f' (float)
+0:190      move second child to first child (4-component vector of float)
+0:190        'v' (4-component vector of float)
+0:190        Function Call: texture2DProjGradARB(s21;vf4;vf2;vf2; (4-component vector of float)
+0:190          's2D' (uniform sampler2D)
+0:190          'v' (4-component vector of float)
+0:190          'v2' (2-component vector of float)
+0:190          'v2' (2-component vector of float)
+0:191      move second child to first child (4-component vector of float)
+0:191        'v' (4-component vector of float)
+0:191        Function Call: shadow2DProjGradARB(sS21;vf4;vf2;vf2; (4-component vector of float)
+0:191          's2DS' (uniform sampler2DShadow)
+0:191          'v' (4-component vector of float)
+0:191          'v2' (2-component vector of float)
+0:191          'v2' (2-component vector of float)
+0:196  Function Definition: foo2324( (void)
+0:196    Function Parameters: 
 0:?     Sequence
-0:197      move second child to first child (4-component vector of float)
-0:197        'v' (4-component vector of float)
-0:197        Function Call: texture2DLod(s21;vf2;f1; (4-component vector of float)
-0:197          's2D' (uniform sampler2D)
-0:197          'v2' (2-component vector of float)
-0:197          'f' (float)
-0:198      move second child to first child (4-component vector of float)
-0:198        'v' (4-component vector of float)
-0:198        Function Call: texture3DProjLod(s31;vf4;f1; (4-component vector of float)
-0:198          's3D' (uniform sampler3D)
-0:198          'v' (4-component vector of float)
-0:198          'f' (float)
-0:199      move second child to first child (4-component vector of float)
-0:199        'v' (4-component vector of float)
-0:199        Function Call: texture1DProjLod(s11;vf4;f1; (4-component vector of float)
-0:199          's1D' (uniform sampler1D)
-0:199          'v' (4-component vector of float)
-0:199          'f' (float)
-0:200      move second child to first child (4-component vector of float)
-0:200        'v' (4-component vector of float)
-0:200        Function Call: shadow2DProjLod(sS21;vf4;f1; (4-component vector of float)
-0:200          's2DS' (uniform sampler2DShadow)
-0:200          'v' (4-component vector of float)
-0:200          'f' (float)
-0:205  Function Definition: foo121111( (void)
-0:205    Function Parameters: 
-0:?     Sequence
-0:208      Sequence
-0:208        move second child to first child (4-component vector of float)
+0:201      move second child to first child (4-component vector of float)
+0:201        'v' (4-component vector of float)
+0:201        Function Call: texture2DLod(s21;vf2;f1; (4-component vector of float)
+0:201          's2D' (uniform sampler2D)
+0:201          'v2' (2-component vector of float)
+0:201          'f' (float)
+0:202      move second child to first child (4-component vector of float)
+0:202        'v' (4-component vector of float)
+0:202        Function Call: texture3DProjLod(s31;vf4;f1; (4-component vector of float)
+0:202          's3D' (uniform sampler3D)
+0:202          'v' (4-component vector of float)
+0:202          'f' (float)
+0:203      move second child to first child (4-component vector of float)
+0:203        'v' (4-component vector of float)
+0:203        Function Call: texture1DProjLod(s11;vf4;f1; (4-component vector of float)
+0:203          's1D' (uniform sampler1D)
+0:203          'v' (4-component vector of float)
+0:203          'f' (float)
+0:204      move second child to first child (4-component vector of float)
+0:204        'v' (4-component vector of float)
+0:204        Function Call: shadow2DProjLod(sS21;vf4;f1; (4-component vector of float)
+0:204          's2DS' (uniform sampler2DShadow)
+0:204          'v' (4-component vector of float)
+0:204          'f' (float)
+0:206      move second child to first child (4-component vector of float)
+0:206        'v' (4-component vector of float)
+0:206        Function Call: texture1DGradARB(s11;f1;f1;f1; (4-component vector of float)
+0:206          's1D' (uniform sampler1D)
+0:206          'f' (float)
+0:206          'f' (float)
+0:206          'f' (float)
+0:207      move second child to first child (4-component vector of float)
+0:207        'v' (4-component vector of float)
+0:207        Function Call: texture2DProjGradARB(s21;vf4;vf2;vf2; (4-component vector of float)
+0:207          's2D' (uniform sampler2D)
+0:207          'v' (4-component vector of float)
+0:207          'v2' (2-component vector of float)
+0:207          'v2' (2-component vector of float)
+0:208      move second child to first child (4-component vector of float)
+0:208        'v' (4-component vector of float)
+0:208        Function Call: shadow2DProjGradARB(sS21;vf4;vf2;vf2; (4-component vector of float)
+0:208          's2DS' (uniform sampler2DShadow)
 0:208          'v' (4-component vector of float)
-0:208          Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
-0:208            's2DRbad' (uniform sampler2DRect)
-0:208            'v2' (2-component vector of float)
-0:216  Function Definition: foo12111( (void)
-0:216    Function Parameters: 
+0:208          'v2' (2-component vector of float)
+0:208          'v2' (2-component vector of float)
+0:209      'v' (4-component vector of float)
+0:214  Function Definition: foo121111( (void)
+0:214    Function Parameters: 
+0:?     Sequence
+0:217      Sequence
+0:217        move second child to first child (4-component vector of float)
+0:217          'v' (4-component vector of float)
+0:217          Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
+0:217            's2DRbad' (uniform sampler2DRect)
+0:217            'v2' (2-component vector of float)
+0:225  Function Definition: foo12111( (void)
+0:225    Function Parameters: 
 0:?     Sequence
-0:222      move second child to first child (4-component vector of float)
-0:222        'v' (4-component vector of float)
-0:222        Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
-0:222          's2DR' (uniform sampler2DRect)
-0:222          'v2' (2-component vector of float)
-0:223      move second child to first child (4-component vector of float)
-0:223        'v' (4-component vector of float)
-0:223        Function Call: texture2DRectProj(sR21;vf3; (4-component vector of float)
-0:223          's2DR' (uniform sampler2DRect)
-0:223          'v3' (3-component vector of float)
-0:224      move second child to first child (4-component vector of float)
-0:224        'v' (4-component vector of float)
-0:224        Function Call: texture2DRectProj(sR21;vf4; (4-component vector of float)
-0:224          's2DR' (uniform sampler2DRect)
-0:224          'v4' (4-component vector of float)
-0:225      move second child to first child (4-component vector of float)
-0:225        'v' (4-component vector of float)
-0:225        Function Call: shadow2DRect(sSR21;vf3; (4-component vector of float)
-0:225          's2DRS' (uniform sampler2DRectShadow)
-0:225          'v3' (3-component vector of float)
-0:226      move second child to first child (4-component vector of float)
-0:226        'v' (4-component vector of float)
-0:226        Function Call: shadow2DRectProj(sSR21;vf4; (4-component vector of float)
-0:226          's2DRS' (uniform sampler2DRectShadow)
-0:226          'v4' (4-component vector of float)
+0:231      move second child to first child (4-component vector of float)
+0:231        'v' (4-component vector of float)
+0:231        Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
+0:231          's2DR' (uniform sampler2DRect)
+0:231          'v2' (2-component vector of float)
+0:232      move second child to first child (4-component vector of float)
+0:232        'v' (4-component vector of float)
+0:232        Function Call: texture2DRectProj(sR21;vf3; (4-component vector of float)
+0:232          's2DR' (uniform sampler2DRect)
+0:232          'v3' (3-component vector of float)
+0:233      move second child to first child (4-component vector of float)
+0:233        'v' (4-component vector of float)
+0:233        Function Call: texture2DRectProj(sR21;vf4; (4-component vector of float)
+0:233          's2DR' (uniform sampler2DRect)
+0:233          'v4' (4-component vector of float)
+0:234      move second child to first child (4-component vector of float)
+0:234        'v' (4-component vector of float)
+0:234        Function Call: shadow2DRect(sSR21;vf3; (4-component vector of float)
+0:234          's2DRS' (uniform sampler2DRectShadow)
+0:234          'v3' (3-component vector of float)
+0:235      move second child to first child (4-component vector of float)
+0:235        'v' (4-component vector of float)
+0:235        Function Call: shadow2DRectProj(sSR21;vf4; (4-component vector of float)
+0:235          's2DRS' (uniform sampler2DRectShadow)
+0:235          'v4' (4-component vector of float)
+0:237      move second child to first child (4-component vector of float)
+0:237        'v' (4-component vector of float)
+0:237        Function Call: shadow2DRectProjGradARB(sSR21;vf4;vf2;vf2; (4-component vector of float)
+0:237          's2DRS' (uniform sampler2DRectShadow)
+0:237          'v' (4-component vector of float)
+0:237          'v2' (2-component vector of float)
+0:237          'v2' (2-component vector of float)
 0:?   Linker Objects
 0:?     'lowp' (float)
 0:?     'mediump' (float)
@@ -993,70 +1047,120 @@ ERROR: node is still EOpNull!
 0:187          's2DS' (uniform sampler2DShadow)
 0:187          'v' (4-component vector of float)
 0:187          'f' (float)
-0:192  Function Definition: foo2324( (void)
-0:192    Function Parameters: 
+0:189      move second child to first child (4-component vector of float)
+0:189        'v' (4-component vector of float)
+0:189        Function Call: texture1DGradARB(s11;f1;f1;f1; (4-component vector of float)
+0:189          's1D' (uniform sampler1D)
+0:189          'f' (float)
+0:189          'f' (float)
+0:189          'f' (float)
+0:190      move second child to first child (4-component vector of float)
+0:190        'v' (4-component vector of float)
+0:190        Function Call: texture2DProjGradARB(s21;vf4;vf2;vf2; (4-component vector of float)
+0:190          's2D' (uniform sampler2D)
+0:190          'v' (4-component vector of float)
+0:190          'v2' (2-component vector of float)
+0:190          'v2' (2-component vector of float)
+0:191      move second child to first child (4-component vector of float)
+0:191        'v' (4-component vector of float)
+0:191        Function Call: shadow2DProjGradARB(sS21;vf4;vf2;vf2; (4-component vector of float)
+0:191          's2DS' (uniform sampler2DShadow)
+0:191          'v' (4-component vector of float)
+0:191          'v2' (2-component vector of float)
+0:191          'v2' (2-component vector of float)
+0:196  Function Definition: foo2324( (void)
+0:196    Function Parameters: 
 0:?     Sequence
-0:197      move second child to first child (4-component vector of float)
-0:197        'v' (4-component vector of float)
-0:197        Function Call: texture2DLod(s21;vf2;f1; (4-component vector of float)
-0:197          's2D' (uniform sampler2D)
-0:197          'v2' (2-component vector of float)
-0:197          'f' (float)
-0:198      move second child to first child (4-component vector of float)
-0:198        'v' (4-component vector of float)
-0:198        Function Call: texture3DProjLod(s31;vf4;f1; (4-component vector of float)
-0:198          's3D' (uniform sampler3D)
-0:198          'v' (4-component vector of float)
-0:198          'f' (float)
-0:199      move second child to first child (4-component vector of float)
-0:199        'v' (4-component vector of float)
-0:199        Function Call: texture1DProjLod(s11;vf4;f1; (4-component vector of float)
-0:199          's1D' (uniform sampler1D)
-0:199          'v' (4-component vector of float)
-0:199          'f' (float)
-0:200      move second child to first child (4-component vector of float)
-0:200        'v' (4-component vector of float)
-0:200        Function Call: shadow2DProjLod(sS21;vf4;f1; (4-component vector of float)
-0:200          's2DS' (uniform sampler2DShadow)
-0:200          'v' (4-component vector of float)
-0:200          'f' (float)
-0:205  Function Definition: foo121111( (void)
-0:205    Function Parameters: 
-0:?     Sequence
-0:208      Sequence
-0:208        move second child to first child (4-component vector of float)
+0:201      move second child to first child (4-component vector of float)
+0:201        'v' (4-component vector of float)
+0:201        Function Call: texture2DLod(s21;vf2;f1; (4-component vector of float)
+0:201          's2D' (uniform sampler2D)
+0:201          'v2' (2-component vector of float)
+0:201          'f' (float)
+0:202      move second child to first child (4-component vector of float)
+0:202        'v' (4-component vector of float)
+0:202        Function Call: texture3DProjLod(s31;vf4;f1; (4-component vector of float)
+0:202          's3D' (uniform sampler3D)
+0:202          'v' (4-component vector of float)
+0:202          'f' (float)
+0:203      move second child to first child (4-component vector of float)
+0:203        'v' (4-component vector of float)
+0:203        Function Call: texture1DProjLod(s11;vf4;f1; (4-component vector of float)
+0:203          's1D' (uniform sampler1D)
+0:203          'v' (4-component vector of float)
+0:203          'f' (float)
+0:204      move second child to first child (4-component vector of float)
+0:204        'v' (4-component vector of float)
+0:204        Function Call: shadow2DProjLod(sS21;vf4;f1; (4-component vector of float)
+0:204          's2DS' (uniform sampler2DShadow)
+0:204          'v' (4-component vector of float)
+0:204          'f' (float)
+0:206      move second child to first child (4-component vector of float)
+0:206        'v' (4-component vector of float)
+0:206        Function Call: texture1DGradARB(s11;f1;f1;f1; (4-component vector of float)
+0:206          's1D' (uniform sampler1D)
+0:206          'f' (float)
+0:206          'f' (float)
+0:206          'f' (float)
+0:207      move second child to first child (4-component vector of float)
+0:207        'v' (4-component vector of float)
+0:207        Function Call: texture2DProjGradARB(s21;vf4;vf2;vf2; (4-component vector of float)
+0:207          's2D' (uniform sampler2D)
+0:207          'v' (4-component vector of float)
+0:207          'v2' (2-component vector of float)
+0:207          'v2' (2-component vector of float)
+0:208      move second child to first child (4-component vector of float)
+0:208        'v' (4-component vector of float)
+0:208        Function Call: shadow2DProjGradARB(sS21;vf4;vf2;vf2; (4-component vector of float)
+0:208          's2DS' (uniform sampler2DShadow)
 0:208          'v' (4-component vector of float)
-0:208          Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
-0:208            's2DRbad' (uniform sampler2DRect)
-0:208            'v2' (2-component vector of float)
-0:216  Function Definition: foo12111( (void)
-0:216    Function Parameters: 
+0:208          'v2' (2-component vector of float)
+0:208          'v2' (2-component vector of float)
+0:209      'v' (4-component vector of float)
+0:214  Function Definition: foo121111( (void)
+0:214    Function Parameters: 
+0:?     Sequence
+0:217      Sequence
+0:217        move second child to first child (4-component vector of float)
+0:217          'v' (4-component vector of float)
+0:217          Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
+0:217            's2DRbad' (uniform sampler2DRect)
+0:217            'v2' (2-component vector of float)
+0:225  Function Definition: foo12111( (void)
+0:225    Function Parameters: 
 0:?     Sequence
-0:222      move second child to first child (4-component vector of float)
-0:222        'v' (4-component vector of float)
-0:222        Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
-0:222          's2DR' (uniform sampler2DRect)
-0:222          'v2' (2-component vector of float)
-0:223      move second child to first child (4-component vector of float)
-0:223        'v' (4-component vector of float)
-0:223        Function Call: texture2DRectProj(sR21;vf3; (4-component vector of float)
-0:223          's2DR' (uniform sampler2DRect)
-0:223          'v3' (3-component vector of float)
-0:224      move second child to first child (4-component vector of float)
-0:224        'v' (4-component vector of float)
-0:224        Function Call: texture2DRectProj(sR21;vf4; (4-component vector of float)
-0:224          's2DR' (uniform sampler2DRect)
-0:224          'v4' (4-component vector of float)
-0:225      move second child to first child (4-component vector of float)
-0:225        'v' (4-component vector of float)
-0:225        Function Call: shadow2DRect(sSR21;vf3; (4-component vector of float)
-0:225          's2DRS' (uniform sampler2DRectShadow)
-0:225          'v3' (3-component vector of float)
-0:226      move second child to first child (4-component vector of float)
-0:226        'v' (4-component vector of float)
-0:226        Function Call: shadow2DRectProj(sSR21;vf4; (4-component vector of float)
-0:226          's2DRS' (uniform sampler2DRectShadow)
-0:226          'v4' (4-component vector of float)
+0:231      move second child to first child (4-component vector of float)
+0:231        'v' (4-component vector of float)
+0:231        Function Call: texture2DRect(sR21;vf2; (4-component vector of float)
+0:231          's2DR' (uniform sampler2DRect)
+0:231          'v2' (2-component vector of float)
+0:232      move second child to first child (4-component vector of float)
+0:232        'v' (4-component vector of float)
+0:232        Function Call: texture2DRectProj(sR21;vf3; (4-component vector of float)
+0:232          's2DR' (uniform sampler2DRect)
+0:232          'v3' (3-component vector of float)
+0:233      move second child to first child (4-component vector of float)
+0:233        'v' (4-component vector of float)
+0:233        Function Call: texture2DRectProj(sR21;vf4; (4-component vector of float)
+0:233          's2DR' (uniform sampler2DRect)
+0:233          'v4' (4-component vector of float)
+0:234      move second child to first child (4-component vector of float)
+0:234        'v' (4-component vector of float)
+0:234        Function Call: shadow2DRect(sSR21;vf3; (4-component vector of float)
+0:234          's2DRS' (uniform sampler2DRectShadow)
+0:234          'v3' (3-component vector of float)
+0:235      move second child to first child (4-component vector of float)
+0:235        'v' (4-component vector of float)
+0:235        Function Call: shadow2DRectProj(sSR21;vf4; (4-component vector of float)
+0:235          's2DRS' (uniform sampler2DRectShadow)
+0:235          'v4' (4-component vector of float)
+0:237      move second child to first child (4-component vector of float)
+0:237        'v' (4-component vector of float)
+0:237        Function Call: shadow2DRectProjGradARB(sSR21;vf4;vf2;vf2; (4-component vector of float)
+0:237          's2DRS' (uniform sampler2DRectShadow)
+0:237          'v' (4-component vector of float)
+0:237          'v2' (2-component vector of float)
+0:237          'v2' (2-component vector of float)
 0:?   Linker Objects
 0:?     'lowp' (float)
 0:?     'mediump' (float)
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
index c6771d63c64fc930b7bc9363829b8dfa2cb3bcc7..cff87e1a9de60c26939ec3e48b72741d4dfaec9f 100644
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -767,12 +767,12 @@ void TBuiltIns::initialize(int version, EProfile profile)
         (profile == ECoreProfile && version < 420) ||
          profile == ENoProfile) {             
         s->append(
-            "vec4 texture2DLod(sampler2D, vec2, float);"         // ARB_shader_texture_lod
-            "vec4 texture2DProjLod(sampler2D, vec3, float);"     // ARB_shader_texture_lod
-            "vec4 texture2DProjLod(sampler2D, vec4, float);"     // ARB_shader_texture_lod
-            "vec4 texture3DLod(sampler3D, vec3, float);"         // ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
-            "vec4 texture3DProjLod(sampler3D, vec4, float);"     // ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
-            "vec4 textureCubeLod(samplerCube, vec3, float);"     // ARB_shader_texture_lod
+            "vec4 texture2DLod(sampler2D, vec2, float);"         // GL_ARB_shader_texture_lod
+            "vec4 texture2DProjLod(sampler2D, vec3, float);"     // GL_ARB_shader_texture_lod
+            "vec4 texture2DProjLod(sampler2D, vec4, float);"     // GL_ARB_shader_texture_lod
+            "vec4 texture3DLod(sampler3D, vec3, float);"         // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
+            "vec4 texture3DProjLod(sampler3D, vec4, float);"     // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
+            "vec4 textureCubeLod(samplerCube, vec3, float);"     // GL_ARB_shader_texture_lod
             
             "\n");
     }
@@ -780,14 +780,33 @@ void TBuiltIns::initialize(int version, EProfile profile)
         (profile == ECoreProfile && version < 420) ||
          profile == ENoProfile) {
         s->append(
-            "vec4 texture1DLod(sampler1D, float, float);"         // ARB_shader_texture_lod
-            "vec4 texture1DProjLod(sampler1D, vec2, float);"      // ARB_shader_texture_lod
-            "vec4 texture1DProjLod(sampler1D, vec4, float);"      // ARB_shader_texture_lod
-            "vec4 shadow1DLod(sampler1DShadow, vec3, float);"     // ARB_shader_texture_lod
-            "vec4 shadow2DLod(sampler2DShadow, vec3, float);"     // ARB_shader_texture_lod
-            "vec4 shadow1DProjLod(sampler1DShadow, vec4, float);" // ARB_shader_texture_lod
-            "vec4 shadow2DProjLod(sampler2DShadow, vec4, float);" // ARB_shader_texture_lod
-            
+            "vec4 texture1DLod(sampler1D, float, float);"                          // GL_ARB_shader_texture_lod
+            "vec4 texture1DProjLod(sampler1D, vec2, float);"                       // GL_ARB_shader_texture_lod
+            "vec4 texture1DProjLod(sampler1D, vec4, float);"                       // GL_ARB_shader_texture_lod
+            "vec4 shadow1DLod(sampler1DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
+            "vec4 shadow2DLod(sampler2DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
+            "vec4 shadow1DProjLod(sampler1DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
+            "vec4 shadow2DProjLod(sampler2DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
+
+            "vec4 texture1DGradARB(sampler1D, float, float, float);"               // GL_ARB_shader_texture_lod
+            "vec4 texture1DProjGradARB(sampler1D, vec2, float, float);"            // GL_ARB_shader_texture_lod
+            "vec4 texture1DProjGradARB(sampler1D, vec4, float, float);"            // GL_ARB_shader_texture_lod
+            "vec4 texture2DGradARB(sampler2D, vec2, vec2, vec2);"                  // GL_ARB_shader_texture_lod
+            "vec4 texture2DProjGradARB(sampler2D, vec3, vec2, vec2);"              // GL_ARB_shader_texture_lod
+            "vec4 texture2DProjGradARB(sampler2D, vec4, vec2, vec2);"              // GL_ARB_shader_texture_lod
+            "vec4 texture3DGradARB(sampler3D, vec3, vec3, vec3);"                  // GL_ARB_shader_texture_lod
+            "vec4 texture3DProjGradARB(sampler3D, vec4, vec3, vec3);"              // GL_ARB_shader_texture_lod
+            "vec4 textureCubeGradARB(samplerCube, vec3, vec3, vec3);"              // GL_ARB_shader_texture_lod
+            "vec4 shadow1DGradARB(sampler1DShadow, vec3, float, float);"           // GL_ARB_shader_texture_lod
+            "vec4 shadow1DProjGradARB( sampler1DShadow, vec4, float, float);"      // GL_ARB_shader_texture_lod
+            "vec4 shadow2DGradARB(sampler2DShadow, vec3, vec2, vec2);"             // GL_ARB_shader_texture_lod
+            "vec4 shadow2DProjGradARB( sampler2DShadow, vec4, vec2, vec2);"        // GL_ARB_shader_texture_lod
+            "vec4 texture2DRectGradARB(sampler2DRect, vec2, vec2, vec2);"          // GL_ARB_shader_texture_lod
+            "vec4 texture2DRectProjGradARB( sampler2DRect, vec3, vec2, vec2);"     // GL_ARB_shader_texture_lod
+            "vec4 texture2DRectProjGradARB( sampler2DRect, vec4, vec2, vec2);"     // GL_ARB_shader_texture_lod
+            "vec4 shadow2DRectGradARB( sampler2DRectShadow, vec3, vec2, vec2);"    // GL_ARB_shader_texture_lod
+            "vec4 shadow2DRectProjGradARB(sampler2DRectShadow, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod
+
             "\n");
     }
 
@@ -2173,6 +2192,29 @@ void IdentifyBuiltIns(int version, EProfile profile, EShLanguage language, TSymb
     // Tag built-in variables and functions with additional qualifier and extension information
     // that cannot be declared with the text strings.
     //
+
+    // GL_ARB_shader_texture_lod functions usable only with the extension enabled
+    if (profile != EEsProfile) {
+        symbolTable.setFunctionExtensions("texture1DGradARB",         1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture1DProjGradARB",     1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture1DProjGradARB",     1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture2DGradARB",         1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture2DProjGradARB",     1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture2DProjGradARB",     1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture3DGradARB",         1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture3DProjGradARB",     1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("textureCubeGradARB",       1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("shadow1DGradARB",          1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("shadow1DProjGradARB",      1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("shadow2DGradARB",          1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("shadow2DProjGradARB",      1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture2DRectGradARB",     1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture2DRectProjGradARB", 1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("texture2DRectProjGradARB", 1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("shadow2DRectGradARB",      1, &GL_ARB_shader_texture_lod);
+        symbolTable.setFunctionExtensions("shadow2DRectProjGradARB",  1, &GL_ARB_shader_texture_lod);
+    }
+
     switch(language) {
     case EShLangVertex:
     case EShLangTessControl:
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 4ba3319f70c882dc56f4415ace2da43c73da2caf..eaff5003876d4088f654f2b8ecd7739b4fff779c 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -154,7 +154,7 @@ void TParseContext::initializeExtensionBehavior()
     extensionBehavior[GL_EXT_frag_depth]               = EBhDisable;
     extensionBehavior[GL_OES_EGL_image_external]       = EBhDisable;
     extensionBehavior[GL_EXT_shader_texture_lod]       = EBhDisable;
-    extensionBehavior[GL_ARB_shader_texture_lod]       = EBhDisablePartial;
+    extensionBehavior[GL_ARB_shader_texture_lod]       = EBhDisable;
 
     extensionBehavior[GL_ARB_texture_rectangle]        = EBhDisable;
     extensionBehavior[GL_3DL_array_objects]            = EBhDisable;