<div dir="ltr"><div>Reviewed-by: Marek Olšák <<a href="mailto:marek.olsak@amd.com">marek.olsak@amd.com</a>></div><div><br></div><div>Marek<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Feb 24, 2019 at 1:46 AM <<a href="mailto:Mathias.Froehlich@gmx.net">Mathias.Froehlich@gmx.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Mathias Fröhlich <<a href="mailto:mathias.froehlich@web.de" target="_blank">mathias.froehlich@web.de</a>><br>
<br>
Hi Brian,<br>
<br>
Following a small optimization in the gallium state tracker to<br>
avoid flagging ST_NEW_VERTEX_ARRAYS a bit more often:<br>
<br>
please review!<br>
<br>
best<br>
<br>
Mathias<br>
<br>
<br>
<br>
<br>
Since using bitmasks we can easily check if we have any<br>
current value that is potentially uploaded on array setup.<br>
So check for any potential vertex program input that is not<br>
already a vao enabled array. Only flag array update if there is<br>
a potential overlap.<br>
<br>
Signed-off-by: Mathias Fröhlich <<a href="mailto:Mathias.Froehlich@web.de" target="_blank">Mathias.Froehlich@web.de</a>><br>
---<br>
 src/mesa/state_tracker/st_context.c | 2 +-<br>
 src/mesa/state_tracker/st_context.h | 9 +++++++++<br>
 2 files changed, 10 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c<br>
index 0a0bd8ba1ca..45451531df9 100644<br>
--- a/src/mesa/state_tracker/st_context.c<br>
+++ b/src/mesa/state_tracker/st_context.c<br>
@@ -224,7 +224,7 @@ st_invalidate_state(struct gl_context *ctx)<br>
    if (new_state & _NEW_PIXEL)<br>
       st->dirty |= ST_NEW_PIXEL_TRANSFER;<br>
<br>
-   if (new_state & _NEW_CURRENT_ATTRIB)<br>
+   if (new_state & _NEW_CURRENT_ATTRIB && st_vp_uses_current_values(ctx))<br>
       st->dirty |= ST_NEW_VERTEX_ARRAYS;<br>
<br>
    /* Update the vertex shader if ctx->Light._ClampVertexColor was changed. */<br>
diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h<br>
index ed69e3d4873..324a7f24178 100644<br>
--- a/src/mesa/state_tracker/st_context.h<br>
+++ b/src/mesa/state_tracker/st_context.h<br>
@@ -28,6 +28,7 @@<br>
 #ifndef ST_CONTEXT_H<br>
 #define ST_CONTEXT_H<br>
<br>
+#include "main/arrayobj.h"<br>
 #include "main/mtypes.h"<br>
 #include "state_tracker/st_api.h"<br>
 #include "main/fbobject.h"<br>
@@ -398,6 +399,14 @@ st_user_clip_planes_enabled(struct gl_context *ctx)<br>
           ctx->Transform.ClipPlanesEnabled;<br>
 }<br>
<br>
+<br>
+static inline bool<br>
+st_vp_uses_current_values(const struct gl_context *ctx)<br>
+{<br>
+   const uint64_t inputs = ctx->VertexProgram._Current->info.inputs_read;<br>
+   return _mesa_draw_current_bits(ctx) & inputs;<br>
+}<br>
+<br>
 /** clear-alloc a struct-sized object, with casting */<br>
 #define ST_CALLOC_STRUCT(T)   (struct T *) calloc(1, sizeof(struct T))<br>
<br>
-- <br>
2.20.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">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/mailman/listinfo/mesa-dev</a></blockquote></div>