Lines Matching refs:query
263 struct si_query_pc *query = (struct si_query_pc *)squery;
265 while (query->groups) {
266 struct si_query_group *group = query->groups;
267 query->groups = group->next;
271 FREE(query->counters);
273 si_query_buffer_destroy(sctx->screen, &query->buffer);
274 FREE(query);
299 struct si_query_pc *query = (struct si_query_pc *)squery;
303 if (!si_query_buffer_alloc(sctx, &query->buffer, NULL, query->result_size))
307 if (query->shaders)
308 si_pc_emit_shaders(&sctx->gfx_cs, query->shaders);
312 for (struct si_query_group *group = query->groups; group; group = group->next) {
327 uint64_t va = query->buffer.buf->gpu_address + query->buffer.results_end;
328 si_pc_emit_start(sctx, query->buffer.buf, va);
333 struct si_query_pc *query = (struct si_query_pc *)squery;
335 if (!query->buffer.buf)
338 uint64_t va = query->buffer.buf->gpu_address + query->buffer.results_end;
339 query->buffer.results_end += query->result_size;
341 si_pc_emit_stop(sctx, query->buffer.buf, va);
343 for (struct si_query_group *group = query->groups; group; group = group->next) {
369 struct si_query_pc *query = (struct si_query_pc *)squery;
371 si_query_buffer_reset(ctx, &query->buffer);
373 list_addtail(&query->b.active_list, &ctx->active_queries);
374 ctx->num_cs_dw_queries_suspend += query->b.num_cs_dw_suspend;
383 struct si_query_pc *query = (struct si_query_pc *)squery;
390 return query->buffer.buf != NULL;
393 static void si_pc_query_add_result(struct si_query_pc *query, void *buffer,
399 for (i = 0; i < query->num_counters; ++i) {
400 struct si_query_counter *counter = &query->counters[i];
412 struct si_query_pc *query = (struct si_query_pc *)squery;
414 memset(result, 0, sizeof(result->batch[0]) * query->num_counters);
416 for (struct si_query_buffer *qbuf = &query->buffer; qbuf; qbuf = qbuf->previous) {
430 si_pc_query_add_result(query, map + results_base, result);
431 results_base += query->result_size;
448 static struct si_query_group *get_group_state(struct si_screen *screen, struct si_query_pc *query,
452 struct si_query_group *group = query->groups;
480 query_shaders = query->shaders & ~AC_PC_SHADERS_WINDOWING;
486 query->shaders = shaders;
489 if (block->b->b->flags & AC_PC_BLOCK_SHADER_WINDOWED && !query->shaders) {
490 // A non-zero value in query->shaders ensures that the shader
492 query->shaders = AC_PC_SHADERS_WINDOWING;
508 group->next = query->groups;
509 query->groups = group;
521 struct si_query_pc *query;
528 query = CALLOC_STRUCT(si_query_pc);
529 if (!query)
532 query->b.ops = &batch_query_ops;
534 query->num_counters = num_queries;
551 group = get_group_state(screen, query, block, sub_gid);
564 query->b.num_cs_dw_suspend = pc->num_stop_cs_dwords;
565 query->b.num_cs_dw_suspend += pc->num_instance_cs_dwords;
568 for (group = query->groups; group; group = group->next) {
579 query->result_size += sizeof(uint64_t) * instances * group->num_counters;
583 query->b.num_cs_dw_suspend += instances * read_dw;
584 query->b.num_cs_dw_suspend += instances * pc->num_instance_cs_dwords;
587 if (query->shaders) {
588 if (query->shaders == AC_PC_SHADERS_WINDOWING)
589 query->shaders = 0xffffffff;
592 /* Map user-supplied query array to result indices */
593 query->counters = CALLOC(num_queries, sizeof(*query->counters));
595 struct si_query_counter *counter = &query->counters[i];
604 group = get_group_state(screen, query, block, sub_gid);
622 return (struct pipe_query *)query;
625 si_pc_query_destroy((struct si_context *)ctx, &query->b);