void cso_set_vertex_buffers(struct cso_context *ctx,
unsigned start_slot, unsigned count,
+ unsigned unbind_trailing_count,
+ bool take_ownership,
const struct pipe_vertex_buffer *buffers)
{
struct u_vbuf *vbuf = ctx->vbuf_current;
- if (!count)
+ if (!count && !unbind_trailing_count)
return;
if (vbuf) {
- u_vbuf_set_vertex_buffers(vbuf, start_slot, count, 0, false, buffers);
+ u_vbuf_set_vertex_buffers(vbuf, start_slot, count, unbind_trailing_count,
+ take_ownership, buffers);
return;
}
struct pipe_context *pipe = ctx->pipe;
- pipe->set_vertex_buffers(pipe, start_slot, count, 0, false, buffers);
+ pipe->set_vertex_buffers(pipe, start_slot, count, unbind_trailing_count,
+ take_ownership, buffers);
}
/**
void cso_set_vertex_buffers(struct cso_context *ctx,
unsigned start_slot, unsigned count,
+ unsigned unbind_trailing_count,
+ bool take_ownership,
const struct pipe_vertex_buffer *buffers);
void cso_set_stream_outputs(struct cso_context *ctx,
u_upload_unmap(hud->pipe->stream_uploader);
vbuffer.stride = 2 * sizeof(float);
- cso_set_vertex_buffers(cso, 0, 1, &vbuffer);
+ cso_set_vertex_buffers(cso, 0, 1, 0, false, &vbuffer);
pipe_resource_reference(&vbuffer.buffer.resource, NULL);
cso_set_fragment_shader_handle(hud->cso, hud->fs_color);
cso_draw_arrays(cso, prim, 0, num_vertices);
pipe->set_constant_buffer(pipe, PIPE_SHADER_VERTEX, 0, false, &hud->constbuf);
- cso_set_vertex_buffers(cso, 0, 1, &hud->bg.vbuf);
+ cso_set_vertex_buffers(cso, 0, 1, 0, false, &hud->bg.vbuf);
cso_draw_arrays(cso, PIPE_PRIM_QUADS, 0, hud->bg.num_vertices);
}
pipe_resource_reference(&hud->bg.vbuf.buffer.resource, NULL);
/* draw accumulated vertices for text */
if (hud->text.num_vertices) {
cso_set_vertex_shader_handle(cso, hud->vs_text);
- cso_set_vertex_buffers(cso, 0, 1, &hud->text.vbuf);
+ cso_set_vertex_buffers(cso, 0, 1, 0, false, &hud->text.vbuf);
cso_set_fragment_shader_handle(hud->cso, hud->fs_text);
cso_draw_arrays(cso, PIPE_PRIM_QUADS, 0, hud->text.num_vertices);
}
if (hud->whitelines.num_vertices) {
cso_set_vertex_shader_handle(cso, hud->vs_color);
- cso_set_vertex_buffers(cso, 0, 1, &hud->whitelines.vbuf);
+ cso_set_vertex_buffers(cso, 0, 1, 0, false, &hud->whitelines.vbuf);
cso_set_fragment_shader_handle(hud->cso, hud->fs_color);
cso_draw_arrays(cso, PIPE_PRIM_LINES, 0, hud->whitelines.num_vertices);
}
/* note: vertex elements already set by caller */
if (cso) {
- cso_set_vertex_buffers(cso, vbuf_slot, 1, &vbuffer);
+ cso_set_vertex_buffers(cso, vbuf_slot, 1, 0, false, &vbuffer);
cso_draw_arrays(cso, prim_type, 0, num_verts);
} else {
pipe->set_vertex_buffers(pipe, vbuf_slot, 1, 0, false, &vbuffer);
/* note: vertex elements already set by caller */
- cso_set_vertex_buffers(cso, 0, 1, &vbuffer);
+ cso_set_vertex_buffers(cso, 0, 1, 0, false, &vbuffer);
cso_draw_arrays(cso, prim_type, 0, num_verts);
}
}
if (state->vb_dirty) {
- cso_set_vertex_buffers(state->cso, state->start_vb, state->num_vb, state->vb);
+ cso_set_vertex_buffers(state->cso, state->start_vb, state->num_vb, 0, false, state->vb);
state->vb_dirty = false;
}
u_upload_unmap(pipe->stream_uploader);
- cso_set_vertex_buffers(st->cso_context, 0, 1, &vb);
+ cso_set_vertex_buffers(st->cso_context, 0, 1, 0, false, &vb);
st->last_num_vbuffers = MAX2(st->last_num_vbuffers, 1);
cso_draw_arrays(st->cso_context, PIPE_PRIM_QUADS, 0, num_verts);
u_upload_unmap(st->pipe->stream_uploader);
- cso_set_vertex_buffers(st->cso_context, 0, 1, &vb);
+ cso_set_vertex_buffers(st->cso_context, 0, 1, 0, false, &vb);
st->last_num_vbuffers = MAX2(st->last_num_vbuffers, 1);
if (num_instances > 1) {
cso_set_vertex_elements(cso, &velem);
- cso_set_vertex_buffers(cso, 0, 1, &vbo);
+ cso_set_vertex_buffers(cso, 0, 1, 0, false, &vbo);
st->last_num_vbuffers = MAX2(st->last_num_vbuffers, 1);
pipe_resource_reference(&vbo.buffer.resource, NULL);