• Home
  • Raw
  • Download

Lines Matching refs:query

63    struct si_query_sw *query = (struct si_query_sw *)squery;  in si_query_sw_destroy()  local
65 sctx->b.screen->fence_reference(sctx->b.screen, &query->fence, NULL); in si_query_sw_destroy()
66 FREE(query); in si_query_sw_destroy()
121 struct si_query_sw *query = (struct si_query_sw *)squery; in si_query_sw_begin() local
124 switch (query->b.type) { in si_query_sw_begin()
129 query->begin_result = sctx->num_draw_calls; in si_query_sw_begin()
132 query->begin_result = sctx->num_decompress_calls; in si_query_sw_begin()
135 query->begin_result = sctx->num_prim_restart_calls; in si_query_sw_begin()
138 query->begin_result = sctx->num_compute_calls; in si_query_sw_begin()
141 query->begin_result = sctx->num_cp_dma_calls; in si_query_sw_begin()
144 query->begin_result = sctx->num_vs_flushes; in si_query_sw_begin()
147 query->begin_result = sctx->num_ps_flushes; in si_query_sw_begin()
150 query->begin_result = sctx->num_cs_flushes; in si_query_sw_begin()
153 query->begin_result = sctx->num_cb_cache_flushes; in si_query_sw_begin()
156 query->begin_result = sctx->num_db_cache_flushes; in si_query_sw_begin()
159 query->begin_result = sctx->num_L2_invalidates; in si_query_sw_begin()
162 query->begin_result = sctx->num_L2_writebacks; in si_query_sw_begin()
165 query->begin_result = sctx->num_resident_handles; in si_query_sw_begin()
168 query->begin_result = sctx->tc ? sctx->tc->num_offloaded_slots : 0; in si_query_sw_begin()
171 query->begin_result = sctx->tc ? sctx->tc->num_direct_slots : 0; in si_query_sw_begin()
174 query->begin_result = sctx->tc ? sctx->tc->num_syncs : 0; in si_query_sw_begin()
190 query->begin_result = 0; in si_query_sw_begin()
198 enum radeon_value_id ws_id = winsys_id_from_type(query->b.type); in si_query_sw_begin()
199 query->begin_result = sctx->ws->query_value(sctx->ws, ws_id); in si_query_sw_begin()
203 ws_id = winsys_id_from_type(query->b.type); in si_query_sw_begin()
204 query->begin_result = sctx->ws->query_value(sctx->ws, ws_id); in si_query_sw_begin()
205 query->begin_time = sctx->ws->query_value(sctx->ws, RADEON_NUM_GFX_IBS); in si_query_sw_begin()
208 ws_id = winsys_id_from_type(query->b.type); in si_query_sw_begin()
209 query->begin_result = sctx->ws->query_value(sctx->ws, ws_id); in si_query_sw_begin()
210 query->begin_time = os_time_get_nano(); in si_query_sw_begin()
213 query->begin_result = sctx->tc ? util_queue_get_thread_time_nano(&sctx->tc->queue, 0) : 0; in si_query_sw_begin()
214 query->begin_time = os_time_get_nano(); in si_query_sw_begin()
237 query->begin_result = si_begin_counter(sctx->screen, query->b.type); in si_query_sw_begin()
240 query->begin_result = p_atomic_read(&sctx->screen->num_compilations); in si_query_sw_begin()
243 query->begin_result = p_atomic_read(&sctx->screen->num_shaders_created); in si_query_sw_begin()
246 query->begin_result = sctx->screen->live_shader_cache.hits; in si_query_sw_begin()
249 query->begin_result = sctx->screen->live_shader_cache.misses; in si_query_sw_begin()
252 query->begin_result = sctx->screen->num_memory_shader_cache_hits; in si_query_sw_begin()
255 query->begin_result = sctx->screen->num_memory_shader_cache_misses; in si_query_sw_begin()
258 query->begin_result = sctx->screen->num_disk_shader_cache_hits; in si_query_sw_begin()
261 query->begin_result = sctx->screen->num_disk_shader_cache_misses; in si_query_sw_begin()
278 struct si_query_sw *query = (struct si_query_sw *)squery; in si_query_sw_end() local
281 switch (query->b.type) { in si_query_sw_end()
285 sctx->b.flush(&sctx->b, &query->fence, PIPE_FLUSH_DEFERRED); in si_query_sw_end()
288 query->end_result = sctx->num_draw_calls; in si_query_sw_end()
291 query->end_result = sctx->num_decompress_calls; in si_query_sw_end()
294 query->end_result = sctx->num_prim_restart_calls; in si_query_sw_end()
297 query->end_result = sctx->num_compute_calls; in si_query_sw_end()
300 query->end_result = sctx->num_cp_dma_calls; in si_query_sw_end()
303 query->end_result = sctx->num_vs_flushes; in si_query_sw_end()
306 query->end_result = sctx->num_ps_flushes; in si_query_sw_end()
309 query->end_result = sctx->num_cs_flushes; in si_query_sw_end()
312 query->end_result = sctx->num_cb_cache_flushes; in si_query_sw_end()
315 query->end_result = sctx->num_db_cache_flushes; in si_query_sw_end()
318 query->end_result = sctx->num_L2_invalidates; in si_query_sw_end()
321 query->end_result = sctx->num_L2_writebacks; in si_query_sw_end()
324 query->end_result = sctx->num_resident_handles; in si_query_sw_end()
327 query->end_result = sctx->tc ? sctx->tc->num_offloaded_slots : 0; in si_query_sw_end()
330 query->end_result = sctx->tc ? sctx->tc->num_direct_slots : 0; in si_query_sw_end()
333 query->end_result = sctx->tc ? sctx->tc->num_syncs : 0; in si_query_sw_end()
354 enum radeon_value_id ws_id = winsys_id_from_type(query->b.type); in si_query_sw_end()
355 query->end_result = sctx->ws->query_value(sctx->ws, ws_id); in si_query_sw_end()
359 ws_id = winsys_id_from_type(query->b.type); in si_query_sw_end()
360 query->end_result = sctx->ws->query_value(sctx->ws, ws_id); in si_query_sw_end()
361 query->end_time = sctx->ws->query_value(sctx->ws, RADEON_NUM_GFX_IBS); in si_query_sw_end()
364 ws_id = winsys_id_from_type(query->b.type); in si_query_sw_end()
365 query->end_result = sctx->ws->query_value(sctx->ws, ws_id); in si_query_sw_end()
366 query->end_time = os_time_get_nano(); in si_query_sw_end()
369 query->end_result = sctx->tc ? util_queue_get_thread_time_nano(&sctx->tc->queue, 0) : 0; in si_query_sw_end()
370 query->end_time = os_time_get_nano(); in si_query_sw_end()
393 query->end_result = si_end_counter(sctx->screen, query->b.type, query->begin_result); in si_query_sw_end()
394 query->begin_result = 0; in si_query_sw_end()
397 query->end_result = p_atomic_read(&sctx->screen->num_compilations); in si_query_sw_end()
400 query->end_result = p_atomic_read(&sctx->screen->num_shaders_created); in si_query_sw_end()
403 query->end_result = sctx->last_tex_ps_draw_ratio; in si_query_sw_end()
406 query->end_result = sctx->screen->live_shader_cache.hits; in si_query_sw_end()
409 query->end_result = sctx->screen->live_shader_cache.misses; in si_query_sw_end()
412 query->end_result = sctx->screen->num_memory_shader_cache_hits; in si_query_sw_end()
415 query->end_result = sctx->screen->num_memory_shader_cache_misses; in si_query_sw_end()
418 query->end_result = sctx->screen->num_disk_shader_cache_hits; in si_query_sw_end()
421 query->end_result = sctx->screen->num_disk_shader_cache_misses; in si_query_sw_end()
439 struct si_query_sw *query = (struct si_query_sw *)squery; in si_query_sw_get_result() local
441 switch (query->b.type) { in si_query_sw_get_result()
451 result->b = screen->fence_finish(screen, ctx, query->fence, wait ? PIPE_TIMEOUT_INFINITE : 0); in si_query_sw_get_result()
457 (query->end_result - query->begin_result) / (query->end_time - query->begin_time); in si_query_sw_get_result()
462 (query->end_result - query->begin_result) * 100 / (query->end_time - query->begin_time); in si_query_sw_get_result()
481 result->u64 = query->end_result - query->begin_result; in si_query_sw_get_result()
483 switch (query->b.type) { in si_query_sw_get_result()
505 struct si_query_sw *query; in si_query_sw_create() local
507 query = CALLOC_STRUCT(si_query_sw); in si_query_sw_create()
508 if (!query) in si_query_sw_create()
511 query->b.type = query_type; in si_query_sw_create()
512 query->b.ops = &sw_query_ops; in si_query_sw_create()
514 return (struct pipe_query *)query; in si_query_sw_create()
596 struct si_query_hw *query = (struct si_query_hw *)squery; in si_query_hw_destroy() local
598 si_query_buffer_destroy(sctx->screen, &query->buffer); in si_query_hw_destroy()
599 si_resource_reference(&query->workaround_buf, NULL); in si_query_hw_destroy()
605 struct si_query_hw *query = container_of(qbuf, struct si_query_hw, buffer); in si_query_hw_prepare_buffer() local
616 if (query->b.type == PIPE_QUERY_OCCLUSION_COUNTER || in si_query_hw_prepare_buffer()
617 query->b.type == PIPE_QUERY_OCCLUSION_PREDICATE || in si_query_hw_prepare_buffer()
618 query->b.type == PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE) { in si_query_hw_prepare_buffer()
625 num_results = qbuf->buf->b.b.width0 / query->result_size; in si_query_hw_prepare_buffer()
680 static void si_query_hw_do_emit_start(struct si_context *sctx, struct si_query_hw *query,
682 static void si_query_hw_do_emit_stop(struct si_context *sctx, struct si_query_hw *query,
699 struct si_query_hw *query = CALLOC_STRUCT(si_query_hw); in si_query_hw_create() local
700 if (!query) in si_query_hw_create()
703 query->b.type = query_type; in si_query_hw_create()
704 query->b.ops = &query_hw_ops; in si_query_hw_create()
705 query->ops = &query_hw_default_hw_ops; in si_query_hw_create()
711 query->result_size = 16 * sscreen->info.max_render_backends; in si_query_hw_create()
712 query->result_size += 16; /* for the fence + alignment */ in si_query_hw_create()
713 query->b.num_cs_dw_suspend = 6 + si_cp_write_fence_dwords(sscreen); in si_query_hw_create()
716 query->result_size = 24; in si_query_hw_create()
717 query->b.num_cs_dw_suspend = 8 + si_cp_write_fence_dwords(sscreen); in si_query_hw_create()
720 query->result_size = 16; in si_query_hw_create()
721 query->b.num_cs_dw_suspend = 8 + si_cp_write_fence_dwords(sscreen); in si_query_hw_create()
722 query->flags = SI_QUERY_HW_FLAG_NO_START; in si_query_hw_create()
729 query->result_size = 32; in si_query_hw_create()
730 query->b.num_cs_dw_suspend = 6; in si_query_hw_create()
731 query->stream = index; in si_query_hw_create()
735 query->result_size = 32 * SI_MAX_STREAMS; in si_query_hw_create()
736 query->b.num_cs_dw_suspend = 6 * SI_MAX_STREAMS; in si_query_hw_create()
739 query->result_size = si_query_pipestats_num_results(sscreen) * 16; in si_query_hw_create()
740 query->result_size += 8; /* for the fence + alignment */ in si_query_hw_create()
741 query->b.num_cs_dw_suspend = 6 + si_cp_write_fence_dwords(sscreen); in si_query_hw_create()
742 query->index = index; in si_query_hw_create()
745 query->flags |= SI_QUERY_EMULATE_GS_COUNTERS; in si_query_hw_create()
749 FREE(query); in si_query_hw_create()
753 return (struct pipe_query *)query; in si_query_hw_create()
806 static void si_query_hw_do_emit_start(struct si_context *sctx, struct si_query_hw *query, in si_query_hw_do_emit_start() argument
811 switch (query->b.type) { in si_query_hw_do_emit_start()
841 emit_sample_streamout(cs, va, query->stream); in si_query_hw_do_emit_start()
849 EOP_DATA_SEL_TIMESTAMP, NULL, va, 0, query->b.type); in si_query_hw_do_emit_start()
852 if (sctx->screen->use_ngg && query->flags & SI_QUERY_EMULATE_GS_COUNTERS) { in si_query_hw_do_emit_start()
865 sbuf.buffer_offset = query->buffer.results_end; in si_query_hw_do_emit_start()
873 va += si_query_pipestat_end_dw_offset(sctx->screen, query->index) * 4; in si_query_hw_do_emit_start()
895 radeon_add_to_buffer_list(sctx, &sctx->gfx_cs, query->buffer.buf, in si_query_hw_do_emit_start()
899 static void si_query_hw_emit_start(struct si_context *sctx, struct si_query_hw *query) in si_query_hw_emit_start() argument
903 if (!query->buffer.buf && query->flags & SI_QUERY_EMULATE_GS_COUNTERS) in si_query_hw_emit_start()
904 si_resource_reference(&query->buffer.buf, sctx->pipeline_stats_query_buf); in si_query_hw_emit_start()
907 if ((!(query->flags & SI_QUERY_EMULATE_GS_COUNTERS) || !sctx->pipeline_stats_query_buf) && in si_query_hw_emit_start()
908 !si_query_buffer_alloc(sctx, &query->buffer, query->ops->prepare_buffer, query->result_size)) in si_query_hw_emit_start()
911 if (query->flags & SI_QUERY_EMULATE_GS_COUNTERS) in si_query_hw_emit_start()
912 si_resource_reference(&sctx->pipeline_stats_query_buf, query->buffer.buf); in si_query_hw_emit_start()
914 si_update_occlusion_query_state(sctx, query->b.type, 1); in si_query_hw_emit_start()
915 si_update_prims_generated_query_state(sctx, query->b.type, 1); in si_query_hw_emit_start()
917 if (query->b.type == PIPE_QUERY_PIPELINE_STATISTICS) in si_query_hw_emit_start()
922 va = query->buffer.buf->gpu_address + query->buffer.results_end; in si_query_hw_emit_start()
923 query->ops->emit_start(sctx, query, query->buffer.buf, va); in si_query_hw_emit_start()
926 static void si_query_hw_do_emit_stop(struct si_context *sctx, struct si_query_hw *query, in si_query_hw_do_emit_stop() argument
932 switch (query->b.type) { in si_query_hw_do_emit_stop()
955 emit_sample_streamout(cs, va, query->stream); in si_query_hw_do_emit_stop()
967 EOP_DATA_SEL_TIMESTAMP, NULL, va, 0, query->b.type); in si_query_hw_do_emit_stop()
971 unsigned sample_size = (query->result_size - 8) / 2; in si_query_hw_do_emit_stop()
976 if (sctx->screen->use_ngg && query->flags & SI_QUERY_EMULATE_GS_COUNTERS) { in si_query_hw_do_emit_stop()
998 radeon_add_to_buffer_list(sctx, &sctx->gfx_cs, query->buffer.buf, in si_query_hw_do_emit_stop()
1003 EOP_DATA_SEL_VALUE_32BIT, query->buffer.buf, fence_va, 0x80000000, in si_query_hw_do_emit_stop()
1004 query->b.type); in si_query_hw_do_emit_stop()
1008 static void si_query_hw_emit_stop(struct si_context *sctx, struct si_query_hw *query) in si_query_hw_emit_stop() argument
1013 if (query->flags & SI_QUERY_HW_FLAG_NO_START) { in si_query_hw_emit_stop()
1015 if (!si_query_buffer_alloc(sctx, &query->buffer, query->ops->prepare_buffer, in si_query_hw_emit_stop()
1016 query->result_size)) in si_query_hw_emit_stop()
1020 if (!query->buffer.buf) in si_query_hw_emit_stop()
1024 va = query->buffer.buf->gpu_address + query->buffer.results_end; in si_query_hw_emit_stop()
1026 query->ops->emit_stop(sctx, query, query->buffer.buf, va); in si_query_hw_emit_stop()
1028 query->buffer.results_end += query->result_size; in si_query_hw_emit_stop()
1030 si_update_occlusion_query_state(sctx, query->b.type, -1); in si_query_hw_emit_stop()
1031 si_update_prims_generated_query_state(sctx, query->b.type, -1); in si_query_hw_emit_stop()
1033 if (query->b.type == PIPE_QUERY_PIPELINE_STATISTICS) in si_query_hw_emit_stop()
1064 struct si_query_hw *query = (struct si_query_hw *)ctx->render_cond; in si_emit_query_predication() local
1065 if (!query) in si_emit_query_predication()
1072 if (ctx->screen->use_ngg_streamout && (query->b.type == PIPE_QUERY_SO_OVERFLOW_PREDICATE || in si_emit_query_predication()
1073 query->b.type == PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE)) { in si_emit_query_predication()
1074 struct gfx10_sh_query *gfx10_query = (struct gfx10_sh_query *)query; in si_emit_query_predication()
1124 if (query->workaround_buf) { in si_emit_query_predication()
1127 switch (query->b.type) { in si_emit_query_predication()
1157 if (query->workaround_buf) { in si_emit_query_predication()
1158 uint64_t va = query->workaround_buf->gpu_address + query->workaround_offset; in si_emit_query_predication()
1159 emit_set_predicate(ctx, query->workaround_buf, va, op); in si_emit_query_predication()
1166 for (qbuf = &query->buffer; qbuf; qbuf = qbuf->previous) { in si_emit_query_predication()
1173 if (query->b.type == PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE) { in si_emit_query_predication()
1185 results_base += query->result_size; in si_emit_query_predication()
1210 static void si_destroy_query(struct pipe_context *ctx, struct pipe_query *query) in si_destroy_query() argument
1213 struct si_query *squery = (struct si_query *)query; in si_destroy_query()
1218 static bool si_begin_query(struct pipe_context *ctx, struct pipe_query *query) in si_begin_query() argument
1221 struct si_query *squery = (struct si_query *)query; in si_begin_query()
1228 struct si_query_hw *query = (struct si_query_hw *)squery; in si_query_hw_begin() local
1230 if (query->flags & SI_QUERY_HW_FLAG_NO_START) { in si_query_hw_begin()
1235 if (!(query->flags & SI_QUERY_HW_FLAG_BEGIN_RESUMES)) in si_query_hw_begin()
1236 si_query_buffer_reset(sctx, &query->buffer); in si_query_hw_begin()
1238 si_resource_reference(&query->workaround_buf, NULL); in si_query_hw_begin()
1240 si_query_hw_emit_start(sctx, query); in si_query_hw_begin()
1241 if (!query->buffer.buf) in si_query_hw_begin()
1244 list_addtail(&query->b.active_list, &sctx->active_queries); in si_query_hw_begin()
1245 sctx->num_cs_dw_queries_suspend += query->b.num_cs_dw_suspend; in si_query_hw_begin()
1249 static bool si_end_query(struct pipe_context *ctx, struct pipe_query *query) in si_end_query() argument
1252 struct si_query *squery = (struct si_query *)query; in si_end_query()
1259 struct si_query_hw *query = (struct si_query_hw *)squery; in si_query_hw_end() local
1261 if (query->flags & SI_QUERY_HW_FLAG_NO_START) in si_query_hw_end()
1262 si_query_buffer_reset(sctx, &query->buffer); in si_query_hw_end()
1264 si_query_hw_emit_stop(sctx, query); in si_query_hw_end()
1266 if (!(query->flags & SI_QUERY_HW_FLAG_NO_START)) { in si_query_hw_end()
1267 list_delinit(&query->b.active_list); in si_query_hw_end()
1268 sctx->num_cs_dw_queries_suspend -= query->b.num_cs_dw_suspend; in si_query_hw_end()
1271 if (!query->buffer.buf) in si_query_hw_end()
1360 static void si_query_hw_add_result(struct si_screen *sscreen, struct si_query_hw *query, in si_query_hw_add_result() argument
1365 switch (query->b.type) { in si_query_hw_add_result()
1443 void si_query_hw_suspend(struct si_context *sctx, struct si_query *query) in si_query_hw_suspend() argument
1445 si_query_hw_emit_stop(sctx, (struct si_query_hw *)query); in si_query_hw_suspend()
1448 void si_query_hw_resume(struct si_context *sctx, struct si_query *query) in si_query_hw_resume() argument
1450 si_query_hw_emit_start(sctx, (struct si_query_hw *)query); in si_query_hw_resume()
1464 static bool si_get_query_result(struct pipe_context *ctx, struct pipe_query *query, bool wait, in si_get_query_result() argument
1468 struct si_query *squery = (struct si_query *)query; in si_get_query_result()
1473 static void si_get_query_result_resource(struct pipe_context *ctx, struct pipe_query *query, in si_get_query_result_resource() argument
1478 struct si_query *squery = (struct si_query *)query; in si_get_query_result_resource()
1483 static void si_query_hw_clear_result(struct si_query_hw *query, union pipe_query_result *result) in si_query_hw_clear_result() argument
1485 util_query_clear_result(result, query->b.type); in si_query_hw_clear_result()
1492 struct si_query_hw *query = (struct si_query_hw *)squery; in si_query_hw_get_result() local
1495 query->ops->clear_result(query, result); in si_query_hw_get_result()
1497 for (qbuf = &query->buffer; qbuf; qbuf = qbuf->previous) { in si_query_hw_get_result()
1511 query->ops->add_result(sscreen, query, map + results_base, result); in si_query_hw_get_result()
1512 results_base += query->result_size; in si_query_hw_get_result()
1530 struct si_query_hw *query = (struct si_query_hw *)squery; in si_query_hw_get_result_resource() local
1556 if (query->buffer.previous) { in si_query_hw_get_result_resource()
1564 si_get_hw_query_params(sctx, query, index >= 0 ? index : 0, &params); in si_query_hw_get_result_resource()
1567 consts.result_stride = query->result_size; in si_query_hw_get_result_resource()
1590 if (query->b.type == PIPE_QUERY_OCCLUSION_PREDICATE || in si_query_hw_get_result_resource()
1591 query->b.type == PIPE_QUERY_OCCLUSION_PREDICATE_CONSERVATIVE) in si_query_hw_get_result_resource()
1593 else if (query->b.type == PIPE_QUERY_SO_OVERFLOW_PREDICATE || in si_query_hw_get_result_resource()
1594 query->b.type == PIPE_QUERY_SO_OVERFLOW_ANY_PREDICATE) in si_query_hw_get_result_resource()
1596 else if (query->b.type == PIPE_QUERY_TIMESTAMP || query->b.type == PIPE_QUERY_TIME_ELAPSED) in si_query_hw_get_result_resource()
1613 for (qbuf = &query->buffer; qbuf; qbuf = qbuf_prev) { in si_query_hw_get_result_resource()
1614 if (query->b.type != PIPE_QUERY_TIMESTAMP) { in si_query_hw_get_result_resource()
1616 consts.result_count = qbuf->results_end / query->result_size; in si_query_hw_get_result_resource()
1618 if (qbuf != &query->buffer) in si_query_hw_get_result_resource()
1627 params.start_offset += qbuf->results_end - query->result_size; in si_query_hw_get_result_resource()
1645 if ((flags & PIPE_QUERY_WAIT) && qbuf == &query->buffer) { in si_query_hw_get_result_resource()
1652 va = qbuf->buf->gpu_address + qbuf->results_end - query->result_size; in si_query_hw_get_result_resource()
1666 static void si_render_condition(struct pipe_context *ctx, struct pipe_query *query, bool condition, in si_render_condition() argument
1670 struct si_query_hw *squery = (struct si_query_hw *)query; in si_render_condition()
1673 if (query) { in si_render_condition()
1701 ctx->get_query_result_resource(ctx, query, true, PIPE_QUERY_TYPE_U64, 0, in si_render_condition()
1712 sctx->render_cond = query; in si_render_condition()
1715 sctx->render_cond_enabled = query; in si_render_condition()
1717 si_set_atom_dirty(sctx, atom, query != NULL); in si_render_condition()
1722 struct si_query *query; in si_suspend_queries() local
1724 LIST_FOR_EACH_ENTRY (query, &sctx->active_queries, active_list) in si_suspend_queries()
1725 query->ops->suspend(sctx, query); in si_suspend_queries()
1730 struct si_query *query; in si_resume_queries() local
1735 LIST_FOR_EACH_ENTRY (query, &sctx->active_queries, active_list) in si_resume_queries()
1736 query->ops->resume(sctx, query); in si_resume_queries()