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