summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/util/u_draw_quad.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/util/u_draw_quad.c')
-rw-r--r--src/gallium/auxiliary/util/u_draw_quad.c39
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);
}