static void sisFreeTexImage( sisContextPtr smesa, sisTexObjPtr t, int level ) { assert(level >= 0); assert(level < SIS_MAX_TEXTURE_LEVELS); if (t->image[level].Data == NULL) return; switch (t->image[level].memType) { case VIDEO_TYPE: sisFreeFB( smesa, t->image[level].handle ); break; case AGP_TYPE: sisFreeAGP( smesa, t->image[level].handle ); break; } t->image[level].Data = NULL; t->image[level].handle = NULL; /* If there are no textures loaded any more, reset the hw format so the * object can be reused for new formats */ t->numImages--; if (t->numImages == 0) { t->format = 0; t->hwformat = 0; } }
void sisDestroyContext ( __DRIcontextPrivate *driContextPriv ) { sisContextPtr smesa = (sisContextPtr)driContextPriv->driverPrivate; assert( smesa != NULL ); if ( smesa != NULL ) { _swsetup_DestroyContext( smesa->glCtx ); _tnl_DestroyContext( smesa->glCtx ); _ac_DestroyContext( smesa->glCtx ); _swrast_DestroyContext( smesa->glCtx ); if (smesa->using_agp) sisFreeAGP(smesa, smesa->vb_agp_handle); /* free the Mesa context */ /* XXX: Is the next line needed? The DriverCtx (smesa) reference is * needed for sisDDDeleteTexture, since it needs to call the FB/AGP free * function. */ /* smesa->glCtx->DriverCtx = NULL; */ _mesa_destroy_context(smesa->glCtx); } FREE( smesa ); }