r300g: convert query to a state for emitting.
[mesa.git] / src / gallium / drivers / r300 / r300_emit.c
index 3d28249c164e442352b7bff1d22b9e9a5b6dfd1c..babbe0dd74a8706a30e9f308c6b0dbdb4cb1b64c 100644 (file)
@@ -320,12 +320,16 @@ void r300_emit_fb_state(struct r300_context* r300,
     END_CS;
 }
 
-void r300_emit_query_begin(struct r300_context* r300,
-                           struct r300_query* query)
+void r300_emit_query_start(struct r300_context *r300)
+
 {
-    struct r300_capabilities* caps = r300_screen(r300->context.screen)->caps;
+    struct r300_capabilities *caps = r300_screen(r300->context.screen)->caps;
+    struct r300_query *query = r300->query_current;
     CS_LOCALS(r300);
 
+    if (!query)
+       return;
+
     /* XXX This will almost certainly not return good results
      * for overlapping queries. */
     BEGIN_CS(4);
@@ -772,6 +776,11 @@ validate:
         goto validate;
     }
 
+    if (r300->dirty_state & R300_NEW_QUERY) {
+        r300_emit_query_start(r300);
+        r300->dirty_state &= ~R300_NEW_QUERY;
+    }
+
     if (r300->dirty_state & R300_NEW_BLEND) {
         r300_emit_blend_state(r300, r300->blend_state);
         r300->dirty_state &= ~R300_NEW_BLEND;