Home | History | Annotate | Download | only in r600

Lines Matching refs:query

88 static void r600_emit_query_begin(struct r600_context *ctx, struct r600_query *query)
93 r600_need_cs_space(ctx, query->num_cs_dw * 2, TRUE);
95 /* Get a new query buffer if needed. */
96 if (query->buffer.results_end + query->result_size > query->buffer.buf->b.b.width0) {
98 *qbuf = query->buffer;
99 query->buffer.buf = r600_new_query_buffer(ctx, query->type);
100 query->buffer.results_end = 0;
101 query->buffer.previous = qbuf;
104 /* emit begin query */
105 va = r600_resource_va(&ctx->screen->screen, (void*)query->buffer.buf);
106 va += query->buffer.results_end;
108 switch (query->type) {
137 cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, query->buffer.buf, RADEON_USAGE_WRITE);
139 if (r600_is_timer_query(query->type)) {
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)
152 if (!r600_query_needs_begin(query->type)) {
153 r600_need_cs_space(ctx, query->num_cs_dw, FALSE);
156 va = r600_resource_va(&ctx->screen->screen, (void*)query->buffer.buf);
157 /* emit end query */
158 switch (query->type) {
161 va += query->buffer.results_end + 8;
173 cs->buf[cs->cdw++] = query->buffer.results_end + query->result_size/2;
177 va += query->buffer.results_end + query->result_size/2;
191 cs->buf[cs->cdw++] = r600_context_bo_reloc(ctx, query->buffer.buf, RADEON_USAGE_WRITE);
193 query->buffer.results_end += query->result_size;
195 if (r600_query_needs_begin(query->type)) {
196 if (r600_is_timer_query(query->type)) {
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,
222 for (qbuf = &query->buffer; qbuf; qbuf = qbuf->previous) {
223 count += qbuf->results_end / query->result_size;
232 for (qbuf = &query->buffer; qbuf; qbuf = qbuf->previous) {
242 results_base += query->result_size;
255 struct r600_query *query;
257 query = CALLOC_STRUCT(r600_query);
258 if (query == NULL)
261 query->type = query_type;
266 query->result_size = 16 * rctx->max_db;
267 query->num_cs_dw = 6;
270 query->result_size = 16;
271 query->num_cs_dw = 8;
274 query->result_size = 8;
275 query->num_cs_dw = 8;
282 query->result_size = 32;
283 query->num_cs_dw = 6;
287 FREE(query);
291 query->buffer.buf = r600_new_query_buffer(rctx, query_type);
292 if (!query->buffer.buf) {
293 FREE(query);
296 return (struct pipe_query*)query;
299 static void r600_destroy_query(struct pipe_context *ctx, struct pipe_query *query)
301 struct r600_query *rquery = (struct r600_query*)query;
304 /* Release all query buffers. */
313 FREE(query);
335 static void r600_begin_query(struct pipe_context *ctx, struct pipe_query *query)
338 struct r600_query *rquery = (struct r600_query *)query;
346 /* Discard the old query buffers. */
375 static void r600_end_query(struct pipe_context *ctx, struct pipe_query *query)
378 struct r600_query *rquery = (struct r600_query *)query;
408 struct r600_query *query,
423 switch (query->type) {
442 results_base += query->result_size;
462 results_base += query->result_size;
470 results_base += query->result_size;
479 results_base += query->result_size;
487 results_base += query->result_size;
499 struct pipe_query *query,
503 struct r600_query *rquery = (struct r600_query *)query;
523 struct pipe_query *query,
527 struct r600_query *rquery = (struct r600_query *)query;
530 rctx->current_render_cond = query;
533 if (query == NULL) {
566 struct r600_query *query;
568 LIST_FOR_EACH_ENTRY(query, &ctx->active_nontimer_queries, list) {
569 r600_emit_query_end(ctx, query);
576 struct r600_query *query;
580 LIST_FOR_EACH_ENTRY(query, &ctx->active_nontimer_queries, list) {
581 r600_emit_query_begin(ctx, query);
587 struct r600_query *query;
589 LIST_FOR_EACH_ENTRY(query, &ctx->active_timer_queries, list) {
590 r600_emit_query_end(ctx, query);
598 struct r600_query *query;
602 LIST_FOR_EACH_ENTRY(query, &ctx->active_timer_queries, list) {
603 r600_emit_query_begin(ctx, query);