Removed UPDATE_IMAGE_TRANSFER_STATE, use _NEW_PIXEL flag instead.
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 30 Oct 2000 16:32:42 +0000 (16:32 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 30 Oct 2000 16:32:42 +0000 (16:32 +0000)
More minor GLchan changes.
Silence some compiler warnings in cva.[ch]

12 files changed:
src/mesa/drivers/osmesa/osmesa.c
src/mesa/main/attrib.c
src/mesa/main/blend.c
src/mesa/main/buffers.c
src/mesa/main/context.c
src/mesa/main/drawpix.c
src/mesa/main/enable.c
src/mesa/main/fog.h
src/mesa/main/image.c
src/mesa/main/pixel.c
src/mesa/main/state.c
src/mesa/main/teximage.c

index 5d07bf3ae00f4cc50aa960ee43ba656abd19a89b..871143a1c5a45d8c5c3224c6e85b2e729b874bd4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: osmesa.c,v 1.23 2000/10/29 18:23:28 brianp Exp $ */
+/* $Id: osmesa.c,v 1.24 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -621,7 +621,7 @@ static void clear_index( GLcontext *ctx, GLuint index )
 
 
 static void clear_color( GLcontext *ctx,
-                         GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+                         GLchan r, GLchan g, GLchan b, GLchan a )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    osmesa->clearpixel = PACK_RGBA( r, g, b, a );
@@ -735,7 +735,7 @@ static void set_index( GLcontext *ctx, GLuint index )
 
 
 static void set_color( GLcontext *ctx,
-                       GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+                       GLchan r, GLchan g, GLchan b, GLchan a )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    osmesa->pixel = PACK_RGBA( r, g, b, a );
@@ -758,7 +758,7 @@ static void buffer_size( GLcontext *ctx, GLuint *width, GLuint *height )
 /* Write RGBA pixels to an RGBA (or permuted) buffer. */
 static void write_rgba_span( const GLcontext *ctx,
                              GLuint n, GLint x, GLint y,
-                             CONST GLubyte rgba[][4], const GLubyte mask[] )
+                             CONST GLchan rgba[][4], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint *ptr4 = PIXELADDR4( x, y );
@@ -785,7 +785,7 @@ static void write_rgba_span( const GLcontext *ctx,
 /* Write RGBA pixels to an RGBA buffer.  This is the fastest span-writer. */
 static void write_rgba_span_rgba( const GLcontext *ctx,
                                   GLuint n, GLint x, GLint y,
-                                  CONST GLubyte rgba[][4],
+                                  CONST GLchan rgba[][4],
                                   const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
@@ -808,7 +808,7 @@ static void write_rgba_span_rgba( const GLcontext *ctx,
 /* Write RGB pixels to an RGBA (or permuted) buffer. */
 static void write_rgb_span( const GLcontext *ctx,
                             GLuint n, GLint x, GLint y,
-                            CONST GLubyte rgb[][3], const GLubyte mask[] )
+                            CONST GLchan rgb[][3], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint *ptr4 = PIXELADDR4( x, y );
@@ -851,7 +851,7 @@ static void write_monocolor_span( const GLcontext *ctx,
 
 static void write_rgba_pixels( const GLcontext *ctx,
                                GLuint n, const GLint x[], const GLint y[],
-                               CONST GLubyte rgba[][4], const GLubyte mask[] )
+                               CONST GLchan rgba[][4], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint i;
@@ -885,7 +885,7 @@ static void write_monocolor_pixels( const GLcontext *ctx,
 
 
 static void read_rgba_span( const GLcontext *ctx, GLuint n, GLint x, GLint y,
-                             GLubyte rgba[][4] )
+                             GLchan rgba[][4] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint i;
@@ -903,17 +903,17 @@ static void read_rgba_span( const GLcontext *ctx, GLuint n, GLint x, GLint y,
 /* Read RGBA pixels from an RGBA buffer */
 static void read_rgba_span_rgba( const GLcontext *ctx,
                                  GLuint n, GLint x, GLint y,
-                                 GLubyte rgba[][4] )
+                                 GLchan rgba[][4] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint *ptr4 = PIXELADDR4(x,y);
-   MEMCPY( rgba, ptr4, n * 4 * sizeof(GLubyte) );
+   MEMCPY( rgba, ptr4, n * 4 * sizeof(GLchan) );
 }
 
 
 static void read_rgba_pixels( const GLcontext *ctx,
                                GLuint n, const GLint x[], const GLint y[],
-                              GLubyte rgba[][4], const GLubyte mask[] )
+                              GLchan rgba[][4], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint i;
@@ -936,7 +936,7 @@ static void read_rgba_pixels( const GLcontext *ctx,
 /* Write RGBA pixels to an RGB or BGR buffer. */
 static void write_rgba_span3( const GLcontext *ctx,
                               GLuint n, GLint x, GLint y,
-                              CONST GLubyte rgba[][4], const GLubyte mask[] )
+                              CONST GLchan rgba[][4], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLubyte *ptr3 = PIXELADDR3( x, y);
@@ -965,7 +965,7 @@ static void write_rgba_span3( const GLcontext *ctx,
 /* Write RGB pixels to an RGB or BGR buffer. */
 static void write_rgb_span3( const GLcontext *ctx,
                              GLuint n, GLint x, GLint y,
-                             CONST GLubyte rgb[][3], const GLubyte mask[] )
+                             CONST GLchan rgb[][3], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLubyte *ptr3 = PIXELADDR3( x, y);
@@ -1017,7 +1017,7 @@ static void write_monocolor_span3( const GLcontext *ctx,
 
 static void write_rgba_pixels3( const GLcontext *ctx,
                                 GLuint n, const GLint x[], const GLint y[],
-                                CONST GLubyte rgba[][4], const GLubyte mask[] )
+                                CONST GLchan rgba[][4], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint i;
@@ -1058,7 +1058,7 @@ static void write_monocolor_pixels3( const GLcontext *ctx,
 
 static void read_rgba_span3( const GLcontext *ctx,
                              GLuint n, GLint x, GLint y,
-                             GLubyte rgba[][4] )
+                             GLchan rgba[][4] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint i;
@@ -1076,7 +1076,7 @@ static void read_rgba_span3( const GLcontext *ctx,
 
 static void read_rgba_pixels3( const GLcontext *ctx,
                                GLuint n, const GLint x[], const GLint y[],
-                              GLubyte rgba[][4], const GLubyte mask[] )
+                              GLchan rgba[][4], const GLubyte mask[] )
 {
    OSMesaContext osmesa = (OSMesaContext) ctx;
    GLuint i;
index bacd2e1ca4d90e5bf346eaf7b4af21b8c45474ed..cb894a86a9a140c544377a0c972d8d335b2c7a31 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: attrib.c,v 1.31 2000/10/30 13:31:59 keithw Exp $ */
+/* $Id: attrib.c,v 1.32 2000/10/30 16:32:42 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -855,8 +855,6 @@ _mesa_PopAttrib(void)
       FREE( attr );
       attr = next;
    }
-
-   ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
 }
 
 
index 65f890d10fa3ce6db630553101feea1f79a46236..4f20d269ac2b20f695e3fa64a2c0f822dd43b42a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: blend.c,v 1.22 2000/10/30 13:31:59 keithw Exp $ */
+/* $Id: blend.c,v 1.23 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -370,19 +370,23 @@ blend_transparency( GLcontext *ctx, GLuint n, const GLubyte mask[],
             const GLint b = (rgba[i][BCOMP] * t + dest[i][BCOMP] * s) / 255;
             const GLint a = (rgba[i][ACOMP] * t + dest[i][ACOMP] * s) / 255;
 #else
+#if CHAN_BITS == 8
             /* This satisfies Glean and should be reasonably fast */
             /* Contributed by Nathan Hand */
-#if CHAN_BITS == 8
 #define DIV255(X)  (((X) << 8) + (X) + 256) >> 16
-#else
-XXX todo
-#endif
             const GLint s = CHAN_MAX - t;
             const GLint r = DIV255(rgba[i][RCOMP] * t + dest[i][RCOMP] * s);
             const GLint g = DIV255(rgba[i][GCOMP] * t + dest[i][GCOMP] * s);
             const GLint b = DIV255(rgba[i][BCOMP] * t + dest[i][BCOMP] * s);
             const GLint a = DIV255(rgba[i][ACOMP] * t + dest[i][ACOMP] * s);
 #undef DIV255
+#else
+            const GLint s = CHAN_MAX - t;
+            const GLint r = (rgba[i][RCOMP] * t + dest[i][RCOMP] * s) / CHAN_MAX;
+            const GLint g = (rgba[i][GCOMP] * t + dest[i][GCOMP] * s) / CHAN_MAX;
+            const GLint b = (rgba[i][BCOMP] * t + dest[i][BCOMP] * s) / CHAN_MAX;
+            const GLint a = (rgba[i][ACOMP] * t + dest[i][ACOMP] * s) / CHAN_MAX;
+#endif
 #endif
             ASSERT(r <= CHAN_MAX);
             ASSERT(g <= CHAN_MAX);
@@ -926,7 +930,7 @@ _mesa_blend_span( GLcontext *ctx, GLuint n, GLint x, GLint y,
 void
 _mesa_blend_pixels( GLcontext *ctx,
                     GLuint n, const GLint x[], const GLint y[],
-                    GLchan rgba[][4], const GLchan mask[] )
+                    GLchan rgba[][4], const GLubyte mask[] )
 {
    GLchan dest[PB_SIZE][4];
 
index 33e7bc001611f0c64010dec4770e66707d04b828..c50590f6123b5b795bac9d0e0b909c4461d57aaf 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: buffers.c,v 1.16 2000/10/30 13:31:59 keithw Exp $ */
+/* $Id: buffers.c,v 1.17 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -175,7 +175,7 @@ clear_color_buffer(GLcontext *ctx)
       ASSERT(ctx->Color.IndexMask == ~0);
       if (ctx->Visual.IndexBits == 8) {
          /* 8-bit clear */
-         GLchan span[MAX_WIDTH];
+         GLubyte span[MAX_WIDTH];
          GLint i;
          MEMSET(span, ctx->Color.ClearIndex, width);
          for (i = 0; i < height; i++) {
index 3268f55070c6baf7d68bb3e8227b029c5fd7af45..26ef3c43dde102e02dee7e5d5d9b836225d91015 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.99 2000/10/30 13:32:00 keithw Exp $ */
+/* $Id: context.c,v 1.100 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1341,7 +1341,7 @@ init_attrib_groups( GLcontext *ctx )
    ctx->StippleCounter = 0;
    ctx->NeedNormals = GL_FALSE;
    ctx->DoViewportMapping = GL_TRUE;
-   ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
+   ctx->ImageTransferState = 0;
 
    ctx->NeedEyeCoords = GL_FALSE;
    ctx->NeedEyeNormals = GL_FALSE;
index 4b2fbacd6ad7ca7cd783d505dccd81f3bbe4389b..3e030ede61a5f6692a7a0f0a68f9b419788cedd6 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: drawpix.c,v 1.42 2000/10/29 19:02:23 brianp Exp $ */
+/* $Id: drawpix.c,v 1.43 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -866,9 +866,6 @@ _mesa_DrawPixels( GLsizei width, GLsizei height,
          gl_update_state(ctx);
       }
 
-      if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-         _mesa_update_image_transfer_state(ctx);
-
       x = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
       y = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
 
index 6c5514fc98a6649c5bd46bae38fda173221a82dc..20e507a61d9ccede104314504839f2649594302a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: enable.c,v 1.29 2000/10/30 13:32:00 keithw Exp $ */
+/* $Id: enable.c,v 1.30 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -516,17 +516,14 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
       case GL_COLOR_TABLE_SGI:
          /* XXX check for extension */
          ctx->Pixel.ColorTableEnabled = state;
-         ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
         ctx->NewState |= _NEW_PIXEL;
          break;
       case GL_POST_CONVOLUTION_COLOR_TABLE_SGI:
          ctx->Pixel.PostConvolutionColorTableEnabled = state;
-         ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
         ctx->NewState |= _NEW_PIXEL;
          break;
       case GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI:
          ctx->Pixel.PostColorMatrixColorTableEnabled = state;
-         ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
         ctx->NewState |= _NEW_PIXEL;
          break;
 
@@ -534,17 +531,14 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state )
       case GL_CONVOLUTION_1D:
          /* XXX check for extension */
          ctx->Pixel.Convolution1DEnabled = state;
-         ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
         ctx->NewState |= _NEW_PIXEL;
          break;
       case GL_CONVOLUTION_2D:
          ctx->Pixel.Convolution2DEnabled = state;
-         ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
         ctx->NewState |= _NEW_PIXEL;
          break;
       case GL_SEPARABLE_2D:
          ctx->Pixel.Separable2DEnabled = state;
-         ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
         ctx->NewState |= _NEW_PIXEL;
          break;
 
index d5747426dd22d1311221b417f3573d7248d99560..5841d750beef3ae214c34b8883535e439c92f9c4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: fog.h,v 1.7 2000/10/28 18:34:48 brianp Exp $ */
+/* $Id: fog.h,v 1.8 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -72,7 +72,7 @@ _mesa_win_fog_coords_from_z( const GLcontext *ctx,
 
 extern void
 _mesa_depth_fog_rgba_pixels( const GLcontext *ctx,
-                            GLuint n, const GLdepth z[], GLubyte rgba[][4] );
+                            GLuint n, const GLdepth z[], GLchan rgba[][4] );
 
 extern void
 _mesa_depth_fog_ci_pixels( const GLcontext *ctx,
index 4cbf677072d689a3771d251117c7a206f89db1c8..1711a75eab3957400e4d7ff3c7d05f05c93966d9 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: image.c,v 1.45 2000/10/29 18:12:15 brianp Exp $ */
+/* $Id: image.c,v 1.46 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -1700,7 +1700,7 @@ _mesa_pack_rgba_span( GLcontext *ctx,
                       const struct gl_pixelstore_attrib *dstPacking,
                       GLuint transferOps)
 {
-   ASSERT(ctx->ImageTransferState != UPDATE_IMAGE_TRANSFER_STATE);
+   ASSERT((ctx->NewState & _NEW_PIXEL) == 0);
 
    /* Test for optimized case first */
    if (transferOps == 0 && dstFormat == GL_RGBA && dstType == CHAN_TYPE) {
index 4cd73efbf9da2e87c08bd8637b78b1d333e4e542..a7787b667aec391e19d880f45e2f0f68cf1f8d8a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: pixel.c,v 1.17 2000/10/30 13:32:01 keithw Exp $ */
+/* $Id: pixel.c,v 1.18 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -632,7 +632,6 @@ _mesa_PixelTransferf( GLenum pname, GLfloat param )
    }
 
    /* signal to recompute the bitmask */
-   ctx->ImageTransferState = UPDATE_IMAGE_TRANSFER_STATE;
    ctx->NewState |= _NEW_PIXEL;
 }
 
@@ -1063,10 +1062,10 @@ _mesa_map_ci8_to_rgba( const GLcontext *ctx, GLuint n, const GLubyte index[],
    GLuint gmask = ctx->Pixel.MapItoGsize - 1;
    GLuint bmask = ctx->Pixel.MapItoBsize - 1;
    GLuint amask = ctx->Pixel.MapItoAsize - 1;
-   const GLfloat *rMap = ctx->Pixel.MapItoR8;
-   const GLfloat *gMap = ctx->Pixel.MapItoG8;
-   const GLfloat *bMap = ctx->Pixel.MapItoB8;
-   const GLfloat *aMap = ctx->Pixel.MapItoA8;
+   const GLfloat *rMap = ctx->Pixel.MapItoR;
+   const GLfloat *gMap = ctx->Pixel.MapItoG;
+   const GLfloat *bMap = ctx->Pixel.MapItoB;
+   const GLfloat *aMap = ctx->Pixel.MapItoA;
    GLuint i;
    for (i=0;i<n;i++) {
       rgba[i][RCOMP] = FLOAT_TO_CHAN(rMap[index[i] & rmask]);
index 13ed623dcc6e42406003797d6e93d45225256d3e..32727d0986447bf2443277d803d7cfa88109ebc8 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: state.c,v 1.37 2000/10/30 13:32:01 keithw Exp $ */
+/* $Id: state.c,v 1.38 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -827,6 +827,9 @@ void gl_update_state( GLcontext *ctx )
    if (MESA_VERBOSE & VERBOSE_STATE)
       gl_print_state("", ctx->NewState);
 
+   if (ctx->NewState & _NEW_PIXEL)
+      _mesa_update_image_transfer_state(ctx);
+
    if (ctx->NewState & _NEW_ARRAY)
       gl_update_client_state( ctx );
 
index 4a6258e89b22aed92439fdc7e48dd0d987a386ee..e47387fcb5bbf053c33faa71de4c4d223bbf115a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: teximage.c,v 1.56 2000/10/30 13:32:01 keithw Exp $ */
+/* $Id: teximage.c,v 1.57 2000/10/30 16:32:43 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -924,9 +924,8 @@ make_texture_image( GLcontext *ctx, GLuint dimensions,
    const GLint components = components_in_intformat(internalFormat);
    GLint convWidth = width, convHeight = height;
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE) {
-      _mesa_update_image_transfer_state(ctx);
-   }
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (ctx->ImageTransferState & IMAGE_CONVOLUTION_BIT) {
       adjust_texture_size_for_convolution(ctx, dimensions,
@@ -1659,8 +1658,8 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
       /* setup the teximage struct's fields */
       init_texture_image(ctx, texImage, postConvWidth, 1, 1, border, internalFormat);
 
-      if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-         _mesa_update_image_transfer_state(ctx);
+      if (ctx->NewState & _NEW_PIXEL)
+         gl_update_state(ctx);
 
       /* process the texture image */
       if (pixels) {
@@ -1798,8 +1797,8 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
       init_texture_image(ctx, texImage, postConvWidth, postConvHeight,
                          1, border, internalFormat);
 
-      if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-         _mesa_update_image_transfer_state(ctx);
+      if (ctx->NewState & _NEW_PIXEL)
+         gl_update_state(ctx);
 
       /* process the texture image */
       if (pixels) {
@@ -1941,8 +1940,8 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
       init_texture_image(ctx, texImage, width, height, depth,
                          border, internalFormat);
 
-      if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-         _mesa_update_image_transfer_state(ctx);
+      if (ctx->NewState & _NEW_PIXEL)
+         gl_update_state(ctx);
 
       /* process the texture image */
       if (pixels) {
@@ -2228,8 +2227,8 @@ _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
       GLint depth = texImage->Depth;
       GLint img, row;
 
-      if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-         _mesa_update_image_transfer_state(ctx);
+      if (ctx->NewState & _NEW_PIXEL)
+         gl_update_state(ctx);
 
       if (ctx->ImageTransferState & IMAGE_CONVOLUTION_BIT) {
          /* convert texture image to GL_RGBA, GL_FLOAT */
@@ -2420,8 +2419,8 @@ _mesa_TexSubImage1D( GLenum target, GLint level,
    if (width == 0 || !pixels)
       return;  /* no-op, not an error */
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (!ctx->ImageTransferState && ctx->Driver.TexSubImage1D) {
       success = (*ctx->Driver.TexSubImage1D)( ctx, target, level, xoffset,
@@ -2491,8 +2490,8 @@ _mesa_TexSubImage2D( GLenum target, GLint level,
    if (width == 0 || height == 0 || !pixels)
       return;  /* no-op, not an error */
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (!ctx->ImageTransferState && ctx->Driver.TexSubImage2D) {
       success = (*ctx->Driver.TexSubImage2D)( ctx, target, level, xoffset,
@@ -2574,8 +2573,8 @@ _mesa_TexSubImage3D( GLenum target, GLint level,
    if (width == 0 || height == 0 || height == 0 || !pixels)
       return;  /* no-op, not an error */
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (!ctx->ImageTransferState && ctx->Driver.TexSubImage3D) {
       success = (*ctx->Driver.TexSubImage3D)( ctx, target, level, xoffset,
@@ -2672,8 +2671,8 @@ _mesa_CopyTexImage1D( GLenum target, GLint level,
                                width, 1, border))
       return;
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (ctx->ImageTransferState || !ctx->Driver.CopyTexImage1D 
        || !(*ctx->Driver.CopyTexImage1D)(ctx, target, level,
@@ -2712,8 +2711,8 @@ _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
                                width, height, border))
       return;
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (ctx->ImageTransferState || !ctx->Driver.CopyTexImage2D
        || !(*ctx->Driver.CopyTexImage2D)(ctx, target, level,
@@ -2751,8 +2750,8 @@ _mesa_CopyTexSubImage1D( GLenum target, GLint level,
                                    xoffset, 0, 0, width, 1))
       return;
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (ctx->ImageTransferState || !ctx->Driver.CopyTexSubImage1D
        || !(*ctx->Driver.CopyTexSubImage1D)(ctx, target, level,
@@ -2798,8 +2797,8 @@ _mesa_CopyTexSubImage2D( GLenum target, GLint level,
                                    xoffset, yoffset, 0, width, height))
       return;
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (ctx->ImageTransferState || !ctx->Driver.CopyTexSubImage2D
        || !(*ctx->Driver.CopyTexSubImage2D)(ctx, target, level,
@@ -2845,8 +2844,8 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level,
                     xoffset, yoffset, zoffset, width, height))
       return;
 
-   if (ctx->ImageTransferState == UPDATE_IMAGE_TRANSFER_STATE)
-      _mesa_update_image_transfer_state(ctx);
+   if (ctx->NewState & _NEW_PIXEL)
+      gl_update_state(ctx);
 
    if (ctx->ImageTransferState || !ctx->Driver.CopyTexSubImage3D
        || !(*ctx->Driver.CopyTexSubImage3D)(ctx, target, level,