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

Author: Marek Olšák <[email protected]>
Date:   Wed Sep  3 13:58:57 2014 +0200

r600g,radeonsi: make sure there's enough CS space before resuming queries

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83432

Cc: "10.2 10.3" <[email protected]>
Reviewed-by: Michel Dänzer <[email protected]>

---

 src/gallium/drivers/radeon/r600_query.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/gallium/drivers/radeon/r600_query.c 
b/src/gallium/drivers/radeon/r600_query.c
index 503737c..590db13 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -807,12 +807,40 @@ void r600_suspend_nontimer_queries(struct 
r600_common_context *ctx)
        assert(ctx->num_cs_dw_nontimer_queries_suspend == 0);
 }
 
+static unsigned r600_queries_num_cs_dw_for_resuming(struct r600_common_context 
*ctx)
+{
+       struct r600_query *query;
+       unsigned num_dw = 0;
+
+       LIST_FOR_EACH_ENTRY(query, &ctx->active_nontimer_queries, list) {
+               /* begin + end */
+               num_dw += query->num_cs_dw * 2;
+
+               /* Workaround for the fact that
+                * num_cs_dw_nontimer_queries_suspend is incremented for every
+                * resumed query, which raises the bar in need_cs_space for
+                * queries about to be resumed.
+                */
+               num_dw += query->num_cs_dw;
+       }
+       /* primitives generated query */
+       num_dw += ctx->streamout.enable_atom.num_dw;
+       /* guess for ZPASS enable or PERFECT_ZPASS_COUNT enable updates */
+       num_dw += 13;
+
+       return num_dw;
+}
+
 void r600_resume_nontimer_queries(struct r600_common_context *ctx)
 {
        struct r600_query *query;
 
        assert(ctx->num_cs_dw_nontimer_queries_suspend == 0);
 
+       /* Check CS space here. Resuming must not be interrupted by flushes. */
+       ctx->need_gfx_cs_space(&ctx->b,
+                              r600_queries_num_cs_dw_for_resuming(ctx), TRUE);
+
        LIST_FOR_EACH_ENTRY(query, &ctx->active_nontimer_queries, list) {
                r600_emit_query_begin(ctx, query);
        }

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to