r300g: mark all states as dirty after flush
authorMarek Olšák <maraeo@gmail.com>
Tue, 12 Jan 2010 20:50:10 +0000 (21:50 +0100)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Wed, 13 Jan 2010 02:08:57 +0000 (18:08 -0800)
It fixes almost all regressions introduced lately.

src/gallium/drivers/r300/r300_flush.c

index 14a08241fc460bb68416aa322c09d2ce1cec8fcc..c78a7673a3faf6f6bd844d7f104fee5128568b15 100644 (file)
@@ -37,6 +37,7 @@ static void r300_flush(struct pipe_context* pipe,
 {
     struct r300_context *r300 = r300_context(pipe);
     struct r300_query *query;
+    struct r300_atom *atom;
 
     CS_LOCALS(r300);
     /* We probably need to flush Draw, but we may have been called from
@@ -54,7 +55,15 @@ static void r300_flush(struct pipe_context* pipe,
         r300_emit_invariant_state(r300);
         r300->dirty_state = R300_NEW_KITCHEN_SINK;
         r300->dirty_hw = 0;
+
+        /* New kitchen sink, baby. */
+        foreach(atom, &r300->atom_list) {
+            if (atom->state) {
+                atom->dirty = TRUE;
+            }
+        }
     }
+
     /* reset flushed query */
     foreach(query, &r300->query_list) {
         query->flushed = TRUE;