Missing bits of code spotted by Tilman Sauerbeck
authorAapo Tahkola <aet@rasterburn.org>
Sun, 15 Jan 2006 13:53:54 +0000 (13:53 +0000)
committerAapo Tahkola <aet@rasterburn.org>
Sun, 15 Jan 2006 13:53:54 +0000 (13:53 +0000)
src/mesa/drivers/dri/r300/r300_context.c

index 4ff30cc..0478f86 100644 (file)
@@ -375,6 +375,7 @@ void r300DestroyContext(__DRIcontextPrivate * driContextPriv)
 {
        GET_CURRENT_CONTEXT(ctx);
        r300ContextPtr r300 = (r300ContextPtr) driContextPriv->driverPrivate;
+       radeonContextPtr radeon = (radeonContextPtr) r300;
        radeonContextPtr current = ctx ? RADEON_CONTEXT(ctx) : NULL;
 
        if (RADEON_DEBUG & DEBUG_DRI) {
@@ -398,9 +399,34 @@ void r300DestroyContext(__DRIcontextPrivate * driContextPriv)
                _tnl_DestroyContext(r300->radeon.glCtx);
                _ac_DestroyContext(r300->radeon.glCtx);
                _swrast_DestroyContext(r300->radeon.glCtx);
-
+               
+               r300ReleaseArrays(r300->radeon.glCtx);
+               if (r300->dma.current.buf) {
+                       r300ReleaseDmaRegion(r300, &r300->dma.current, __FUNCTION__ );
+                       r300FlushCmdBuf(r300, __FUNCTION__ );
+               }
+                               
                r300DestroyCmdBuf(r300);
 
+               if (radeon->state.scissor.pClipRects) {
+                       FREE(radeon->state.scissor.pClipRects);
+                       radeon->state.scissor.pClipRects = NULL;
+               }
+
+               if (release_texture_heaps) {
+                       /* This share group is about to go away, free our private
+                        * texture object data.
+                        */
+                       int i;
+
+                       for (i = 0; i < r300->nr_heaps; i++) {
+                               driDestroyTextureHeap(r300->texture_heaps[i]);
+                               r300->texture_heaps[i] = NULL;
+                       }
+
+                       assert(is_empty_list(&r300->swapped));
+               }
+
                radeonCleanupContext(&r300->radeon);
 
                /* free the option cache */