panfrost: Make attribute-buffer map explicit
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 14 Aug 2020 16:09:05 +0000 (12:09 -0400)
committerMarge Bot <eric+marge@anholt.net>
Mon, 17 Aug 2020 11:43:52 +0000 (11:43 +0000)
This helps decouple the attribute and attribute buffer emission.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6326>

src/gallium/drivers/panfrost/pan_cmdstream.c

index 41abf57b0beca81cb0d5cda31d28ff58cb6a96c9..28607b4b7d509c61577de2e7d7df9a9098e6c982 100644 (file)
@@ -1348,6 +1348,7 @@ panfrost_emit_vertex_data(struct panfrost_batch *batch,
          * vertex buffer mask and instancing. Twice as much room is allocated,
          * for a worst case of NPOT_DIVIDEs which take up extra slot */
         union mali_attr attrs[PIPE_MAX_ATTRIBS * 2];
+        unsigned attrib_to_buffer[PIPE_MAX_ATTRIBS] = { 0 };
         unsigned k = 0;
 
         for (unsigned i = 0; i < so->num_elements; ++i) {
@@ -1358,11 +1359,7 @@ panfrost_emit_vertex_data(struct panfrost_batch *batch,
 
                 struct pipe_vertex_element *elem = &so->pipe[i];
                 unsigned vbi = elem->vertex_buffer_index;
-
-                /* The exception to 1:1 mapping is that we can have multiple
-                 * entries (NPOT divisors), so we fixup anyways */
-
-                so->hw[i].index = k;
+                attrib_to_buffer[i] = k;
 
                 if (!(ctx->vb_mask & (1 << vbi)))
                         continue;
@@ -1470,6 +1467,7 @@ panfrost_emit_vertex_data(struct panfrost_batch *batch,
                         src_offset -= buf->stride * start;
 
                 so->hw[i].src_offset = src_offset;
+                so->hw[i].index = attrib_to_buffer[i];
         }