From 251fae69e5d3a44c1a2a03f7172182e803a04792 Mon Sep 17 00:00:00 2001 From: Marek Olšák Date: Sat, 15 May 2010 19:31:35 +0200 Subject: 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(-) (limited to 'src') diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c index 74a56cc578..49a51fb936 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 e78c6a3624..ad7cae7bf5 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 9bd28537e0..0067b0345d 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; } -- cgit v1.2.3