mesa: add new DeleteTextureImage() driver hook
authorBrian Paul <brianp@vmware.com>
Sat, 17 Sep 2011 20:50:48 +0000 (14:50 -0600)
committerBrian Paul <brianp@vmware.com>
Sat, 17 Sep 2011 20:57:40 +0000 (14:57 -0600)
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
src/mesa/drivers/dri/intel/intel_tex.c
src/mesa/drivers/dri/radeon/radeon_texture.c
src/mesa/main/dd.h
src/mesa/main/teximage.c
src/mesa/main/texobj.c
src/mesa/state_tracker/st_cb_texture.c

index 36ed4f89216c17a108fdcd62f4426653e7f5a858..50abfc87d36acc3e051b79f3257513d157734ec1 100644 (file)
@@ -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;
index f97952348d4b89fed582440a8b3c6b2e353d4137..8d3cbd6942010b39832d5915ecc759bd32570439 100644 (file)
@@ -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;
index 99646638207fabd4138041e1ff0f9ca248e6d0e1..182f444f27790f6434ee98e61abe33d52af45ff5 100644 (file)
@@ -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;
index d6cc0196d8d6c3e44f5a3550c6e17cc59ad1c652..18b1b01d60cfebb0d03c88bac1f08ce32edc7185 100644 (file)
@@ -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.
     */
index e11acc4128157da7a3503c9f0a4fe549beb7a77b..2973b6de3a3b89ef30848b4838762033b90ba1b3 100644 (file)
@@ -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.
  *
index 1168f1842f3ef59d7e52e07925f46d91cac37d1f..1b90cca9b9426519a233b919832546fddd39748e 100644 (file)
@@ -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]);
          }
       }
    }
index 2a971c51d0741041fe76829cb2a629839598777e..68323a35a732f801891ebd1b11c90bdbecf04db1 100644 (file)
@@ -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;