r600g,radeonsi: fix streamout after pipeline stats have been used
authorMarek Olšák <marek.olsak@amd.com>
Mon, 23 Feb 2015 17:03:02 +0000 (18:03 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 24 Feb 2015 20:21:04 +0000 (21:21 +0100)
EVENT_TYPE_PIPELINESTAT_STOP disables streamout queries too.

Luckily, pipeline stats are enabled by default, so we don't even have to
emit EVENT_TYPE_PIPELINESTAT_START.

Tested on Hawaii, Bonaire, Redwood, RV730.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeon/r600_pipe_common.h
src/gallium/drivers/radeon/r600_query.c

index a5c7bd351cabbb95d3348616e9a17cd875523fae..43efaa34b4c0aecded4e79fa0b24012142227712 100644 (file)
@@ -361,7 +361,6 @@ struct r600_common_context {
        /* Queries. */
        /* The list of active queries. Only one query of each type can be active. */
        int                             num_occlusion_queries;
-       int                             num_pipelinestat_queries;
        /* Keep track of non-timer queries, because they should be suspended
         * during context flushing.
         * The timer queries (TIME_ELAPSED) shouldn't be suspended. */
index 8d80612b68ee566d63df858273216fe09c74b333..6a35ab8190a6b817de2342f0687fa5148c5612f7 100644 (file)
@@ -200,11 +200,6 @@ static void r600_emit_query_begin(struct r600_common_context *ctx, struct r600_q
                radeon_emit(cs, 0);
                break;
        case PIPE_QUERY_PIPELINE_STATISTICS:
-               if (!ctx->num_pipelinestat_queries) {
-                       radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 0, 0));
-                       radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_PIPELINESTAT_START) | EVENT_INDEX(0));
-               }
-               ctx->num_pipelinestat_queries++;
                radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 2, 0));
                radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_SAMPLE_PIPELINESTAT) | EVENT_INDEX(2));
                radeon_emit(cs, va);
@@ -265,12 +260,6 @@ static void r600_emit_query_end(struct r600_common_context *ctx, struct r600_que
                radeon_emit(cs, 0);
                break;
        case PIPE_QUERY_PIPELINE_STATISTICS:
-               assert(ctx->num_pipelinestat_queries > 0);
-               ctx->num_pipelinestat_queries--;
-               if (!ctx->num_pipelinestat_queries) {
-                       radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 0, 0));
-                       radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_PIPELINESTAT_STOP) | EVENT_INDEX(0));
-               }
                va += query->buffer.results_end + query->result_size/2;
                radeon_emit(cs, PKT3(PKT3_EVENT_WRITE, 2, 0));
                radeon_emit(cs, EVENT_TYPE(EVENT_TYPE_SAMPLE_PIPELINESTAT) | EVENT_INDEX(2));
@@ -380,7 +369,7 @@ static struct pipe_query *r600_create_query(struct pipe_context *ctx, unsigned q
        case PIPE_QUERY_PIPELINE_STATISTICS:
                /* 11 values on EG, 8 on R600. */
                query->result_size = (rctx->chip_class >= EVERGREEN ? 11 : 8) * 16;
-               query->num_cs_dw = 8;
+               query->num_cs_dw = 6;
                break;
        /* Non-GPU queries and queries not requiring a buffer. */
        case PIPE_QUERY_TIMESTAMP_DISJOINT: