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