Mesa (master): r300g: Really destroy translated buffer at the end.

Corbin Simpson csimpson at kemper.freedesktop.org
Thu Jan 14 17:02:39 UTC 2010


Module: Mesa
Branch: master
Commit: 60628c65c902f68c600b3d79c06e928aa3286285
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=60628c65c902f68c600b3d79c06e928aa3286285

Author: Łukasz Krotowski <lukasz.krotowski at gmail.com>
Date:   Thu Jan 14 10:05:02 2010 +0100

r300g: Really destroy translated buffer at the end.

Note that indexSize is changed by r300_translate_elts(). Also make sure
it's destroyed on errors.

---

 src/gallium/drivers/r300/r300_render.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c
index 6645688..528741a 100644
--- a/src/gallium/drivers/r300/r300_render.c
+++ b/src/gallium/drivers/r300/r300_render.c
@@ -316,6 +316,7 @@ void r300_draw_range_elements(struct pipe_context* pipe,
         return;
     }
 
+	struct pipe_buffer* orgIndexBuffer = indexBuffer;
     if (indexSize == 1) {
         indexBuffer = r300_translate_elts(r300, indexBuffer,
             &indexSize, &mode, &count);
@@ -323,11 +324,11 @@ void r300_draw_range_elements(struct pipe_context* pipe,
 
     if (!r300->winsys->add_buffer(r300->winsys, indexBuffer,
                                   RADEON_GEM_DOMAIN_GTT, 0)) {
-        return;
+        goto cleanup;
     }
 
     if (!r300->winsys->validate(r300->winsys)) {
-        return;
+        goto cleanup;
     }
 
     r300_emit_dirty_state(r300);
@@ -337,7 +338,8 @@ void r300_draw_range_elements(struct pipe_context* pipe,
     r300_emit_draw_elements(r300, indexBuffer, indexSize, minIndex, maxIndex,
                             mode, start, count);
 
-    if (indexSize == 1) {
+cleanup:
+    if (indexBuffer != orgIndexBuffer) {
         pipe->screen->buffer_destroy(indexBuffer);
     }
 }




More information about the mesa-commit mailing list