<div dir="ltr"><div>Can you explain what the difference is between the old and new code?</div><div><br></div><div>Marek<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, May 19, 2018 at 4:30 AM,  <span dir="ltr"><<a href="mailto:Mathias.Froehlich@gmx.net" target="_blank">Mathias.Froehlich@gmx.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Mathias Fröhlich <<a href="mailto:mathias.froehlich@web.de">mathias.froehlich@web.de</a>><br>
<br>
Hi,<br>
<br>
Below a patch to radeonsi to get a small bit more out of the recent<br>
VAO changes.<br>
The change did not introduce regressions into piglit and some variant<br>
of deqp availble through piglit on a radeonsi system.<br>
Please review!<br>
<br>
best Mathias<br>
<br>
<br>
Instead of tracking which pipe_vertex_elements backing buffer objects<br>
have already been uploaded, do this for the pipe_vertex_buffers, which<br>
is the data structure that contains the buffer objects.<br>
That should slightly decrease some unnecessary load on calls to<br>
radeon_add_to_buffer_list.<br>
<br>
Signed-off-by: Mathias Fröhlich <<a href="mailto:Mathias.Froehlich@web.de">Mathias.Froehlich@web.de</a>><br>
---<br>
 src/gallium/drivers/radeonsi/<wbr>si_descriptors.c |  4 +++-<br>
 src/gallium/drivers/radeonsi/<wbr>si_state.c       | 11 ++++++-----<br>
 2 files changed, 9 insertions(+), 6 deletions(-)<br>
<br>
diff --git a/src/gallium/drivers/<wbr>radeonsi/si_descriptors.c b/src/gallium/drivers/<wbr>radeonsi/si_descriptors.c<br>
index 1d14c9df1e..3e3a3a2164 100644<br>
--- a/src/gallium/drivers/<wbr>radeonsi/si_descriptors.c<br>
+++ b/src/gallium/drivers/<wbr>radeonsi/si_descriptors.c<br>
@@ -1161,7 +1161,9 @@ bool si_upload_vertex_buffer_<wbr>descriptors(struct si_context *sctx)<br>
                desc[2] = num_records;<br>
                desc[3] = velems->rsrc_word3[i];<br>
<br>
-               if (first_vb_use_mask & (1 << i)) {<br>
+               const unsigned vbo_bit = 1u << vbo_index;<br>
+               if (first_vb_use_mask & vbo_bit) {<br>
+                       first_vb_use_mask ^= vbo_bit;<br>
                        radeon_add_to_buffer_list(<wbr>sctx, sctx->gfx_cs,<br>
                                              r600_resource(vb->buffer.<wbr>resource),<br>
                                              RADEON_USAGE_READ, RADEON_PRIO_VERTEX_BUFFER);<br>
diff --git a/src/gallium/drivers/<wbr>radeonsi/si_state.c b/src/gallium/drivers/<wbr>radeonsi/si_state.c<br>
index 675b1adbe6..4306cf42bf 100644<br>
--- a/src/gallium/drivers/<wbr>radeonsi/si_state.c<br>
+++ b/src/gallium/drivers/<wbr>radeonsi/si_state.c<br>
@@ -4323,10 +4323,11 @@ static void *si_create_vertex_elements(<wbr>struct pipe_context *ctx,<br>
 {<br>
        struct si_screen *sscreen = (struct si_screen*)ctx->screen;<br>
        struct si_vertex_elements *v = CALLOC_STRUCT(si_vertex_<wbr>elements);<br>
-       bool used[SI_NUM_VERTEX_BUFFERS] = {};<br>
+       unsigned first_vb_use_mask = 0;<br>
        int i;<br>
<br>
        assert(count <= SI_MAX_ATTRIBS);<br>
+       assert(SI_NUM_VERTEX_BUFFERS <= sizeof(unsigned)*CHAR_BIT);<br>
        if (!v)<br>
                return NULL;<br>
<br>
@@ -4356,10 +4357,7 @@ static void *si_create_vertex_elements(<wbr>struct pipe_context *ctx,<br>
                                v->instance_divisor_is_fetched |= 1u << i;<br>
                }<br>
<br>
-               if (!used[vbo_index]) {<br>
-                       v->first_vb_use_mask |= 1 << i;<br>
-                       used[vbo_index] = true;<br>
-               }<br>
+               first_vb_use_mask |= (1u << vbo_index);<br>
<br>
                desc = util_format_description(<wbr>elements[i].src_format);<br>
                first_non_void = util_format_get_first_non_<wbr>void_channel(elements[i].src_<wbr>format);<br>
@@ -4463,6 +4461,9 @@ static void *si_create_vertex_elements(<wbr>struct pipe_context *ctx,<br>
                                   S_008F0C_NUM_FORMAT(num_<wbr>format) |<br>
                                   S_008F0C_DATA_FORMAT(data_<wbr>format);<br>
        }<br>
+<br>
+       v->first_vb_use_mask = first_vb_use_mask;<br>
+<br>
        return v;<br>
 }<br>
<span class="HOEnZb"><font color="#888888"> <br>
-- <br>
2.14.3<br>
<br>
______________________________<wbr>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>