Mesa (amdgpu): winsys/amdgpu: use amdgpu_bo_wait_for_idle
Marek Olšák
mareko at kemper.freedesktop.org
Thu May 14 13:05:27 UTC 2015
Module: Mesa
Branch: amdgpu
Commit: 5585e7dd490ecab9cb0a28a8c92260e79aff82c3
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5585e7dd490ecab9cb0a28a8c92260e79aff82c3
Author: Marek Olšák <marek.olsak at amd.com>
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 <alexander.deucher at amd.com>
---
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. */
More information about the mesa-commit
mailing list