diff options
Diffstat (limited to 'src/gallium/auxiliary/util/u_draw_quad.c')
-rw-r--r-- | src/gallium/auxiliary/util/u_draw_quad.c | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/gallium/auxiliary/util/u_draw_quad.c b/src/gallium/auxiliary/util/u_draw_quad.c index cf431f2b03f..c332548ce0d 100644 --- a/src/gallium/auxiliary/util/u_draw_quad.c +++ b/src/gallium/auxiliary/util/u_draw_quad.c @@ -42,11 +42,11 @@ void util_draw_vertex_buffer(struct pipe_context *pipe, struct cso_context *cso, struct pipe_resource *vbuf, - uint vbuf_slot, - uint offset, - uint prim_type, - uint num_verts, - uint num_attribs) + unsigned offset, + bool vb_take_ownership, + enum mesa_prim prim_type, + unsigned num_verts, + unsigned num_attribs) { struct pipe_vertex_buffer vbuffer; @@ -55,16 +55,15 @@ util_draw_vertex_buffer(struct pipe_context *pipe, /* tell pipe about the vertex buffer */ memset(&vbuffer, 0, sizeof(vbuffer)); vbuffer.buffer.resource = vbuf; - vbuffer.stride = num_attribs * 4 * sizeof(float); /* vertex size */ vbuffer.buffer_offset = offset; /* note: vertex elements already set by caller */ if (cso) { - cso_set_vertex_buffers(cso, vbuf_slot, 1, &vbuffer); + cso_set_vertex_buffers(cso, 1, vb_take_ownership, &vbuffer); cso_draw_arrays(cso, prim_type, 0, num_verts); } else { - pipe->set_vertex_buffers(pipe, vbuf_slot, 1, 0, false, &vbuffer); + util_set_vertex_buffers(pipe, 1, vb_take_ownership, &vbuffer); util_draw_arrays(pipe, prim_type, 0, num_verts); } } @@ -76,7 +75,8 @@ util_draw_vertex_buffer(struct pipe_context *pipe, */ void util_draw_user_vertex_buffer(struct cso_context *cso, void *buffer, - uint prim_type, uint num_verts, uint num_attribs) + enum mesa_prim prim_type, unsigned num_verts, + unsigned num_attribs) { struct pipe_vertex_buffer vbuffer = {0}; @@ -84,10 +84,27 @@ util_draw_user_vertex_buffer(struct cso_context *cso, void *buffer, vbuffer.is_user_buffer = true; vbuffer.buffer.user = buffer; - vbuffer.stride = num_attribs * 4 * sizeof(float); /* vertex size */ /* note: vertex elements already set by caller */ - cso_set_vertex_buffers(cso, 0, 1, &vbuffer); + cso_set_vertex_buffers(cso, 1, false, &vbuffer); + cso_draw_arrays(cso, prim_type, 0, num_verts); +} + +/** + * Draw a user vertex buffer. This is the correct way. + * util_draw_user_vertex_buffer doesn't work with u_vbuf anymore. + */ +void +util_draw_user_vertices(struct cso_context *cso, struct cso_velems_state *ve, + void *buffer, enum mesa_prim prim_type, + unsigned num_verts) +{ + struct pipe_vertex_buffer vbuffer = {0}; + + vbuffer.is_user_buffer = true; + vbuffer.buffer.user = buffer; + + cso_set_vertex_buffers_and_elements(cso, ve, 1, true, &vbuffer); cso_draw_arrays(cso, prim_type, 0, num_verts); } |