• Home
  • Raw
  • Download

Lines Matching refs:sctx

80 static void emit_shader_query(struct si_context *sctx)  in emit_shader_query()  argument
82 assert(!list_is_empty(&sctx->shader_query_buffers)); in emit_shader_query()
85 list_last_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list); in emit_shader_query()
89 static void gfx10_release_query_buffers(struct si_context *sctx, in gfx10_release_query_buffers() argument
104 if (qbuf->list.next == &sctx->shader_query_buffers) in gfx10_release_query_buffers()
106 if (qbuf->list.prev == &sctx->shader_query_buffers) in gfx10_release_query_buffers()
115 static bool gfx10_alloc_query_buffer(struct si_context *sctx) in gfx10_alloc_query_buffer() argument
117 if (si_is_atom_dirty(sctx, &sctx->atoms.s.shader_query)) in gfx10_alloc_query_buffer()
122 if (!list_is_empty(&sctx->shader_query_buffers)) { in gfx10_alloc_query_buffer()
123 qbuf = list_last_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list); in gfx10_alloc_query_buffer()
127 qbuf = list_first_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list); in gfx10_alloc_query_buffer()
129 !si_rings_is_buffer_referenced(sctx, qbuf->buf->buf, RADEON_USAGE_READWRITE) && in gfx10_alloc_query_buffer()
130 sctx->ws->buffer_wait(qbuf->buf->buf, 0, RADEON_USAGE_READWRITE)) { in gfx10_alloc_query_buffer()
143 struct si_screen *screen = sctx->screen; in gfx10_alloc_query_buffer()
158 uint64_t *results = sctx->ws->buffer_map(qbuf->buf->buf, NULL, in gfx10_alloc_query_buffer()
169 list_addtail(&qbuf->list, &sctx->shader_query_buffers); in gfx10_alloc_query_buffer()
171 qbuf->refcount = sctx->num_active_shader_queries; in gfx10_alloc_query_buffer()
178 si_set_rw_shader_buffer(sctx, GFX10_GS_QUERY_BUF, &sbuf); in gfx10_alloc_query_buffer()
179 sctx->current_vs_state |= S_VS_STATE_STREAMOUT_QUERY_ENABLED(1); in gfx10_alloc_query_buffer()
181 si_mark_atom_dirty(sctx, &sctx->atoms.s.shader_query); in gfx10_alloc_query_buffer()
185 static void gfx10_sh_query_destroy(struct si_context *sctx, struct si_query *rquery) in gfx10_sh_query_destroy() argument
188 gfx10_release_query_buffers(sctx, query->first, query->last); in gfx10_sh_query_destroy()
192 static bool gfx10_sh_query_begin(struct si_context *sctx, struct si_query *rquery) in gfx10_sh_query_begin() argument
196 gfx10_release_query_buffers(sctx, query->first, query->last); in gfx10_sh_query_begin()
199 if (unlikely(!gfx10_alloc_query_buffer(sctx))) in gfx10_sh_query_begin()
202 query->first = list_last_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list); in gfx10_sh_query_begin()
205 sctx->num_active_shader_queries++; in gfx10_sh_query_begin()
211 static bool gfx10_sh_query_end(struct si_context *sctx, struct si_query *rquery) in gfx10_sh_query_end() argument
218 query->last = list_last_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list); in gfx10_sh_query_end()
226 si_cp_release_mem(sctx, sctx->gfx_cs, V_028A90_BOTTOM_OF_PIPE_TS, 0, EOP_DST_SEL_MEM, in gfx10_sh_query_end()
231 sctx->num_active_shader_queries--; in gfx10_sh_query_end()
233 if (sctx->num_active_shader_queries > 0) { in gfx10_sh_query_end()
234 gfx10_alloc_query_buffer(sctx); in gfx10_sh_query_end()
236 si_set_rw_shader_buffer(sctx, GFX10_GS_QUERY_BUF, NULL); in gfx10_sh_query_end()
237 sctx->current_vs_state &= C_VS_STATE_STREAMOUT_QUERY_ENABLED; in gfx10_sh_query_end()
242 si_set_atom_dirty(sctx, &sctx->atoms.s.shader_query, false); in gfx10_sh_query_end()
282 static bool gfx10_sh_query_get_result(struct si_context *sctx, struct si_query *rquery, bool wait, in gfx10_sh_query_get_result() argument
299 map = sctx->ws->buffer_map(qbuf->buf->buf, NULL, usage); in gfx10_sh_query_get_result()
301 map = si_buffer_map_sync_with_rings(sctx, qbuf->buf, usage); in gfx10_sh_query_get_result()
327 static void gfx10_sh_query_get_result_resource(struct si_context *sctx, struct si_query *rquery, in gfx10_sh_query_get_result_resource() argument
337 if (!sctx->sh_query_result_shader) { in gfx10_sh_query_get_result_resource()
338 sctx->sh_query_result_shader = gfx10_create_sh_query_result_cs(sctx); in gfx10_sh_query_get_result_resource()
339 if (!sctx->sh_query_result_shader) in gfx10_sh_query_get_result_resource()
344 u_suballocator_alloc(sctx->allocator_zeroed_memory, 16, 16, &tmp_buffer_offset, &tmp_buffer); in gfx10_sh_query_get_result_resource()
349 si_save_qbo_state(sctx, &saved_state); in gfx10_sh_query_get_result_resource()
407 sctx->b.bind_compute_state(&sctx->b, sctx->sh_query_result_shader); in gfx10_sh_query_get_result_resource()
440 sctx->b.set_constant_buffer(&sctx->b, PIPE_SHADER_COMPUTE, 0, &constant_buffer); in gfx10_sh_query_get_result_resource()
441 sctx->b.set_shader_buffers(&sctx->b, PIPE_SHADER_COMPUTE, 0, 3, ssbo, 0x6); in gfx10_sh_query_get_result_resource()
454 si_cp_wait_mem(sctx, sctx->gfx_cs, va, 0x00000001, 0x00000001, 0); in gfx10_sh_query_get_result_resource()
457 sctx->b.launch_grid(&sctx->b, &grid); in gfx10_sh_query_get_result_resource()
458 sctx->flags |= SI_CONTEXT_CS_PARTIAL_FLUSH; in gfx10_sh_query_get_result_resource()
465 si_restore_qbo_state(sctx, &saved_state); in gfx10_sh_query_get_result_resource()
491 void gfx10_init_query(struct si_context *sctx) in gfx10_init_query() argument
493 list_inithead(&sctx->shader_query_buffers); in gfx10_init_query()
494 sctx->atoms.s.shader_query.emit = emit_shader_query; in gfx10_init_query()
497 void gfx10_destroy_query(struct si_context *sctx) in gfx10_destroy_query() argument
499 while (!list_is_empty(&sctx->shader_query_buffers)) { in gfx10_destroy_query()
501 list_first_entry(&sctx->shader_query_buffers, struct gfx10_sh_query_buffer, list); in gfx10_destroy_query()