summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2009-02-17 10:25:34 +1000
committerDave Airlie <airlied@redhat.com>2009-02-17 10:25:34 +1000
commit5325f8624093bb1ec30d581b4ff64218ceab99f9 (patch)
tree78a9367863c6ac6f28c4cd524557ea95ff65a467
parentecf0a3eac1a4868da83ab0a3c21e2f265f7cf9e2 (diff)
dri/radeon: export a function to cleanup a texture object.
The radeon legacy code want to cleanup not free the texture obj, so export a function to do that and wrap it.
-rw-r--r--src/mesa/drivers/dri/common/texmem.c16
-rw-r--r--src/mesa/drivers/dri/common/texmem.h1
-rw-r--r--src/mesa/drivers/dri/radeon/radeon_bo_legacy.c4
3 files changed, 17 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/common/texmem.c b/src/mesa/drivers/dri/common/texmem.c
index ff174a251d..65c3c4e63e 100644
--- a/src/mesa/drivers/dri/common/texmem.c
+++ b/src/mesa/drivers/dri/common/texmem.c
@@ -314,11 +314,10 @@ void driSwapOutTextureObject( driTextureObject * t )
* \param t Texture object to be destroyed
*/
-void driDestroyTextureObject( driTextureObject * t )
+void driCleanupTextureObject( driTextureObject * t )
{
driTexHeap * heap;
-
if ( 0 ) {
fprintf( stderr, "[%s:%d] freeing %p (tObj = %p, DriverData = %p)\n",
__FILE__, __LINE__,
@@ -350,7 +349,6 @@ void driDestroyTextureObject( driTextureObject * t )
}
remove_from_list( t );
- FREE( t );
}
if ( 0 ) {
@@ -359,6 +357,18 @@ void driDestroyTextureObject( driTextureObject * t )
}
+void driDestroyTextureObject( driTextureObject * t )
+{
+ driTexHeap * heap;
+
+ if (t == NULL)
+ return;
+
+ driCleanupTextureObject(t);
+ FREE(t);
+}
+
+
/**
diff --git a/src/mesa/drivers/dri/common/texmem.h b/src/mesa/drivers/dri/common/texmem.h
index 9c065da8b4..b9beeeadfc 100644
--- a/src/mesa/drivers/dri/common/texmem.h
+++ b/src/mesa/drivers/dri/common/texmem.h
@@ -272,6 +272,7 @@ void driAgeTextures( driTexHeap * heap );
void driUpdateTextureLRU( driTextureObject * t );
void driSwapOutTextureObject( driTextureObject * t );
+void driCleanupTextureObject( driTextureObject * t );
void driDestroyTextureObject( driTextureObject * t );
int driAllocateTexture( driTexHeap * const * heap_array, unsigned nr_heaps,
driTextureObject * t );
diff --git a/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c b/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c
index 1d25887e69..65b0a9a0ce 100644
--- a/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c
+++ b/src/mesa/drivers/dri/radeon/radeon_bo_legacy.c
@@ -373,11 +373,13 @@ static void bo_free(struct bo_legacy *bo_legacy)
/* dma buffers */
bo_dma_free(&bo_legacy->base);
} else {
+ if (bo_legacy->got_dri_texture_obj)
+ driCleanupTextureObject(&bo_legacy->dri_texture_obj);
+
/* free backing store */
free(bo_legacy->ptr);
}
}
- memset(bo_legacy, 0 , sizeof(struct bo_legacy));
free(bo_legacy);
}