Mesa (master): r300g: fix BO space accounting for occlusion queries

Marek Olšák mareko at kemper.freedesktop.org
Sat May 15 17:40:44 UTC 2010


Module: Mesa
Branch: master
Commit: 251fae69e5d3a44c1a2a03f7172182e803a04792
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=251fae69e5d3a44c1a2a03f7172182e803a04792

Author: Marek Olšák <maraeo at gmail.com>
Date:   Sat May 15 19:31:35 2010 +0200

r300g: fix BO space accounting for occlusion queries

---

 src/gallium/drivers/r300/r300_emit.c  |    5 ++++-
 src/gallium/drivers/r300/r300_flush.c |    4 ++--
 src/gallium/drivers/r300/r300_query.c |    2 --
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index 74a56cc..49a51fb 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -651,6 +651,8 @@ void r300_emit_query_end(struct r300_context* r300)
             rv530_emit_query_end_single_z(r300, query);
     } else 
         r300_emit_query_end_frag_pipes(r300, query);
+
+    query->begin_emitted = FALSE;
 }
 
 void r300_emit_rs_state(struct r300_context* r300, unsigned size, void* state)
@@ -1094,7 +1096,8 @@ validate:
         }
     }
     /* ...occlusion query buffer... */
-    if (r300->query_start.dirty) {
+    if (r300->query_start.dirty ||
+        (r300->query_current && r300->query_current->begin_emitted)) {
         if (!r300_add_buffer(r300->rws, r300->oqbo,
 			     0, RADEON_GEM_DOMAIN_GTT)) {
             r300->context.flush(&r300->context, 0, NULL);
diff --git a/src/gallium/drivers/r300/r300_flush.c b/src/gallium/drivers/r300/r300_flush.c
index e78c6a3..ad7cae7 100644
--- a/src/gallium/drivers/r300/r300_flush.c
+++ b/src/gallium/drivers/r300/r300_flush.c
@@ -48,9 +48,9 @@ static void r300_flush(struct pipe_context* pipe,
         draw_flush(r300->draw);
     }
 
-    r300_emit_query_end(r300);
-
     if (r300->dirty_hw) {
+        r300_emit_query_end(r300);
+
         FLUSH_CS;
         r300->dirty_hw = 0;
 
diff --git a/src/gallium/drivers/r300/r300_query.c b/src/gallium/drivers/r300/r300_query.c
index 9bd2853..0067b03 100644
--- a/src/gallium/drivers/r300/r300_query.c
+++ b/src/gallium/drivers/r300/r300_query.c
@@ -103,7 +103,6 @@ static void r300_end_query(struct pipe_context* pipe,
 	                   struct pipe_query* query)
 {
     struct r300_context* r300 = r300_context(pipe);
-    struct r300_query* q = (struct r300_query*)query;
 
     if ((struct r300_query*)query != r300->query_current) {
         fprintf(stderr, "r300: end_query: Got invalid query.\n");
@@ -112,7 +111,6 @@ static void r300_end_query(struct pipe_context* pipe,
     }
 
     r300_emit_query_end(r300);
-    q->begin_emitted = false;
     r300->query_current = NULL;
 }
 




More information about the mesa-commit mailing list