nvfx: mostly fix inline corruption magically
authorLuca Barbieri <luca@luca-barbieri.com>
Thu, 19 Aug 2010 20:36:00 +0000 (22:36 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Sat, 21 Aug 2010 18:42:15 +0000 (20:42 +0200)
Not sure why this mostly works.

src/gallium/drivers/nvfx/nvfx_push.c

index 52e891c6678a5b316c450eafaa5ac816898a93e0..49d518e2eb9034c7858879667a6e2723d0ebd2f6 100644 (file)
@@ -246,7 +246,7 @@ nvfx_push_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
                uint8_t* map;
                unsigned step;
        } per_instance[16];
-       unsigned p_overhead = 0
+       unsigned p_overhead = 64 /* magic fix */
                        + 4 /* begin/end */
                        + 4; /* potential edgeflag enable/disable */
 
@@ -367,6 +367,14 @@ nvfx_push_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
 
                        if(max_verts >= 16)
                        {
+                               /* XXX: any command a lot of times seems to (mostly) fix corruption that would otherwise happen */
+                               int i;
+                               for(i = 0; i < 32; ++i)
+                               {
+                                       OUT_RING(chan, RING_3D(0x1dac, 1));
+                                       OUT_RING(chan, 0);
+                               }
+
                                OUT_RING(chan, RING_3D(NV34TCL_VERTEX_BEGIN_END, 1));
                                OUT_RING(chan, hw_mode);
                                done = util_split_prim_next(&s, max_verts);