Exemplo n.º 1
0
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;
    }
}
Exemplo n.º 2
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 );
}