diff options
-rw-r--r-- | src/gallium/drivers/radeon/r600_pipe_common.c | 10 | ||||
-rw-r--r-- | src/gallium/drivers/radeon/r600_pipe_common.h | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index f03dcd96e85..aaea8fe27f4 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -136,8 +136,12 @@ static void r600_memory_barrier(struct pipe_context *ctx, unsigned flags) void r600_preflush_suspend_features(struct r600_common_context *ctx) { /* suspend queries */ - if (!LIST_IS_EMPTY(&ctx->active_nontimer_queries)) + if (ctx->num_cs_dw_nontimer_queries_suspend) { + /* Since non-timer queries are suspended during blits, + * we have to guard against double-suspends. */ r600_suspend_nontimer_queries(ctx); + ctx->nontimer_queries_suspended_by_flush = true; + } if (!LIST_IS_EMPTY(&ctx->active_timer_queries)) r600_suspend_timer_queries(ctx); @@ -158,8 +162,10 @@ void r600_postflush_resume_features(struct r600_common_context *ctx) /* resume queries */ if (!LIST_IS_EMPTY(&ctx->active_timer_queries)) r600_resume_timer_queries(ctx); - if (!LIST_IS_EMPTY(&ctx->active_nontimer_queries)) + if (ctx->nontimer_queries_suspended_by_flush) { + ctx->nontimer_queries_suspended_by_flush = false; r600_resume_nontimer_queries(ctx); + } } static void r600_flush_from_st(struct pipe_context *ctx, diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h b/src/gallium/drivers/radeon/r600_pipe_common.h index 253d6577680..a4f3fcef7fd 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.h +++ b/src/gallium/drivers/radeon/r600_pipe_common.h @@ -396,6 +396,7 @@ struct r600_common_context { struct list_head active_nontimer_queries; struct list_head active_timer_queries; unsigned num_cs_dw_nontimer_queries_suspend; + bool nontimer_queries_suspended_by_flush; unsigned num_cs_dw_timer_queries_suspend; /* Additional hardware info. */ unsigned backend_mask; |