r300-gallium: Consolidate state updates.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Wed, 18 Feb 2009 05:30:55 +0000 (21:30 -0800)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Wed, 18 Feb 2009 05:30:55 +0000 (21:30 -0800)
src/gallium/drivers/r300/r300_emit.c

index a2819294a4f32496e9f356e9b4e7af55749ed8cb..0c86a9c92de9ecd7d496b75d5fb7f55adc5ea113 100644 (file)
@@ -230,18 +230,23 @@ void r300_emit_dirty_state(struct r300_context* r300)
         return;
     }
 
+    r300_update_derived_state(r300);
+
     /* XXX check size */
 
     if (r300->dirty_state & R300_NEW_BLEND) {
         r300_emit_blend_state(r300, r300->blend_state);
+        r300->dirty_state &= ~R300_NEW_BLEND;
     }
 
     if (r300->dirty_state & R300_NEW_BLEND_COLOR) {
         r300_emit_blend_color_state(r300, r300->blend_color_state);
+        r300->dirty_state &= ~R300_NEW_BLEND_COLOR;
     }
 
     if (r300->dirty_state & R300_NEW_DSA) {
         r300_emit_dsa_state(r300, r300->dsa_state);
+        r300->dirty_state &= ~R300_NEW_DSA;
     }
 
     if (r300->dirty_state & R300_NEW_FRAGMENT_SHADER) {
@@ -252,15 +257,16 @@ void r300_emit_dirty_state(struct r300_context* r300)
             r300_emit_fragment_shader(r300,
                 (struct r300_fragment_shader*)r300->fs);
         }
+        r300->dirty_state &= ~R300_NEW_FRAGMENT_SHADER;
     }
 
     if (r300->dirty_state & R300_NEW_RASTERIZER) {
         r300_emit_rs_state(r300, r300->rs_state);
+        r300->dirty_state &= ~R300_NEW_RASTERIZER;
     }
 
     if (r300->dirty_state & R300_NEW_SCISSOR) {
         r300_emit_scissor_state(r300, r300->scissor_state);
+        r300->dirty_state &= ~R300_NEW_SCISSOR;
     }
-
-    r300->dirty_state = 0;
 }