diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index e5211d9548f3203f9ca7447cde6a24481a0b1a8f..3a3a7679ce2a3276f8e8eef59e7b47c754182b34 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -588,30 +588,7 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
 	
 	if (major_version == 1 && minor_version < 30)
 	{
-		if (minor_version < 10)
-		{
-			//should NEVER get here -- if major version is 1 and minor version is less than 10, 
-			// viewer should never attempt to use shaders, continuing will result in undefined behavior
-			LL_ERRS() << "Unsupported GLSL Version." << LL_ENDL;
-		}
-
-		if (minor_version <= 19)
-		{
-			shader_code_text[shader_code_count++] = strdup("#version 110\n");
-			extra_code_text[extra_code_count++] = strdup("#define ATTRIBUTE attribute\n");
-			extra_code_text[extra_code_count++] = strdup("#define VARYING varying\n");
-			extra_code_text[extra_code_count++] = strdup("#define VARYING_FLAT varying\n");
-		}
-		else if (minor_version <= 29)
-		{
-			//set version to 1.20
-			shader_code_text[shader_code_count++] = strdup("#version 120\n");
-       		extra_code_text[extra_code_count++] = strdup("#define FXAA_GLSL_120 1\n");
-			extra_code_text[extra_code_count++] = strdup("#define FXAA_FAST_PIXEL_OFFSET 0\n");
-			extra_code_text[extra_code_count++] = strdup("#define ATTRIBUTE attribute\n");
-			extra_code_text[extra_code_count++] = strdup("#define VARYING varying\n");
-			extra_code_text[extra_code_count++] = strdup("#define VARYING_FLAT varying\n");
-		}
+        llassert(false); // GL 3.1 or later required
 	}
 	else
 	{  
@@ -648,40 +625,14 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
         }
 		else
 		{
-			//set version to 1.30
-			shader_code_text[shader_code_count++] = strdup("#version 130\n");
+			//set version to 1.40
+			shader_code_text[shader_code_count++] = strdup("#version 140\n");
 			//some implementations of GLSL 1.30 require integer precision be explicitly declared
 			extra_code_text[extra_code_count++] = strdup("precision mediump int;\n");
 			extra_code_text[extra_code_count++] = strdup("precision highp float;\n");
 		}
 
-		extra_code_text[extra_code_count++] = strdup("#define DEFINE_GL_FRAGCOLOR 1\n");
 		extra_code_text[extra_code_count++] = strdup("#define FXAA_GLSL_130 1\n");
-
-		extra_code_text[extra_code_count++] = strdup("#define ATTRIBUTE in\n");
-
-		if (type == GL_VERTEX_SHADER)
-		{ //"varying" state is "out" in a vertex program, "in" in a fragment program 
-			// ("varying" is deprecated after version 1.20)
-			extra_code_text[extra_code_count++] = strdup("#define VARYING out\n");
-			extra_code_text[extra_code_count++] = strdup("#define VARYING_FLAT flat out\n");
-		}
-		else
-		{
-			extra_code_text[extra_code_count++] = strdup("#define VARYING in\n");
-			extra_code_text[extra_code_count++] = strdup("#define VARYING_FLAT flat in\n");
-		}
-
-		//backwards compatibility with legacy texture lookup syntax
-		extra_code_text[extra_code_count++] = strdup("#define texture2D texture\n");
-		extra_code_text[extra_code_count++] = strdup("#define textureCube texture\n");
-		extra_code_text[extra_code_count++] = strdup("#define texture2DLod textureLod\n");
-		
-		if (major_version > 1 || minor_version >= 40)
-		{ //GLSL 1.40 replaces texture2DRect et al with texture
-			extra_code_text[extra_code_count++] = strdup("#define texture2DRect texture\n");
-			extra_code_text[extra_code_count++] = strdup("#define shadow2DRect(a,b) vec2(texture(a,b))\n");
-		}
 	}
 
     // Use alpha float to store bit flags
@@ -719,13 +670,13 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
 		.
 		uniform sampler2D texN;
 		
