freedreno/a4xx: invalidate cache when vbo's change
authorRob Clark <robclark@freedesktop.org>
Mon, 1 Dec 2014 16:55:36 +0000 (11:55 -0500)
committerRob Clark <robclark@freedesktop.org>
Mon, 1 Dec 2014 17:02:25 +0000 (12:02 -0500)
Otherwise vertex shader can see stale cache data.  This in particular
happens when the same vbo is updated and reused.  Not sure yet if vbo's
at differing addresses but bound to same vertex buffer slot could have
issues, but seems safest to flush whenever new vertex buffers are bound.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/a4xx/fd4_emit.c

index 3f51e502d0af110ac529d695fc6879e8924c6e3b..44a824ab164a677deb32fe127da55f5cc0dc35e6 100644 (file)
@@ -328,6 +328,13 @@ fd4_emit_vertex_bufs(struct fd_ringbuffer *ring, struct fd4_emit *emit)
        OUT_RING(ring, 0x00000000);   /* XXX VFD_CONTROL_2 */
        OUT_RING(ring, 0x0000fc00);   /* XXX VFD_CONTROL_3 */
        OUT_RING(ring, 0x00000000);   /* XXX VFD_CONTROL_4 */
+
+       /* cache invalidate, otherwise vertex fetch could see
+        * stale vbo contents:
+        */
+       OUT_PKT0(ring, REG_A4XX_UCHE_INVALIDATE0, 2);
+       OUT_RING(ring, 0x00000000);
+       OUT_RING(ring, 0x00000012);
 }
 
 void