Replace the flags Mesa was using for ctx->NewState with a new set
[mesa.git] / src / mesa / main / texstate.c
index 64df9016dc945caadaf5b048e8bc8235d3d3e87a..61dd4a201688c697bebd223c5303590e70dd5ffd 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: texstate.c,v 1.14 2000/06/27 21:42:13 brianp Exp $ */
+/* $Id: texstate.c,v 1.19 2000/10/30 13:32:01 keithw Exp $ */
 
 /*
  * Mesa 3-D graphics library
- * Version:  3.3
+ * Version:  3.5
  * 
  * Copyright (C) 1999-2000  Brian Paul   All Rights Reserved.
  * 
@@ -29,6 +29,7 @@
 #include "all.h"
 #else
 #include "glheader.h"
+#include "colormac.h"
 #include "context.h"
 #include "enums.h"
 #include "extensions.h"
@@ -83,19 +84,18 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
                   case GL_ADD:
                   case GL_COMBINE_EXT:
                      if (mode == GL_ADD &&
-                         !ctx->Extensions.HaveTextureEnvAdd) {
+                         !ctx->Extensions.EXT_texture_env_add) {
                         gl_error(ctx, GL_INVALID_ENUM, "glTexEnv(param)");
                         return;
                      }
                      if (mode == GL_COMBINE_EXT &&
-                         !ctx->Extensions.HaveTextureEnvCombine) {
+                         !ctx->Extensions.EXT_texture_env_combine) {
                         gl_error(ctx, GL_INVALID_ENUM, "glTexEnv(param)");
                         return;
                      }
                      if (texUnit->EnvMode == mode)
                         return;  /* no change */
                      texUnit->EnvMode = mode;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
                      break;
                   default:
                      gl_error( ctx, GL_INVALID_VALUE, "glTexEnv(param)" );
@@ -110,7 +110,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             texUnit->EnvColor[3] = CLAMP( param[3], 0.0F, 1.0F );
             break;
          case GL_COMBINE_RGB_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                GLenum mode = (GLenum) (GLint) *param;
                switch (mode) {
                   case GL_REPLACE:
@@ -121,7 +121,6 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
                      if (texUnit->CombineModeRGB == mode)
                         return;  /* no change */
                      texUnit->CombineModeRGB = mode;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
                      break;
                   default:
                      gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -134,7 +133,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             }
             break;
          case GL_COMBINE_ALPHA_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                GLenum mode = (GLenum) (GLint) *param;
                switch (mode) {
                   case GL_REPLACE:
@@ -145,7 +144,6 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
                      if (texUnit->CombineModeA == mode)
                         return;  /* no change */
                      texUnit->CombineModeA = mode;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
                      break;
                   default:
                      gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -160,7 +158,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
          case GL_SOURCE0_RGB_EXT:
          case GL_SOURCE1_RGB_EXT:
          case GL_SOURCE2_RGB_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                GLenum source = (GLenum) (GLint) *param;
                GLuint s = pname - GL_SOURCE0_RGB_EXT;
                switch (source) {
@@ -171,7 +169,6 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
                      if (texUnit->CombineSourceRGB[s] == source)
                         return;  /* no change */
                      texUnit->CombineSourceRGB[s] = source;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
                      break;
                   default:
                      gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -186,7 +183,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
          case GL_SOURCE0_ALPHA_EXT:
          case GL_SOURCE1_ALPHA_EXT:
          case GL_SOURCE2_ALPHA_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                GLenum source = (GLenum) (GLint) *param;
                GLuint s = pname - GL_SOURCE0_ALPHA_EXT;
                switch (source) {
@@ -196,7 +193,6 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
                   case GL_PREVIOUS_EXT:
                      if (texUnit->CombineSourceA[s] == source) return;
                      texUnit->CombineSourceA[s] = source;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
                      break;
                   default:
                      gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -210,19 +206,15 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             break;
          case GL_OPERAND0_RGB_EXT:
          case GL_OPERAND1_RGB_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                GLenum operand = (GLenum) (GLint) *param;
                GLuint s = pname - GL_OPERAND0_RGB_EXT;
                switch (operand) {
                   case GL_SRC_COLOR:
                   case GL_ONE_MINUS_SRC_COLOR:
-                     texUnit->CombineOperandRGB[s] = operand;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
-                     break;
                   case GL_SRC_ALPHA:
                   case GL_ONE_MINUS_SRC_ALPHA:
-                     texUnit->CombineOperandA[s] = operand;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
+                     texUnit->CombineOperandRGB[s] = operand;
                      break;
                   default:
                      gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -236,14 +228,13 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             break;
          case GL_OPERAND0_ALPHA_EXT:
          case GL_OPERAND1_ALPHA_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                GLenum operand = (GLenum) (GLint) *param;
                switch (operand) {
                   case GL_SRC_ALPHA:
                   case GL_ONE_MINUS_SRC_ALPHA:
                      texUnit->CombineOperandA[pname-GL_OPERAND0_ALPHA_EXT]
                         = operand;
-                     ctx->NewState |= NEW_TEXTURE_ENV;
                      break;
                   default:
                      gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -256,10 +247,9 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             }
             break;
          case GL_OPERAND2_RGB_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                if ((GLenum) (GLint) *param == GL_SRC_ALPHA) {
                   texUnit->CombineOperandRGB[2] = (GLenum) (GLint) *param;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else {
                   gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -272,10 +262,9 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             }
             break;
          case GL_OPERAND2_ALPHA_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                if ((GLenum) (GLint) *param == GL_SRC_ALPHA) {
                   texUnit->CombineOperandA[2] = (GLenum) (GLint) *param;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else {
                   gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
@@ -288,18 +277,15 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             }
             break;
          case GL_RGB_SCALE_EXT:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                if (*param == 1.0) {
                   texUnit->CombineScaleShiftRGB = 0;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else if (*param == 2.0) {
                   texUnit->CombineScaleShiftRGB = 1;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else if (*param == 4.0) {
                   texUnit->CombineScaleShiftRGB = 2;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else {
                   gl_error( ctx, GL_INVALID_VALUE, "glTexEnv(param)" );
@@ -312,18 +298,15 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
             }
             break;
          case GL_ALPHA_SCALE:
-            if (ctx->Extensions.HaveTextureEnvCombine) {
+            if (ctx->Extensions.EXT_texture_env_combine) {
                if (*param == 1.0) {
                   texUnit->CombineScaleShiftA = 0;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else if (*param == 2.0) {
                   texUnit->CombineScaleShiftA = 1;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else if (*param == 4.0) {
                   texUnit->CombineScaleShiftA = 2;
-                  ctx->NewState |= NEW_TEXTURE_ENV;
                }
                else {
                   gl_error( ctx, GL_INVALID_VALUE, "glTexEnv(param)" );
@@ -341,7 +324,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
       }
    }
    else if (target==GL_TEXTURE_FILTER_CONTROL_EXT) {
-      if (!ctx->Extensions.HaveTextureLodBias) {
+      if (!ctx->Extensions.EXT_texture_lod_bias) {
         gl_error( ctx, GL_INVALID_ENUM, "glTexEnv(param)" );
         return;
       }
@@ -370,6 +353,7 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
       (*ctx->Driver.TexEnv)( ctx, target, pname, param );
    }
 
+   ctx->NewState |= _NEW_TEXTURE;
 }
 
 
@@ -424,7 +408,7 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
         COPY_4FV( params, texUnit->EnvColor );
         break;
       case GL_RGB_SCALE_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             if (texUnit->CombineScaleShiftRGB == 0)
                *params = 1.0;
             else if (texUnit->CombineScaleShiftRGB == 1)
@@ -438,7 +422,7 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
          }
          break;
       case GL_ALPHA_SCALE:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             if (texUnit->CombineScaleShiftA == 0)
                *params = 1.0;
             else if (texUnit->CombineScaleShiftA == 1)
@@ -481,7 +465,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
         params[3] = FLOAT_TO_INT( texUnit->EnvColor[3] );
          break;
       case GL_COMBINE_RGB_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineModeRGB;
          }
          else {
@@ -489,7 +473,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_COMBINE_ALPHA_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineModeA;
          }
          else {
@@ -497,7 +481,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_SOURCE0_RGB_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineSourceRGB[0];
          }
          else {
@@ -505,7 +489,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_SOURCE1_RGB_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineSourceRGB[1];
          }
          else {
@@ -513,7 +497,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_SOURCE2_RGB_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineSourceRGB[2];
          }
          else {
@@ -521,7 +505,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_SOURCE0_ALPHA_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineSourceA[0];
          }
          else {
@@ -529,7 +513,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_SOURCE1_ALPHA_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineSourceA[1];
          }
          else {
@@ -537,7 +521,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_SOURCE2_ALPHA_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineSourceA[2];
          }
          else {
@@ -545,7 +529,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_OPERAND0_RGB_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineOperandRGB[0];
          }
          else {
@@ -553,7 +537,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_OPERAND1_RGB_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineOperandRGB[1];
          }
          else {
@@ -561,7 +545,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_OPERAND2_RGB_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineOperandRGB[2];
          }
          else {
@@ -569,7 +553,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_OPERAND0_ALPHA_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineOperandA[0];
          }
          else {
@@ -577,7 +561,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_OPERAND1_ALPHA_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineOperandA[1];
          }
          else {
@@ -585,7 +569,7 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_OPERAND2_ALPHA_EXT:
-         if (ctx->Extensions.HaveTextureEnvCombine) {
+         if (ctx->Extensions.EXT_texture_env_combine) {
             *params = (GLint) texUnit->CombineOperandA[2];
          }
          else {
@@ -640,7 +624,7 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
          texObj = texUnit->CurrentD[3];
          break;
       case GL_TEXTURE_CUBE_MAP_ARB:
-         if (ctx->Extensions.HaveTextureCubeMap) {
+         if (ctx->Extensions.ARB_texture_cube_map) {
             texObj = texUnit->CurrentCubeMap;
             break;
          }
@@ -662,7 +646,6 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
              || eparam==GL_NEAREST_MIPMAP_LINEAR
              || eparam==GL_LINEAR_MIPMAP_LINEAR) {
             texObj->MinFilter = eparam;
-            ctx->NewState |= NEW_TEXTURING;
          }
          else {
             gl_error( ctx, GL_INVALID_VALUE, "glTexParameter(param)" );
@@ -676,7 +659,6 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
 
          if (eparam==GL_NEAREST || eparam==GL_LINEAR) {
             texObj->MagFilter = eparam;
-            ctx->NewState |= NEW_TEXTURING;
          }
          else {
             gl_error( ctx, GL_INVALID_VALUE, "glTexParameter(param)" );
@@ -689,7 +671,6 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
 
          if (eparam==GL_CLAMP || eparam==GL_REPEAT || eparam==GL_CLAMP_TO_EDGE) {
             texObj->WrapS = eparam;
-            ctx->NewState |= NEW_TEXTURING;
          }
          else {
             gl_error( ctx, GL_INVALID_VALUE, "glTexParameter(param)" );
@@ -702,7 +683,6 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
 
          if (eparam==GL_CLAMP || eparam==GL_REPEAT || eparam==GL_CLAMP_TO_EDGE) {
             texObj->WrapT = eparam;
-            ctx->NewState |= NEW_TEXTURING;
          }
          else {
             gl_error( ctx, GL_INVALID_VALUE, "glTexParameter(param)" );
@@ -715,25 +695,22 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
 
          if (eparam==GL_CLAMP || eparam==GL_REPEAT || eparam==GL_CLAMP_TO_EDGE) {
             texObj->WrapR = eparam;
-            ctx->NewState |= NEW_TEXTURING;
          }
          else {
             gl_error( ctx, GL_INVALID_VALUE, "glTexParameter(param)" );
          }
          break;
       case GL_TEXTURE_BORDER_COLOR:
-         texObj->BorderColor[0] = (GLubyte) CLAMP((GLint)(params[0]*255.0), 0, 255);
-         texObj->BorderColor[1] = (GLubyte) CLAMP((GLint)(params[1]*255.0), 0, 255);
-         texObj->BorderColor[2] = (GLubyte) CLAMP((GLint)(params[2]*255.0), 0, 255);
-         texObj->BorderColor[3] = (GLubyte) CLAMP((GLint)(params[3]*255.0), 0, 255);
+         texObj->BorderColor[0] = (GLchan) CLAMP((GLint)(params[0]*CHAN_MAXF), 0, CHAN_MAX);
+         texObj->BorderColor[1] = (GLchan) CLAMP((GLint)(params[1]*CHAN_MAXF), 0, CHAN_MAX);
+         texObj->BorderColor[2] = (GLchan) CLAMP((GLint)(params[2]*CHAN_MAXF), 0, CHAN_MAX);
+         texObj->BorderColor[3] = (GLchan) CLAMP((GLint)(params[3]*CHAN_MAXF), 0, CHAN_MAX);
          break;
       case GL_TEXTURE_MIN_LOD:
          texObj->MinLod = params[0];
-         ctx->NewState |= NEW_TEXTURING;
          break;
       case GL_TEXTURE_MAX_LOD:
          texObj->MaxLod = params[0];
-         ctx->NewState |= NEW_TEXTURING;
          break;
       case GL_TEXTURE_BASE_LEVEL:
          if (params[0] < 0.0) {
@@ -741,7 +718,6 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
             return;
          }
          texObj->BaseLevel = (GLint) params[0];
-         ctx->NewState |= NEW_TEXTURING;
          break;
       case GL_TEXTURE_MAX_LEVEL:
          if (params[0] < 0.0) {
@@ -749,7 +725,6 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
             return;
          }
          texObj->MaxLevel = (GLint) params[0];
-         ctx->NewState |= NEW_TEXTURING;
          break;
       case GL_TEXTURE_PRIORITY:
          /* (keithh@netcomuk.co.uk) */
@@ -760,6 +735,7 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
          return;
    }
 
+   ctx->NewState |= _NEW_TEXTURE;
    gl_put_texobj_on_dirty_list( ctx, texObj );
 
    if (ctx->Driver.TexParameter) {
@@ -812,7 +788,7 @@ tex_image_dimensions(GLcontext *ctx, GLenum target)
          return 3;
       case GL_TEXTURE_CUBE_MAP_ARB:
       case GL_PROXY_TEXTURE_CUBE_MAP_ARB:
-         return ctx->Extensions.HaveTextureCubeMap ? 2 : 0;
+         return ctx->Extensions.ARB_texture_cube_map ? 2 : 0;
       default:
          gl_problem(ctx, "bad target in _mesa_tex_target_dimensions()");
          return 0;
@@ -909,7 +885,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
 
       /* GL_ARB_texture_compression */
       case GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB:
-         if (ctx->Extensions.HaveTextureCompression) {
+         if (ctx->Extensions.ARB_texture_compression) {
             if (img->IsCompressed && !isProxy)
                *params = img->CompressedSize;
             else
@@ -921,7 +897,7 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
          }
          return;
       case GL_TEXTURE_COMPRESSED_ARB:
-         if (ctx->Extensions.HaveTextureCompression) {
+         if (ctx->Extensions.ARB_texture_compression) {
             *params = (GLint) img->IsCompressed;
          }
          else {
@@ -968,13 +944,20 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
          *params = ENUM_TO_FLOAT(obj->WrapR);
          break;
       case GL_TEXTURE_BORDER_COLOR:
-         params[0] = obj->BorderColor[0] / 255.0F;
-         params[1] = obj->BorderColor[1] / 255.0F;
-         params[2] = obj->BorderColor[2] / 255.0F;
-         params[3] = obj->BorderColor[3] / 255.0F;
+         params[0] = obj->BorderColor[0] / CHAN_MAXF;
+         params[1] = obj->BorderColor[1] / CHAN_MAXF;
+         params[2] = obj->BorderColor[2] / CHAN_MAXF;
+         params[3] = obj->BorderColor[3] / CHAN_MAXF;
          break;
       case GL_TEXTURE_RESIDENT:
-         *params = ENUM_TO_FLOAT(GL_TRUE);
+         {
+            GLboolean resident;
+            if (ctx->Driver.IsTextureResident)
+               resident = ctx->Driver.IsTextureResident(ctx, obj);
+            else
+               resident = GL_TRUE;
+            *params = ENUM_TO_FLOAT(resident);
+         }
          break;
       case GL_TEXTURE_PRIORITY:
          *params = obj->Priority;
@@ -1031,10 +1014,10 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
       case GL_TEXTURE_BORDER_COLOR:
          {
             GLfloat color[4];
-            color[0] = obj->BorderColor[0] / 255.0F;
-            color[1] = obj->BorderColor[1] / 255.0F;
-            color[2] = obj->BorderColor[2] / 255.0F;
-            color[3] = obj->BorderColor[3] / 255.0F;
+            color[0] = obj->BorderColor[0] / CHAN_MAXF;
+            color[1] = obj->BorderColor[1] / CHAN_MAXF;
+            color[2] = obj->BorderColor[2] / CHAN_MAXF;
+            color[3] = obj->BorderColor[3] / CHAN_MAXF;
             params[0] = FLOAT_TO_INT( color[0] );
             params[1] = FLOAT_TO_INT( color[1] );
             params[2] = FLOAT_TO_INT( color[2] );
@@ -1042,7 +1025,14 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
          }
          break;
       case GL_TEXTURE_RESIDENT:
-         *params = (GLint) GL_TRUE;
+         {
+            GLboolean resident;
+            if (ctx->Driver.IsTextureResident)
+               resident = ctx->Driver.IsTextureResident(ctx, obj);
+            else
+               resident = GL_TRUE;
+            *params = (GLint) resident;
+         }
          break;
       case GL_TEXTURE_PRIORITY:
          *params = (GLint) obj->Priority;
@@ -1268,7 +1258,7 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
         return;
    }
 
-   ctx->NewState |= NEW_TEXTURING;
+   ctx->NewState |= _NEW_TEXTURE;
 }
 
 
@@ -1596,6 +1586,7 @@ _mesa_ActiveTextureARB( GLenum target )
       if (ctx->Driver.ActiveTexture) {
          (*ctx->Driver.ActiveTexture)( ctx, (GLuint) texUnit );
       }
+      ctx->NewState |= _NEW_TEXTURE;
    }
    else {
       gl_error(ctx, GL_INVALID_OPERATION, "glActiveTextureARB(target)");
@@ -1615,6 +1606,7 @@ _mesa_ClientActiveTextureARB( GLenum target )
    if (target >= GL_TEXTURE0_ARB && target < GL_TEXTURE0_ARB + maxUnits) {
       GLint texUnit = target - GL_TEXTURE0_ARB;
       ctx->Array.ActiveTexture = texUnit;
+      ctx->NewState |= _NEW_ARRAY;
    }
    else {
       gl_error(ctx, GL_INVALID_OPERATION, "glActiveTextureARB(target)");
@@ -1682,7 +1674,7 @@ void gl_remove_texobj_from_dirty_list( struct gl_shared_state *shared,
 
 
 /*
- * This is called by gl_update_state() if the NEW_TEXTURING bit in
+ * This is called by gl_update_state() if the _NEW_TEXTURE bit in
  * ctx->NewState is set.
  */
 void gl_update_dirty_texobjs( GLcontext *ctx )