diff options
author | Marek Olšák <[email protected]> | 2010-05-15 19:31:35 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2010-05-15 19:39:57 +0200 |
commit | 251fae69e5d3a44c1a2a03f7172182e803a04792 (patch) | |
tree | ca1a1cccaa230889bcbc3e1eb8c40ff65621dedd | |
parent | 00704370e42eb9c828dc1699a033b8da9a2521b0 (diff) |
r300g: fix BO space accounting for occlusion queries
-rw-r--r-- | src/gallium/drivers/r300/r300_emit.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_flush.c | 4 | ||||
-rw-r--r-- | 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 74a56cc5780..49a51fb9360 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 e78c6a3624f..ad7cae7bf53 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 9bd28537e00..0067b0345dc 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; } |