On Mon, Jul 6, 2015 at 11:29 AM, Vyacheslav Gonakhchyan <ytri...@gmail.com> wrote: > Hi, everyone. > > Trying to understand method radeonQueryGetResult (more broadly GPU-CPU > sync). > > static void radeonQueryGetResult(struct gl_context *ctx, struct > gl_query_object *q) > { > struct radeon_query_object *query = (struct radeon_query_object *)q; > uint32_t *result; > int i; > > radeon_print(RADEON_STATE, RADEON_VERBOSE, > "%s: query id %d, result %d\n", > __func__, query->Base.Id, (int) query->Base.Result); > > radeon_bo_map(query->bo, GL_FALSE); > result = query->bo->ptr; > > query->Base.Result = 0; > for (i = 0; i < query->curr_offset/sizeof(uint32_t); ++i) { > query->Base.Result += LE32_TO_CPU(result[i]); > radeon_print(RADEON_STATE, RADEON_TRACE, "result[%d] = %d\n", i, > LE32_TO_CPU(result[i])); > } > > radeon_bo_unmap(query->bo); > } > > I don't know which part is responsible for blocking behavior (waiting for > response from GPU). I suspect that radeon_bo_map does this magic. > Can someone point in the right direction?
The radeon_bo_map defined in src/gallium/winsys/radeon/drm/radeon_drm_bo.c indeed has this magic. However the code in src/mesa/drivers/dri/radeon/radeon_queryobj.c references the radeon_bo_map in libdrm, which does not appear to wait. FWIW for nouveau, nouveau_bo_map will also implicitly do a nouveau_bo_wait, but that does not appear to be the case for radeon. Cheers, -ilia _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev