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>
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user