Lines Matching refs:ctx
40 static struct r600_resource *r600_new_query_buffer(struct r600_context *ctx, unsigned type)
49 pipe_buffer_create(&ctx->screen->screen, PIPE_BIND_CUSTOM,
55 results = ctx->ws->buffer_map(buf->cs_buf, ctx->cs, PIPE_TRANSFER_WRITE);
59 num_results = buf_size / (16 * ctx->max_db);
61 for (i = 0; i < ctx->max_db; i++) {
62 if (!(ctx->backend_mask & (1<<i))) {
67 results += 4 * ctx->max_db;
69 ctx->ws->buffer_unmap(buf->cs_buf);
78 results = ctx->ws->buffer_map(buf->cs_buf, ctx->cs, PIPE_TRANSFER_WRITE);
80 ctx->ws->buffer_unmap(buf->cs_buf);
88 static void r600_emit_query_begin(struct r600_context *ctx, struct r600_query *query)
90 struct radeon_winsys_cs *cs = ctx->cs;
93 r600_need_cs_space(ctx, query->num_cs_dw * 2, TRUE);
99 query->buffer.buf = r600_new_query_buffer(ctx, query->type);
105 va = r600_resource_va(&ctx->screen->screen, (void*)query->buffer.buf);
137 cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, query->buffer.buf, RADEON_USAGE_WRITE);
140 ctx->num_cs_dw_timer_queries_suspend += query->num_cs_dw;
142 ctx->num_cs_dw_nontimer_queries_suspend += query->num_cs_dw;
146 static void r600_emit_query_end(struct r600_context *ctx, struct r600_query *query)
148 struct radeon_winsys_cs *cs = ctx->cs;
153 r600_need_cs_space(ctx, query->num_cs_dw, FALSE);
156 va = r600_resource_va(&ctx->screen->screen, (void*)query->buffer.buf);
191 cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, query->buffer.buf, RADEON_USAGE_WRITE);
197 ctx->num_cs_dw_timer_queries_suspend -= query->num_cs_dw;
199 ctx->num_cs_dw_nontimer_queries_suspend -= query->num_cs_dw;
204 static void r600_emit_query_predication(struct r600_context *ctx, struct r600_query *query,
207 struct radeon_winsys_cs *cs = ctx->cs;
210 r600_need_cs_space(ctx, 3, FALSE);
226 r600_need_cs_space(ctx, 5 * count, TRUE);
234 uint64_t va = r600_resource_va(&ctx->screen->screen, &qbuf->buf->b.b);
241 cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, qbuf->buf, RADEON_USAGE_READ);
251 static struct pipe_query *r600_create_query(struct pipe_context *ctx, unsigned query_type)
253 struct r600_context *rctx = (struct r600_context *)ctx;
299 static void r600_destroy_query(struct pipe_context *ctx, struct pipe_query *query)
335 static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
337 struct r600_context *rctx = (struct r600_context *)ctx;
375 static void r600_end_query(struct pipe_context *ctx, struct pipe_query *query)
377 struct r600_context *rctx = (struct r600_context *)ctx;
407 static boolean r600_get_query_buffer_result(struct r600_context *ctx,
416 map = ctx->ws->buffer_map(qbuf->buf->cs_buf, ctx->cs,
494 ctx->ws->buffer_unmap(qbuf->buf->cs_buf);
498 static boolean r600_get_query_result(struct pipe_context *ctx,
502 struct r600_context *rctx = (struct r600_context *)ctx;
522 ctx,
526 struct r600_context *rctx = (struct r600_context *)ctx;
564 void r600_suspend_nontimer_queries(struct r600_context *ctx)
568 LIST_FOR_EACH_ENTRY(query, &ctx->active_nontimer_queries, list) {
569 r600_emit_query_end(ctx, query);
571 assert(ctx->num_cs_dw_nontimer_queries_suspend == 0);
574 void r600_resume_nontimer_queries(struct r600_context *ctx)
578 assert(ctx->num_cs_dw_nontimer_queries_suspend == 0);
580 LIST_FOR_EACH_ENTRY(query, &ctx->active_nontimer_queries, list) {
581 r600_emit_query_begin(ctx, query);
585 void r600_suspend_timer_queries(struct r600_context *ctx)
589 LIST_FOR_EACH_ENTRY(query, &ctx->active_timer_queries, list) {
590 r600_emit_query_end(ctx, query);
593 assert(ctx->num_cs_dw_timer_queries_suspend == 0);
596 void r600_resume_timer_queries(struct r600_context *ctx)
600 assert(ctx->num_cs_dw_timer_queries_suspend == 0);
602 LIST_FOR_EACH_ENTRY(query, &ctx->active_timer_queries, list) {
603 r600_emit_query_begin(ctx, query);