Browse Source

mesa/st: Clean up vertex buffer unreferencing

Avoid accessing draw module internal structures outside of the draw module.
Unreference vertex buffers in error path.

Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
tags/android-x86-2.2-r2
Thomas Hellstrom 14 years ago
parent
commit
a7293cbe5c
1 changed files with 9 additions and 10 deletions
  1. 9
    10
      src/mesa/state_tracker/st_draw_feedback.c

+ 9
- 10
src/mesa/state_tracker/st_draw_feedback.c View File

@@ -220,7 +220,7 @@ st_feedback_draw_vbo(struct gl_context *ctx,
break;
default:
assert(0);
return;
goto out_unref_vertex;
}

if (bufobj && bufobj->Name) {
@@ -256,15 +256,6 @@ st_feedback_draw_vbo(struct gl_context *ctx,
/*
* unmap vertex/index buffers
*/
for (i = 0; i < PIPE_MAX_ATTRIBS; i++) {
if (draw->pt.vertex_buffer[i].buffer) {
pipe_buffer_unmap(pipe, vb_transfer[i]);
pipe_resource_reference(&draw->pt.vertex_buffer[i].buffer, NULL);
draw_set_mapped_vertex_buffer(draw, i, NULL);
pipe_resource_reference(&vbuffers[i].buffer, NULL);
}
}

if (ib) {
draw_set_mapped_index_buffer(draw, NULL);
draw_set_index_buffer(draw, NULL);
@@ -273,6 +264,14 @@ st_feedback_draw_vbo(struct gl_context *ctx,
pipe_buffer_unmap(pipe, ib_transfer);
pipe_resource_reference(&ibuffer.buffer, NULL);
}

out_unref_vertex:
for (attr = 0; attr < vp->num_inputs; attr++) {
pipe_buffer_unmap(pipe, vb_transfer[attr]);
draw_set_mapped_vertex_buffer(draw, attr, NULL);
pipe_resource_reference(&vbuffers[attr].buffer, NULL);
}
draw_set_vertex_buffers(draw, 0, NULL);
}

#endif /* FEATURE_feedback || FEATURE_rastpos */

Loading…
Cancel
Save