Mesa (master): winsys/amdgpu: replace amdgpu_winsys_bo::flags with pb_buffer::usage

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Nov 19 05:10:41 UTC 2020


Module: Mesa
Branch: master
Commit: 9c239aa6386f58356bf3364977f078579799c43e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9c239aa6386f58356bf3364977f078579799c43e

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Thu Nov 12 14:25:43 2020 -0500

winsys/amdgpu: replace amdgpu_winsys_bo::flags with pb_buffer::usage

Let's use the field so as not to waste memory.

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7585>

---

 src/gallium/auxiliary/pipebuffer/pb_buffer.h |  6 +++++-
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.c    | 26 ++++++++++++--------------
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.h    |  1 -
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.c    |  4 ++--
 src/gallium/winsys/amdgpu/drm/amdgpu_cs.h    |  2 +-
 5 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer.h b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
index 9c71fc86c9c..f4992d40f31 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer.h
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
@@ -113,7 +113,11 @@ struct pb_buffer
    struct pipe_reference  reference;
    unsigned               alignment;
    pb_size                size;
-   enum pb_usage_flags    usage;
+
+   /**
+    * Used with pb_usage_flags or driver-specific flags, depending on drivers.
+    */
+   unsigned               usage;
 
    /**
     * Pointer to the virtual function table.
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
index 623b8318bd6..394f77d623f 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
@@ -149,7 +149,7 @@ static enum radeon_bo_domain amdgpu_bo_get_initial_domain(
 static enum radeon_bo_flag amdgpu_bo_get_flags(
       struct pb_buffer *buf)
 {
-   return ((struct amdgpu_winsys_bo*)buf)->flags;
+   return ((struct amdgpu_winsys_bo*)buf)->base.usage;
 }
 
 static void amdgpu_bo_remove_fences(struct amdgpu_winsys_bo *bo)
@@ -247,7 +247,7 @@ static void amdgpu_clean_up_buffer_managers(struct amdgpu_winsys *ws)
 
 static bool amdgpu_bo_do_map(struct amdgpu_winsys_bo *bo, void **cpu)
 {
-   assert(!(bo->flags & RADEON_FLAG_SPARSE) && bo->bo && !bo->is_user_ptr);
+   assert(!(bo->base.usage & RADEON_FLAG_SPARSE) && bo->bo && !bo->is_user_ptr);
    int r = amdgpu_bo_cpu_map(bo->bo, cpu);
    if (r) {
       /* Clean up buffer managers and try again. */
