On 07.07.2015 01:32, Ilia Mirkin wrote: > 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.
It does, see radeon_bo_gem.c:bo_map(): wait: boi->ptr = bo_gem->priv_ptr; r = bo_wait(boi); -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev