softpipe: zero-out entire clear_flags array in sp_tile_cache_flush_clear()
authorBrian Paul <brianp@vmware.com>
Mon, 8 Mar 2010 18:34:55 +0000 (11:34 -0700)
committerBrian Paul <brianp@vmware.com>
Mon, 8 Mar 2010 18:39:51 +0000 (11:39 -0700)
Before, we only cleared the flags for the active tiles (the ones inside
the framebuffer bound).  The problem is if we later bound a different,
larger surface to the tile cache we'd have some stale clear-flags still
set (and mistakenly clear some tiles in the new surface).

Fixes fd.o bug 26932.

src/gallium/drivers/softpipe/sp_tile_cache.c

index 3b30954ac8d9f87fcb28caed4880d05d11083504..aedfdf1b46952cf06fc0919661fe8ffda4d6a4fe 100644 (file)
@@ -299,13 +299,14 @@ sp_tile_cache_flush_clear(struct softpipe_tile_cache *tc)
                               x, y, TILE_SIZE, TILE_SIZE,
                               tc->tile.data.color32, 0/*STRIDE*/);
 
-            /* do this? */
-            clear_clear_flag(tc->clear_flags, addr);
-
             numCleared++;
          }
       }
    }
+
+   /* reset all clear flags to zero */
+   memset(tc->clear_flags, 0, sizeof(tc->clear_flags));
+
 #if 0
    debug_printf("num cleared: %u\n", numCleared);
 #endif