-		VARYING_FLAT ivec4 vary_texture_index;
+		flat in int vary_texture_index;
 
 		vec4 ret = vec4(1,0,1,1);
 
 		vec4 diffuseLookup(vec2 texcoord)
 		{
-			switch (vary_texture_index.r))
+			switch (vary_texture_index)
 			{
 				case 0: ret = texture2D(tex0, texcoord); break;
 				case 1: ret = texture2D(tex1, texcoord); break;
@@ -751,7 +702,7 @@ GLuint LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_lev
 
 		if (texture_index_channels > 1)
 		{
-			extra_code_text[extra_code_count++] = strdup("VARYING_FLAT int vary_texture_index;\n");
+			extra_code_text[extra_code_count++] = strdup("flat in int vary_texture_index;\n");
 		}
 
 		extra_code_text[extra_code_count++] = strdup("vec4 diffuseLookup(vec2 texcoord)\n");
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl
index 767fad016c956736719590aacb6a6877a8e9fb6d..374469ce2f3c022f501388629c2811b7e5a134f8 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl
@@ -24,7 +24,7 @@
  */
  
 
-ATTRIBUTE vec4 weight;
+in vec4 weight;
 
 uniform vec4 matrixPalette[45];
 
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl
index 0543a26642b1560d071dfa6e3f937278cc9d5103..9adc68e62b4f284bd86ec1266373c4879964c433 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl
@@ -25,12 +25,12 @@
 
 uniform mat4 projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 uniform vec4 color;
 
diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl
index fac1599c6b2418314f5d3b29692d6113ad8d16ae..837074f08c3a6e476a5d7c07eab46337ca92e9f1 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl
@@ -28,13 +28,13 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec4 diffuse_color;
+in vec3 normal;
+in vec2 texcoord0;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 vec4 calcLightingSpecular(vec3 pos, vec3 norm, vec4 color, inout vec4 specularColor);
 void calcAtmospherics(vec3 inPositionEye);
diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
index 90bf2851c9e0f49534f19e18a07c6ecdefb66c91..0817076dd5830c2a532e4d7ca9a331db12cd3e65 100644
--- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
+++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
@@ -22,7 +22,7 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE vec4 weight4;  
+in vec4 weight4;  
 
 uniform mat3x4 matrixPalette[MAX_JOINTS_PER_MESH_OBJECT];
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
index 6a93bc2fd2577cddc3cb02e5b6624a4718b7f514..4c9d813c9c36e1b48a115ccc9b8b5884d560f8e8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
@@ -33,19 +33,19 @@ uniform mat4 projection_matrix;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 #ifdef USE_INDEXED_TEX
 void passTextureIndex();
 #endif
 
-ATTRIBUTE vec3 normal;
+in vec3 normal;
 
 #ifdef USE_VERTEX_COLOR
-ATTRIBUTE vec4 diffuse_color;
+in vec4 diffuse_color;
 #endif
 
-ATTRIBUTE vec2 texcoord0;
+in vec2 texcoord0;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
@@ -55,15 +55,15 @@ mat4 getSkinnedTransform();
 #endif
 #endif
 
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
+out vec3 vary_fragcoord;
+out vec3 vary_position;
 
 #ifdef USE_VERTEX_COLOR
-VARYING vec4 vertex_color;
+out vec4 vertex_color;
 #endif
 
-VARYING vec2 vary_texcoord0;
-VARYING vec3 vary_norm;
+out vec2 vary_texcoord0;
+out vec3 vary_norm;
 
 uniform float near_clip;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl
index 37fe8287be3b54badf4001fc913a0c3e8fcd77b0..da467cd5da233207c0ffd69cef913ca6a9c2731b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/aoUtil.glsl
@@ -43,7 +43,7 @@ vec2 getScreenCoordinateAo(vec2 screenpos)
 
 float getDepthAo(vec2 pos_screen)
 {
-    float depth = texture2D(depthMap, pos_screen).r;
+    float depth = texture(depthMap, pos_screen).r;
     return depth;
 }
 
@@ -79,7 +79,7 @@ float calcAmbientOcclusion(vec4 pos, vec3 norm, vec2 pos_screen)
 {
     float ret = 1.0;
     vec3 pos_world = pos.xyz;
-    vec2 noise_reflect = texture2D(noiseMap, pos_screen.xy * (screen_res / 128)).xy;
+    vec2 noise_reflect = texture(noiseMap, pos_screen.xy * (screen_res / 128)).xy;
 
     float angle_hidden = 0.0;
     float points = 0;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaMaskShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaMaskShadowF.glsl
index 44f67899e46b3f84ee37937fa254c0de00379326..f1dc1159d071e5d1a804fb093c7ce5660c9080ab 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaMaskShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaMaskShadowF.glsl
@@ -23,22 +23,18 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform float minimum_alpha;
 uniform sampler2D diffuseMap;
 
-VARYING float target_pos_x;
-VARYING float pos_w;
-VARYING vec2 vary_texcoord0;
+in float target_pos_x;
+in float pos_w;
+in vec2 vary_texcoord0;
 
 void main() 
 {
-	float alpha = texture2D(diffuseMap, vary_texcoord0.xy).a;
+	float alpha = texture(diffuseMap, vary_texcoord0.xy).a;
 
 	if (alpha < 0.05) // treat as totally transparent
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowF.glsl
index 9a0024ede9c29d16e3fda33fadbbf41ff9fc1384..097e28aa0c6c41c2e2d75564136a359b3bb96027 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowF.glsl
@@ -23,24 +23,20 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform float minimum_alpha;
 
 uniform sampler2D diffuseMap;
 
-VARYING float pos_w;
-VARYING float target_pos_x;
-VARYING vec2 vary_texcoord0;
+in float pos_w;
+in float target_pos_x;
+in vec2 vary_texcoord0;
 uniform vec4 color;
 
 void main() 
 {
-	float alpha = texture2D(diffuseMap, vary_texcoord0.xy).a * color.a;
+	float alpha = texture(diffuseMap, vary_texcoord0.xy).a * color.a;
 
 	if (alpha < 0.05) // treat as totally transparent
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowV.glsl
index dfe7077db5c4596617093d35923e673c072db5ee..57e0b2b59fbefebeb8b3d1fb1fcabea407958a81 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaShadowV.glsl
@@ -30,13 +30,13 @@ uniform float shadow_target_width;
 mat4 getSkinnedTransform();
 void passTextureIndex();
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
-VARYING float pos_w;
-VARYING float target_pos_x;
-VARYING vec2 vary_texcoord0;
+out float pos_w;
+out float target_pos_x;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl
index 01ffb862f70e9aed4a1a342fee2ec1706264214a..83b0ba096cc274a2ce76c00e263211d5f7820728 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl
@@ -27,14 +27,14 @@ uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec4 diffuse_color;
+in vec2 texcoord0;
 
-VARYING vec3 vary_normal;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec3 vary_normal;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
index 22b3bd146340bfc8521b8cbf8815d32852a1f5ea..6ebe4ce25105a801397048f946c9577d6aaeef3b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -25,24 +25,20 @@
 
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_data[3];
-#else
-#define frag_data gl_FragData
-#endif
 
 uniform sampler2D diffuseMap;
 
 uniform float minimum_alpha;
 
-VARYING vec3 vary_normal;
-VARYING vec2 vary_texcoord0;
+in vec3 vary_normal;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 
 void main() 
 {
-	vec4 diff = texture2D(diffuseMap, vary_texcoord0.xy);
+	vec4 diff = texture(diffuseMap, vary_texcoord0.xy);
 	
 	if (diff.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
index ac8a483a6a19eced9d7dbbb0f614d39a280a125b..5c64d48399be760bb0906014ba501731da66b4c4 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
@@ -27,9 +27,9 @@ uniform mat4 projection_matrix;
 
 mat4 getSkinnedTransform();
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl
index 1bd8fee7c974949ee9e43f1f520ec441c7cc6644..bc0c11ec46d7845aaeb7fced245c0bde5e72d645 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl
@@ -25,16 +25,16 @@
  
 uniform mat4 projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
 mat4 getSkinnedTransform();
 
-ATTRIBUTE vec4 weight;
+in vec4 weight;
 
-VARYING vec3 vary_normal;
-VARYING vec2 vary_texcoord0;
+out vec3 vary_normal;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
index cc79b450ac1cc68567079bb084ffb9d2b9a39ba6..08baf98686e8deabc5f013170867be8da14709e0 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D normalMap;
 uniform sampler2D lightMap;
@@ -43,7 +37,7 @@ uniform vec2 screen_res;
 uniform vec3 kern[4];
 uniform float kern_scale;
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 vec4 getPosition(vec2 pos_screen);
 vec3 getNorm(vec2 pos_screen);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl
index 5e0f01981bea903135756621088fe113e0312f4f..5abaa1f2a6a3dd2bcbf2760a1f9fd40cd684e51a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl
@@ -23,9 +23,9 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 vary_fragcoord;
+out vec2 vary_fragcoord;
 uniform vec2 screen_res;
 
 void main()
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
index c18bca066d0ad71c41d0dc4ca7db13333a09cc0b..35f483f633aa00018d47486f7f53e2540b145565 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
@@ -31,18 +31,18 @@ uniform float minimum_alpha;
 uniform sampler2D diffuseMap;
 uniform sampler2D bumpMap;
 
-VARYING vec3 vary_mat0;
-VARYING vec3 vary_mat1;
-VARYING vec3 vary_mat2;
+in vec3 vary_mat0;
+in vec3 vary_mat1;
+in vec3 vary_mat2;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 
 void main() 
 {
-	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
+	vec4 col = texture(diffuseMap, vary_texcoord0.xy);
 	
 	if(col.a < minimum_alpha)
 	{
@@ -50,7 +50,7 @@ void main()
     }		
 		col *= vertex_color;
 		
-		vec3 norm = texture2D(bumpMap, vary_texcoord0.xy).rgb * 2.0 - 1.0;
+		vec3 norm = texture(bumpMap, vary_texcoord0.xy).rgb * 2.0 - 1.0;
 
 		vec3 tnorm = vec3(dot(norm,vary_mat0),
 			  dot(norm,vary_mat1),
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
index d90891aa208dfbbad9ad59eb177487cacc3de316..3af2eab1e4c0d1f6d1d3902e6b1e40d328810ebc 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
@@ -27,17 +27,17 @@ uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec4 tangent;
+in vec3 position;
+in vec4 diffuse_color;
+in vec3 normal;
+in vec2 texcoord0;
+in vec4 tangent;
 
-VARYING vec3 vary_mat0;
-VARYING vec3 vary_mat1;
-VARYING vec3 vary_mat2;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec3 vary_mat0;
+out vec3 vary_mat1;
+out vec3 vary_mat2;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
index 61eee69a1644c42948627080c4f7a4e8060f3418..98314d39d3eb2c5caa2add97888807614cd92afc 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
@@ -25,23 +25,23 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
 //////////////////////////////////////////////////////////////////////////
 // The vertex shader for creating the atmospheric sky
 ///////////////////////////////////////////////////////////////////////////////
 
 // Output parameters
-VARYING vec3 vary_CloudColorSun;
-VARYING vec3 vary_CloudColorAmbient;
-VARYING float vary_CloudDensity;
-
-VARYING vec2 vary_texcoord0;
-VARYING vec2 vary_texcoord1;
-VARYING vec2 vary_texcoord2;
-VARYING vec2 vary_texcoord3;
-VARYING float altitude_blend_factor;
+out vec3 vary_CloudColorSun;
+out vec3 vary_CloudColorAmbient;
+out float vary_CloudDensity;
+
+out vec2 vary_texcoord0;
+out vec2 vary_texcoord1;
+out vec2 vary_texcoord2;
+out vec2 vary_texcoord3;
+out float altitude_blend_factor;
 
 // Inputs
 uniform vec3 camPosLocal;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
index 929b4e17b18b074fe32eb5332393135c2e4a5738..d95a33a6be8370388bf1dcb6ef2194e992a5aebe 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D depthMap;
@@ -47,7 +41,7 @@ uniform float max_cof;
 uniform mat4 inv_proj;
 uniform vec2 screen_res;
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 float calc_cof(float depth)
 {
@@ -68,13 +62,13 @@ void main()
 {
 	vec2 tc = vary_fragcoord.xy;
 
-    float z = texture2D(depthMap, tc).r;
+    float z = texture(depthMap, tc).r;
 	z = z*2.0-1.0;
 	vec4 ndc = vec4(0.0, 0.0, z, 1.0);
 	vec4 p = inv_proj*ndc;
 	float depth = p.z/p.w;
 	
-	vec4 diff = texture2D(diffuseRect, vary_fragcoord.xy);
+	vec4 diff = texture(diffuseRect, vary_fragcoord.xy);
 	
 	float sc = calc_cof(depth);
 	sc = min(sc, max_cof);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
index 8797f89e4ce5831cf632f19d23a244e4650fede8..55e45ce0af6f308ae8eef896e77c06dc3ada5453 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl
@@ -144,7 +144,7 @@ vec2 getScreenCoordinate(vec2 screenpos)
 //      Method #4: Spheremap Transform, Lambert Azimuthal Equal-Area projection
 vec3 getNorm(vec2 screenpos)
 {
-   vec2 enc = texture2D(normalMap, screenpos.xy).xy;
+   vec2 enc = texture(normalMap, screenpos.xy).xy;
    vec2 fenc = enc*4-2;
    float f = dot(fenc,fenc);
    float g = sqrt(1-f/4);
@@ -170,7 +170,7 @@ vec3 getNormalFromPacked(vec4 packedNormalEnvIntensityFlags)
 // See: C++: addDeferredAttachments(), GLSL: softenLightF
 vec4 getNormalEnvIntensityFlags(vec2 screenpos, out vec3 n, out float envIntensity)
 {
-    vec4 packedNormalEnvIntensityFlags = texture2D(normalMap, screenpos.xy);
+    vec4 packedNormalEnvIntensityFlags = texture(normalMap, screenpos.xy);
     n = getNormalFromPacked( packedNormalEnvIntensityFlags );
     envIntensity = packedNormalEnvIntensityFlags.z;
     return packedNormalEnvIntensityFlags;
@@ -190,7 +190,7 @@ float linearDepth01(float d, float znear, float zfar)
 
 float getDepth(vec2 pos_screen)
 {
-    float depth = texture2D(depthMap, pos_screen).r;
+    float depth = texture(depthMap, pos_screen).r;
     return depth;
 }
 
@@ -199,7 +199,7 @@ vec4 getTexture2DLodAmbient(vec2 tc, float lod)
 #ifndef FXAA_GLSL_120
     vec4 ret = textureLod(projectionMap, tc, lod);
 #else
-    vec4 ret = texture2D(projectionMap, tc);
+    vec4 ret = texture(projectionMap, tc);
 #endif
     ret.rgb = srgb_to_linear(ret.rgb);
 
@@ -215,7 +215,7 @@ vec4 getTexture2DLodDiffuse(vec2 tc, float lod)
 #ifndef FXAA_GLSL_120
     vec4 ret = textureLod(projectionMap, tc, lod);
 #else
-    vec4 ret = texture2D(projectionMap, tc);
+    vec4 ret = texture(projectionMap, tc);
 #endif
     ret.rgb = srgb_to_linear(ret.rgb);
 
@@ -262,7 +262,7 @@ vec4 texture2DLodSpecular(vec2 tc, float lod)
 #ifndef FXAA_GLSL_120
     vec4 ret = textureLod(projectionMap, tc, lod);
 #else
-    vec4 ret = texture2D(projectionMap, tc);
+    vec4 ret = texture(projectionMap, tc);
 #endif
     ret.rgb = srgb_to_linear(ret.rgb);
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
index afc05b8bb54075c2796a70b63da7f2fc240ec03f..6f3b94f734633e1e9efdfcacd79bf31cfff8ea5f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
@@ -31,15 +31,15 @@ uniform float minimum_alpha;
 
 uniform sampler2D diffuseMap;
 
-VARYING vec3 vary_normal;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec3 vary_normal;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 
 void main() 
 {
-	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy) * vertex_color;
+	vec4 col = texture(diffuseMap, vary_texcoord0.xy) * vertex_color;
 	
 	if (col.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
index 078197f9a8c38398a05d03c53a7db8bf5042ec95..e5f2af2c532f0ca51720b2f0ebf8cef31840783b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -27,12 +27,12 @@
 
 out vec4 frag_data[4];
 
-VARYING vec3 vary_normal;
+in vec3 vary_normal;
 
 uniform float minimum_alpha;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
index 307dda6b73ef10d1ca25ffae5917b85870dac87c..234f096ed581d808e344dd88e83115ed939b1ae8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
@@ -31,14 +31,14 @@ uniform float minimum_alpha;
 
 uniform sampler2D diffuseMap;
 
-VARYING vec3 vary_normal;
-VARYING vec2 vary_texcoord0;
+in vec3 vary_normal;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 
 void main() 
 {
-	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
+	vec4 col = texture(diffuseMap, vary_texcoord0.xy);
 	
 	if (col.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
index 24e290c6147a2c5e3798fc18952a6c505aea90a2..68fb8bf4993d5e8ee3ee637b19884f1e2a24ede8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -29,15 +29,15 @@ out vec4 frag_data[4];
 
 uniform sampler2D diffuseMap;
 
-VARYING vec3 vary_normal;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec3 vary_normal;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 
 void main() 
 {
-	vec3 col = vertex_color.rgb * texture2D(diffuseMap, vary_texcoord0.xy).rgb;
+	vec3 col = vertex_color.rgb * texture(diffuseMap, vary_texcoord0.xy).rgb;
 	frag_data[0] = vec4(col, 0.0);
 	frag_data[1] = vertex_color.aaaa; // spec
 	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
index be870b2424d69ae21c6764ddb5d3f9693be9e3b0..93d561504e5215892da2981dcb95dbd59aa71ded 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
@@ -27,9 +27,9 @@
 
 out vec4 frag_data[4];
 
-VARYING vec3 vary_normal;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec3 vary_normal;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 vec3 linear_to_srgb(vec3 c);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseNoColorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseNoColorV.glsl
index 9461e3e32e52ee78d018925fd0c7d936932dfd96..13cc612fabb53ed9adfd814eb12bffd2f18f397e 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseNoColorV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseNoColorV.glsl
@@ -27,13 +27,13 @@ uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix; 
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
-VARYING vec3 vary_normal;
+out vec3 vary_normal;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
index d64bcefade713da5d18cab55311371f346afea88..2402cc3b707b46330304c2eb3d9fc7733387522a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
@@ -27,15 +27,15 @@ uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec4 diffuse_color;
+in vec3 normal;
+in vec2 texcoord0;
 
-VARYING vec3 vary_normal;
+out vec3 vary_normal;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 void passTextureIndex();
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl b/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
index d9c0e590c8be82eb14d25087991401d46ac94a97..3b9b8ae6966a77000109ecc426fda99800fd0570 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D lightMap;
@@ -44,14 +38,14 @@ uniform float res_scale;
 uniform float dof_width;
 uniform float dof_height;
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 vec4 dofSample(sampler2D tex, vec2 tc)
 {
 	tc.x = min(tc.x, dof_width);
 	tc.y = min(tc.y, dof_height);
 
-	return texture2D(tex, tc);
+	return texture(tex, tc);
 }
 
 void main() 
@@ -60,7 +54,7 @@ void main()
 	
 	vec4 dof = dofSample(diffuseRect, vary_fragcoord.xy*res_scale);
 	
-	vec4 diff = texture2D(lightMap, vary_fragcoord.xy);
+	vec4 diff = texture(lightMap, vary_fragcoord.xy);
 
 	float a = min(abs(diff.a*2.0-1.0) * max_cof*res_scale*res_scale, 1.0);
 
@@ -69,10 +63,10 @@ void main()
 		float sc = a/res_scale;
 		
 		vec4 col;
-		col = texture2D(lightMap, vary_fragcoord.xy+vec2(sc,sc)/screen_res);
-		col += texture2D(lightMap, vary_fragcoord.xy+vec2(-sc,sc)/screen_res);
-		col += texture2D(lightMap, vary_fragcoord.xy+vec2(sc,-sc)/screen_res);
-		col += texture2D(lightMap, vary_fragcoord.xy+vec2(-sc,-sc)/screen_res);
+		col = texture(lightMap, vary_fragcoord.xy+vec2(sc,sc)/screen_res);
+		col += texture(lightMap, vary_fragcoord.xy+vec2(-sc,sc)/screen_res);
+		col += texture(lightMap, vary_fragcoord.xy+vec2(sc,-sc)/screen_res);
+		col += texture(lightMap, vary_fragcoord.xy+vec2(-sc,-sc)/screen_res);
 		
 		diff = mix(diff, col*0.25, a);
 	}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl b/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
index c8d6e395a3eaa96eec2ddad01a7206f7a70795c0..9e61b6b894da3cf43f6ed52cadd203388a941cf9 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
@@ -23,14 +23,12 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 out vec4 frag_color;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 void main() 
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/emissiveV.glsl b/indra/newview/app_settings/shaders/class1/deferred/emissiveV.glsl
index 08b1147ab0b1a63f19dfdeacdbb96b7023b99889..5a0913a970b0da5709d2146fd202625a2d9b1320 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/emissiveV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/emissiveV.glsl
@@ -27,18 +27,18 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 void passTextureIndex();
-ATTRIBUTE vec4 emissive;
-ATTRIBUTE vec2 texcoord0;
+in vec4 emissive;
+in vec2 texcoord0;
 
 void calcAtmospherics(vec3 inPositionEye);
 
 vec3 atmosAmbient();
 vec3 atmosAffectDirectionalLight(float lightIntensity);
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl b/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl
index 81f1e9aed065e29decf00b27c146786d19edc5a5..9ac4ceb37eaf856b4bf6ac83481e1260f0be8216 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/exposureF.glsl
@@ -23,8 +23,6 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 out vec4 frag_color;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index 631ffc9625ef3c6412447daa9dc01a9bc6b57c4a..385cd51969b000b80a9e9f386916cf92325a9ea3 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -23,8 +23,6 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 out vec4 frag_color;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
index 0e461b400480f7aec3b753364c69e66e921130f7..5795384b474bf670af5322a23541c4715f83d135 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
@@ -36,16 +36,16 @@ uniform vec4 origin;
 
 
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 void passTextureIndex();
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
+in vec3 normal;
+in vec4 diffuse_color;
+in vec2 texcoord0;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-VARYING vec3 vary_texcoord1;
-VARYING vec3 vary_position;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
+out vec3 vary_texcoord1;
+out vec3 vary_position;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
index e5657221643980089f3d528cc454619ba826d877..77e63e6360c3f5994b1b5b793d3b0ed524e29a0c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
@@ -28,20 +28,20 @@ uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 void passTextureIndex();
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
+in vec4 diffuse_color;
+in vec2 texcoord0;
 
 void calcAtmospherics(vec3 inPositionEye);
 
 vec3 atmosAmbient();
 vec3 atmosAffectDirectionalLight(float lightIntensity);
 
-VARYING vec3 vary_position;
+out vec3 vary_position;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
index 50d697ae12766b3152fd777e40ce04a26fd5e381..cd56ed0adffc0c659fb08802151f1c83f13c8e0c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
@@ -2093,8 +2093,8 @@ uniform sampler2D depthMap;
 uniform vec2 rcp_screen_res;
 uniform vec4 rcp_frame_opt;
 uniform vec4 rcp_frame_opt2;
-VARYING vec2 vary_fragcoord;
-VARYING vec2 vary_tc;
+in vec2 vary_fragcoord;
+in vec2 vary_tc;
 
 void main() 
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/genbrdflutF.glsl b/indra/newview/app_settings/shaders/class1/deferred/genbrdflutF.glsl
index 9e6c8530155ff8753aa952a2f07a8343f60f6f4b..e40d070268ef6223c861aa88e2fc15e998f1b312 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/genbrdflutF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/genbrdflutF.glsl
@@ -49,7 +49,7 @@ SOFTWARE.
 
 /*[EXTRA_CODE_HERE]*/
 
-VARYING vec2 vary_uv;
+in vec2 vary_uv;
 
 out vec4 outColor;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/genbrdflutV.glsl b/indra/newview/app_settings/shaders/class1/deferred/genbrdflutV.glsl
index 682244478bd7e3467cbbf1fcbc4ac3069de92481..3a1572996fb19b8783eb8e33011fc3f5addd47ea 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/genbrdflutV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/genbrdflutV.glsl
@@ -25,9 +25,9 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 vary_uv;
+out vec2 vary_uv;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/highlightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/highlightF.glsl
index 74df43b7c36e01ad65e48be6f756559b56d1e80a..748fcbed80ede8ac76a260f9cbcdda9a1e2be844 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/highlightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/highlightF.glsl
@@ -28,11 +28,11 @@ out vec4 frag_data[4];
 uniform vec4 color;
 uniform sampler2D diffuseMap;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 void main() 
 {
-	frag_data[0] = color*texture2D(diffuseMap, vary_texcoord0.xy);
+	frag_data[0] = color*texture(diffuseMap, vary_texcoord0.xy);
 	frag_data[1] = vec4(0.0);
 	frag_data[2] = vec4(0.0, 1.0, 0.0, GBUFFER_FLAG_SKIP_ATMOS);
     frag_data[3] = vec4(0);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
index 5e67442b3acefb3a04f557439fdf9c29a9567af8..aae595f6192235eb75249bb64288cfce7c6e1b6c 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
@@ -34,22 +34,22 @@ uniform sampler2D diffuseMap;
 uniform sampler2D normalMap;
 uniform sampler2D specularMap;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 vec3 linear_to_srgb(vec3 c);
 vec2 encode_normal (vec3 n);
 
 void main() 
 {
-	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
+	vec4 col = texture(diffuseMap, vary_texcoord0.xy);
 
 	if (col.a < minimum_alpha)
 	{
 		discard;
 	}
 
-	vec4 norm = texture2D(normalMap,   vary_texcoord0.xy);
-	vec4 spec = texture2D(specularMap, vary_texcoord0.xy);
+	vec4 norm = texture(normalMap,   vary_texcoord0.xy);
+	vec4 spec = texture(specularMap, vary_texcoord0.xy);
 
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = spec;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl
index 42266e9378e12dcca9ae0138eacfa267e9ff41e3..444c54a31e24313a867990f35c4cccdbc32b84be 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl
@@ -26,10 +26,10 @@
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
index d41e0b202b89eae46aa0e71da9c37c5c8dd4b963..7cdddfe8db428c64d6ccf75d478cde666ea2f592 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
@@ -43,38 +43,38 @@ uniform mat4 modelview_projection_matrix;
 uniform mat4 modelview_matrix;
 #endif
 
-VARYING vec3 vary_position;
+out vec3 vary_position;
 
 #endif
 
 uniform mat4 texture_matrix0;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec4 diffuse_color;
+in vec3 normal;
+in vec2 texcoord0;
 
 
 #ifdef HAS_NORMAL_MAP
-ATTRIBUTE vec4 tangent;
-ATTRIBUTE vec2 texcoord1;
+in vec4 tangent;
+in vec2 texcoord1;
 
 out vec3 vary_tangent;
 flat out float vary_sign;
 out vec3 vary_normal;
 
-VARYING vec2 vary_texcoord1;
+out vec2 vary_texcoord1;
 #else
-VARYING vec3 vary_normal;
+out vec3 vary_normal;
 #endif
 
 #ifdef HAS_SPECULAR_MAP
-ATTRIBUTE vec2 texcoord2;
-VARYING vec2 vary_texcoord2;
+in vec2 texcoord2;
+out vec2 vary_texcoord2;
 #endif
  
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
index 573b5220685c61de2172bd9a2027bd4537e9911c..f3e7b2ee724b46eb093e511975aab57eb112e8b8 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl
@@ -23,8 +23,6 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 out vec4 frag_data[4];
diff --git a/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl b/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl
index 7a941674b87363f6ceeb7dc635cab45e55b37aa7..05dced00262b9f4ccf90bebe17f583b05ab714e2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl
@@ -23,19 +23,13 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D alphaMap;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 uniform float stepX;
 uniform float stepY;
@@ -43,12 +37,12 @@ uniform float norm_scale;
 
 void main()
 {
-	float c = texture2D(alphaMap, vary_texcoord0).r;
+	float c = texture(alphaMap, vary_texcoord0).r;
 
-	vec3 right = vec3(norm_scale, 0, (texture2D(alphaMap, vary_texcoord0+vec2(stepX, 0)).r-c)*255);
-	vec3 left = vec3(-norm_scale, 0, (texture2D(alphaMap, vary_texcoord0-vec2(stepX, 0)).r-c)*255);
-	vec3 up = vec3(0, -norm_scale, (texture2D(alphaMap, vary_texcoord0-vec2(0, stepY)).r-c)*255);
-	vec3 down = vec3(0, norm_scale, (texture2D(alphaMap, vary_texcoord0+vec2(0, stepY)).r-c)*255);
+	vec3 right = vec3(norm_scale, 0, (texture(alphaMap, vary_texcoord0+vec2(stepX, 0)).r-c)*255);
+	vec3 left = vec3(-norm_scale, 0, (texture(alphaMap, vary_texcoord0-vec2(stepX, 0)).r-c)*255);
+	vec3 up = vec3(0, -norm_scale, (texture(alphaMap, vary_texcoord0-vec2(0, stepY)).r-c)*255);
+	vec3 down = vec3(0, norm_scale, (texture(alphaMap, vary_texcoord0+vec2(0, stepY)).r-c)*255);
 	
 	vec3 norm = cross(right, down) + cross(down, left) + cross(left,up) + cross(up, right);
 	
diff --git a/indra/newview/app_settings/shaders/class1/deferred/normgenV.glsl b/indra/newview/app_settings/shaders/class1/deferred/normgenV.glsl
index 9bceae05b71d05783930f7264aa3a13cc7093bab..7896659ad3cf5ca37af50993632845884ecd4937 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/normgenV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/normgenV.glsl
@@ -23,11 +23,11 @@
  * $/LicenseInfo$
  */
  
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_fragcoord;
-VARYING vec2 vary_texcoord0;
+out vec2 vary_fragcoord;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskF.glsl
index 5ef9bb68059b77cb21d523a8aa3034ee8f4191b0..e06f3a5f4448e8a8dec03cd6b656e6006b7a67fa 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskF.glsl
@@ -23,11 +23,7 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl
index 1c36aa6b5063b6e8f7ddc8d7ad438da0ca3285ea..b74b2e6a83b01acbd6551d627593e282af448fa5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbrglowF.glsl
@@ -47,7 +47,7 @@ vec3 srgb_to_linear(vec3 c);
 
 void main()
 {
-    vec4 basecolor = texture2D(diffuseMap, base_color_texcoord.xy).rgba;
+    vec4 basecolor = texture(diffuseMap, base_color_texcoord.xy).rgba;
 
     if (basecolor.a < minimum_alpha)
     {
@@ -55,7 +55,7 @@ void main()
     }
 
     vec3 emissive = emissiveColor;
-    emissive *= srgb_to_linear(texture2D(emissiveMap, emissive_texcoord.xy).rgb);
+    emissive *= srgb_to_linear(texture(emissiveMap, emissive_texcoord.xy).rgb);
 
     float lum = max(max(emissive.r, emissive.g), emissive.b);
     lum *= vertex_emissive.a;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
index 8e5a6c90e03fa19f2fea494d87c86d938bde5265..faa273b8347fe32ba5040926f3ddc44d87cc908f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pbropaqueF.glsl
@@ -62,7 +62,7 @@ uniform mat3 normal_matrix;
 
 void main()
 {
-    vec4 basecolor = texture2D(diffuseMap, base_color_texcoord.xy).rgba;
+    vec4 basecolor = texture(diffuseMap, base_color_texcoord.xy).rgba;
     if (basecolor.a < minimum_alpha)
     {
         discard;
@@ -71,7 +71,7 @@ void main()
     vec3 col = vertex_color.rgb * srgb_to_linear(basecolor.rgb);
 
     // from mikktspace.com
-    vec3 vNt = texture2D(bumpMap, normal_texcoord.xy).xyz*2.0-1.0;
+    vec3 vNt = texture(bumpMap, normal_texcoord.xy).xyz*2.0-1.0;
     float sign = vary_sign;
     vec3 vN = vary_normal;
     vec3 vT = vary_tangent.xyz;
@@ -84,13 +84,13 @@ void main()
     //   occlusion 1.0
     //   roughness 0.0
     //   metal     0.0
-    vec3 spec = texture2D(specularMap, metallic_roughness_texcoord.xy).rgb;
+    vec3 spec = texture(specularMap, metallic_roughness_texcoord.xy).rgb;
     
     spec.g *= roughnessFactor;
     spec.b *= metallicFactor;
 
     vec3 emissive = emissiveColor;
-    emissive *= srgb_to_linear(texture2D(emissiveMap, emissive_texcoord.xy).rgb);
+    emissive *= srgb_to_linear(texture(emissiveMap, emissive_texcoord.xy).rgb);
 
     tnorm *= gl_FrontFacing ? 1.0 : -1.0;
 
@@ -131,7 +131,7 @@ vec3 srgb_to_linear(vec3 c);
 
 void main()
 {
-    vec4 basecolor = texture2D(diffuseMap, base_color_texcoord.xy).rgba;
+    vec4 basecolor = texture(diffuseMap, base_color_texcoord.xy).rgba;
     if (basecolor.a < minimum_alpha)
     {
         discard;
@@ -140,7 +140,7 @@ void main()
     vec3 col = vertex_color.rgb * srgb_to_linear(basecolor.rgb);
 
     vec3 emissive = emissiveColor;
-    emissive *= srgb_to_linear(texture2D(emissiveMap, emissive_texcoord.xy).rgb);
+    emissive *= srgb_to_linear(texture(emissiveMap, emissive_texcoord.xy).rgb);
 
     col += emissive;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
index 5ca39d6966b70418575d20dcdf0c32ee8f1a6e99..86e3f1acda07f6dedb16df78fd85cf05e1784331 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 
@@ -40,11 +34,11 @@ uniform vec2 screen_res;
 uniform float max_cof;
 uniform float res_scale;
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 void dofSample(inout vec4 diff, inout float w, float min_sc, vec2 tc)
 {
-	vec4 s = texture2D(diffuseRect, tc);
+	vec4 s = texture(diffuseRect, tc);
 
 	float sc = abs(s.a*2.0-1.0)*max_cof;
 
@@ -63,7 +57,7 @@ void dofSample(inout vec4 diff, inout float w, float min_sc, vec2 tc)
 
 void dofSampleNear(inout vec4 diff, inout float w, float min_sc, vec2 tc)
 {
-	vec4 s = texture2D(diffuseRect, tc);
+	vec4 s = texture(diffuseRect, tc);
 
 	float wg = 0.25;
 
@@ -79,7 +73,7 @@ void main()
 {
 	vec2 tc = vary_fragcoord.xy;
 	
-	vec4 diff = texture2D(diffuseRect, vary_fragcoord.xy);
+	vec4 diff = texture(diffuseRect, vary_fragcoord.xy);
 	
 	{ 
 		float w = 1.0;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
index 80816912daaad0b540c5edfc3d15ff5992596560..a32296369cf403596988659e4838a5e4f7943328 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -23,21 +23,15 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D exposureMap;
 
 uniform vec2 screen_res;
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 vec3 linear_to_srgb(vec3 cl);
 
@@ -173,7 +167,7 @@ vec3 legacyGamma(vec3 color)
 void main() 
 {
     //this is the one of the rare spots where diffuseRect contains linear color values (not sRGB)
-    vec4 diff = texture2D(diffuseRect, vary_fragcoord);
+    vec4 diff = texture(diffuseRect, vary_fragcoord);
 
     diff.rgb = toneMap(diff.rgb);
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
index 004190dbd9496aef9e2e0775d7078cd27b2c447d..bace9b8c90c48e1224f0e29d23bc5f9609ac5efc 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
@@ -23,25 +23,19 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D depthMap;
 
 uniform vec2 screen_res;
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 void main() 
 {
-	vec4 diff = texture2D(diffuseRect, vary_fragcoord.xy);
+	vec4 diff = texture(diffuseRect, vary_fragcoord.xy);
 	
 	frag_color = diff;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl
index 8b4cac3e647fa2fcc30d7c4cbbe75d59f16bbb7c..7e8a5d68d4d2c1c3f9b955a98be2aa1c3965228a 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl
@@ -23,9 +23,9 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 vary_fragcoord;
+out vec2 vary_fragcoord;
 
 uniform vec2 screen_res;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl
index 86f0077edb304838836e2d00cccff8f11abef7ef..10b4b3e76c0f57ba180164f620a98a7bbb2c8bc9 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl
@@ -23,10 +23,10 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 vary_fragcoord;
-VARYING vec2 vary_tc;
+out vec2 vary_fragcoord;
+out vec2 vary_tc;
 
 uniform vec2 tc_scale;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredVisualizeBuffers.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredVisualizeBuffers.glsl
index f75b8e265876f655ac15e47f7002fd46dc6dbe24..2c17de311c85ecae4fa01ca717c7edadf2ee7b78 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredVisualizeBuffers.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredVisualizeBuffers.glsl
@@ -23,20 +23,14 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform float mipLevel;
 
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 void main() 
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
index 8c9b6f81909082789ce8cbb7b152056b16491864..a8febabcc6c61b0abec2ecefc0550b69e63c712d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
@@ -25,11 +25,7 @@
 
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl
index 9608e891698297439443f48fd19e386786c3d245..0f5f9ed289e25d7607464082bedf4e7f71e2e17f 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl
@@ -25,7 +25,7 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 uniform vec3 box_center;
 uniform vec3 box_size;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowSkinnedV.glsl
index 186ba49969c5c70537501a62605ac5f31251673d..9bbc63bce1cf645dbde4a20d137c3ec3d37ea1a9 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowSkinnedV.glsl
@@ -26,7 +26,7 @@
 uniform mat4 modelview_matrix;
 uniform mat4 projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 mat4 getObjectSkinnedTransform();
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
index 4fa9ae36339e3ff4f03fcf8eca4dbeb5bd729d8f..17ce2dee5b1dd639e08d323c2424de9816f7afb2 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
@@ -25,7 +25,7 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 // SKY ////////////////////////////////////////////////////////////////////////
 // The vertex shader for creating the atmospheric sky
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
index 4f1756c367f1bc1dd63cf4ae0c785d3370437875..b35d10c8a04b810febbf0232d203d7b1754532b9 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
@@ -48,8 +48,8 @@ void main()
 {
 	// camera above water: class1\deferred\starsF.glsl
 	// camera below water: class1\environment\starsF.glsl
-    vec4 col_a = texture2D(diffuseMap, vary_texcoord0.xy);
-    vec4 col_b = texture2D(diffuseMap, vary_texcoord0.xy);
+    vec4 col_a = texture(diffuseMap, vary_texcoord0.xy);
+    vec4 col_b = texture(diffuseMap, vary_texcoord0.xy);
     vec4 col = mix(col_b, col_a, blend_factor);
     col.rgb *= vertex_color.rgb;
  
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
index 37d1630252452502eb4ce867682b24e8f3001fd3..726508607d307e28948f23520048f6fe640fdbee 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
@@ -27,13 +27,13 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 uniform float time;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec4 diffuse_color;
+in vec2 texcoord0;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-VARYING vec2 screenpos;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
+out vec2 screenpos;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunDiscF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunDiscF.glsl
index a85e6ebc66912fb3da321a2aedd8c516d4aa2b47..fd343ed2dc087b2457ef885501218b13661db535 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunDiscF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunDiscF.glsl
@@ -23,8 +23,6 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 out vec4 frag_data[4];
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl
index d3dfa882f09c7e7ae422f350ed4faf0a1ad80fb2..9a8d791a1d64d7135148e077c20c39957be1033b 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunDiscV.glsl
@@ -27,11 +27,11 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_texcoord0;
-VARYING float sun_fade;
+out vec2 vary_texcoord0;
+out float sun_fade;
 
 void calcAtmospherics(vec3 eye_pos);
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
index 3464212c8436b57cb5117df7577c0fda968c46fc..f6d509e2c6e30c188528b2ace1a638b2962437e5 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
@@ -33,10 +33,10 @@ uniform sampler2D detail_2;
 uniform sampler2D detail_3;
 uniform sampler2D alpha_ramp;
 
-VARYING vec3 pos;
-VARYING vec3 vary_normal;
-VARYING vec4 vary_texcoord0;
-VARYING vec4 vary_texcoord1;
+in vec3 pos;
+in vec3 vary_normal;
+in vec4 vary_texcoord0;
+in vec4 vary_texcoord1;
 
 vec2 encode_normal(vec3 n);
 
@@ -44,14 +44,14 @@ void main()
 {
     /// Note: This should duplicate the blending functionality currently used for the terrain rendering.
     
-    vec4 color0 = texture2D(detail_0, vary_texcoord0.xy);
-    vec4 color1 = texture2D(detail_1, vary_texcoord0.xy);
-    vec4 color2 = texture2D(detail_2, vary_texcoord0.xy);
-    vec4 color3 = texture2D(detail_3, vary_texcoord0.xy);
+    vec4 color0 = texture(detail_0, vary_texcoord0.xy);
+    vec4 color1 = texture(detail_1, vary_texcoord0.xy);
+    vec4 color2 = texture(detail_2, vary_texcoord0.xy);
+    vec4 color3 = texture(detail_3, vary_texcoord0.xy);
 
-    float alpha1 = texture2D(alpha_ramp, vary_texcoord0.zw).a;
-    float alpha2 = texture2D(alpha_ramp,vary_texcoord1.xy).a;
-    float alphaFinal = texture2D(alpha_ramp, vary_texcoord1.zw).a;
+    float alpha1 = texture(alpha_ramp, vary_texcoord0.zw).a;
+    float alpha2 = texture(alpha_ramp,vary_texcoord1.xy).a;
+    float alphaFinal = texture(alpha_ramp, vary_texcoord1.zw).a;
     vec4 outColor = mix( mix(color3, color2, alpha2), mix(color1, color0, alpha1), alphaFinal );
    
     outColor.a = 0.0; // yes, downstream atmospherics 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
index f42cb6ff6dbaf637be15ad99c6d857a281347333..f6d3b59e85638fa45c2d08df599749a9ea6a7194 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
@@ -27,16 +27,16 @@ uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec2 texcoord1;
+in vec3 position;
+in vec3 normal;
+in vec4 diffuse_color;
+in vec2 texcoord0;
+in vec2 texcoord1;
 
-VARYING vec3 pos;
-VARYING vec3 vary_normal;
-VARYING vec4 vary_texcoord0;
-VARYING vec4 vary_texcoord1;
+out vec3 pos;
+out vec3 vary_normal;
+out vec4 vary_texcoord0;
+out vec4 vary_texcoord1;
 
 uniform vec4 object_plane_s;
 uniform vec4 object_plane_t;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
index d857e47b90278310a28221b9d2c794d8a2b1e9f3..e2d87e68fa174eac2c26819b92cf738e32290904 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
@@ -29,9 +29,9 @@ out vec4 frag_data[4];
 
 uniform sampler2D diffuseMap;
 
-VARYING vec4 vertex_color;
-VARYING vec3 vary_normal;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec3 vary_normal;
+in vec2 vary_texcoord0;
 
 uniform float minimum_alpha;
 
@@ -39,7 +39,7 @@ vec2 encode_normal(vec3 n);
 
 void main() 
 {
-	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
+	vec4 col = texture(diffuseMap, vary_texcoord0.xy);
 	if (col.a < minimum_alpha)
 	{
 		discard;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl
index c850a39d6f5f47ffd3f535c16a8de5d6c596a00b..7dcab640f210f5d097f906202a8765d030bf765d 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl
@@ -36,7 +36,7 @@ in vec2 vary_texcoord0;
 
 void main() 
 {
-	float alpha = texture2D(diffuseMap, vary_texcoord0.xy).a;
+	float alpha = texture(diffuseMap, vary_texcoord0.xy).a;
 
 	if (alpha < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeShadowSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeShadowSkinnedV.glsl
index 5a7cf369b55d8e61ef0ed663aac5b4abc0914670..f5192c300986f3855914db911f88a4ae97fe4297 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeShadowSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeShadowSkinnedV.glsl
@@ -27,8 +27,8 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_matrix;
 uniform mat4 projection_matrix;
  
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
 out vec2 vary_texcoord0;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl
index 3b6571a24a9ded2af5eee0fc1598e54b3a4b8122..ce8a10712c426be82343f173dd6f73f66a4c4989 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl
@@ -27,13 +27,13 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 uniform mat3 normal_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
-VARYING vec3 vary_normal;
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec3 vary_normal;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
index 4e535f7e18e24267eccbe978bde3316b141ed897..7a5e14566bb7d09d6fdb89526d42ee2c747cf452 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 uniform float minLuminance;
@@ -40,11 +34,11 @@ uniform vec3 lumWeights;
 uniform vec3 warmthWeights;
 uniform float warmthAmount;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 void main()
 {
-	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);	
+	vec4 col = texture(diffuseMap, vary_texcoord0.xy);	
 	/// CALCULATING LUMINANCE (Using NTSC lum weights)
 	/// http://en.wikipedia.org/wiki/Luma_%28video%29
 	float lum = smoothstep(minLuminance, minLuminance+1.0, dot(col.rgb, lumWeights ) );
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl
index fdca5018b0671b30217b35dfe011eb24ba70ca4f..ccda75596d2a745aad6d3a38373f68cfcd795349 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl
@@ -25,9 +25,9 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main() 
 {
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
index 301e8aba269a734f8e4b69a9a84b6072ff2f3645..8718dd8b52f421d195d122688d99116452097324 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
@@ -23,19 +23,15 @@
  * $/LicenseInfo$
  */
  
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 uniform float glowStrength;
 
-VARYING vec4 vary_texcoord0;
-VARYING vec4 vary_texcoord1;
-VARYING vec4 vary_texcoord2;
-VARYING vec4 vary_texcoord3;
+in vec4 vary_texcoord0;
+in vec4 vary_texcoord1;
+in vec4 vary_texcoord2;
+in vec4 vary_texcoord3;
 
 void main()
 {
@@ -47,14 +43,14 @@ void main()
 		kern[0] = 0.25; kern[1] = 0.5; kern[2] = 0.8; kern[3] = 1.0;
 		kern[4] = 1.0;  kern[5] = 0.8; kern[6] = 0.5; kern[7] = 0.25;
 	
-	col += kern[0] * texture2D(diffuseMap, vary_texcoord0.xy);	
-	col += kern[1] * texture2D(diffuseMap, vary_texcoord1.xy);
-	col += kern[2] * texture2D(diffuseMap, vary_texcoord2.xy);	
-	col += kern[3] * texture2D(diffuseMap, vary_texcoord3.xy);	
-	col += kern[4] * texture2D(diffuseMap, vary_texcoord0.zw);	
-	col += kern[5] * texture2D(diffuseMap, vary_texcoord1.zw);	
-	col += kern[6] * texture2D(diffuseMap, vary_texcoord2.zw);	
-	col += kern[7] * texture2D(diffuseMap, vary_texcoord3.zw);	
+	col += kern[0] * texture(diffuseMap, vary_texcoord0.xy);	
+	col += kern[1] * texture(diffuseMap, vary_texcoord1.xy);
+	col += kern[2] * texture(diffuseMap, vary_texcoord2.xy);	
+	col += kern[3] * texture(diffuseMap, vary_texcoord3.xy);	
+	col += kern[4] * texture(diffuseMap, vary_texcoord0.zw);	
+	col += kern[5] * texture(diffuseMap, vary_texcoord1.zw);	
+	col += kern[6] * texture(diffuseMap, vary_texcoord2.zw);	
+	col += kern[7] * texture(diffuseMap, vary_texcoord3.zw);	
 	
 	frag_color = max(vec4(col.rgb * glowStrength, col.a), vec4(0));
 }
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl
index 63ca15139c8549af69965038848b297b350fd5e2..60ec4e6f3b41c0b5180c044221a215a97d7429eb 100644
--- a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl
@@ -25,14 +25,14 @@
  
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 uniform vec2 glowDelta;
 
-VARYING vec4 vary_texcoord0;
-VARYING vec4 vary_texcoord1;
-VARYING vec4 vary_texcoord2;
-VARYING vec4 vary_texcoord3;
+out vec4 vary_texcoord0;
+out vec4 vary_texcoord1;
+out vec4 vary_texcoord2;
+out vec4 vary_texcoord3;
 
 void main() 
 {
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
index ac400aa2a658e26b4b5ccf6b8be5d2673761ee86..5a3845b1a3e2e331e64476fc6f5effd806e62c1c 100644
--- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
@@ -27,7 +27,7 @@ uniform mat4 modelview_matrix;
 uniform mat3 normal_matrix;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 
 void calcAtmospherics(vec3 inPositionEye);
@@ -39,9 +39,9 @@ uniform vec3 eyeVec;
 uniform float waterHeight;
 uniform vec3 lightDir;
 
-VARYING vec4 refCoord;
-VARYING vec4 littleWave;
-VARYING vec4 view;
+out vec4 refCoord;
+out vec4 littleWave;
+out vec4 view;
 out vec3 vary_position;
 out vec3 vary_light_dir;
 out vec3 vary_tangent;
diff --git a/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl b/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl
index 69c1983b4dcddfb80e152e35567577b4cb734ec9..a46e91c394d5fafed095c23e90acbb0a0f06ddef 100644
--- a/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl
@@ -23,22 +23,18 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 
 uniform float minimum_alpha;
 
-VARYING vec2 vary_texcoord0;
-VARYING vec4 vertex_color;
+in vec2 vary_texcoord0;
+in vec4 vertex_color;
 
 void main() 
 {
-	vec4 col = vertex_color*texture2D(diffuseMap, vary_texcoord0.xy);
+	vec4 col = vertex_color*texture(diffuseMap, vary_texcoord0.xy);
 	if (col.a < minimum_alpha)
 	{
 		discard;
diff --git a/indra/newview/app_settings/shaders/class1/interface/alphamaskV.glsl b/indra/newview/app_settings/shaders/class1/interface/alphamaskV.glsl
index 3580d1f27b2c247e35ac0704fbb06196fa6a44e5..a8dac55130f4f7982c1eac0d194908a455c2b06c 100644
--- a/indra/newview/app_settings/shaders/class1/interface/alphamaskV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/alphamaskV.glsl
@@ -26,12 +26,12 @@
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec4 diffuse_color;
+in vec2 texcoord0;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl b/indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl
index 1936e0dcaa6de6fc90d351fc75eb06419b0ed426..06b19c22c95b7fd395a1dd0398d77bf4e982e8ee 100644
--- a/indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl
@@ -23,17 +23,13 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 
-VARYING vec2 tc0;
+in vec2 tc0;
 
 void main() 
 {
-	frag_color = texture2D(diffuseMap, tc0);
+	frag_color = texture(diffuseMap, tc0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl b/indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl
index 7beb20ede462e547a7d1d649a57d91bdc0603907..cbcc6bef9708da86c7acec7896daeb503e5c34fb 100644
--- a/indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl
@@ -25,9 +25,9 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 tc0;
+out vec2 tc0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/clipF.glsl b/indra/newview/app_settings/shaders/class1/interface/clipF.glsl
index 9454bbf21e39b24ca4536b5aff68e9c5dff97c57..ee2d652f32fbb7780803ca190a0cba450188e99e 100644
--- a/indra/newview/app_settings/shaders/class1/interface/clipF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/clipF.glsl
@@ -23,16 +23,12 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform vec4 color;
 uniform vec4 clip_plane;
 
-VARYING vec3 vary_position;
+in vec3 vary_position;
 
 
 void main() 
diff --git a/indra/newview/app_settings/shaders/class1/interface/clipV.glsl b/indra/newview/app_settings/shaders/class1/interface/clipV.glsl
index e376b25a71fe27e9391a1551b60d94039ca98786..7dd2ef593f3a34123a8cd797798411f243dcf9e3 100644
--- a/indra/newview/app_settings/shaders/class1/interface/clipV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/clipV.glsl
@@ -26,9 +26,9 @@
 uniform mat4 modelview_projection_matrix;
 uniform mat4 modelview_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec3 vary_position;
+out vec3 vary_position;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/debugF.glsl b/indra/newview/app_settings/shaders/class1/interface/debugF.glsl
index cb8d6a8c033d0a834c1e28b7b7f46d47e39bebb2..cefa4296394649b7755674548cca747e8a428b1f 100644
--- a/indra/newview/app_settings/shaders/class1/interface/debugF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/debugF.glsl
@@ -23,11 +23,7 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform vec4 color;
 
diff --git a/indra/newview/app_settings/shaders/class1/interface/debugV.glsl b/indra/newview/app_settings/shaders/class1/interface/debugV.glsl
index 153998f1d5d745baae4c6f17270f9d4f0a53b0b8..2e32863109b34f3e1b42222d0282c0025f456096 100644
--- a/indra/newview/app_settings/shaders/class1/interface/debugV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/debugV.glsl
@@ -25,7 +25,7 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
index e578bb6fc5f6ade50ee848b046f1c441c724d3c5..fa8aa5c7fe6b24873c2f78f51ce76d862c9d394c 100644
--- a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
@@ -23,8 +23,6 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 out vec4 frag_color;
@@ -36,5 +34,5 @@ in vec2 tc;
 
 void main() 
 {
-	frag_color = texture2D(diffuseRect, tc) + texture2D(emissiveRect, tc);
+	frag_color = texture(diffuseRect, tc) + texture(emissiveRect, tc);
 }
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl
index c50548d528301ff2e3bbfd8b21dfee4973f49c10..3d4035620f45b66681e881e898fad8c4acfc13e8 100644
--- a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl
@@ -23,8 +23,6 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 out vec4 frag_color;
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAV.glsl
index 48aab1ce2106366c658f6f8d5af781249818d1b9..fa67b13e4df1940da3f555f61b9076be3e670950 100644
--- a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAV.glsl
@@ -24,9 +24,9 @@
  */
 
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 vary_tc;
+out vec2 vary_tc;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
index 58c9e5ad0a59d12d8c719e7f9e484ce94ec8fa9e..9bba1b2e18fd0f4b1c9533d245a60faaead03709 100644
--- a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
@@ -23,18 +23,14 @@
  * $/LicenseInfo$
  */
  
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform vec4 color;
 uniform sampler2D diffuseMap;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 void main() 
 {
-	frag_color = max(color*texture2D(diffuseMap, vary_texcoord0.xy), vec4(0));
+	frag_color = max(color*texture(diffuseMap, vary_texcoord0.xy), vec4(0));
 }
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightNormV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightNormV.glsl
index 947c2b00652b7ba3c602212d1a728f0c036b57e2..0253c7236da622ea225137a70787d067cfd1e194 100644
--- a/indra/newview/app_settings/shaders/class1/interface/highlightNormV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightNormV.glsl
@@ -26,12 +26,12 @@
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec2 texcoord1;
-ATTRIBUTE vec2 texcoord2;
+in vec3 position;
+in vec2 texcoord0;
+in vec2 texcoord1;
+in vec2 texcoord2;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightSpecV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightSpecV.glsl
index c5d102b7392c65b844382595447d95eb921a3d85..9f7ff8337a691a484b2f8d7be57685788acbccf5 100644
--- a/indra/newview/app_settings/shaders/class1/interface/highlightSpecV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightSpecV.glsl
@@ -26,12 +26,12 @@
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec2 texcoord1;
-ATTRIBUTE vec2 texcoord2;
+in vec3 position;
+in vec2 texcoord0;
+in vec2 texcoord1;
+in vec2 texcoord2;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl
index 0b362cf46c4e6c3ccae1789b0586a136a9448a41..481b7a3b1d1cd47c05585fdd7073a3dffd4bc4ce 100644
--- a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl
@@ -26,10 +26,10 @@
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/interface/irradianceGenV.glsl b/indra/newview/app_settings/shaders/class1/interface/irradianceGenV.glsl
index 5190abf17cfe1211822de02128969519082e3557..633c928e6b01caa3112334ffd836f0bce2974484 100644
--- a/indra/newview/app_settings/shaders/class1/interface/irradianceGenV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/irradianceGenV.glsl
@@ -25,9 +25,9 @@
 
 uniform mat4 modelview_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec3 vary_dir;
+out vec3 vary_dir;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionCubeV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionCubeV.glsl
index 5c479d27a91cbb7f74e04686d500919cfe7dd775..75ff19e4705cb1a67ea7aaff31e528939e8984d8 100644
--- a/indra/newview/app_settings/shaders/class1/interface/occlusionCubeV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionCubeV.glsl
@@ -25,7 +25,7 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 uniform vec3 box_center;
 uniform vec3 box_size;
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionSkinnedV.glsl
index 7305065a057e6bd1ef66352d0563f578ef65f323..1ff9c347b6e1433592c3d5d6f8fc8f84c60943ce 100644
--- a/indra/newview/app_settings/shaders/class1/interface/occlusionSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionSkinnedV.glsl
@@ -26,7 +26,7 @@
 uniform mat4 projection_matrix;
 uniform mat4 modelview_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 mat4 getObjectSkinnedTransform();
 
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
index c26fa08ddc62e15f9ed80556d197e7ae7d5ef700..b44c746fa7bef65eb7f69803626b8f871de9d20f 100644
--- a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
@@ -25,7 +25,7 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/onetexturefilterF.glsl b/indra/newview/app_settings/shaders/class1/interface/onetexturefilterF.glsl
index f1400c9b44f5688acffaca57a3cdf7f8ce0d8dce..a85d055a5b7e52a5d059a69e614ef0f0ff698c44 100644
--- a/indra/newview/app_settings/shaders/class1/interface/onetexturefilterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/onetexturefilterF.glsl
@@ -23,20 +23,16 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D tex0;
 uniform float tolerance;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 void main() 
 {
-	frag_color = texture2D(tex0, vary_texcoord0.xy);
+	frag_color = texture(tex0, vary_texcoord0.xy);
 	
 	if(frag_color[0] + frag_color[1] + frag_color[2] < tolerance)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/interface/onetexturefilterV.glsl b/indra/newview/app_settings/shaders/class1/interface/onetexturefilterV.glsl
index a33ef7e92c18e457decf2f7cd286b336eff01dce..1b8411603a970aad8a963be8625da11cc6d08bb4 100644
--- a/indra/newview/app_settings/shaders/class1/interface/onetexturefilterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/onetexturefilterV.glsl
@@ -25,10 +25,10 @@
  
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/pathfindingF.glsl b/indra/newview/app_settings/shaders/class1/interface/pathfindingF.glsl
index 7379360e178c7fbda7e04bbbfe3eeee73009b140..fac22be6de7532ef2e4717544a6af51f3665382c 100644
--- a/indra/newview/app_settings/shaders/class1/interface/pathfindingF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/pathfindingF.glsl
@@ -23,13 +23,9 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
-VARYING vec4 vertex_color;
+in vec4 vertex_color;
 
 void main() 
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/pathfindingNoNormalV.glsl b/indra/newview/app_settings/shaders/class1/interface/pathfindingNoNormalV.glsl
index 19fa6073071e4e3053a6d8a4a4ed7114a06e30d5..4f08df839dcbd0cc458f3bc93aacb95a34701aad 100644
--- a/indra/newview/app_settings/shaders/class1/interface/pathfindingNoNormalV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/pathfindingNoNormalV.glsl
@@ -25,10 +25,10 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
+in vec3 position;
+in vec4 diffuse_color;
 
-VARYING vec4 vertex_color;
+out vec4 vertex_color;
 
 uniform float tint;
 uniform float alpha_scale;
diff --git a/indra/newview/app_settings/shaders/class1/interface/pathfindingV.glsl b/indra/newview/app_settings/shaders/class1/interface/pathfindingV.glsl
index 91f252cf1eb3575fa4087416cd2b19dd4692e815..9e77927cb807dc6f647f84945f84b83b3b384f77 100644
--- a/indra/newview/app_settings/shaders/class1/interface/pathfindingV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/pathfindingV.glsl
@@ -25,11 +25,11 @@
 
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec3 normal;
+in vec3 position;
+in vec4 diffuse_color;
+in vec3 normal;
 
-VARYING vec4 vertex_color;
+out vec4 vertex_color;
 
 uniform float tint;
 uniform float ambiance;
diff --git a/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl b/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl
index cd5d97c7856428d7bf69829953c6b03867d88e27..9ecdf0bf7708943637423dfb84a73d27dbc6eb8f 100644
--- a/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/radianceGenF.glsl
@@ -31,7 +31,7 @@ out vec4 frag_color;
 uniform samplerCubeArray   reflectionProbes;
 uniform int sourceIdx;
 
-VARYING vec3 vary_dir;
+in vec3 vary_dir;
 
 //uniform float roughness;
 
diff --git a/indra/newview/app_settings/shaders/class1/interface/radianceGenV.glsl b/indra/newview/app_settings/shaders/class1/interface/radianceGenV.glsl
index 5f5d9396ff917a0f37780342a5ab68aee378a338..2c31e9883833d0c31fa8370920f3388ca0957c40 100644
--- a/indra/newview/app_settings/shaders/class1/interface/radianceGenV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/radianceGenV.glsl
@@ -25,9 +25,9 @@
 
 uniform mat4 modelview_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec3 vary_dir;
+out vec3 vary_dir;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
index da02534dbb59421d80d1e2bbba06a25107923940..a14334fd01d9820d3a1aad2889afaef9e2d6bccb 100644
--- a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
@@ -23,21 +23,17 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D tex0;
 
 uniform vec4 color;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 void main() 
 {
-	float alpha = texture2D(tex0, vary_texcoord0.xy).a * color.a;
+	float alpha = texture(tex0, vary_texcoord0.xy).a * color.a;
 
 	frag_color = vec4(color.rgb, alpha);
 }
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
index f33115d78d7004aa8726eceff29d2b4673024c88..b280fcdc151d95044550deac737e5ff412e7d48a 100644
--- a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
@@ -25,10 +25,10 @@
 
 uniform mat4 modelview_projection_matrix;
  
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl
index 6eeb2596b2e1b99a1df7caa6ac7f0530236c8984..6d51b898b76c3a7bdf40d96b8b1fd07a0f0333b8 100644
--- a/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/twotexturecompareF.glsl
@@ -23,11 +23,7 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D tex0;
 uniform sampler2D tex1;
@@ -36,12 +32,12 @@ uniform float dither_scale;
 uniform float dither_scale_s;
 uniform float dither_scale_t;
 
-VARYING vec2 vary_texcoord0;
-VARYING vec2 vary_texcoord1;
+in vec2 vary_texcoord0;
+in vec2 vary_texcoord1;
 
 void main() 
 {
-	frag_color = abs(texture2D(tex0, vary_texcoord0.xy) - texture2D(tex1, vary_texcoord0.xy));
+	frag_color = abs(texture(tex0, vary_texcoord0.xy) - texture(tex1, vary_texcoord0.xy));
 
 	vec2 dither_coord;
 	dither_coord[0] = vary_texcoord0[0] * dither_scale_s;
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotexturecompareV.glsl b/indra/newview/app_settings/shaders/class1/interface/twotexturecompareV.glsl
index 67c6674f0cec4a66c8c8e342c59998298101865a..a103bff12d3d161112e991945d8f18bf845aaf7c 100644
--- a/indra/newview/app_settings/shaders/class1/interface/twotexturecompareV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/twotexturecompareV.glsl
@@ -25,12 +25,12 @@
  
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec2 texcoord1;
+in vec3 position;
+in vec2 texcoord0;
+in vec2 texcoord1;
 
-VARYING vec2 vary_texcoord0;
-VARYING vec2 vary_texcoord1;
+out vec2 vary_texcoord0;
+out vec2 vary_texcoord1;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
index 299bfb72aa7209e40ee2ebcf73adc73a46c2e993..a29b848253bc0decc7cc238d0409930d8f2a5ee9 100644
--- a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
@@ -23,18 +23,14 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 
-VARYING vec2 vary_texcoord0;
-VARYING vec4 vertex_color;
+in vec2 vary_texcoord0;
+in vec4 vertex_color;
 
 void main() 
 {
-	frag_color = vertex_color*texture2D(diffuseMap, vary_texcoord0.xy);
+	frag_color = vertex_color*texture(diffuseMap, vary_texcoord0.xy);
 }
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
index 220dafef25d977f8db1cdb5d9a386258060e0c0b..91a846b9fae956ea50c53721ee0449db27f152a4 100644
--- a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
+++ b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
@@ -26,12 +26,12 @@
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec4 diffuse_color;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec4 diffuse_color;
+in vec2 texcoord0;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
index eaf0f71b415c703b5809a9fef08df5a5f3367440..6535c0835e6b775c63f77d3d89f006b31054779f 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
@@ -23,19 +23,15 @@
  * $/LicenseInfo$
  */
  
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform float minimum_alpha;
 
 vec3 atmosLighting(vec3 light);
 vec3 scaleSoftClip(vec3 light);
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 void default_lighting() 
 {
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
index fc76c0cc009fa795ff15bb9246c0bd802aad49b9..4dc67028d5153ba8acaf99dd3316deff36b401a0 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
@@ -23,11 +23,7 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform float minimum_alpha;
 
@@ -36,12 +32,12 @@ uniform sampler2D diffuseMap;
 vec3 atmosLighting(vec3 light);
 vec3 scaleSoftClip(vec3 light);
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 void default_lighting() 
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
+	vec4 color = texture(diffuseMap,vary_texcoord0.xy);
 
 	if (color.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
index 6b86d717da6cf752c989ea4bd11b5e70d4ff8717..2d1c7dadb0b355bf9171aca07b29dfbc763b3225 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
@@ -23,14 +23,10 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec3 atmosLighting(vec3 light);
 vec3 scaleSoftClip(vec3 light);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl
index 59c1bc1446b031968e506fb956ab1aae40690828..cea08ecffd1d85ddae16439cc1353657f9295229 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl
@@ -23,14 +23,10 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
  
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 uniform sampler2D diffuseMap;
 
@@ -39,7 +35,7 @@ vec3 scaleSoftClip(vec3 light);
 
 void default_lighting() 
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy) * vertex_color;
+	vec4 color = texture(diffuseMap,vary_texcoord0.xy) * vertex_color;
 	
 	color.rgb = atmosLighting(color.rgb);
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
index 7da8e9054a05e7292431b7578a61337e39cc4e48..670b3ddaf159162e2f916e039ba639e5a1943708 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
@@ -23,19 +23,15 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform float minimum_alpha;
 
 vec3 atmosLighting(vec3 light);
 vec4 applyWaterFog(vec4 color);
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 void default_lighting_water()
 {
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
index f767c17f8619218f8e18503b1058c3fcb928e529..2e5ed570148696d0fdce1310f6c4112e8aaa08ff 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
@@ -23,11 +23,7 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform float minimum_alpha;
 
@@ -36,12 +32,12 @@ uniform sampler2D diffuseMap;
 vec3 atmosLighting(vec3 light);
 vec4 applyWaterFog(vec4 color);
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 void default_lighting_water()
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
+	vec4 color = texture(diffuseMap,vary_texcoord0.xy);
 
 	if (color.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
index 2530bdcc744841d90582ace2b3878284cba133b1..09b4a6e3179f7b95962a710682c635f44ecce688 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
@@ -23,14 +23,10 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec3 atmosLighting(vec3 light);
 vec4 applyWaterFog(vec4 color);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl
index 7f112d74352d62e44f7d3811e8c6115eb8b4a031..4888fa547c7df30d86c8d2ad269360026d9226ae 100644
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl
@@ -23,14 +23,10 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 uniform sampler2D diffuseMap;
 
@@ -39,7 +35,7 @@ vec4 applyWaterFog(vec4 color);
 
 void default_lighting_water()
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy) * vertex_color;
+	vec4 color = texture(diffuseMap,vary_texcoord0.xy) * vertex_color;
 
 	color.rgb = atmosLighting(color.rgb);
 
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
index 1deb374cd0a7b4dcb5e068961898272bcfc59e94..67c99530e3aba0f0cd250ca9e8716b20f37533bd 100644
--- a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
@@ -23,22 +23,18 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D texture0;
 uniform sampler2D texture1;
 
-VARYING vec2 vary_texcoord0;
-VARYING vec2 vary_texcoord1;
+in vec2 vary_texcoord0;
+in vec2 vary_texcoord1;
 
 void main() 
 {
-	float tex0 = texture2D(texture0, vary_texcoord0.xy).a;
-	float tex1 = texture2D(texture1, vary_texcoord1.xy).a;
+	float tex0 = texture(texture0, vary_texcoord0.xy).a;
+	float tex1 = texture(texture1, vary_texcoord1.xy).a;
 
 	frag_color = max(vec4(tex0+(1.0-tex1)-0.5), vec4(0));
 }
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
index ee9970bc70ae6e04fafd25cb448224e9280fa175..7d5417919e924f4a216f9f37eecc08627a54ac4e 100644
--- a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
@@ -26,12 +26,12 @@
 uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec2 texcoord1;
+in vec3 position;
+in vec2 texcoord0;
+in vec2 texcoord1;
 
-VARYING vec2 vary_texcoord0;
-VARYING vec2 vary_texcoord1;
+out vec2 vary_texcoord0;
+out vec2 vary_texcoord1;
 
 #ifdef HAS_SKIN
 mat4 getObjectSkinnedTransform();
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
index 467a9949e4197adbdcdac868d4ed25d824a3cdb6..ff9aaf3357cf97c856bbecd677e42e2f0df65b36 100644
--- a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
@@ -23,21 +23,17 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform float minimum_alpha;
 
 uniform sampler2D diffuseMap;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 void main()
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
+	vec4 color = texture(diffuseMap,vary_texcoord0.xy);
 	
 	if (color.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
index e90dbb115a4c8ffc0ab2e7ce142c53cafdf3741e..cf3162f5f1cdf412b32f1ca180ce01acbccec0e9 100644
--- a/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
@@ -27,10 +27,10 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_projection_matrix;
 
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl b/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl
index ca29bf3143384575a9b43095221b6d84986e53b9..d90f9271dc412e2b8256b07bfaf749e1d7416416 100644
--- a/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl
@@ -23,9 +23,9 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE int texture_index;
+in int texture_index;
 
-VARYING_FLAT int vary_texture_index;
+flat out int vary_texture_index;
 
 void passTextureIndex()
 {
diff --git a/indra/newview/app_settings/shaders/class1/objects/previewF.glsl b/indra/newview/app_settings/shaders/class1/objects/previewF.glsl
index 687d6b748254d419fb503c8db0efd114410df4fb..ec785cd1c01bf85667984c69837f38d0a097af1b 100644
--- a/indra/newview/app_settings/shaders/class1/objects/previewF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/previewF.glsl
@@ -23,19 +23,15 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 void main()
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy) * vertex_color;
+	vec4 color = texture(diffuseMap,vary_texcoord0.xy) * vertex_color;
 	frag_color = max(color, vec4(0));
 }
diff --git a/indra/newview/app_settings/shaders/class1/objects/previewPhysicsF.glsl b/indra/newview/app_settings/shaders/class1/objects/previewPhysicsF.glsl
index b56fc97a856470ceb268c101f2c150ed70ebdb5d..e3e71202ae5af4f13eacd3de42d1327d7dd7efa5 100644
--- a/indra/newview/app_settings/shaders/class1/objects/previewPhysicsF.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/previewPhysicsF.glsl
@@ -23,20 +23,16 @@
  * $/LicenseInfo$
  */
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseMap;
 uniform vec4 color;
 
-VARYING vec2 vary_texcoord0;
+in vec2 vary_texcoord0;
 
 //====================================================================================================
 
 void main()
 {
-    frag_color = max(texture2D(diffuseMap,vary_texcoord0.xy) * color, vec4(0));
+    frag_color = max(texture(diffuseMap,vary_texcoord0.xy) * color, vec4(0));
 }
diff --git a/indra/newview/app_settings/shaders/class1/objects/previewPhysicsV.glsl b/indra/newview/app_settings/shaders/class1/objects/previewPhysicsV.glsl
index 913dec83bd711f9419cb77369df3865a69a308bd..d8c74e8537b05c33f8c9e3488afaf2e9460e3749 100644
--- a/indra/newview/app_settings/shaders/class1/objects/previewPhysicsV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/previewPhysicsV.glsl
@@ -27,10 +27,10 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec2 texcoord0;
 
-VARYING vec2 vary_texcoord0;
+out vec2 vary_texcoord0;
 
 //====================================================================================================
 
diff --git a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl
index 5886f47cbce323205f8e6725cc8e317f6d3762c4..b474a5803fe7e294c791c8a0b571f3f6a4e21dba 100644
--- a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl
@@ -28,14 +28,14 @@ uniform mat4 texture_matrix0;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
 uniform vec4 color;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 uniform vec4 light_position[8];
 uniform vec3 light_direction[8];
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleNoColorV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleNoColorV.glsl
index 22821a2f76c45fb7ee837a4e5badfdab31f7f7eb..07f5d250cfc6422b5bc2db3b4ccb60c3585dfe88 100644
--- a/indra/newview/app_settings/shaders/class1/objects/simpleNoColorV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/simpleNoColorV.glsl
@@ -30,12 +30,12 @@ uniform mat4 modelview_projection_matrix;
 
 uniform vec4 color;
 
-ATTRIBUTE vec3 position;
-ATTRIBUTE vec3 normal;
-ATTRIBUTE vec2 texcoord0;
+in vec3 position;
+in vec3 normal;
+in vec2 texcoord0;
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+out vec4 vertex_color;
+out vec2 vary_texcoord0;
 
 
 vec4 calcLighting(vec3 pos, vec3 norm, vec4 color);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
index f4d6eff69ec6181467fc6e7de4f6ca655084d102..ae8cd97b180a823d874a4e5fc011e50a78969dbd 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
@@ -25,19 +25,13 @@
 
 //class2/deferred/alphaF.glsl
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 #define INDEXED 1
 #define NON_INDEXED 2
 #define NON_INDEXED_NO_COLOR 3
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform mat3 env_mat;
 uniform vec3 sun_dir;
@@ -47,13 +41,13 @@ uniform vec3 moon_dir;
 uniform sampler2D diffuseMap;
 #endif
 
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec2 vary_texcoord0;
-VARYING vec3 vary_norm;
+in vec3 vary_fragcoord;
+in vec3 vary_position;
+in vec2 vary_texcoord0;
+in vec3 vary_norm;
 
 #ifdef USE_VERTEX_COLOR
-VARYING vec4 vertex_color; //vertex color should be treated as sRGB
+in vec4 vertex_color; //vertex color should be treated as sRGB
 #endif
 
 #ifdef HAS_ALPHA_MASK
@@ -195,7 +189,7 @@ void main()
 #endif
 
 #ifdef USE_DIFFUSE_TEX
-    vec4 diffuse_tap = texture2D(diffuseMap,vary_texcoord0.xy);
+    vec4 diffuse_tap = texture(diffuseMap,vary_texcoord0.xy);
 #endif
 
 #ifdef USE_INDEXED_TEX
diff --git a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
index cd7c005162dc6642a391381b6a552d5ff2cb1f84..7b7b4a040cf196e7adfaff1da19972aeb67fe57c 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/pbralphaF.glsl
@@ -214,7 +214,7 @@ void main()
     // emissiveColor is the emissive color factor from GLTF and is already in linear space
     vec3 colorEmissive = emissiveColor;
     // emissiveMap here is a vanilla RGB texture encoded as sRGB, manually convert to linear
-    colorEmissive *= srgb_to_linear(texture2D(emissiveMap, emissive_texcoord.xy).rgb);
+    colorEmissive *= srgb_to_linear(texture(emissiveMap, emissive_texcoord.xy).rgb);
 
     // PBR IBL
     float gloss      = 1.0 - perceptualRoughness;
@@ -305,7 +305,7 @@ void main()
     // emissiveColor is the emissive color factor from GLTF and is already in linear space
     vec3 colorEmissive = emissiveColor;
     // emissiveMap here is a vanilla RGB texture encoded as sRGB, manually convert to linear
-    colorEmissive *= srgb_to_linear(texture2D(emissiveMap, emissive_texcoord.xy).rgb);
+    colorEmissive *= srgb_to_linear(texture(emissiveMap, emissive_texcoord.xy).rgb);
 
     
     float a = basecolor.a*vertex_color.a;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl
index 080f622155544c5ce0b058a6919f949fe4a37056..60134a7f729a627fa557a4af4a710e735a20a6d9 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/reflectionProbeF.glsl
@@ -40,7 +40,7 @@ void sampleReflectionProbes(inout vec3 ambenv, inout vec3 glossenv,
     
     vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
     vec3 env_vec = env_mat * refnormpersp;
-    glossenv = srgb_to_linear(textureCube(environmentMap, env_vec).rgb);
+    glossenv = srgb_to_linear(texture(environmentMap, env_vec).rgb);
 }
 
 void sampleReflectionProbesWater(inout vec3 ambenv, inout vec3 glossenv,
@@ -63,7 +63,7 @@ void sampleReflectionProbesLegacy(inout vec3 ambenv, inout vec3 glossenv, inout
     vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
     vec3 env_vec = env_mat * refnormpersp;
 
-    legacyenv = srgb_to_linear(textureCube(environmentMap, env_vec).rgb);
+    legacyenv = srgb_to_linear(texture(environmentMap, env_vec).rgb);
 
     glossenv = legacyenv;
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl
index 1e7ccb747a131b3fb8f2bf0693f67824e868388a..d1db6dd94323a2fb9011f6f5245dd5ce92a636da 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl
@@ -23,11 +23,11 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 uniform vec2 screen_res;
 
-VARYING vec2 vary_fragcoord;
+out vec2 vary_fragcoord;
 
 // forwards
 void setAtmosAttenuation(vec3 c);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
index e1cbfcce1a491929a4edf3da5fd1c941dc49f808..1ea57516a4ab4b81fb12f24b222b5b39c454a5d5 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -23,20 +23,14 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 //class 2, shadows, no SSAO
 
 // Inputs
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 uniform vec3 sun_dir;
 uniform float shadow_bias;
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
index 99a26a050d04fad02912d542467b081a67e0799f..0126e09d4c67a887099dbf2880d3ed8c132fa645 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -22,20 +22,14 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 //class 2 -- shadows and SSAO
 
 // Inputs
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 vec4 getPosition(vec2 pos_screen);
 vec3 getNorm(vec2 pos_screen);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl
index 3dfca0f6553ca9d654869b1d40921e79d9c684cd..5ae7f2c57137d0389a1792134956bdab559b9c0b 100644
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl
@@ -23,9 +23,9 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec2 vary_fragcoord;
+out vec2 vary_fragcoord;
 
 uniform vec2 screen_res;
 
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
index 4c418e414f2f4670bb90e4ef277a9c0c9494c45f..3773f191e855c4b37d305a08100276d2af7de755 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
@@ -23,7 +23,7 @@
  * $/LicenseInfo$
  */
 
-// VARYING param funcs
+// out param funcs
 
 
 uniform vec3 sun_dir;
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
index 07733bda18b43fdbd162db6d8be2df87962bfe14..34669a67963383fcebfd388cc77d73b8e74326f8 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
@@ -24,8 +24,8 @@
  */
  
 
-VARYING vec3 vary_AdditiveColor;
-VARYING vec3 vary_AtmosAttenuation;
+in vec3 vary_AdditiveColor;
+in vec3 vary_AtmosAttenuation;
 
 vec3 getSunlitColor()
 {
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl
index 31109aed31a77967109eb8fccc9cd7dc8c031c1f..1b854d80b3c4abb02efbf7279a530c64bb7aabef 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl
@@ -24,8 +24,8 @@
  */
  
 
-VARYING vec3 vary_AdditiveColor;
-VARYING vec3 vary_AtmosAttenuation;
+out vec3 vary_AdditiveColor;
+out vec3 vary_AtmosAttenuation;
 
 vec3 additive_color;
 vec3 atmos_attenuation;
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterF.glsl
index 22e16b7e0fa635cb74a548150e84b6eff5d2028a..7a6741fe0e5de4ce6bde4e120d801d5d87a87a7b 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterF.glsl
@@ -23,9 +23,9 @@
  * $/LicenseInfo$
  */
  
-VARYING vec3 vary_PositionEye;
-VARYING vec3 vary_AdditiveColor;
-VARYING vec3 vary_AtmosAttenuation;
+in vec3 vary_PositionEye;
+in vec3 vary_AdditiveColor;
+in vec3 vary_AtmosAttenuation;
 
 vec3 getSunlitColor()
 {
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterV.glsl
index 0f2a3ee527e658c0d3f55884d0027e8cca8c9b6e..23c3aed4d8597c64bd27ebd7e5ada533930ae984 100644
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterV.glsl
@@ -23,9 +23,9 @@
  * $/LicenseInfo$
  */
  
-VARYING vec3 vary_PositionEye;
-VARYING vec3 vary_AdditiveColor;
-VARYING vec3 vary_AtmosAttenuation;
+out vec3 vary_PositionEye;
+out vec3 vary_AdditiveColor;
+out vec3 vary_AtmosAttenuation;
 
 vec3 atmos_attenuation;
 vec3 sunlit_color;
diff --git a/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl
index f1b1997c436f7071e6be29b53d230e600233a1c8..1c79748b49ee2476adbc6d0cbbf0b9107b2f4241 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/fullbrightShinyF.glsl
@@ -25,21 +25,17 @@
  
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 #ifndef HAS_DIFFUSE_LOOKUP
 uniform sampler2D diffuseMap;
 #endif
 
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-VARYING vec3 vary_texcoord1;
-VARYING vec3 vary_position;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
+in vec3 vary_texcoord1;
+in vec3 vary_position;
 
 uniform samplerCube environmentMap;
 
@@ -62,7 +58,7 @@ void main()
 #ifdef HAS_DIFFUSE_LOOKUP
 	vec4 color = diffuseLookup(vary_texcoord0.xy);
 #else
-	vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
+	vec4 color = texture(diffuseMap, vary_texcoord0.xy);
 #endif
 	
 	color.rgb *= vertex_color.rgb;
diff --git a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
index e5341386bd422e46dd19562869b83fecf6bdc6ea..77e3b9238532ab21e8c713d45993c1b7a6d3766b 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/materialF.glsl
@@ -52,11 +52,7 @@ vec3 legacy_adjust(vec3 c);
 
 #if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 #ifdef HAS_SUN_SHADOW
 float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen);
@@ -77,9 +73,9 @@ uniform mat3 env_mat;
 
 uniform vec3 sun_dir;
 uniform vec3 moon_dir;
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
-VARYING vec3 vary_position;
+in vec3 vary_position;
 
 uniform mat4 proj_mat;
 uniform mat4 inv_proj;
@@ -167,7 +163,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe
 
             if (nh > 0.0)
             {
-                float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt / (nh*da);
+                float scol = fres*texture(lightFunc, vec2(nh, spec.a)).r*gt / (nh*da);
                 vec3 speccol = lit*scol*light_col.rgb*spec.rgb;
                 speccol = clamp(speccol, vec3(0), vec3(1));
                 col += speccol;
@@ -184,11 +180,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe
 }
 
 #else
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_data[4];
-#else
-#define frag_data gl_FragData
-#endif
 #endif
 
 uniform sampler2D diffuseMap;  //always in sRGB space
@@ -200,7 +192,7 @@ uniform sampler2D bumpMap;
 #ifdef HAS_SPECULAR_MAP
 uniform sampler2D specularMap;
 
-VARYING vec2 vary_texcoord2;
+in vec2 vary_texcoord2;
 #endif
 
 uniform float env_intensity;
@@ -214,13 +206,13 @@ uniform float minimum_alpha;
 in vec3 vary_normal;
 in vec3 vary_tangent;
 flat in float vary_sign;
-VARYING vec2 vary_texcoord1;
+in vec2 vary_texcoord1;
 #else
-VARYING vec3 vary_normal;
+in vec3 vary_normal;
 #endif
 
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+in vec4 vertex_color;
+in vec2 vary_texcoord0;
 
 vec2 encode_normal(vec3 n);
 
@@ -228,7 +220,7 @@ vec2 encode_normal(vec3 n);
 vec3 getNormal(inout float glossiness)
 {
 #ifdef HAS_NORMAL_MAP
-	vec4 vNt = texture2D(bumpMap, vary_texcoord1.xy);
+	vec4 vNt = texture(bumpMap, vary_texcoord1.xy);
     glossiness *= vNt.a;
 	vNt.xyz = vNt.xyz * 2 - 1;
     float sign = vary_sign;
@@ -247,7 +239,7 @@ vec3 getNormal(inout float glossiness)
 vec4 getSpecular()
 {
 #ifdef HAS_SPECULAR_MAP
-    vec4 spec = texture2D(specularMap, vary_texcoord2.xy);
+    vec4 spec = texture(specularMap, vary_texcoord2.xy);
     spec.rgb *= specular_color.rgb;
 #else
     vec4 spec = vec4(specular_color.rgb, 1.0);
@@ -301,7 +293,7 @@ void main()
     waterClip();
 
     // diffcol == diffuse map combined with vertex color
-    vec4 diffcol = texture2D(diffuseMap, vary_texcoord0.xy);
+    vec4 diffcol = texture(diffuseMap, vary_texcoord0.xy);
 	diffcol.rgb *= vertex_color.rgb;
 
     alphaMask(diffcol.a);
@@ -364,7 +356,7 @@ void main()
     if (glossiness > 0.0)  // specular reflection
     {
         float sa        = dot(normalize(refnormpersp), light_dir.xyz);
-        vec3  dumbshiny = sunlit_linear * shadow * (texture2D(lightFunc, vec2(sa, glossiness)).r);
+        vec3  dumbshiny = sunlit_linear * shadow * (texture(lightFunc, vec2(sa, glossiness)).r);
 
         // add the two types of shiny together
         vec3 spec_contrib = dumbshiny * spec.rgb;
@@ -395,7 +387,7 @@ void main()
             float gtdenom = 2 * nh;
             float gt = max(0,(min(gtdenom * nv / vh, gtdenom * nl / vh)));
 
-            float scol = shadow*fres*texture2D(lightFunc, vec2(nh, glossiness)).r*gt/(nh*nl);
+            float scol = shadow*fres*texture(lightFunc, vec2(nh, glossiness)).r*gt/(nh*nl);
             color.rgb += lit*scol*sunlit_linear.rgb*spec.rgb;
         }
 
diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
index 2da177ea7ef6837504936f926486c22f80f3e338..2a096a98ec87e54959d842965a4d50cf45228766 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D depthMap;
 uniform sampler2D diffuseRect;
@@ -49,7 +43,7 @@ uniform vec2  screen_res;
 uniform float far_z;
 uniform mat4  inv_proj;
 
-VARYING vec4 vary_fragcoord;
+in vec4 vary_fragcoord;
 
 void calcHalfVectors(vec3 lv, vec3 n, vec3 v, out vec3 h, out vec3 l, out float nh, out float nl, out float nv, out float vh, out float lightDist);
 float calcLegacyDistanceAttenuation(float distance, float falloff);
@@ -88,15 +82,15 @@ void main()
     vec3 n;
     vec4 norm = getNormalEnvIntensityFlags(tc, n, envIntensity); // need `norm.w` for GET_GBUFFER_FLAG()
 
-    vec4 spec    = texture2D(specularRect, tc);
-    vec3 diffuse = texture2D(diffuseRect, tc).rgb;
+    vec4 spec    = texture(specularRect, tc);
+    vec3 diffuse = texture(diffuseRect, tc).rgb;
 
     vec3  h, l, v = -normalize(pos);
     float nh, nv, vh, lightDist;
 
     if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_PBR))
     {
-        vec3 colorEmissive = texture2D(emissiveRect, tc).rgb;
+        vec3 colorEmissive = texture(emissiveRect, tc).rgb;
         vec3 orm = spec.rgb;
         float perceptualRoughness = orm.g;
         float metallic = orm.b;
@@ -167,7 +161,7 @@ void main()
 
                         if (nh > 0.0)
                         {
-                            float scol = fres * texture2D(lightFunc, vec2(nh, spec.a)).r * gt / (nh * nl);
+                            float scol = fres * texture(lightFunc, vec2(nh, spec.a)).r * gt / (nh * nl);
                             col += lit * scol * light_col[i].rgb * spec.rgb;
                         }
                     }
diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightV.glsl
index 831b3b26848d75eca0cf28fdea4e9ff50c39f6a8..c2b9ed3d964796a8a1234e59f25e4403990145ef 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/multiPointLightV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/multiPointLightV.glsl
@@ -23,9 +23,9 @@
  * $/LicenseInfo$
  */
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
-VARYING vec4 vary_fragcoord;
+out vec4 vary_fragcoord;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl
index 33715d4d8729202f4db6d4e99674566ecc821b95..23120bbbbe326ca066555e6ba0c3e5533b3a3378 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl
@@ -23,16 +23,9 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-#extension GL_ARB_shader_texture_lod : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D specularRect;
@@ -67,7 +60,7 @@ uniform float size;
 uniform vec3 color;
 uniform float falloff;
 
-VARYING vec4 vary_fragcoord;
+in vec4 vary_fragcoord;
 uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
@@ -118,7 +111,7 @@ void main()
     
     if (proj_shadow_idx >= 0)
     {
-        vec4 shd = texture2D(lightMap, tc);
+        vec4 shd = texture(lightMap, tc);
         shadow = (proj_shadow_idx==0)?shd.b:shd.a;
         shadow += shadow_fade;
         shadow = clamp(shadow, 0.0, 1.0);        
@@ -139,8 +132,8 @@ void main()
     float nh, nl, nv, vh, lightDist;
     calcHalfVectors(lv, n, v, h, l, nh, nl, nv, vh, lightDist);
 
-    vec3 diffuse = texture2D(diffuseRect, tc).rgb;
-    vec4 spec    = texture2D(specularRect, tc);
+    vec3 diffuse = texture(diffuseRect, tc).rgb;
+    vec4 spec    = texture(specularRect, tc);
     vec3 dlit    = vec3(0, 0, 0);
     vec3 slit    = vec3(0, 0, 0);
 
@@ -148,7 +141,7 @@ void main()
 
     if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_PBR))
     {
-        vec3 colorEmissive = texture2D(emissiveRect, tc).rgb; 
+        vec3 colorEmissive = texture(emissiveRect, tc).rgb; 
         vec3 orm = spec.rgb;
         float perceptualRoughness = orm.g;
         float metallic = orm.b;
@@ -223,7 +216,7 @@ void main()
                                 
             if (nh > 0.0)
             {
-                float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
+                float scol = fres*texture(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
                 vec3 speccol = dlit*scol*spec.rgb*shadow;
                 speccol = clamp(speccol, vec3(0), vec3(1));
                 final_color += speccol;
diff --git a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
index 7724a6cac9268c4d562448d408adce58c4c0a8e0..42ba96148cb276fceba41134de351d45ee81a059 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/pointLightF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D specularRect;
@@ -48,8 +42,8 @@ uniform vec3 color;
 uniform float falloff;
 uniform float size;
 
-VARYING vec4 vary_fragcoord;
-VARYING vec3 trans_center;
+in vec4 vary_fragcoord;
+in vec3 trans_center;
 
 uniform vec2 screen_res;
 
@@ -83,8 +77,8 @@ void main()
     vec3 n;
     vec4 norm = getNormalEnvIntensityFlags(tc, n, envIntensity); // need `norm.w` for GET_GBUFFER_FLAG()
 
-    vec3 diffuse = texture2D(diffuseRect, tc).rgb;
-    vec4 spec    = texture2D(specularRect, tc);
+    vec3 diffuse = texture(diffuseRect, tc).rgb;
+    vec4 spec    = texture(specularRect, tc);
 
     // Common half vectors calcs
     vec3  lv = trans_center.xyz-pos;
@@ -101,7 +95,7 @@ void main()
 
     if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_PBR))
     {
-        vec3 colorEmissive = texture2D(emissiveRect, tc).rgb; 
+        vec3 colorEmissive = texture(emissiveRect, tc).rgb; 
         vec3 orm = spec.rgb;
         float perceptualRoughness = orm.g;
         float metallic = orm.b;
@@ -141,7 +135,7 @@ void main()
 
             if (nh > 0.0)
             {
-                float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
+                float scol = fres*texture(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
                 final_color += lit*scol*color.rgb*spec.rgb;
             }
         }
diff --git a/indra/newview/app_settings/shaders/class3/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/pointLightV.glsl
index d42c8f6cf673dca5ca68feb60a48eb47c88f8e10..8d23f1b4279fb21cde86229b80247bdd8faafbf4 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/pointLightV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/pointLightV.glsl
@@ -26,13 +26,13 @@
 uniform mat4 modelview_projection_matrix;
 uniform mat4 modelview_matrix;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 uniform vec3 center;
 uniform float size;
 
-VARYING vec4 vary_fragcoord;
-VARYING vec3 trans_center;
+out vec4 vary_fragcoord;
+out vec3 trans_center;
 
 void main()
 {
diff --git a/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostF.glsl b/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostF.glsl
index f1865a77e2edf8c7a65a3d21000765be122d0c42..02e724c155b3b723f98c660f26a91727432c3950 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostF.glsl
@@ -23,15 +23,9 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-
 /*[EXTRA_CODE_HERE]*/
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform vec2 screen_res;
 uniform mat4 projection_matrix;
@@ -39,8 +33,8 @@ uniform mat4 inv_proj;
 uniform float zNear;
 uniform float zFar;
 
-VARYING vec2 vary_fragcoord;
-VARYING vec3 camera_ray;
+in vec2 vary_fragcoord;
+in vec3 camera_ray;
 
 uniform sampler2D specularRect;
 uniform sampler2D diffuseRect;
@@ -67,10 +61,10 @@ void main()
     vec3 n;
     vec4 norm = getNormalEnvIntensityFlags(tc, n, envIntensity); // need `norm.w` for GET_GBUFFER_FLAG()
     vec3 pos = getPositionWithDepth(tc, getDepth(tc)).xyz;
-    vec4 spec    = texture2D(specularRect, tc);
+    vec4 spec    = texture(specularRect, tc);
     vec2 hitpixel;
     
-    vec4 diffuse = texture2D(diffuseRect, tc);
+    vec4 diffuse = texture(diffuseRect, tc);
     vec3 specCol = spec.rgb;
 
     vec4 fcol = texture(diffuseMap, tc);
diff --git a/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostV.glsl b/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostV.glsl
index b084094d4df4e9e01471d688b3a41765ab9b8b78..f7e7268cc329eb4cda79ac40032511c8bed85011 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostV.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/screenSpaceReflPostV.glsl
@@ -26,12 +26,12 @@
 uniform mat4 projection_matrix;
 uniform mat4 inv_proj;
 
-ATTRIBUTE vec3 position;
+in vec3 position;
 
 uniform vec2 screen_res;
 
-VARYING vec2 vary_fragcoord;
-VARYING vec3 camera_ray;
+out vec2 vary_fragcoord;
+out vec3 camera_ray;
 
 
 void main()
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
index a8d61afecaba241ac492202e1e69020aefa46460..2f3efaa94a7d1e862c6bbb5086071d90480519a4 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl
@@ -23,19 +23,12 @@
  * $/LicenseInfo$
  */
 
-#extension GL_ARB_texture_rectangle : enable
-#extension GL_ARB_shader_texture_lod : enable
-
 #define FLT_MAX 3.402823466e+38
 
 #define REFMAP_COUNT 256
 #define REF_SAMPLE_COUNT 64 //maximum number of samples to consider
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D specularRect;
@@ -60,7 +53,7 @@ uniform mat3 env_mat;
 uniform vec3 sun_dir;
 uniform vec3 moon_dir;
 uniform int  sun_up_factor;
-VARYING vec2 vary_fragcoord;
+in vec2 vary_fragcoord;
 
 uniform mat4 inv_proj;
 uniform vec2 screen_res;
@@ -127,16 +120,16 @@ void main()
     vec2  tc           = vary_fragcoord.xy;
     float depth        = getDepth(tc.xy);
     vec4  pos          = getPositionWithDepth(tc, depth);
-    vec4  norm         = texture2D(normalMap, tc);
+    vec4  norm         = texture(normalMap, tc);
     float envIntensity = norm.z;
     norm.xyz           = getNorm(tc);
     vec3  light_dir   = (sun_up_factor == 1) ? sun_dir : moon_dir;
 
-    vec4 baseColor     = texture2D(diffuseRect, tc);
-    vec4 spec        = texture2D(specularRect, vary_fragcoord.xy); // NOTE: PBR linear Emissive
+    vec4 baseColor     = texture(diffuseRect, tc);
+    vec4 spec        = texture(specularRect, vary_fragcoord.xy); // NOTE: PBR linear Emissive
 
 #if defined(HAS_SUN_SHADOW) || defined(HAS_SSAO)
-    vec2 scol_ambocc = texture2D(lightMap, vary_fragcoord.xy).rg;
+    vec2 scol_ambocc = texture(lightMap, vary_fragcoord.xy).rg;
 #endif
 
 #if defined(HAS_SUN_SHADOW)
@@ -180,12 +173,12 @@ void main()
 
     if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_PBR))
     {
-        vec3 orm = texture2D(specularRect, tc).rgb; 
+        vec3 orm = texture(specularRect, tc).rgb; 
         float perceptualRoughness = orm.g;
         float metallic = orm.b;
         float ao = orm.r * ambocc;
 
-        vec3 colorEmissive = texture2D(emissiveRect, tc).rgb;
+        vec3 colorEmissive = texture(emissiveRect, tc).rgb;
         // PBR IBL
         float gloss      = 1.0 - perceptualRoughness;
         
@@ -211,7 +204,7 @@ void main()
     else if (!GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_ATMOS))
     {
         //should only be true of WL sky, just port over base color value
-        color = texture2D(emissiveRect, tc).rgb;
+        color = texture(emissiveRect, tc).rgb;
         color = srgb_to_linear(color);
         if (sun_up_factor > 0)
         {
@@ -263,7 +256,7 @@ void main()
                 float gtdenom = 2 * nh;
                 float gt = max(0,(min(gtdenom * nv / vh, gtdenom * nl / vh)));
 
-                scol *= fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
+                scol *= fres*texture(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
                 color.rgb += lit*scol*sunlit_linear.rgb*spec.rgb;
             }
 
diff --git a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
index f2ab5857168b459520a2bc2a513d39fa5ecfc723..1ea801d7d734f2b0093b68091a2fcd98c37a8aca 100644
--- a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl
@@ -23,9 +23,6 @@
  * $/LicenseInfo$
  */
  
-#extension GL_ARB_texture_rectangle : enable
-#extension GL_ARB_shader_texture_lod : enable
-
 /*[EXTRA_CODE_HERE]*/
 
 #define DEBUG_ANY_LIGHT_TYPE         0 // Output green light cone
@@ -38,11 +35,7 @@
 #define DEBUG_SPOT_NL                  0 // monochome area effected by light
 #define DEBUG_SPOT_ZERO                0 // Output zero for spotlight
 
-#ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
 
 uniform sampler2D diffuseRect;
 uniform sampler2D specularRect;
@@ -75,8 +68,8 @@ uniform float size;
 uniform vec3 color;
 uniform float falloff;
 
-VARYING vec3 trans_center;
-VARYING vec4 vary_fragcoord;
+in vec3 trans_center;
+in vec4 vary_fragcoord;
 uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
@@ -126,7 +119,7 @@ void main()
 
     if (proj_shadow_idx >= 0)
     {
-        vec4 shd = texture2D(lightMap, tc);
+        vec4 shd = texture(lightMap, tc);
         shadow = (proj_shadow_idx == 0) ? shd.b : shd.a;
         shadow += shadow_fade;
         shadow = clamp(shadow, 0.0, 1.0);
@@ -147,15 +140,15 @@ void main()
     float nh, nl, nv, vh, lightDist;
     calcHalfVectors(lv, n, v, h, l, nh, nl, nv, vh, lightDist);
 
-    vec3 diffuse = texture2D(diffuseRect, tc).rgb;
-    vec4 spec    = texture2D(specularRect, tc);
+    vec3 diffuse = texture(diffuseRect, tc).rgb;
+    vec4 spec    = texture(specularRect, tc);
     vec3 dlit    = vec3(0, 0, 0);
     vec3 slit    = vec3(0, 0, 0);
 
     vec3 amb_rgb = vec3(0);
     if (GET_GBUFFER_FLAG(GBUFFER_FLAG_HAS_PBR))
     {
-        vec3 colorEmissive = texture2D(emissiveRect, tc).rgb;
+        vec3 colorEmissive = texture(emissiveRect, tc).rgb;
         vec3 orm = spec.rgb; 
         float perceptualRoughness = orm.g;
         float metallic = orm.b;
@@ -231,7 +224,7 @@ void main()
 
             if (nh > 0.0)
             {
-                float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
+                float scol = fres*texture(lightFunc, vec2(nh, spec.a)).r*gt/(nh*nl);
                 vec3 speccol = dlit*scol*spec.rgb*shadow;
                 speccol = clamp(speccol, vec3(0), vec3(1));
                 final_color += speccol;
diff --git a/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl
index 21c30012abc5f9bfa11b9b654f70b5d3188cd322..e99ad5b474cee30b4f1e5e7da8570c1cf5db9460 100644
--- a/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class3/environment/underWaterF.glsl
@@ -50,9 +50,9 @@ uniform float waterFogKS;
 uniform vec2 screenRes;
 
 //bigWave is (refCoord.w, view.w);
-VARYING vec4 refCoord;
-VARYING vec4 littleWave;
-VARYING vec4 view;
+in vec4 refCoord;
+in vec4 littleWave;
+in vec4 view;
 in vec3 vary_position;
 
 vec4 applyWaterFogViewLinearNoClip(vec3 pos, vec4 color, vec3 sunlit);
@@ -62,9 +62,9 @@ void main()
 	vec4 color;
 
     //get detail normals
-	vec3 wave1 = texture2D(bumpMap, vec2(refCoord.w, view.w)).xyz*2.0-1.0;
-	vec3 wave2 = texture2D(bumpMap, littleWave.xy).xyz*2.0-1.0;
-	vec3 wave3 = texture2D(bumpMap, littleWave.zw).xyz*2.0-1.0;    
+	vec3 wave1 = texture(bumpMap, vec2(refCoord.w, view.w)).xyz*2.0-1.0;
+	vec3 wave2 = texture(bumpMap, littleWave.xy).xyz*2.0-1.0;
+	vec3 wave3 = texture(bumpMap, littleWave.zw).xyz*2.0-1.0;    
 	vec3 wavef = normalize(wave1+wave2+wave3);
 	
 	//figure out distortion vector (ripply)   
@@ -72,7 +72,7 @@ void main()
 	distort = distort+wavef.xy*refScale;
 
 #ifdef TRANSPARENT_WATER
-	vec4 fb = texture2D(screenTex, distort);
+	vec4 fb = texture(screenTex, distort);
 #else
     vec4 fb = vec4(waterFogColorLinear, 0.0);
 #endif
diff --git a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
index 3d4f4fc17bcc2a667ecf1591e81f1988af3be981..8fee2599333eda37e9e427fdb825f3e9d85e9a75 100644
--- a/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
@@ -99,9 +99,9 @@ uniform vec3 waterFogColorLinear;
 
 
 //bigWave is (refCoord.w, view.w);
-VARYING vec4 refCoord;
-VARYING vec4 littleWave;
-VARYING vec4 view;
+in vec4 refCoord;
+in vec4 littleWave;
+in vec4 view;
 in vec3 vary_position;
 in vec3 vary_normal;
 in vec3 vary_tangent;
@@ -144,12 +144,12 @@ void main()
     //get wave normals
     vec2 bigwave = vec2(refCoord.w, view.w);
     vec3 wave1_a = texture(bumpMap, bigwave, -2      ).xyz*2.0-1.0;
-    vec3 wave2_a = texture2D(bumpMap, littleWave.xy).xyz*2.0-1.0;
-    vec3 wave3_a = texture2D(bumpMap, littleWave.zw).xyz*2.0-1.0;
+    vec3 wave2_a = texture(bumpMap, littleWave.xy).xyz*2.0-1.0;
+    vec3 wave3_a = texture(bumpMap, littleWave.zw).xyz*2.0-1.0;
 
     vec3 wave1_b = texture(bumpMap2, bigwave      ).xyz*2.0-1.0;
-    vec3 wave2_b = texture2D(bumpMap2, littleWave.xy).xyz*2.0-1.0;
-    vec3 wave3_b = texture2D(bumpMap2, littleWave.zw).xyz*2.0-1.0;
+    vec3 wave2_b = texture(bumpMap2, littleWave.xy).xyz*2.0-1.0;
+    vec3 wave3_b = texture(bumpMap2, littleWave.zw).xyz*2.0-1.0;
 
     //wave1_a = wave2_a = wave3_a = wave1_b = wave2_b = wave3_b = vec3(0,0,1);
 
@@ -210,16 +210,16 @@ void main()
     vec3 sunlit_linear = srgb_to_linear(sunlit);
 
 #ifdef TRANSPARENT_WATER
-    vec4 fb = texture2D(screenTex, distort2);
-    float depth = texture2D(screenDepth, distort2).r;
+    vec4 fb = texture(screenTex, distort2);
+    float depth = texture(screenDepth, distort2).r;
     vec3 refPos = getPositionWithNDC(vec3(distort2*2.0-vec2(1.0), depth*2.0-1.0));
 
     if (refPos.z > pos.z-0.05)
     {
         //we sampled an above water sample, don't distort
         distort2 = distort;
-        fb = texture2D(screenTex, distort2);
-        depth = texture2D(screenDepth, distort2).r;
+        fb = texture(screenTex, distort2);
+        depth = texture(screenDepth, distort2).r;
         refPos = getPositionWithNDC(vec3(distort2 * 2.0 - vec2(1.0), depth * 2.0 - 1.0));
     }
 
diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h
index cdd8ae88bb93b980abcfd6e73ba0aa3da1998fcd..5ab1f524391992933d65e253b79db25e8c12d075 100644
--- a/indra/newview/lldrawable.h
+++ b/indra/newview/lldrawable.h
@@ -257,8 +257,7 @@ class LLDrawable
 	
 	typedef enum e_drawable_flags
 	{
- 		IN_REBUILD_Q1	= 0x00000001,
- 		IN_REBUILD_Q2	= 0x00000002,
+ 		IN_REBUILD_Q	= 0x00000001,
 		EARLY_MOVE		= 0x00000004,
 		MOVE_UNDAMPED	= 0x00000008,
 		ON_MOVE_LIST	= 0x00000010,
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
index c9370b49f1b19108c7f1109518d37ba1801ec782..e935bc5553f8296d4412b24a1bafba1200b34e5f 100644
--- a/indra/newview/llflexibleobject.cpp
+++ b/indra/newview/llflexibleobject.cpp
@@ -366,7 +366,7 @@ void LLVolumeImplFlexible::doIdleUpdate()
 
 				if	(visible)
 				{
-					if (!drawablep->isState(LLDrawable::IN_REBUILD_Q1) &&
+					if (!drawablep->isState(LLDrawable::IN_REBUILD_Q) &&
 						pixel_area > 256.f)
 					{
 						U32 id;
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
index ed1c7c8dea27d8ff7824f5e92be542c7cc715236..978cb780833cee7f73a253128131de99fcea6624 100644
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -3107,22 +3107,6 @@ class LLOctreeRenderNonOccluded : public OctreeTraveler
 				renderNormals(drawable);
 			}
 			
-			if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_BUILD_QUEUE))
-			{
-				if (drawable->isState(LLDrawable::IN_REBUILD_Q2))
-				{
-					gGL.diffuseColor4f(0.6f, 0.6f, 0.1f, 1.f);
-					const LLVector4a* ext = drawable->getSpatialExtents();
-					LLVector4a center;
-					center.setAdd(ext[0], ext[1]);
-					center.mul(0.5f);
-					LLVector4a size;
-					size.setSub(ext[1], ext[0]);
-					size.mul(0.5f);
-					drawBoxOutline(center, size);
-				}
-			}
-
             if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_TEXTURE_AREA))
             {
                 setTextureAreaDebugText(drawable);
@@ -3452,14 +3436,12 @@ void LLSpatialPartition::renderDebug()
 									  LLPipeline::RENDER_DEBUG_BBOXES |
 									  LLPipeline::RENDER_DEBUG_NORMALS |
 									  LLPipeline::RENDER_DEBUG_POINTS |
-									  //LLPipeline::RENDER_DEBUG_TEXTURE_PRIORITY |
                                       LLPipeline::RENDER_DEBUG_TEXTURE_AREA |
 									  LLPipeline::RENDER_DEBUG_TEXTURE_ANIM |
 									  LLPipeline::RENDER_DEBUG_RAYCAST |
 									  LLPipeline::RENDER_DEBUG_AVATAR_VOLUME |
 									  LLPipeline::RENDER_DEBUG_AVATAR_JOINTS |
 									  LLPipeline::RENDER_DEBUG_AGENT_TARGET |
-									  //LLPipeline::RENDER_DEBUG_BUILD_QUEUE |
 									  LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA |
 									  LLPipeline::RENDER_DEBUG_TEXEL_DENSITY))
 	{
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 5105ec835b4f95dbbf91f2123b3e2aaae2078dac..04ca62e0ec3c12fb449ef6a58a4181ace9e57dd5 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -998,8 +998,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		
 		LLSpatialGroup::sNoDelete = FALSE;
 		gPipeline.clearReferences();
-
-		gPipeline.rebuildGroups();
 	}
 
 	LLAppViewer::instance()->pingMainloopTimeout("Display:FrameStats");
@@ -1130,8 +1128,6 @@ void display_cube_face()
 
     LLSpatialGroup::sNoDelete = FALSE;
     gPipeline.clearReferences();
-
-    gPipeline.rebuildGroups();
 }
 
 void render_hud_attachments()
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index d4dc813bbaa42090fa58112597223e94e77e2f03..d0acac858caa7d6581fd0ce81e11c370d3e41618 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -1028,10 +1028,6 @@ U64 info_display_from_string(std::string info_display)
 	{
 		return LLPipeline::RENDER_DEBUG_LOD_INFO;
 	}
-	else if ("build queue" == info_display)
-	{
-		return LLPipeline::RENDER_DEBUG_BUILD_QUEUE;
-	}
 	else if ("lights" == info_display)
 	{
 		return LLPipeline::RENDER_DEBUG_LIGHTS;
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 9960ce7bd0632d88006b0c37324eb1a938038994..2687ccfae203d26a315b34e34d439312d6a8e0cf 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -338,7 +338,6 @@ LLPipeline::LLPipeline() :
 	mOldRenderDebugMask(0),
 	mMeshDirtyQueryObject(0),
 	mGroupQ1Locked(false),
-	mGroupQ2Locked(false),
 	mResetVertexBuffers(false),
 	mLastRebuildPool(NULL),
 	mLightMask(0),
@@ -557,7 +556,6 @@ void LLPipeline::cleanup()
 	assertInitialized();
 
 	mGroupQ1.clear() ;
-	mGroupQ2.clear() ;
 
 	for(pool_set_t::iterator iter = mPools.begin();
 		iter != mPools.end(); )
@@ -2513,33 +2511,6 @@ void LLPipeline::clearRebuildGroups()
 	// Copy the saved HUD groups back in
 	mGroupQ1.assign(hudGroups.begin(), hudGroups.end());
 	mGroupQ1Locked = false;
-
-	// Clear the HUD groups
-	hudGroups.clear();
-
-	mGroupQ2Locked = true;
-	for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ2.begin();
-		 iter != mGroupQ2.end(); ++iter)
-	{
-		LLSpatialGroup* group = *iter;
-
-		// If the group contains HUD objects, save the group
-		if (group->isHUDGroup())
-		{
-			hudGroups.push_back(group);
-		}
-		// Else, no HUD objects so clear the build state
-		else
-		{
-			group->clearState(LLSpatialGroup::IN_BUILD_Q2);
-		}
-	}	
-	// Clear the group
-	mGroupQ2.clear();
-
-	// Copy the saved HUD groups back in
-	mGroupQ2.assign(hudGroups.begin(), hudGroups.end());
-	mGroupQ2Locked = false;
 }
 
 void LLPipeline::clearRebuildDrawables()
@@ -2551,24 +2522,11 @@ void LLPipeline::clearRebuildDrawables()
 		LLDrawable* drawablep = *iter;
 		if (drawablep && !drawablep->isDead())
 		{
-			drawablep->clearState(LLDrawable::IN_REBUILD_Q2);
-			drawablep->clearState(LLDrawable::IN_REBUILD_Q1);
+			drawablep->clearState(LLDrawable::IN_REBUILD_Q);
 		}
 	}
 	mBuildQ1.clear();
 
-	// clear drawables on the non-priority build queue
-	for (LLDrawable::drawable_list_t::iterator iter = mBuildQ2.begin();
-		 iter != mBuildQ2.end(); ++iter)
-	{
-		LLDrawable* drawablep = *iter;
-		if (!drawablep->isDead())
-		{
-			drawablep->clearState(LLDrawable::IN_REBUILD_Q2);
-		}
-	}	
-	mBuildQ2.clear();
-	
 	//clear all moving bridges
 	for (LLDrawable::drawable_vector_t::iterator iter = mMovedBridge.begin();
 		 iter != mMovedBridge.end(); ++iter)
@@ -2622,52 +2580,6 @@ void LLPipeline::rebuildPriorityGroups()
 
 }
 
-void LLPipeline::rebuildGroups()
-{
-	if (mGroupQ2.empty() || gCubeSnapshot)
-	{
-		return;
-	}
-
-    LL_PROFILE_ZONE_SCOPED_CATEGORY_PIPELINE;
-	mGroupQ2Locked = true;
-	// Iterate through some drawables on the non-priority build queue
-	S32 size = (S32) mGroupQ2.size();
-	S32 min_count = llclamp((S32) ((F32) (size * size)/4096*0.25f), 1, size);
-			
-	S32 count = 0;
-	
-	std::sort(mGroupQ2.begin(), mGroupQ2.end(), LLSpatialGroup::CompareUpdateUrgency());
-
-	LLSpatialGroup::sg_vector_t::iterator iter;
-	LLSpatialGroup::sg_vector_t::iterator last_iter = mGroupQ2.begin();
-
-	for (iter = mGroupQ2.begin();
-		 iter != mGroupQ2.end() && count <= min_count; ++iter)
-	{
-		LLSpatialGroup* group = *iter;
-		last_iter = iter;
-
-		if (!group->isDead())
-		{
-			group->rebuildGeom();
-			
-			if (group->getSpatialPartition()->mRenderByGroup)
-			{
-				count++;
-			}
-		}
-
-		group->clearState(LLSpatialGroup::IN_BUILD_Q2);
-	}	
-
-	mGroupQ2.erase(mGroupQ2.begin(), ++last_iter);
-
-	mGroupQ2Locked = false;
-
-	updateMovedList(mMovedBridge);
-}
-
 void LLPipeline::updateGeom(F32 max_dtime)
 {
 	LLTimer update_timer;
@@ -2693,16 +2605,6 @@ void LLPipeline::updateGeom(F32 max_dtime)
 		LLDrawable* drawablep = *curiter;
 		if (drawablep && !drawablep->isDead())
 		{
-			if (drawablep->isState(LLDrawable::IN_REBUILD_Q2))
-			{
-				drawablep->clearState(LLDrawable::IN_REBUILD_Q2);
-				LLDrawable::drawable_list_t::iterator find = std::find(mBuildQ2.begin(), mBuildQ2.end(), drawablep);
-				if (find != mBuildQ2.end())
-				{
-					mBuildQ2.erase(find);
-				}
-			}
-
 			if (drawablep->isUnload())
 			{
 				drawablep->unload();
@@ -2711,7 +2613,7 @@ void LLPipeline::updateGeom(F32 max_dtime)
 
 			if (updateDrawableGeom(drawablep, TRUE))
 			{
-				drawablep->clearState(LLDrawable::IN_REBUILD_Q1);
+				drawablep->clearState(LLDrawable::IN_REBUILD_Q);
 				mBuildQ1.erase(curiter);
 			}
 		}
@@ -2720,54 +2622,6 @@ void LLPipeline::updateGeom(F32 max_dtime)
 			mBuildQ1.erase(curiter);
 		}
 	}
-		
-	// Iterate through some drawables on the non-priority build queue
-	S32 min_count = 16;
-	S32 size = (S32) mBuildQ2.size();
-	if (size > 1024)
-	{
-		min_count = llclamp((S32) (size * (F32) size/4096), 16, size);
-	}
-		
-	S32 count = 0;
-	
-	max_dtime = llmax(update_timer.getElapsedTimeF32()+0.001f, F32SecondsImplicit(max_dtime));
-	LLSpatialGroup* last_group = NULL;
-	LLSpatialBridge* last_bridge = NULL;
-
-	for (LLDrawable::drawable_list_t::iterator iter = mBuildQ2.begin();
-		 iter != mBuildQ2.end(); )
-	{
-		LLDrawable::drawable_list_t::iterator curiter = iter++;
-		LLDrawable* drawablep = *curiter;
-
-		LLSpatialBridge* bridge = drawablep->isRoot() ? drawablep->getSpatialBridge() :
-									drawablep->getParent()->getSpatialBridge();
-
-		if (drawablep->getSpatialGroup() != last_group && 
-			(!last_bridge || bridge != last_bridge) &&
-			(update_timer.getElapsedTimeF32() >= max_dtime) && count > min_count)
-		{
-			break;
-		}
-
-		//make sure updates don't stop in the middle of a spatial group
-		//to avoid thrashing (objects are enqueued by group)
-		last_group = drawablep->getSpatialGroup();
-		last_bridge = bridge;
-
-		bool update_complete = true;
-		if (!drawablep->isDead())
-		{
-			update_complete = updateDrawableGeom(drawablep, FALSE);
-			count++;
-		}
-		if (update_complete)
-		{
-			drawablep->clearState(LLDrawable::IN_REBUILD_Q2);
-			mBuildQ2.erase(curiter);
-		}
-	}	
 
 	updateMovedList(mMovedBridge);
 }
@@ -2992,10 +2846,10 @@ void LLPipeline::markRebuild(LLDrawable *drawablep, LLDrawable::EDrawableFlags f
 {
 	if (drawablep && !drawablep->isDead() && assertInitialized())
 	{
-		if (!drawablep->isState(LLDrawable::IN_REBUILD_Q1))
+		if (!drawablep->isState(LLDrawable::IN_REBUILD_Q))
 		{
 			mBuildQ1.push_back(drawablep);
-			drawablep->setState(LLDrawable::IN_REBUILD_Q1); // mark drawable as being in priority queue
+			drawablep->setState(LLDrawable::IN_REBUILD_Q); // mark drawable as being in priority queue
 		}
 
         if (flag & (LLDrawable::REBUILD_VOLUME | LLDrawable::REBUILD_POSITION))
@@ -4837,63 +4691,6 @@ void LLPipeline::renderDebug()
 		}
 	}
 
-	if (mRenderDebugMask & LLPipeline::RENDER_DEBUG_BUILD_QUEUE)
-	{
-		U32 count = 0;
-		U32 size = mGroupQ2.size();
-		LLColor4 col;
-
-		LLVertexBuffer::unbind();
-		LLGLEnable blend(GL_BLEND);
-		gGL.setSceneBlendType(LLRender::BT_ALPHA);
-		LLGLDepthTest depth(GL_TRUE, GL_FALSE);
-		gGL.getTexUnit(0)->bind(LLViewerFetchedTexture::sWhiteImagep);
-		
-		gGL.pushMatrix();
-		gGL.loadMatrix(gGLModelView);
-		gGLLastMatrix = NULL;
-
-		for (LLSpatialGroup::sg_vector_t::iterator iter = mGroupQ2.begin(); iter != mGroupQ2.end(); ++iter)
-		{
-			LLSpatialGroup* group = *iter;
-			if (group->isDead())
-			{
-				continue;
-			}
-
-			LLSpatialBridge* bridge = group->getSpatialPartition()->asBridge();
-
-			if (bridge && (!bridge->mDrawable || bridge->mDrawable->isDead()))
-			{
-				continue;
-			}
-
-			if (bridge)
-			{
-				gGL.pushMatrix();
-				gGL.multMatrix((F32*)bridge->mDrawable->getRenderMatrix().mMatrix);
-			}
-
-			F32 alpha = llclamp((F32) (size-count)/size, 0.f, 1.f);
-
-			
-			LLVector2 c(1.f-alpha, alpha);
-			c.normVec();
-
-			
-			++count;
-			col.set(c.mV[0], c.mV[1], 0, alpha*0.5f+0.5f);
-			group->drawObjectBox(col);
-
-			if (bridge)
-			{
-				gGL.popMatrix();
-			}
-		}
-
-		gGL.popMatrix();
-	}
-
 	gGL.flush();
 	gUIProgram.unbind();
 }
@@ -5992,11 +5789,7 @@ void LLPipeline::findReferences(LLDrawable *drawablep)
 	{
 		LL_INFOS() << "In mBuildQ1" << LL_ENDL;
 	}
-	if (std::find(mBuildQ2.begin(), mBuildQ2.end(), drawablep) != mBuildQ2.end())
-	{
-		LL_INFOS() << "In mBuildQ2" << LL_ENDL;
-	}
-
+	
 	S32 count;
 	
 	count = gObjectList.findReferences(drawablep);
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index 3b6a11b3789a01653b26be1b1f5c2025d0c57e0d..6b367d3d737c34b013255817535458efe31ac0ad 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -599,7 +599,6 @@ class LLPipeline
 		RENDER_DEBUG_SCULPTED           =  0x00080000,
 		RENDER_DEBUG_AVATAR_VOLUME      =  0x00100000,
 		RENDER_DEBUG_AVATAR_JOINTS      =  0x00200000,
-		RENDER_DEBUG_BUILD_QUEUE		=  0x00400000,
 		RENDER_DEBUG_AGENT_TARGET       =  0x00800000,
 		RENDER_DEBUG_UPDATE_TYPE		=  0x01000000,
 		RENDER_DEBUG_PHYSICS_SHAPES     =  0x02000000,
@@ -821,9 +820,7 @@ class LLPipeline
 	// Different queues of drawables being processed.
 	//
 	LLDrawable::drawable_list_t 	mBuildQ1; // priority
-	LLDrawable::drawable_list_t 	mBuildQ2; // non-priority
 	LLSpatialGroup::sg_vector_t		mGroupQ1; //priority
-	LLSpatialGroup::sg_vector_t		mGroupQ2; // non-priority
 
 	LLSpatialGroup::sg_vector_t		mGroupSaveQ1; // a place to save mGroupQ1 until it is safe to unref
 
@@ -832,7 +829,6 @@ class LLPipeline
 
 	LLDrawable::drawable_list_t		mPartitionQ; //drawables that need to update their spatial partition radius 
 
-	bool mGroupQ2Locked;
 	bool mGroupQ1Locked;
 
 	bool mResetVertexBuffers; //if true, clear vertex buffers on next update
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index df067d2b88d1401d8fc66c02cb602b5dc384893b..3164c3e1246da205c71f96f54635610878514a17 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2923,16 +2923,6 @@ function="World.EnvPreset"
            function="Advanced.ToggleInfoDisplay"
            parameter="triangle count" />
         </menu_item_check>
-        <menu_item_check
-         label="Build Queue"
-         name="Build Queue">
-          <menu_item_check.on_check
-           function="Advanced.CheckInfoDisplay"
-           parameter="build queue" />
-          <menu_item_check.on_click
-           function="Advanced.ToggleInfoDisplay"
-           parameter="build queue" />
-        </menu_item_check>
         <menu_item_check
          label="Lights"
          name="Lights">