Mesa (main): st/mesa: make setup_arrays more reusable for future display list support
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Oct 1 15:45:22 UTC 2021
Module: Mesa
Branch: main
Commit: f32cefdb87b33908c886a3817c864072a06ff2ea
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f32cefdb87b33908c886a3817c864072a06ff2ea
Author: Marek Olšák <marek.olsak at amd.com>
Date: Wed Aug 11 23:28:43 2021 -0400
st/mesa: make setup_arrays more reusable for future display list support
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Acked-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13050>
---
src/mesa/state_tracker/st_atom_array.c | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/src/mesa/state_tracker/st_atom_array.c b/src/mesa/state_tracker/st_atom_array.c
index fe6af915329..a3eb8e82931 100644
--- a/src/mesa/state_tracker/st_atom_array.c
+++ b/src/mesa/state_tracker/st_atom_array.c
@@ -72,24 +72,25 @@ init_velement(struct pipe_vertex_element *velements,
*/
static void ALWAYS_INLINE
setup_arrays(struct st_context *st,
- const struct st_vertex_program *vp,
- const struct st_common_variant *vp_variant,
+ const struct gl_vertex_array_object *vao,
+ const GLbitfield dual_slot_inputs,
+ const GLbitfield inputs_read,
+ const GLbitfield nonzero_divisor_attribs,
+ const GLbitfield enabled_attribs,
+ const GLbitfield enabled_user_attribs,
struct cso_velems_state *velements,
struct pipe_vertex_buffer *vbuffer, unsigned *num_vbuffers,
bool *has_user_vertex_buffers)
{
struct gl_context *ctx = st->ctx;
- const struct gl_vertex_array_object *vao = ctx->Array._DrawVAO;
- const GLbitfield inputs_read = vp_variant->vert_attrib_mask;
- const GLbitfield dual_slot_inputs = vp->Base.Base.DualSlotInputs;
/* Process attribute array data. */
- GLbitfield mask = inputs_read & _mesa_draw_array_bits(ctx);
- GLbitfield userbuf_attribs = inputs_read & _mesa_draw_user_array_bits(ctx);
+ GLbitfield mask = inputs_read & enabled_attribs;
+ GLbitfield userbuf_attribs = inputs_read & enabled_user_attribs;
*has_user_vertex_buffers = userbuf_attribs != 0;
st->draw_needs_minmax_index =
- (userbuf_attribs & ~_mesa_draw_nonzero_divisor_bits(ctx)) != 0;
+ (userbuf_attribs & ~nonzero_divisor_attribs) != 0;
if (vao->IsDynamic) {
while (mask) {
@@ -173,8 +174,13 @@ st_setup_arrays(struct st_context *st,
struct pipe_vertex_buffer *vbuffer, unsigned *num_vbuffers,
bool *has_user_vertex_buffers)
{
- setup_arrays(st, vp, vp_variant, velements, vbuffer, num_vbuffers,
- has_user_vertex_buffers);
+ struct gl_context *ctx = st->ctx;
+
+ setup_arrays(st, ctx->Array._DrawVAO, vp->Base.Base.DualSlotInputs,
+ vp_variant->vert_attrib_mask,
+ _mesa_draw_nonzero_divisor_bits(ctx),
+ _mesa_draw_array_bits(ctx), _mesa_draw_user_array_bits(ctx),
+ velements, vbuffer, num_vbuffers, has_user_vertex_buffers);
}
/* ALWAYS_INLINE helps the compiler realize that most of the parameters are
@@ -278,6 +284,7 @@ st_setup_current_user(struct st_context *st,
void
st_update_array(struct st_context *st)
{
+ struct gl_context *ctx = st->ctx;
/* vertex program validation must be done before this */
/* _NEW_PROGRAM, ST_NEW_VS_STATE */
const struct st_vertex_program *vp = (struct st_vertex_program *)st->vp;
@@ -290,8 +297,11 @@ st_update_array(struct st_context *st)
/* ST_NEW_VERTEX_ARRAYS alias ctx->DriverFlags.NewArray */
/* Setup arrays */
- setup_arrays(st, vp, vp_variant, &velements, vbuffer, &num_vbuffers,
- &uses_user_vertex_buffers);
+ setup_arrays(st, ctx->Array._DrawVAO, vp->Base.Base.DualSlotInputs,
+ vp_variant->vert_attrib_mask,
+ _mesa_draw_nonzero_divisor_bits(ctx),
+ _mesa_draw_array_bits(ctx), _mesa_draw_user_array_bits(ctx),
+ &velements, vbuffer, &num_vbuffers, &uses_user_vertex_buffers);
/* _NEW_CURRENT_ATTRIB */
/* Setup zero-stride attribs. */
More information about the mesa-commit
mailing list