From e42d00b3f4503a0840575c8e5f4517a66c8af613 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 5 Jun 2012 16:32:23 -0600 Subject: [PATCH] mesa: consolidate internal glTexSubImage1/2/3D code Reviewed-by: Kenneth Graunke --- src/mesa/drivers/common/driverfuncs.c | 4 +- src/mesa/drivers/common/meta.c | 21 ++------ .../drivers/dri/intel/intel_tex_subimage.c | 28 ++++++----- .../drivers/dri/nouveau/nouveau_texture.c | 43 +++------------- src/mesa/main/dd.h | 45 ++++------------- src/mesa/main/mipmap.c | 8 +-- src/mesa/main/teximage.c | 24 ++------- src/mesa/main/texstore.c | 50 +++---------------- src/mesa/main/texstore.h | 29 +++-------- src/mesa/state_tracker/st_cb_texture.c | 4 +- 10 files changed, 61 insertions(+), 195 deletions(-) diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index 54e5221b28b..a9ccbd565da 100644 --- a/src/mesa/drivers/common/driverfuncs.c +++ b/src/mesa/drivers/common/driverfuncs.c @@ -92,9 +92,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver) /* Texture functions */ driver->ChooseTextureFormat = _mesa_choose_tex_format; driver->TexImage = _mesa_store_teximage; - driver->TexSubImage1D = _mesa_store_texsubimage1d; - driver->TexSubImage2D = _mesa_store_texsubimage2d; - driver->TexSubImage3D = _mesa_store_texsubimage3d; + driver->TexSubImage = _mesa_store_texsubimage; driver->GetTexImage = _mesa_meta_GetTexImage; driver->CopyTexSubImage1D = _mesa_meta_CopyTexSubImage1D; driver->CopyTexSubImage2D = _mesa_meta_CopyTexSubImage2D; diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 7978b08cbfe..af21d3b0697 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -3127,7 +3127,6 @@ copy_tex_sub_image(struct gl_context *ctx, GLsizei width, GLsizei height) { struct gl_texture_object *texObj = texImage->TexObject; - const GLenum target = texObj->Target; GLenum format, type; GLint bpp; void *buf; @@ -3181,21 +3180,11 @@ copy_tex_sub_image(struct gl_context *ctx, * Store texture data (with pixel transfer ops) */ _mesa_meta_begin(ctx, MESA_META_PIXEL_STORE); - if (target == GL_TEXTURE_1D) { - ctx->Driver.TexSubImage1D(ctx, texImage, - xoffset, width, - format, type, buf, &ctx->Unpack); - } - else if (target == GL_TEXTURE_3D) { - ctx->Driver.TexSubImage3D(ctx, texImage, - xoffset, yoffset, zoffset, width, height, 1, - format, type, buf, &ctx->Unpack); - } - else { - ctx->Driver.TexSubImage2D(ctx, texImage, - xoffset, yoffset, width, height, - format, type, buf, &ctx->Unpack); - } + + ctx->Driver.TexSubImage(ctx, dims, texImage, + xoffset, yoffset, zoffset, width, height, 1, + format, type, buf, &ctx->Unpack); + _mesa_meta_end(ctx); _mesa_lock_texture(ctx, texObj); /* re-lock */ diff --git a/src/mesa/drivers/dri/intel/intel_tex_subimage.c b/src/mesa/drivers/dri/intel/intel_tex_subimage.c index eb8b9839a2b..ae4b3bca305 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_subimage.c +++ b/src/mesa/drivers/dri/intel/intel_tex_subimage.c @@ -149,27 +149,29 @@ intel_blit_texsubimage(struct gl_context * ctx, } static void -intelTexSubImage2D(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) +intelTexSubImage(struct gl_context * ctx, + GLuint dims, + struct gl_texture_image *texImage, + GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth, + GLenum format, GLenum type, + const GLvoid * pixels, + const struct gl_pixelstore_attrib *packing) { - if (!intel_blit_texsubimage(ctx, texImage, + /* The intel_blit_texsubimage() function only handles 2D images */ + if (dims != 2 || !intel_blit_texsubimage(ctx, texImage, xoffset, yoffset, width, height, format, type, pixels, packing)) { - _mesa_store_texsubimage2d(ctx, texImage, - xoffset, yoffset, - width, height, - format, type, pixels, packing); + _mesa_store_texsubimage(ctx, dims, texImage, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, pixels, packing); } } void intelInitTextureSubImageFuncs(struct dd_function_table *functions) { - functions->TexSubImage2D = intelTexSubImage2D; + functions->TexSubImage = intelTexSubImage; } diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c index e5ef3d3ff9f..4d6518d2426 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c @@ -611,43 +611,18 @@ nouveau_texsubimage(struct gl_context *ctx, GLint dims, } static void -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) +nouveau_texsubimage_123d(struct gl_context *ctx, GLuint 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) { - nouveau_texsubimage(ctx, 3, ti, xoffset, yoffset, zoffset, + nouveau_texsubimage(ctx, dims, ti, xoffset, yoffset, zoffset, width, height, depth, 0, format, type, pixels, packing, GL_FALSE); } -static void -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) -{ - nouveau_texsubimage(ctx, 2, ti, xoffset, yoffset, 0, - width, height, 1, 0, format, type, pixels, - packing, GL_FALSE); -} - -static void -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) -{ - nouveau_texsubimage(ctx, 1, ti, xoffset, 0, 0, - width, 1, 1, 0, format, type, pixels, - packing, GL_FALSE); -} - static void nouveau_compressed_texsubimage_2d(struct gl_context *ctx, struct gl_texture_image *ti, @@ -732,9 +707,7 @@ nouveau_texture_functions_init(struct dd_function_table *functions) functions->FreeTextureImageBuffer = nouveau_teximage_free; functions->ChooseTextureFormat = nouveau_choose_tex_format; functions->TexImage = nouveau_teximage_123d; - functions->TexSubImage1D = nouveau_texsubimage_1d; - functions->TexSubImage2D = nouveau_texsubimage_2d; - functions->TexSubImage3D = nouveau_texsubimage_3d; + functions->TexSubImage = nouveau_texsubimage_123d; functions->CompressedTexImage2D = nouveau_compressed_teximage_2d; functions->CompressedTexSubImage2D = nouveau_compressed_texsubimage_2d; functions->BindTexture = nouveau_bind_texture; diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 711143c5594..c7984177d7f 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -213,44 +213,17 @@ struct dd_function_table { GLenum format, GLenum type, const GLvoid *pixels, const struct gl_pixelstore_attrib *packing); - /** - * Called by glTexSubImage1D(). Replace a subset of the target texture - * with new texel data. - * \sa dd_function_table::TexImage1D. + * Called by glTexSubImage[123]D(). + * Replace a subset of the target texture with new texel data. */ - 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, - 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, - 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); + void (*TexSubImage)(struct gl_context *ctx, GLuint dims, + 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); /** diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c index abd26b8d3c8..250d3c6dcf9 100644 --- a/src/mesa/main/mipmap.c +++ b/src/mesa/main/mipmap.c @@ -2133,10 +2133,10 @@ generate_mipmap_compressed(struct gl_context *ctx, GLenum target, } /* The image space was allocated above so use glTexSubImage now */ - ctx->Driver.TexSubImage2D(ctx, dstImage, - 0, 0, dstWidth, dstHeight, - temp_base_format, temp_datatype, - temp_dst, &ctx->DefaultPacking); + ctx->Driver.TexSubImage(ctx, 2, dstImage, + 0, 0, 0, dstWidth, dstHeight, 1, + temp_base_format, temp_datatype, + temp_dst, &ctx->DefaultPacking); /* swap src and dest pointers */ { diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 5bb21cd80a8..e8353463758 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -2792,26 +2792,10 @@ texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level, xoffset += texImage->Border; } - switch (dims) { - case 1: - ctx->Driver.TexSubImage1D(ctx, texImage, - xoffset, width, - format, type, pixels, &ctx->Unpack); - break; - case 2: - ctx->Driver.TexSubImage2D(ctx, texImage, - xoffset, yoffset, width, height, - format, type, pixels, &ctx->Unpack); - break; - case 3: - ctx->Driver.TexSubImage3D(ctx, texImage, - xoffset, yoffset, zoffset, - width, height, depth, - format, type, pixels, &ctx->Unpack); - break; - default: - _mesa_problem(ctx, "unexpected dims in subteximage()"); - } + ctx->Driver.TexSubImage(ctx, dims, texImage, + xoffset, yoffset, zoffset, + width, height, depth, + format, type, pixels, &ctx->Unpack); check_gen_mipmap(ctx, target, texObj, level); diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c index 1aa79625287..ce8f36bfc2f 100644 --- a/src/mesa/main/texstore.c +++ b/src/mesa/main/texstore.c @@ -4293,53 +4293,19 @@ _mesa_store_teximage(struct gl_context *ctx, /* - * This is the fallback for Driver.TexSubImage1D(). + * Fallback for Driver.TexSubImage(). */ void -_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) -{ - store_texsubimage(ctx, texImage, - xoffset, 0, 0, width, 1, 1, - format, type, pixels, packing, "glTexSubImage1D"); -} - - - -/** - * This is the fallback for Driver.TexSubImage2D(). - */ -void -_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) -{ - store_texsubimage(ctx, texImage, - xoffset, yoffset, 0, width, height, 1, - format, type, pixels, packing, "glTexSubImage2D"); -} - - -/* - * This is the fallback for Driver.TexSubImage3D(). - */ -void -_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) +_mesa_store_texsubimage(struct gl_context *ctx, GLuint dims, + 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) { store_texsubimage(ctx, texImage, xoffset, yoffset, zoffset, width, height, depth, - format, type, pixels, packing, "glTexSubImage3D"); + format, type, pixels, packing, "glTexSubImage"); } diff --git a/src/mesa/main/texstore.h b/src/mesa/main/texstore.h index b4995fbc898..e6eb2fb4811 100644 --- a/src/mesa/main/texstore.h +++ b/src/mesa/main/texstore.h @@ -100,29 +100,12 @@ _mesa_store_teximage(struct gl_context *ctx, extern void -_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); - - -extern void -_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); - - -extern void -_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); +_mesa_store_texsubimage(struct gl_context *ctx, GLuint dims, + 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); extern void diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 3ab14a1bbd9..eb861586c4a 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -1397,9 +1397,7 @@ st_init_texture_functions(struct dd_function_table *functions) { functions->ChooseTextureFormat = st_ChooseTextureFormat; functions->TexImage = st_TexImage; - functions->TexSubImage1D = _mesa_store_texsubimage1d; - functions->TexSubImage2D = _mesa_store_texsubimage2d; - functions->TexSubImage3D = _mesa_store_texsubimage3d; + functions->TexSubImage = _mesa_store_texsubimage; functions->CompressedTexSubImage1D = _mesa_store_compressed_texsubimage1d; functions->CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d; functions->CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d; -- 2.30.2