OSDN Git Service

radeon: ensure that timing/profiling queries are suspended on flush
authorNicolai Hähnle <nhaehnle@gmail.com>
Wed, 18 Nov 2015 17:40:22 +0000 (18:40 +0100)
committerNicolai Hähnle <nhaehnle@gmail.com>
Fri, 20 Nov 2015 16:27:40 +0000 (17:27 +0100)
The queries_suspended_for_flush flag is redundant because suspended queries
are not removed from their respective linked list.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeon/r600_pipe_common.c
src/gallium/drivers/radeon/r600_pipe_common.h

index 9cb30c7..7464f67 100644 (file)
@@ -27,6 +27,7 @@
 #include "r600_pipe_common.h"
 #include "r600_cs.h"
 #include "tgsi/tgsi_parse.h"
+#include "util/list.h"
 #include "util/u_draw_quad.h"
 #include "util/u_memory.h"
 #include "util/u_format_s3tc.h"
@@ -135,12 +136,10 @@ static void r600_memory_barrier(struct pipe_context *ctx, unsigned flags)
 void r600_preflush_suspend_features(struct r600_common_context *ctx)
 {
        /* suspend queries */
-       ctx->queries_suspended_for_flush = false;
-       if (ctx->num_cs_dw_nontimer_queries_suspend) {
+       if (!LIST_IS_EMPTY(&ctx->active_nontimer_queries))
                r600_suspend_nontimer_queries(ctx);
+       if (!LIST_IS_EMPTY(&ctx->active_timer_queries))
                r600_suspend_timer_queries(ctx);
-               ctx->queries_suspended_for_flush = true;
-       }
 
        ctx->streamout.suspended = false;
        if (ctx->streamout.begin_emitted) {
@@ -157,10 +156,10 @@ void r600_postflush_resume_features(struct r600_common_context *ctx)
        }
 
        /* resume queries */
-       if (ctx->queries_suspended_for_flush) {
-               r600_resume_nontimer_queries(ctx);
+       if (!LIST_IS_EMPTY(&ctx->active_timer_queries))
                r600_resume_timer_queries(ctx);
-       }
+       if (!LIST_IS_EMPTY(&ctx->active_nontimer_queries))
+               r600_resume_nontimer_queries(ctx);
 }
 
 static void r600_flush_from_st(struct pipe_context *ctx,
index aa04711..fbdc5c4 100644 (file)
@@ -393,8 +393,6 @@ struct r600_common_context {
        struct list_head                active_timer_queries;
        unsigned                        num_cs_dw_nontimer_queries_suspend;
        unsigned                        num_cs_dw_timer_queries_suspend;
-       /* If queries have been suspended. */
-       bool                            queries_suspended_for_flush;
        /* Additional hardware info. */
        unsigned                        backend_mask;
        unsigned                        max_db; /* for OQ */