Module: Mesa Branch: amdgpu Commit: 5585e7dd490ecab9cb0a28a8c92260e79aff82c3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5585e7dd490ecab9cb0a28a8c92260e79aff82c3
Author: Marek Olšák <[email protected]> Date: Wed May 6 18:24:12 2015 +0200 winsys/amdgpu: use amdgpu_bo_wait_for_idle So that we don't have to add a fence to every buffer. Reviewed-by: Alex Deucher <[email protected]> --- src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 14 +++++++------- src/gallium/winsys/amdgpu/drm/amdgpu_bo.h | 2 -- src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 4 ---- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c index 7aa1b02..8bb1946 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c @@ -76,28 +76,29 @@ static struct amdgpu_winsys_bo *get_amdgpu_winsys_bo(struct pb_buffer *_buf) static void amdgpu_bo_wait(struct pb_buffer *_buf, enum radeon_bo_usage usage) { struct amdgpu_winsys_bo *bo = get_amdgpu_winsys_bo(_buf); - struct radeon_winsys *ws = &bo->rws->base; + bool busy; while (p_atomic_read(&bo->num_active_ioctls)) { sched_yield(); } - if (bo->fence) { - ws->fence_wait(ws, bo->fence, PIPE_TIMEOUT_INFINITE); - } + amdgpu_bo_wait_for_idle(bo->bo, AMDGPU_TIMEOUT_INFINITE, &busy); } static boolean amdgpu_bo_is_busy(struct pb_buffer *_buf, enum radeon_bo_usage usage) { struct amdgpu_winsys_bo *bo = get_amdgpu_winsys_bo(_buf); - struct radeon_winsys *ws = &bo->rws->base; + bool busy; if (p_atomic_read(&bo->num_active_ioctls)) { return TRUE; } - return bo->fence && !ws->fence_wait(ws, bo->fence, 0); + if (amdgpu_bo_wait_for_idle(bo->bo, 0, &busy)) + return false; + + return busy; } static enum radeon_bo_domain amdgpu_bo_get_initial_domain( @@ -111,7 +112,6 @@ static void amdgpu_bo_destroy(struct pb_buffer *_buf) struct amdgpu_winsys_bo *bo = amdgpu_winsys_bo(_buf); amdgpu_bo_free(bo->bo); - amdgpu_fence_reference(&bo->fence, NULL); if (bo->initial_domain & RADEON_DOMAIN_VRAM) bo->rws->allocated_vram -= align(bo->base.size, 4096); diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h index 46a4aec..ecfa991 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h @@ -59,8 +59,6 @@ struct amdgpu_winsys_bo { /* how many command streams, which are being emitted in a separate * thread, is this bo referenced in? */ int num_active_ioctls; - - struct pipe_fence_handle *fence; /* for buffer_wait & buffer_is_busy */ }; struct pb_manager *amdgpu_bomgr_create(struct amdgpu_winsys *rws); diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index 7064474..7b32ae3 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -447,10 +447,6 @@ void amdgpu_cs_emit_ioctl_oneshot(struct amdgpu_cs *cs, struct amdgpu_cs_context } else { /* Success. */ amdgpu_fence_submitted(csc->fence, fence); - - for (i = 0; i < csc->num_buffers; i++) { - amdgpu_fence_reference(&csc->buffers[i].bo->fence, csc->fence); - } } /* Cleanup. */ _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