@@ -276,7 +276,7 @@ void *amdgpu_bo_map(struct pb_buffer *buf,
    struct amdgpu_winsys_bo *real;
    struct amdgpu_cs *cs = (struct amdgpu_cs*)rcs;
 
-   assert(!(bo->flags & RADEON_FLAG_SPARSE));
+   assert(!(bo->base.usage & RADEON_FLAG_SPARSE));
 
    /* If it's not unsynchronized bo_map, flush CS if needed and then wait. */
    if (!(usage & PIPE_MAP_UNSYNCHRONIZED)) {
@@ -403,7 +403,7 @@ void amdgpu_bo_unmap(struct pb_buffer *buf)
    struct amdgpu_winsys_bo *bo = (struct amdgpu_winsys_bo*)buf;
    struct amdgpu_winsys_bo *real;
 
-   assert(!(bo->flags & RADEON_FLAG_SPARSE));
+   assert(!(bo->base.usage & RADEON_FLAG_SPARSE));
 
    if (bo->is_user_ptr)
       return;
@@ -571,7 +571,6 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *ws,
    simple_mtx_init(&bo->lock, mtx_plain);
    pipe_reference_init(&bo->base.reference, 1);
    bo->base.alignment = alignment;
-   bo->base.usage = 0;
    bo->base.size = size;
    bo->base.vtbl = &amdgpu_winsys_bo_vtbl;
    bo->ws = ws;
@@ -579,7 +578,7 @@ static struct amdgpu_winsys_bo *amdgpu_create_bo(struct amdgpu_winsys *ws,
    bo->va = va;
    bo->u.real.va_handle = va_handle;
    bo->initial_domain = initial_domain;
-   bo->flags = flags;
+   bo->base.usage = flags;
    bo->unique_id = __sync_fetch_and_add(&ws->next_bo_unique_id, 1);
 
    if (initial_domain & RADEON_DOMAIN_VRAM)
@@ -646,7 +645,7 @@ static void amdgpu_bo_slab_destroy(struct pb_buffer *_buf)
 
    assert(!bo->bo);
 
-   if (bo->flags & RADEON_FLAG_ENCRYPTED)
+   if (bo->base.usage & RADEON_FLAG_ENCRYPTED)
       pb_slab_free(get_slabs(bo->ws,
                              bo->base.size,
                              RADEON_FLAG_ENCRYPTED), &bo->u.slab.entry);
@@ -722,7 +721,6 @@ static struct pb_slab *amdgpu_bo_slab_alloc(void *priv, unsigned heap,
 
       simple_mtx_init(&bo->lock, mtx_plain);
       bo->base.alignment = entry_size;
-      bo->base.usage = slab->buffer->base.usage;
       bo->base.size = entry_size;
       bo->base.vtbl = &amdgpu_winsys_bo_slab_vtbl;
       bo->ws = ws;
@@ -892,7 +890,7 @@ sparse_backing_alloc(struct amdgpu_winsys_bo *bo, uint32_t *pstart_page, uint32_
 
       buf = amdgpu_bo_create(bo->ws, size, RADEON_SPARSE_PAGE_SIZE,
                              bo->initial_domain,
-                             (bo->flags & ~RADEON_FLAG_SPARSE) | RADEON_FLAG_NO_SUBALLOC);
+                             (bo->base.usage & ~RADEON_FLAG_SPARSE) | RADEON_FLAG_NO_SUBALLOC);
       if (!buf) {
          FREE(best_backing->chunks);
          FREE(best_backing);
@@ -1015,7 +1013,7 @@ static void amdgpu_bo_sparse_destroy(struct pb_buffer *_buf)
    struct amdgpu_winsys_bo *bo = amdgpu_winsys_bo(_buf);
    int r;
 
-   assert(!bo->bo && bo->flags & RADEON_FLAG_SPARSE);
+   assert(!bo->bo && bo->base.usage & RADEON_FLAG_SPARSE);
 
    r = amdgpu_bo_va_op_raw(bo->ws->dev, NULL, 0,
                            (uint64_t)bo->u.sparse.num_va_pages * RADEON_SPARSE_PAGE_SIZE,
@@ -1071,7 +1069,7 @@ amdgpu_bo_sparse_create(struct amdgpu_winsys *ws, uint64_t size,
    bo->ws = ws;
    bo->initial_domain = domain;
    bo->unique_id =  __sync_fetch_and_add(&ws->next_bo_unique_id, 1);
-   bo->flags = flags;
+   bo->base.usage = flags;
 
    bo->u.sparse.num_va_pages = DIV_ROUND_UP(size, RADEON_SPARSE_PAGE_SIZE);
    bo->u.sparse.commitments = CALLOC(bo->u.sparse.num_va_pages,
@@ -1118,7 +1116,7 @@ amdgpu_bo_sparse_commit(struct pb_buffer *buf, uint64_t offset, uint64_t size,
    bool ok = true;
    int r;
 
-   assert(bo->flags & RADEON_FLAG_SPARSE);
+   assert(bo->base.usage & RADEON_FLAG_SPARSE);
    assert(offset % RADEON_SPARSE_PAGE_SIZE == 0);
    assert(offset <= bo->base.size);
    assert(size <= bo->base.size - offset);
@@ -1488,7 +1486,7 @@ static struct pb_buffer *amdgpu_bo_from_handle(struct radeon_winsys *rws,
    bo->va = va;
    bo->u.real.va_handle = va_handle;
    bo->initial_domain = initial;
-   bo->flags = flags;
+   bo->base.usage = flags;
    bo->unique_id = __sync_fetch_and_add(&ws->next_bo_unique_id, 1);
    bo->is_shared = true;
 
@@ -1663,7 +1661,7 @@ static bool amdgpu_bo_is_suballocated(struct pb_buffer *buf)
 {
    struct amdgpu_winsys_bo *bo = (struct amdgpu_winsys_bo*)buf;
 
-   return !bo->bo && !(bo->flags & RADEON_FLAG_SPARSE);
+   return !bo->bo && !(bo->base.usage & RADEON_FLAG_SPARSE);
 }
 
 static uint64_t amdgpu_bo_get_va(struct pb_buffer *buf)
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h
index c4edb58442b..a85fb450f7b 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h
@@ -94,7 +94,6 @@ struct amdgpu_winsys_bo {
    uint32_t unique_id;
    uint64_t va;
    enum radeon_bo_domain initial_domain;
-   enum radeon_bo_flag flags;
 
    /* how many command streams is this bo referenced in? */
    int num_cs_references;
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
index 9658bf7fb4b..184acd49600 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c
@@ -420,7 +420,7 @@ int amdgpu_lookup_buffer(struct amdgpu_cs_context *cs, struct amdgpu_winsys_bo *
    if (bo->bo) {
       buffers = cs->real_buffers;
       num_buffers = cs->num_real_buffers;
-   } else if (!(bo->flags & RADEON_FLAG_SPARSE)) {
+   } else if (!(bo->base.usage & RADEON_FLAG_SPARSE)) {
       buffers = cs->slab_buffers;
       num_buffers = cs->num_slab_buffers;
    } else {
@@ -643,7 +643,7 @@ static unsigned amdgpu_cs_add_buffer(struct radeon_cmdbuf *rcs,
        (1u << priority) & cs->last_added_bo_priority_usage)
       return cs->last_added_bo_index;
 
-   if (!(bo->flags & RADEON_FLAG_SPARSE)) {
+   if (!(bo->base.usage & RADEON_FLAG_SPARSE)) {
       if (!bo->bo) {
          index = amdgpu_lookup_or_add_slab_buffer(acs, bo);
          if (index < 0)
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
index ae90814b1de..99d954cd13f 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h
@@ -263,7 +263,7 @@ amdgpu_bo_is_referenced_by_cs_with_usage(struct amdgpu_cs *cs,
       return false;
 
    buffer = bo->bo ? &cs->csc->real_buffers[index] :
-            bo->flags & RADEON_FLAG_SPARSE ? &cs->csc->sparse_buffers[index] :
+            bo->base.usage & RADEON_FLAG_SPARSE ? &cs->csc->sparse_buffers[index] :
             &cs->csc->slab_buffers[index];
 
    return (buffer->usage & usage) != 0;



More information about the mesa-commit mailing list