Module: Mesa Branch: main Commit: 8cbab48403d02a105cb1c7589c6d35e3d72b3e6d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8cbab48403d02a105cb1c7589c6d35e3d72b3e6d
Author: Marek Olšák <[email protected]> Date: Thu Dec 7 14:38:50 2023 -0500 mesa: inline st_draw_transform_feedback Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26619> --- src/mesa/main/draw.c | 20 ++++++++++++++++---- src/mesa/state_tracker/st_draw.c | 27 --------------------------- src/mesa/state_tracker/st_draw.h | 5 ----- 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/src/mesa/main/draw.c b/src/mesa/main/draw.c index 94654ddbd1e..cc3127deb20 100644 --- a/src/mesa/main/draw.c +++ b/src/mesa/main/draw.c @@ -46,6 +46,7 @@ #include "state_tracker/st_context.h" #include "state_tracker/st_draw.h" +#include "util/u_draw.h" #include "util/u_threaded_context.h" typedef struct { @@ -2193,11 +2194,22 @@ _mesa_DrawTransformFeedbackStreamInstanced(GLenum mode, GLuint name, primcount)) return; - /* Maybe we should do some primitive splitting for primitive restart - * (like in DrawArrays), but we have no way to know how many vertices - * will be rendered. */ + st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - st_draw_transform_feedback(ctx, mode, primcount, stream, obj); + struct pipe_draw_indirect_info indirect; + memset(&indirect, 0, sizeof(indirect)); + indirect.count_from_stream_output = obj->draw_count[stream]; + if (indirect.count_from_stream_output == NULL) + return; + + struct pipe_draw_start_count_bias draw = {0}; + struct pipe_draw_info info; + util_draw_init_info(&info); + info.max_index = ~0u; /* so that u_vbuf can tell that it's unknown */ + info.mode = mode; + info.instance_count = primcount; + + cso_draw_vbo(st_context(ctx)->cso_context, &info, 0, &indirect, &draw, 1); if (MESA_DEBUG_FLAGS & DEBUG_ALWAYS_FLUSH) { _mesa_flush(ctx); diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index 1d592b7fcad..950a2da66e6 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -299,33 +299,6 @@ st_indirect_draw_vbo(struct gl_context *ctx, _mesa_flush(ctx); } -void -st_draw_transform_feedback(struct gl_context *ctx, GLenum mode, - unsigned num_instances, unsigned stream, - struct gl_transform_feedback_object *tfb_vertcount) -{ - struct st_context *st = st_context(ctx); - struct pipe_draw_info info; - struct pipe_draw_indirect_info indirect; - struct pipe_draw_start_count_bias draw = {0}; - - st_prepare_draw(ctx, ST_PIPELINE_RENDER_STATE_MASK); - - memset(&indirect, 0, sizeof(indirect)); - util_draw_init_info(&info); - info.max_index = ~0u; /* so that u_vbuf can tell that it's unknown */ - info.mode = mode; - info.instance_count = num_instances; - - /* Transform feedback drawing is always non-indexed. */ - /* Set info.count_from_stream_output. */ - indirect.count_from_stream_output = tfb_vertcount->draw_count[stream]; - if (indirect.count_from_stream_output == NULL) - return; - - cso_draw_vbo(st->cso_context, &info, 0, &indirect, &draw, 1); -} - static void st_draw_gallium_vertex_state(struct gl_context *ctx, struct pipe_vertex_state *state, diff --git a/src/mesa/state_tracker/st_draw.h b/src/mesa/state_tracker/st_draw.h index 225bd238e77..c099116b466 100644 --- a/src/mesa/state_tracker/st_draw.h +++ b/src/mesa/state_tracker/st_draw.h @@ -88,11 +88,6 @@ st_draw_quad(struct st_context *st, const float *color, unsigned num_instances); -void -st_draw_transform_feedback(struct gl_context *ctx, GLenum mode, - unsigned num_instances, unsigned stream, - struct gl_transform_feedback_object *tfb_vertcount); - void st_indirect_draw_vbo(struct gl_context *ctx, GLenum mode, GLenum index_type,
