diff options
author | Dave Airlie <airlied@redhat.com> | 2009-02-24 12:04:49 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-02-24 12:04:49 +1000 |
commit | 2ebf9b95213b3d1e67dad16442cdd0d8571ef0b3 (patch) | |
tree | cf1858f8a4f5cce2c6ab172a6986030954749da1 | |
parent | c32a28d86eda3d1984f6a571be0db6c6f5c7f5dc (diff) |
r300: fix bo ref/unref, plugs DRI handle leaks
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_tex.c | 5 | ||||
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_texstate.c | 8 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_tex.c b/src/mesa/drivers/dri/r300/r300_tex.c index 27b907019e..0f5afbfa29 100644 --- a/src/mesa/drivers/dri/r300/r300_tex.c +++ b/src/mesa/drivers/dri/r300/r300_tex.c @@ -270,6 +270,11 @@ static void r300DeleteTexture(GLcontext * ctx, struct gl_texture_object *texObj) rmesa->hw.textures[i] = 0; } + if (t->bo) { + radeon_bo_unref(t->bo); + t->bo = NULL; + } + if (t->mt) { radeon_miptree_unreference(t->mt); t->mt = 0; diff --git a/src/mesa/drivers/dri/r300/r300_texstate.c b/src/mesa/drivers/dri/r300/r300_texstate.c index 4f145bdbb4..ef13fed6b2 100644 --- a/src/mesa/drivers/dri/r300/r300_texstate.c +++ b/src/mesa/drivers/dri/r300/r300_texstate.c @@ -433,9 +433,15 @@ void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv) _mesa_lock_texture(radeon->glCtx, texObj); if (t->bo) { + radeon_bo_unref(t->bo); t->bo = NULL; } + if (rImage->bo) { + radeon_bo_unref(rImage->bo); + rImage->bo = NULL; + } if (t->mt) { + radeon_miptree_unreference(t->mt); t->mt = NULL; } if (rImage->mt) { @@ -447,7 +453,7 @@ void r300SetTexBuffer(__DRIcontext *pDRICtx, GLint target, __DRIdrawable *dPriv) rb->width, rb->height, 1, 0, rb->cpp); texImage->TexFormat = &_mesa_texformat_rgba8888_rev; rImage->bo = rb->bo; - + radeon_bo_ref(rImage->bo); t->bo = rb->bo; radeon_bo_ref(t->bo); t->tile_bits = 0; |