For the series: Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Marek On Fri, Nov 13, 2015 at 5:10 PM, Nicolai Hähnle <nhaeh...@gmail.com> wrote: > This will be important for perfcounter queries. > --- > src/gallium/drivers/radeon/r600_query.c | 33 > +++++++++++++++++++-------------- > src/gallium/drivers/radeon/r600_query.h | 3 ++- > 2 files changed, 21 insertions(+), 15 deletions(-) > > diff --git a/src/gallium/drivers/radeon/r600_query.c > b/src/gallium/drivers/radeon/r600_query.c > index 4f89634..f8a30a2 100644 > --- a/src/gallium/drivers/radeon/r600_query.c > +++ b/src/gallium/drivers/radeon/r600_query.c > @@ -342,16 +342,18 @@ static struct pipe_query *r600_query_hw_create(struct > r600_common_context *rctx, > case PIPE_QUERY_OCCLUSION_COUNTER: > case PIPE_QUERY_OCCLUSION_PREDICATE: > query->result_size = 16 * rctx->max_db; > - query->num_cs_dw = 6; > + query->num_cs_dw_begin = 6; > + query->num_cs_dw_end = 6; > break; > case PIPE_QUERY_TIME_ELAPSED: > query->result_size = 16; > - query->num_cs_dw = 8; > + query->num_cs_dw_begin = 8; > + query->num_cs_dw_end = 8; > query->flags = R600_QUERY_HW_FLAG_TIMER; > break; > case PIPE_QUERY_TIMESTAMP: > query->result_size = 8; > - query->num_cs_dw = 8; > + query->num_cs_dw_end = 8; > query->flags = R600_QUERY_HW_FLAG_TIMER | > R600_QUERY_HW_FLAG_NO_START; > break; > @@ -361,13 +363,15 @@ static struct pipe_query *r600_query_hw_create(struct > r600_common_context *rctx, > case PIPE_QUERY_SO_OVERFLOW_PREDICATE: > /* NumPrimitivesWritten, PrimitiveStorageNeeded. */ > query->result_size = 32; > - query->num_cs_dw = 6; > + query->num_cs_dw_begin = 6; > + query->num_cs_dw_end = 6; > query->stream = index; > break; > 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 = 6; > + query->num_cs_dw_begin = 6; > + query->num_cs_dw_end = 6; > break; > default: > assert(0); > @@ -465,7 +469,9 @@ static void r600_query_hw_emit_start(struct > r600_common_context *ctx, > > r600_update_occlusion_query_state(ctx, query->b.type, 1); > r600_update_prims_generated_query_state(ctx, query->b.type, 1); > - ctx->need_gfx_cs_space(&ctx->b, query->num_cs_dw * 2, TRUE); > + > + ctx->need_gfx_cs_space(&ctx->b, query->num_cs_dw_begin + > query->num_cs_dw_end, > + TRUE); > > /* Get a new query buffer if needed. */ > if (query->buffer.results_end + query->result_size > > query->buffer.buf->b.b.width0) { > @@ -482,10 +488,9 @@ static void r600_query_hw_emit_start(struct > r600_common_context *ctx, > query->ops->emit_start(ctx, query, query->buffer.buf, va); > > if (query->flags & R600_QUERY_HW_FLAG_TIMER) > - ctx->num_cs_dw_timer_queries_suspend += query->num_cs_dw; > + ctx->num_cs_dw_timer_queries_suspend += query->num_cs_dw_end; > else > - ctx->num_cs_dw_nontimer_queries_suspend += query->num_cs_dw; > - > + ctx->num_cs_dw_nontimer_queries_suspend += > query->num_cs_dw_end; > } > > static void r600_query_hw_do_emit_stop(struct r600_common_context *ctx, > @@ -546,7 +551,7 @@ static void r600_query_hw_emit_stop(struct > r600_common_context *ctx, > > /* The queries which need begin already called this in begin_query. */ > if (query->flags & R600_QUERY_HW_FLAG_NO_START) { > - ctx->need_gfx_cs_space(&ctx->b, query->num_cs_dw, FALSE); > + ctx->need_gfx_cs_space(&ctx->b, query->num_cs_dw_end, FALSE); > } > > /* emit end query */ > @@ -558,9 +563,9 @@ static void r600_query_hw_emit_stop(struct > r600_common_context *ctx, > > if (!(query->flags & R600_QUERY_HW_FLAG_NO_START)) { > if (query->flags & R600_QUERY_HW_FLAG_TIMER) > - ctx->num_cs_dw_timer_queries_suspend -= > query->num_cs_dw; > + ctx->num_cs_dw_timer_queries_suspend -= > query->num_cs_dw_end; > else > - ctx->num_cs_dw_nontimer_queries_suspend -= > query->num_cs_dw; > + ctx->num_cs_dw_nontimer_queries_suspend -= > query->num_cs_dw_end; > } > > r600_update_occlusion_query_state(ctx, query->b.type, -1); > @@ -980,14 +985,14 @@ static unsigned > r600_queries_num_cs_dw_for_resuming(struct r600_common_context * > > LIST_FOR_EACH_ENTRY(query, query_list, list) { > /* begin + end */ > - num_dw += query->num_cs_dw * 2; > + num_dw += query->num_cs_dw_begin + query->num_cs_dw_end; > > /* 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; > + num_dw += query->num_cs_dw_end; > } > /* primitives generated query */ > num_dw += ctx->streamout.enable_atom.num_dw; > diff --git a/src/gallium/drivers/radeon/r600_query.h > b/src/gallium/drivers/radeon/r600_query.h > index 4e357f5..e934a18 100644 > --- a/src/gallium/drivers/radeon/r600_query.h > +++ b/src/gallium/drivers/radeon/r600_query.h > @@ -115,7 +115,8 @@ struct r600_query_hw { > * this can be one or two numbers, or it could even be a size of a > structure. */ > unsigned result_size; > /* The number of dwords for begin_query or end_query. */ > - unsigned num_cs_dw; > + unsigned num_cs_dw_begin; > + unsigned num_cs_dw_end; > /* Linked list of queries */ > struct list_head list; > /* For transform feedback: which stream the query is for */ > -- > 2.5.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev