gallium/util: fix GALLIUM_TESTS=1 by using cso_set_vertex_buffers_and_elements

util_draw_user_vertex_buffer no longer works with u_vbuf.
Add util_draw_user_vertices that does the right thing and use it.

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25389>
This commit is contained in:
Marek Olšák
2023-09-25 16:17:08 -04:00
committed by Marge Bot
parent fac31bb7bd
commit b9289c51b5
3 changed files with 36 additions and 9 deletions
+18
View File
@@ -89,3 +89,21 @@ util_draw_user_vertex_buffer(struct cso_context *cso, void *buffer,
cso_set_vertex_buffers(cso, 1, 0, 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, 0, false, true, &vbuffer);
cso_draw_arrays(cso, prim_type, 0, num_verts);
}
+6
View File
@@ -40,6 +40,7 @@ extern "C" {
struct pipe_resource;
struct cso_context;
struct cso_velems_state;
extern void
util_draw_vertex_buffer(struct pipe_context *pipe, struct cso_context *cso,
@@ -52,6 +53,11 @@ util_draw_user_vertex_buffer(struct cso_context *cso, void *buffer,
enum mesa_prim prim_type, unsigned num_verts,
unsigned num_attribs);
void
util_draw_user_vertices(struct cso_context *cso, struct cso_velems_state *ve,
void *buffer, enum mesa_prim prim_type,
unsigned num_verts);
#ifdef __cplusplus
}
#endif
+12 -9
View File
@@ -134,8 +134,8 @@ util_set_max_viewport(struct cso_context *cso, struct pipe_resource *tex)
cso_set_viewport(cso, &viewport);
}
static void
util_set_interleaved_vertex_elements(struct cso_context *cso,
static struct cso_velems_state
util_get_interleaved_vertex_elements(struct cso_context *cso,
unsigned num_elements)
{
struct cso_velems_state velem;
@@ -149,7 +149,7 @@ util_set_interleaved_vertex_elements(struct cso_context *cso,
velem.velems[i].src_stride = num_elements * 4 * sizeof(float);
}
cso_set_vertex_elements(cso, &velem);
return velem;
}
static void *
@@ -194,8 +194,9 @@ util_draw_fullscreen_quad(struct cso_context *cso)
1, 1, 0, 1, 1, 1, 0, 0,
1, -1, 0, 1, 1, 0, 0, 0
};
util_set_interleaved_vertex_elements(cso, 2);
util_draw_user_vertex_buffer(cso, vertices, MESA_PRIM_QUADS, 4, 2);
struct cso_velems_state ve = util_get_interleaved_vertex_elements(cso, 2);
util_draw_user_vertices(cso, &ve, vertices, MESA_PRIM_QUADS, 4);
}
static void
@@ -208,8 +209,9 @@ util_draw_fullscreen_quad_fill(struct cso_context *cso,
1, 1, 0, 1, r, g, b, a,
1, -1, 0, 1, r, g, b, a,
};
util_set_interleaved_vertex_elements(cso, 2);
util_draw_user_vertex_buffer(cso, vertices, MESA_PRIM_QUADS, 4, 2);
struct cso_velems_state ve = util_get_interleaved_vertex_elements(cso, 2);
util_draw_user_vertices(cso, &ve, vertices, MESA_PRIM_QUADS, 4);
}
/**
@@ -349,8 +351,9 @@ tgsi_vs_window_space_position(struct pipe_context *ctx)
256, 256, 0, 0, 1, 0, 0, 1,
256, 0, 0, 0, 1, 0, 0, 1,
};
util_set_interleaved_vertex_elements(cso, 2);
util_draw_user_vertex_buffer(cso, vertices, MESA_PRIM_QUADS, 4, 2);
struct cso_velems_state ve = util_get_interleaved_vertex_elements(cso, 2);
util_draw_user_vertices(cso, &ve, vertices, MESA_PRIM_QUADS, 4);
}
/* Probe pixels. */