diff options
-rw-r--r-- | 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 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); } } |