[Mesa-dev] [PATCH 1/4] mesa: simplify Driver.TexSubImage() parameters

Brian Paul brian.e.paul at gmail.com
Mon Dec 26 15:09:35 PST 2011


From: Brian Paul <brianp at vmware.com>

There's no need to pass the target, level and texObj parameters since
they can be easily obtained from the texImage pointer.
---
 src/mesa/drivers/common/meta.c                  |   18 +++++-----
 src/mesa/drivers/dri/intel/intel_tex_subimage.c |   31 ++++++----------
 src/mesa/drivers/dri/nouveau/nouveau_texture.c  |   45 +++++++++++------------
 src/mesa/main/dd.h                              |   44 +++++++++++------------
 src/mesa/main/mipmap.c                          |    5 +--
 src/mesa/main/teximage.c                        |   15 +++-----
 src/mesa/main/texstore.c                        |   21 +++++------
 src/mesa/main/texstore.h                        |   21 +++++------
 8 files changed, 89 insertions(+), 111 deletions(-)

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index e622673..2c1007b 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -3155,19 +3155,19 @@ copy_tex_sub_image(struct gl_context *ctx,
     */
    _mesa_meta_begin(ctx, MESA_META_PIXEL_STORE);
    if (target == GL_TEXTURE_1D) {
-      ctx->Driver.TexSubImage1D(ctx, target, level, xoffset,
-                                width, format, type, buf,
-                                &ctx->Unpack, texObj, texImage);
+      ctx->Driver.TexSubImage1D(ctx, texImage,
+                                xoffset, width,
+                                format, type, buf, &ctx->Unpack);
    }
    else if (target == GL_TEXTURE_3D) {
-      ctx->Driver.TexSubImage3D(ctx, target, level, xoffset, yoffset, zoffset,
-                                width, height, 1, format, type, buf,
-                                &ctx->Unpack, texObj, texImage);
+      ctx->Driver.TexSubImage3D(ctx, texImage,
+                                xoffset, yoffset, zoffset, width, height, 1,
+                                format, type, buf, &ctx->Unpack);
    }
    else {
-      ctx->Driver.TexSubImage2D(ctx, target, level, xoffset, yoffset,
-                                width, height, format, type, buf,
-                                &ctx->Unpack, texObj, texImage);
+      ctx->Driver.TexSubImage2D(ctx, texImage,
+                                xoffset, yoffset, width, height,
+                                format, type, buf, &ctx->Unpack);
    }
    _mesa_meta_end(ctx);
 
diff --git a/src/mesa/drivers/dri/intel/intel_tex_subimage.c b/src/mesa/drivers/dri/intel/intel_tex_subimage.c
index 6629588..4572747 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_subimage.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_subimage.c
@@ -42,13 +42,11 @@
 
 static bool
 intel_blit_texsubimage(struct gl_context * ctx,
-		       GLenum target, GLint level,
+		       struct gl_texture_image *texImage,
 		       GLint xoffset, GLint yoffset,
 		       GLint width, GLint height,
 		       GLenum format, GLenum type, const void *pixels,
-		       const struct gl_pixelstore_attrib *packing,
-		       struct gl_texture_object *texObj,
-		       struct gl_texture_image *texImage)
+		       const struct gl_pixelstore_attrib *packing)
 {
    struct intel_context *intel = intel_context(ctx);
    struct intel_texture_image *intelImage = intel_texture_image(texImage);
@@ -69,7 +67,7 @@ intel_blit_texsubimage(struct gl_context * ctx,
    if (intelImage->mt->region->tiling == I915_TILING_Y)
       return false;
 
-   if (target != GL_TEXTURE_2D)
+   if (texImage->TexObject->Target != GL_TEXTURE_2D)
       return false;
 
    /* On gen6, it's probably not worth swapping to the blit ring to do
@@ -83,8 +81,8 @@ intel_blit_texsubimage(struct gl_context * ctx,
 
    DBG("BLT subimage %s target %s level %d offset %d,%d %dx%d\n",
        __FUNCTION__,
-       _mesa_lookup_enum_by_nr(target),
-       level, xoffset, yoffset, width, height);
+       _mesa_lookup_enum_by_nr(texImage->TexObject->Target),
+       texImage->Level, xoffset, yoffset, width, height);
 
    pixels = _mesa_validate_pbo_teximage(ctx, 2, width, height, 1,
 					format, type, pixels, packing,
@@ -112,7 +110,7 @@ intel_blit_texsubimage(struct gl_context * ctx,
    dstMap = temp_bo->virtual;
    dstRowStride = pitch;
 
-   intel_miptree_get_image_offset(intelImage->mt, level,
+   intel_miptree_get_image_offset(intelImage->mt, texImage->Level,
 				  intelImage->base.Base.Face, 0,
 				  &blit_x, &blit_y);
    blit_x += xoffset;
@@ -155,26 +153,21 @@ intel_blit_texsubimage(struct gl_context * ctx,
 
 static void
 intelTexSubImage2D(struct gl_context * ctx,
-                   GLenum target,
-                   GLint level,
+                   struct gl_texture_image *texImage,
                    GLint xoffset, GLint yoffset,
                    GLsizei width, GLsizei height,
                    GLenum format, GLenum type,
                    const GLvoid * pixels,
-                   const struct gl_pixelstore_attrib *packing,
-                   struct gl_texture_object *texObj,
-                   struct gl_texture_image *texImage)
+                   const struct gl_pixelstore_attrib *packing)
 {
-   if (!intel_blit_texsubimage(ctx, target, level,
+   if (!intel_blit_texsubimage(ctx, texImage,
 			       xoffset, yoffset,
 			       width, height,
-			       format, type, pixels, packing,
-			       texObj, texImage)) {
-      _mesa_store_texsubimage2d(ctx, target, level,
+			       format, type, pixels, packing)) {
+      _mesa_store_texsubimage2d(ctx, texImage,
 				xoffset, yoffset,
 				width, height,
-				format, type, pixels,
-				packing, texObj, texImage);
+				format, type, pixels, packing);
    }
 }
 
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index 8dd2df4..e9f74e8 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -547,13 +547,12 @@ nouveau_teximage_3d(struct gl_context *ctx, GLenum target, GLint level,
 }
 
 static void
-nouveau_texsubimage(struct gl_context *ctx, GLint dims, GLenum target, GLint level,
+nouveau_texsubimage(struct gl_context *ctx, GLint dims,
+		    struct gl_texture_image *ti,
 		    GLint xoffset, GLint yoffset, GLint zoffset,
 		    GLint width, GLint height, GLint depth,
 		    GLenum format, GLenum type, const void *pixels,
-		    const struct gl_pixelstore_attrib *packing,
-		    struct gl_texture_object *t,
-		    struct gl_texture_image *ti)
+		    const struct gl_pixelstore_attrib *packing)
 {
 	struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
 	struct nouveau_teximage *nti = to_nouveau_teximage(ti);
@@ -577,50 +576,48 @@ nouveau_texsubimage(struct gl_context *ctx, GLint dims, GLenum target, GLint lev
 		_mesa_unmap_teximage_pbo(ctx, packing);
 	}
 
-	if (!to_nouveau_texture(t)->dirty)
-		validate_teximage(ctx, t, level, xoffset, yoffset, zoffset,
+	if (!to_nouveau_texture(ti->TexObject)->dirty)
+		validate_teximage(ctx, ti->TexObject, ti->Level,
+				  xoffset, yoffset, zoffset,
 				  width, height, depth);
 }
 
 static void
-nouveau_texsubimage_3d(struct gl_context *ctx, GLenum target, GLint level,
+nouveau_texsubimage_3d(struct gl_context *ctx,
+		       struct gl_texture_image *ti,
 		       GLint xoffset, GLint yoffset, GLint zoffset,
 		       GLint width, GLint height, GLint depth,
 		       GLenum format, GLenum type, const void *pixels,
-		       const struct gl_pixelstore_attrib *packing,
-		       struct gl_texture_object *t,
-		       struct gl_texture_image *ti)
+		       const struct gl_pixelstore_attrib *packing)
 {
-	nouveau_texsubimage(ctx, 3, target, level, xoffset, yoffset, zoffset,
+	nouveau_texsubimage(ctx, 3, ti, xoffset, yoffset, zoffset,
 			    width, height, depth, format, type, pixels,
-			    packing, t, ti);
+			    packing);
 }
 
 static void
-nouveau_texsubimage_2d(struct gl_context *ctx, GLenum target, GLint level,
+nouveau_texsubimage_2d(struct gl_context *ctx,
+		       struct gl_texture_image *ti,
 		       GLint xoffset, GLint yoffset,
 		       GLint width, GLint height,
 		       GLenum format, GLenum type, const void *pixels,
-		       const struct gl_pixelstore_attrib *packing,
-		       struct gl_texture_object *t,
-		       struct gl_texture_image *ti)
+		       const struct gl_pixelstore_attrib *packing)
 {
-	nouveau_texsubimage(ctx, 2, target, level, xoffset, yoffset, 0,
+	nouveau_texsubimage(ctx, 2, ti, xoffset, yoffset, 0,
 			    width, height, 1, format, type, pixels,
-			    packing, t, ti);
+			    packing);
 }
 
 static void
-nouveau_texsubimage_1d(struct gl_context *ctx, GLenum target, GLint level,
+nouveau_texsubimage_1d(struct gl_context *ctx,
+		       struct gl_texture_image *ti,
 		       GLint xoffset, GLint width,
 		       GLenum format, GLenum type, const void *pixels,
-		       const struct gl_pixelstore_attrib *packing,
-		       struct gl_texture_object *t,
-		       struct gl_texture_image *ti)
+		       const struct gl_pixelstore_attrib *packing)
 {
-	nouveau_texsubimage(ctx, 1, target, level, xoffset, 0, 0,
+	nouveau_texsubimage(ctx, 1, ti, xoffset, 0, 0,
 			    width, 1, 1, format, type, pixels,
-			    packing, t, ti);
+			    packing);
 }
 
 static void
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 5816faa..5226a68 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -245,41 +245,39 @@ struct dd_function_table {
     * with new texel data.
     * \sa dd_function_table::TexImage1D.
     */
-   void (*TexSubImage1D)( struct gl_context *ctx, GLenum target, GLint level,
-                          GLint xoffset, GLsizei width,
-                          GLenum format, GLenum type,
-                          const GLvoid *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage );
+   void (*TexSubImage1D)(struct gl_context *ctx,
+                         struct gl_texture_image *texImage,
+                         GLint xoffset, GLsizei width,
+                         GLenum format, GLenum type,
+                         const GLvoid *pixels,
+                         const struct gl_pixelstore_attrib *packing);
    
    /**
     * Called by glTexSubImage2D().
     *
     * \sa dd_function_table::TexSubImage1D.
     */
-   void (*TexSubImage2D)( struct gl_context *ctx, GLenum target, GLint level,
-                          GLint xoffset, GLint yoffset,
-                          GLsizei width, GLsizei height,
-                          GLenum format, GLenum type,
-                          const GLvoid *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage );
+   void (*TexSubImage2D)(struct gl_context *ctx,
+                         struct gl_texture_image *texImage,
+                         GLint xoffset, GLint yoffset,
+                         GLsizei width, GLsizei height,
+                         GLenum format, GLenum type,
+                         const GLvoid *pixels,
+                         const struct gl_pixelstore_attrib *packing);
    
    /**
     * Called by glTexSubImage3D().
     *
     * \sa dd_function_table::TexSubImage1D.
     */
-   void (*TexSubImage3D)( struct gl_context *ctx, GLenum target, GLint level,
-                          GLint xoffset, GLint yoffset, GLint zoffset,
-                          GLsizei width, GLsizei height, GLint depth,
-                          GLenum format, GLenum type,
-                          const GLvoid *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage );
+   void (*TexSubImage3D)(struct gl_context *ctx,
+                         struct gl_texture_image *texImage,
+                         GLint xoffset, GLint yoffset, GLint zoffset,
+                         GLsizei width, GLsizei height, GLint depth,
+                         GLenum format, GLenum type,
+                         const GLvoid *pixels,
+                         const struct gl_pixelstore_attrib *packing);
+
 
    /**
     * Called by glGetTexImage().
diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c
index 867cb22..9a6c6de 100644
--- a/src/mesa/main/mipmap.c
+++ b/src/mesa/main/mipmap.c
@@ -2132,11 +2132,10 @@ generate_mipmap_compressed(struct gl_context *ctx, GLenum target,
       }
 
       /* The image space was allocated above so use glTexSubImage now */
-      ctx->Driver.TexSubImage2D(ctx, target, level + 1,
+      ctx->Driver.TexSubImage2D(ctx, dstImage,
                                 0, 0, dstWidth, dstHeight,
                                 temp_base_format, temp_datatype,
-                                temp_dst, &ctx->DefaultPacking,
-                                texObj, dstImage);
+                                temp_dst, &ctx->DefaultPacking);
 
       /* swap src and dest pointers */
       {
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 18a7b87..ad7a1ea 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -2681,23 +2681,20 @@ texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level,
 
          switch (dims) {
          case 1:
-            ctx->Driver.TexSubImage1D(ctx, target, level,
+            ctx->Driver.TexSubImage1D(ctx, texImage,
                                       xoffset, width,
-                                      format, type, pixels,
-                                      &ctx->Unpack, texObj, texImage );
+                                      format, type, pixels, &ctx->Unpack);
             break;
          case 2:
-            ctx->Driver.TexSubImage2D(ctx, target, level,
+            ctx->Driver.TexSubImage2D(ctx, texImage,
                                       xoffset, yoffset, width, height,
-                                      format, type, pixels,
-                                      &ctx->Unpack, texObj, texImage );
+                                      format, type, pixels, &ctx->Unpack);
             break;
          case 3:
-            ctx->Driver.TexSubImage3D(ctx, target, level,
+            ctx->Driver.TexSubImage3D(ctx, texImage,
                                       xoffset, yoffset, zoffset,
                                       width, height, depth,
-                                      format, type, pixels,
-                                      &ctx->Unpack, texObj, texImage );
+                                      format, type, pixels, &ctx->Unpack);
             break;
          default:
             _mesa_problem(ctx, "unexpected dims in subteximage()");
diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c
index 86c35d3..e97178d 100644
--- a/src/mesa/main/texstore.c
+++ b/src/mesa/main/texstore.c
@@ -4785,12 +4785,11 @@ _mesa_store_teximage3d(struct gl_context *ctx, GLenum target, GLint level,
  * This is the fallback for Driver.TexSubImage1D().
  */
 void
-_mesa_store_texsubimage1d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_texsubimage1d(struct gl_context *ctx,
+                          struct gl_texture_image *texImage,
                           GLint xoffset, GLint width,
                           GLenum format, GLenum type, const void *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage)
+                          const struct gl_pixelstore_attrib *packing)
 {
    store_texsubimage(ctx, texImage,
                      xoffset, 0, 0, width, 1, 1,
@@ -4803,13 +4802,12 @@ _mesa_store_texsubimage1d(struct gl_context *ctx, GLenum target, GLint level,
  * This is the fallback for Driver.TexSubImage2D().
  */
 void
-_mesa_store_texsubimage2d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_texsubimage2d(struct gl_context *ctx,
+                          struct gl_texture_image *texImage,
                           GLint xoffset, GLint yoffset,
                           GLint width, GLint height,
                           GLenum format, GLenum type, const void *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage)
+                          const struct gl_pixelstore_attrib *packing)
 {
    store_texsubimage(ctx, texImage,
                      xoffset, yoffset, 0, width, height, 1,
@@ -4821,13 +4819,12 @@ _mesa_store_texsubimage2d(struct gl_context *ctx, GLenum target, GLint level,
  * This is the fallback for Driver.TexSubImage3D().
  */
 void
-_mesa_store_texsubimage3d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_texsubimage3d(struct gl_context *ctx,
+                          struct gl_texture_image *texImage,
                           GLint xoffset, GLint yoffset, GLint zoffset,
                           GLint width, GLint height, GLint depth,
                           GLenum format, GLenum type, const void *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage)
+                          const struct gl_pixelstore_attrib *packing)
 {
    store_texsubimage(ctx, texImage,
                      xoffset, yoffset, zoffset, width, height, depth,
diff --git a/src/mesa/main/texstore.h b/src/mesa/main/texstore.h
index f956b04..83826ce 100644
--- a/src/mesa/main/texstore.h
+++ b/src/mesa/main/texstore.h
@@ -121,32 +121,29 @@ _mesa_store_teximage3d(struct gl_context *ctx, GLenum target, GLint level,
 
 
 extern void
-_mesa_store_texsubimage1d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_texsubimage1d(struct gl_context *ctx,
+                          struct gl_texture_image *texImage,
                           GLint xoffset, GLint width,
                           GLenum format, GLenum type, const GLvoid *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage);
+                          const struct gl_pixelstore_attrib *packing);
 
 
 extern void
-_mesa_store_texsubimage2d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_texsubimage2d(struct gl_context *ctx,
+                          struct gl_texture_image *texImage,
                           GLint xoffset, GLint yoffset,
                           GLint width, GLint height,
                           GLenum format, GLenum type, const GLvoid *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage);
+                          const struct gl_pixelstore_attrib *packing);
 
 
 extern void
-_mesa_store_texsubimage3d(struct gl_context *ctx, GLenum target, GLint level,
+_mesa_store_texsubimage3d(struct gl_context *ctx,
+                          struct gl_texture_image *texImage,
                           GLint xoffset, GLint yoffset, GLint zoffset,
                           GLint width, GLint height, GLint depth,
                           GLenum format, GLenum type, const GLvoid *pixels,
-                          const struct gl_pixelstore_attrib *packing,
-                          struct gl_texture_object *texObj,
-                          struct gl_texture_image *texImage);
+                          const struct gl_pixelstore_attrib *packing);
 
 
 extern void
-- 
1.7.1



More information about the mesa-dev mailing list