From 60628c65c902f68c600b3d79c06e928aa3286285 Mon Sep 17 00:00:00 2001 From: Ɓukasz Krotowski Date: Thu, 14 Jan 2010 10:05:02 +0100 Subject: 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 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/gallium/drivers/r300/r300_render.c') diff --git a/src/gallium/drivers/r300/r300_render.c b/src/gallium/drivers/r300/r300_render.c index 6645688fc58..528741ab7c0 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); } } -- cgit v1.2.3