From 146f536b3332b7a2022bb4ba5e2d1d2ec4bedd98 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Sat, 17 Sep 2011 14:50:48 -0600 Subject: [PATCH] mesa: add new DeleteTextureImage() driver hook Matches the NewTextureImage() hook. With new subclasses of gl_texture_image coming we need a new hook to properly delete objects of those subclasses. --- src/mesa/drivers/common/driverfuncs.c | 1 + src/mesa/drivers/dri/intel/intel_tex.c | 8 ++++++++ src/mesa/drivers/dri/radeon/radeon_texture.c | 8 ++++++++ src/mesa/main/dd.h | 4 ++++ src/mesa/main/teximage.c | 3 ++- src/mesa/main/texobj.c | 2 +- src/mesa/state_tracker/st_cb_texture.c | 10 ++++++++++ 7 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c index 36ed4f89216..50abfc87d36 100644 --- a/src/mesa/drivers/common/driverfuncs.c +++ b/src/mesa/drivers/common/driverfuncs.c @@ -111,6 +111,7 @@ _mesa_init_driver_functions(struct dd_function_table *driver) driver->NewTextureObject = _mesa_new_texture_object; driver->DeleteTexture = _mesa_delete_texture_object; driver->NewTextureImage = _mesa_new_texture_image; + driver->DeleteTextureImage = _mesa_delete_texture_image; driver->FreeTextureImageBuffer = _mesa_free_texture_image_data; driver->MapTextureImage = _swrast_map_teximage; driver->UnmapTextureImage = _swrast_unmap_teximage; diff --git a/src/mesa/drivers/dri/intel/intel_tex.c b/src/mesa/drivers/dri/intel/intel_tex.c index f97952348d4..8d3cbd69420 100644 --- a/src/mesa/drivers/dri/intel/intel_tex.c +++ b/src/mesa/drivers/dri/intel/intel_tex.c @@ -18,6 +18,13 @@ intelNewTextureImage(struct gl_context * ctx) return (struct gl_texture_image *) CALLOC_STRUCT(intel_texture_image); } +static void +intelDeleteTextureImage(struct gl_context * ctx, struct gl_texture_image *img) +{ + /* nothing special (yet) for intel_texture_image */ + _mesa_delete_texture_image(ctx, img); +} + static struct gl_texture_object * intelNewTextureObject(struct gl_context * ctx, GLuint name, GLenum target) @@ -207,6 +214,7 @@ intelInitTextureFuncs(struct dd_function_table *functions) functions->NewTextureObject = intelNewTextureObject; functions->NewTextureImage = intelNewTextureImage; + functions->DeleteTextureImage = intelDeleteTextureImage; functions->DeleteTexture = intelDeleteTextureObject; functions->FreeTextureImageBuffer = intel_free_texture_image_buffer; functions->MapTextureImage = intel_map_texture_image; diff --git a/src/mesa/drivers/dri/radeon/radeon_texture.c b/src/mesa/drivers/dri/radeon/radeon_texture.c index 99646638207..182f444f277 100644 --- a/src/mesa/drivers/dri/radeon/radeon_texture.c +++ b/src/mesa/drivers/dri/radeon/radeon_texture.c @@ -83,6 +83,13 @@ struct gl_texture_image *radeonNewTextureImage(struct gl_context *ctx) return CALLOC(sizeof(radeon_texture_image)); } +static void +radeonDeleteTextureImage(struct gl_context * ctx, struct gl_texture_image *img) +{ + /* nothing special (yet) for radeon_texture_image */ + _mesa_delete_texture_image(ctx, img); +} + /** * Free memory associated with this texture image. */ @@ -1162,6 +1169,7 @@ radeon_init_common_texture_funcs(radeonContextPtr radeon, struct dd_function_table *functions) { functions->NewTextureImage = radeonNewTextureImage; + functions->DeleteTextureImage = radeonDeleteTextureImage; functions->FreeTextureImageBuffer = radeonFreeTextureImageBuffer; functions->MapTexture = radeonMapTexture; functions->UnmapTexture = radeonUnmapTexture; diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index d6cc0196d8d..18b1b01d60c 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -476,6 +476,10 @@ struct dd_function_table { */ struct gl_texture_image * (*NewTextureImage)( struct gl_context *ctx ); + /** Called to free a texture image object returned by NewTextureImage() */ + void (*DeleteTextureImage)(struct gl_context *ctx, + struct gl_texture_image *); + /** * Called to free tImage->Data. */ diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index e11acc41281..2973b6de3a3 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -601,7 +601,8 @@ _mesa_free_texture_image_data(struct gl_context *ctx, /** - * Free texture image. + * Free a gl_texture_image and associated data. + * This function is a fallback called via ctx->Driver.DeleteTextureImage(). * * \param texImage texture image. * diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 1168f1842f3..1b90cca9b94 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -202,7 +202,7 @@ _mesa_delete_texture_object(struct gl_context *ctx, for (face = 0; face < 6; face++) { for (i = 0; i < MAX_TEXTURE_LEVELS; i++) { if (texObj->Image[face][i]) { - _mesa_delete_texture_image( ctx, texObj->Image[face][i] ); + ctx->Driver.DeleteTextureImage(ctx, texObj->Image[face][i]); } } } diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 2a971c51d07..68323a35a73 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -105,6 +105,15 @@ st_NewTextureImage(struct gl_context * ctx) } +/** called via ctx->Driver.DeleteTextureImage() */ +static void +st_DeleteTextureImage(struct gl_context * ctx, struct gl_texture_image *img) +{ + /* nothing special (yet) for st_texture_image */ + _mesa_delete_texture_image(ctx, img); +} + + /** called via ctx->Driver.NewTextureObject() */ static struct gl_texture_object * st_NewTextureObject(struct gl_context * ctx, GLuint name, GLenum target) @@ -1918,6 +1927,7 @@ st_init_texture_functions(struct dd_function_table *functions) functions->NewTextureObject = st_NewTextureObject; functions->NewTextureImage = st_NewTextureImage; + functions->DeleteTextureImage = st_DeleteTextureImage; functions->DeleteTexture = st_DeleteTextureObject; functions->FreeTextureImageBuffer = st_FreeTextureImageBuffer; functions->MapTextureImage = st_MapTextureImage; -- 2.30.2