Mesa (master): gallium/pb: pass an optional winsys pointer to the buffer destroy function

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Apr 6 22:53:21 UTC 2021


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Tue Mar 23 01:31:39 2021 -0400

gallium/pb: pass an optional winsys pointer to the buffer destroy function

This will allow removing the winsys pointer from buffers.

Reviewed-by: Zoltán Böszörményi <zboszor at gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9809>

---

 src/gallium/auxiliary/pipebuffer/pb_buffer.h          | 19 +++++++++++++++----
 src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c   |  2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c    |  8 ++++----
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c    |  2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c       |  2 +-
 src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c     |  2 +-
 src/gallium/auxiliary/pipebuffer/pb_cache.c           | 12 +++++++-----
 src/gallium/auxiliary/pipebuffer/pb_cache.h           | 10 ++++++----
 src/gallium/drivers/d3d12/d3d12_bufmgr.cpp            |  2 +-
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.c             | 14 +++++++-------
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.h             |  4 ++--
 src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c         |  2 +-
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c         | 18 +++++++++---------
 src/gallium/winsys/radeon/drm/radeon_drm_bo.h         |  4 ++--
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c     |  2 +-
 src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c |  2 +-
 src/gallium/winsys/svga/drm/vmw_buffer.c              |  2 +-
 17 files changed, 61 insertions(+), 46 deletions(-)

diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer.h b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
index acfd7f0c60d..ac6d9406df9 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer.h
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
@@ -142,7 +142,7 @@ struct pb_buffer
  */
 struct pb_vtbl
 {
-   void (*destroy)(struct pb_buffer *buf);
+   void (*destroy)(void *winsys, struct pb_buffer *buf);
 
    /**
     * Map the entire data store of a buffer object into the client's address.
@@ -245,13 +245,13 @@ pb_fence(struct pb_buffer *buf, struct pipe_fence_handle *fence)
 
 
 static inline void
-pb_destroy(struct pb_buffer *buf)
+pb_destroy(void *winsys, struct pb_buffer *buf)
 {
    assert(buf);
    if (!buf)
       return;
    assert(!pipe_is_referenced(&buf->reference));
-   buf->vtbl->destroy(buf);
+   buf->vtbl->destroy(winsys, buf);
 }
 
 
@@ -262,10 +262,21 @@ pb_reference(struct pb_buffer **dst,
    struct pb_buffer *old = *dst;
 
    if (pipe_reference(&(*dst)->reference, &src->reference))
-      pb_destroy(old);
+      pb_destroy(NULL, old);
    *dst = src;
 }
 
+static inline void
+pb_reference_with_winsys(void *winsys,
+                         struct pb_buffer **dst,
+                         struct pb_buffer *src)
+{
+   struct pb_buffer *old = *dst;
+
+   if (pipe_reference(&(*dst)->reference, &src->reference))
+      pb_destroy(winsys, old);
+   *dst = src;
+}
 
 /**
  * Utility function to check whether the provided alignment is consistent with
diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
index cae87520020..01f0ed6077b 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
@@ -645,7 +645,7 @@ fenced_buffer_copy_storage_to_cpu_locked(struct fenced_buffer *fenced_buf)
 
 
 static void
-fenced_buffer_destroy(struct pb_buffer *buf)
+fenced_buffer_destroy(void *winsys, struct pb_buffer *buf)
 {
    struct fenced_buffer *fenced_buf = fenced_buffer(buf);
    struct fenced_manager *fenced_mgr = fenced_buf->mgr;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
index ceed1daa414..c4c1785cfc0 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
@@ -94,7 +94,7 @@ pb_cache_manager_remove_buffer(struct pb_buffer *pb_buf)
  * Actually destroy the buffer.
  */
 static void
-_pb_cache_buffer_destroy(struct pb_buffer *pb_buf)
+_pb_cache_buffer_destroy(void *winsys, struct pb_buffer *pb_buf)
 {
    struct pb_cache_buffer *buf = pb_cache_buffer(pb_buf);
 
@@ -105,7 +105,7 @@ _pb_cache_buffer_destroy(struct pb_buffer *pb_buf)
 
 
 static void
-pb_cache_buffer_destroy(struct pb_buffer *_buf)
+pb_cache_buffer_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct pb_cache_buffer *buf = pb_cache_buffer(_buf);   
    struct pb_cache_manager *mgr = buf->mgr;
@@ -178,7 +178,7 @@ pb_cache_buffer_vtbl = {
 
 
 static bool
-pb_cache_can_reclaim_buffer(struct pb_buffer *_buf)
+pb_cache_can_reclaim_buffer(void *winsys, struct pb_buffer *_buf)
 {
    struct pb_cache_buffer *buf = pb_cache_buffer(_buf);
 
@@ -305,7 +305,7 @@ pb_cache_manager_create(struct pb_manager *provider,
    mgr->base.flush = pb_cache_manager_flush;
    mgr->provider = provider;
    pb_cache_init(&mgr->cache, 1, usecs, size_factor, bypass_usage,
-                 maximum_cache_size,
+                 maximum_cache_size, NULL,
                  _pb_cache_buffer_destroy,
                  pb_cache_can_reclaim_buffer);
    return &mgr->base;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c
index 8e54e811488..b0f591b3f12 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_debug.c
@@ -226,7 +226,7 @@ pb_debug_buffer_check(struct pb_debug_buffer *buf)
 
 
 static void
-pb_debug_buffer_destroy(struct pb_buffer *_buf)
+pb_debug_buffer_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct pb_debug_buffer *buf = pb_debug_buffer(_buf);
    struct pb_debug_manager *mgr = buf->mgr;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c
index f975cfbfe93..d5ef779c6b0 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c
@@ -92,7 +92,7 @@ mm_buffer(struct pb_buffer *buf)
 
 
 static void
-mm_buffer_destroy(struct pb_buffer *buf)
+mm_buffer_destroy(void *winsys, struct pb_buffer *buf)
 {
    struct mm_buffer *mm_buf = mm_buffer(buf);
    struct mm_pb_manager *mm = mm_buf->mgr;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
index ba753e614f8..69a19695086 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
@@ -187,7 +187,7 @@ pb_slab_range_manager(struct pb_manager *mgr)
  * it on the slab FREE list.
  */
 static void
-pb_slab_buffer_destroy(struct pb_buffer *_buf)
+pb_slab_buffer_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct pb_slab_buffer *buf = pb_slab_buffer(_buf);
    struct pb_slab *slab = buf->slab;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_cache.c b/src/gallium/auxiliary/pipebuffer/pb_cache.c
index 48ed89a7473..9d201a9b93a 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_cache.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_cache.c
@@ -47,7 +47,7 @@ destroy_buffer_locked(struct pb_cache_entry *entry)
       --mgr->num_buffers;
       mgr->cache_size -= buf->size;
    }
-   mgr->destroy_buffer(buf);
+   mgr->destroy_buffer(mgr->winsys, buf);
 }
 
 /**
@@ -97,7 +97,7 @@ pb_cache_add_buffer(struct pb_cache_entry *entry)
 
    /* Directly release any buffer that exceeds the limit. */
    if (mgr->cache_size + buf->size > mgr->max_cache_size) {
-      mgr->destroy_buffer(buf);
+      mgr->destroy_buffer(mgr->winsys, buf);
       mtx_unlock(&mgr->mutex);
       return;
    }
@@ -136,7 +136,7 @@ pb_cache_is_buffer_compat(struct pb_cache_entry *entry,
    if (!pb_check_alignment(alignment, buf->alignment))
       return 0;
 
-   return mgr->can_reclaim(buf) ? 1 : -1;
+   return mgr->can_reclaim(mgr->winsys, buf) ? 1 : -1;
 }
 
 /**
@@ -280,8 +280,9 @@ void
 pb_cache_init(struct pb_cache *mgr, uint num_heaps,
               uint usecs, float size_factor,
               unsigned bypass_usage, uint64_t maximum_cache_size,
-              void (*destroy_buffer)(struct pb_buffer *buf),
-              bool (*can_reclaim)(struct pb_buffer *buf))
+              void *winsys,
+              void (*destroy_buffer)(void *winsys, struct pb_buffer *buf),
+              bool (*can_reclaim)(void *winsys, struct pb_buffer *buf))
 {
    unsigned i;
 
@@ -293,6 +294,7 @@ pb_cache_init(struct pb_cache *mgr, uint num_heaps,
       list_inithead(&mgr->buckets[i]);
 
    (void) mtx_init(&mgr->mutex, mtx_plain);
+   mgr->winsys = winsys;
    mgr->cache_size = 0;
    mgr->max_cache_size = maximum_cache_size;
    mgr->num_heaps = num_heaps;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_cache.h b/src/gallium/auxiliary/pipebuffer/pb_cache.h
index 904095c38b5..4afa0c804ec 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_cache.h
+++ b/src/gallium/auxiliary/pipebuffer/pb_cache.h
@@ -53,6 +53,7 @@ struct pb_cache
    struct list_head *buckets;
 
    mtx_t mutex;
+   void *winsys;
    uint64_t cache_size;
    uint64_t max_cache_size;
    unsigned num_heaps;
@@ -61,8 +62,8 @@ struct pb_cache
    unsigned bypass_usage;
    float size_factor;
 
-   void (*destroy_buffer)(struct pb_buffer *buf);
-   bool (*can_reclaim)(struct pb_buffer *buf);
+   void (*destroy_buffer)(void *winsys, struct pb_buffer *buf);
+   bool (*can_reclaim)(void *winsys, struct pb_buffer *buf);
 };
 
 void pb_cache_add_buffer(struct pb_cache_entry *entry);
@@ -75,8 +76,9 @@ void pb_cache_init_entry(struct pb_cache *mgr, struct pb_cache_entry *entry,
 void pb_cache_init(struct pb_cache *mgr, uint num_heaps,
                    uint usecs, float size_factor,
                    unsigned bypass_usage, uint64_t maximum_cache_size,
-                   void (*destroy_buffer)(struct pb_buffer *buf),
-                   bool (*can_reclaim)(struct pb_buffer *buf));
+                   void *winsys,
+                   void (*destroy_buffer)(void *winsys, struct pb_buffer *buf),
+                   bool (*can_reclaim)(void *winsys, struct pb_buffer *buf));
 void pb_cache_deinit(struct pb_cache *mgr);
 
 #endif
diff --git a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp
index 0144410a234..3946540c37d 100644
--- a/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_bufmgr.cpp
@@ -214,7 +214,7 @@ d3d12_bo_unmap(struct d3d12_bo *bo, D3D12_RANGE *range)
 }
 
 static void
-d3d12_buffer_destroy(struct pb_buffer *pbuf)
+d3d12_buffer_destroy(void *winsys, struct pb_buffer *pbuf)
 {
    struct d3d12_buffer *buf = d3d12_buffer(pbuf);
 
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
index abf1e7d75a9..cd773f3231a 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.c
@@ -169,7 +169,7 @@ static void amdgpu_bo_remove_fences(struct amdgpu_winsys_bo *bo)
    bo->max_fences = 0;
 }
 
-void amdgpu_bo_destroy(struct pb_buffer *_buf)
+void amdgpu_bo_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct amdgpu_winsys_bo *bo = amdgpu_winsys_bo(_buf);
    struct amdgpu_screen_winsys *sws_iter;
@@ -231,7 +231,7 @@ void amdgpu_bo_destroy(struct pb_buffer *_buf)
    FREE(bo);
 }
 
-static void amdgpu_bo_destroy_or_cache(struct pb_buffer *_buf)
+static void amdgpu_bo_destroy_or_cache(void *winsys, struct pb_buffer *_buf)
 {
    struct amdgpu_winsys_bo *bo = amdgpu_winsys_bo(_buf);
 
@@ -240,7 +240,7 @@ static void amdgpu_bo_destroy_or_cache(struct pb_buffer *_buf)
    if (bo->u.real.use_reusable_pool)
       pb_cache_add_buffer(bo->cache_entry);
    else
-      amdgpu_bo_destroy(_buf);
+      amdgpu_bo_destroy(winsys, _buf);
 }
 
 static void amdgpu_clean_up_buffer_managers(struct amdgpu_winsys *ws)
@@ -620,7 +620,7 @@ error_bo_alloc:
    return NULL;
 }
 
-bool amdgpu_bo_can_reclaim(struct pb_buffer *_buf)
+bool amdgpu_bo_can_reclaim(void *winsys, struct pb_buffer *_buf)
 {
    return amdgpu_bo_wait(_buf, 0, RADEON_USAGE_READWRITE);
 }
@@ -629,7 +629,7 @@ bool amdgpu_bo_can_reclaim_slab(void *priv, struct pb_slab_entry *entry)
 {
    struct amdgpu_winsys_bo *bo = container_of(entry, struct amdgpu_winsys_bo, u.slab.entry);
 
-   return amdgpu_bo_can_reclaim(&bo->base);
+   return amdgpu_bo_can_reclaim(NULL, &bo->base);
 }
 
 static struct pb_slabs *get_slabs(struct amdgpu_winsys *ws, uint64_t size,
@@ -658,7 +658,7 @@ static unsigned get_slab_wasted_size(struct amdgpu_winsys_bo *bo)
    return bo->u.slab.entry.entry_size - bo->base.size;
 }
 
-static void amdgpu_bo_slab_destroy(struct pb_buffer *_buf)
+static void amdgpu_bo_slab_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct amdgpu_winsys_bo *bo = amdgpu_winsys_bo(_buf);
 
@@ -1090,7 +1090,7 @@ sparse_backing_free(struct amdgpu_winsys_bo *bo,
    return true;
 }
 
-static void amdgpu_bo_sparse_destroy(struct pb_buffer *_buf)
+static void amdgpu_bo_sparse_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct amdgpu_winsys_bo *bo = amdgpu_winsys_bo(_buf);
    int r;
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h
index cdd0ffda466..9dd5bb6d523 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_bo.h
@@ -119,13 +119,13 @@ struct amdgpu_slab {
    struct amdgpu_winsys_bo *entries;
 };
 
-bool amdgpu_bo_can_reclaim(struct pb_buffer *_buf);
+bool amdgpu_bo_can_reclaim(void *winsys, struct pb_buffer *_buf);
 struct pb_buffer *amdgpu_bo_create(struct amdgpu_winsys *ws,
                                    uint64_t size,
                                    unsigned alignment,
                                    enum radeon_bo_domain domain,
                                    enum radeon_bo_flag flags);
-void amdgpu_bo_destroy(struct pb_buffer *_buf);
+void amdgpu_bo_destroy(void *winsys, struct pb_buffer *_buf);
 void *amdgpu_bo_map(struct pb_buffer *buf,
                     struct radeon_cmdbuf *rcs,
                     enum pipe_map_flags usage);
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
index 88bff45f7b6..2f91a377d14 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
@@ -442,7 +442,7 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
       /* Create managers. */
       pb_cache_init(&aws->bo_cache, RADEON_MAX_CACHED_HEAPS,
                     500000, aws->check_vm ? 1.0f : 2.0f, 0,
-                    (aws->info.vram_size + aws->info.gart_size) / 8,
+                    (aws->info.vram_size + aws->info.gart_size) / 8, NULL,
                     amdgpu_bo_destroy, amdgpu_bo_can_reclaim);
 
       unsigned min_slab_order = 8;  /* 256 bytes */
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 22cd399e30c..0ff282e8519 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -350,7 +350,7 @@ out:
    mtx_unlock(&heap->mutex);
 }
 
-void radeon_bo_destroy(struct pb_buffer *_buf)
+void radeon_bo_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct radeon_bo *bo = radeon_bo(_buf);
    struct radeon_drm_winsys *rws = bo->rws;
@@ -419,7 +419,7 @@ void radeon_bo_destroy(struct pb_buffer *_buf)
    FREE(bo);
 }
 
-static void radeon_bo_destroy_or_cache(struct pb_buffer *_buf)
+static void radeon_bo_destroy_or_cache(void *winsys, struct pb_buffer *_buf)
 {
    struct radeon_bo *bo = radeon_bo(_buf);
 
@@ -428,7 +428,7 @@ static void radeon_bo_destroy_or_cache(struct pb_buffer *_buf)
    if (bo->u.real.use_reusable_pool)
       pb_cache_add_buffer(&bo->u.real.cache_entry);
    else
-      radeon_bo_destroy(_buf);
+      radeon_bo_destroy(NULL, _buf);
 }
 
 void *radeon_bo_do_map(struct radeon_bo *bo)
@@ -711,7 +711,7 @@ static struct radeon_bo *radeon_create_bo(struct radeon_drm_winsys *rws,
          fprintf(stderr, "radeon:    alignment : %d bytes\n", alignment);
          fprintf(stderr, "radeon:    domains   : %d\n", args.initial_domain);
          fprintf(stderr, "radeon:    va        : 0x%016llx\n", (unsigned long long)bo->va);
-         radeon_bo_destroy(&bo->base);
+         radeon_bo_destroy(NULL, &bo->base);
          return NULL;
       }
       mtx_lock(&rws->bo_handles_mutex);
@@ -737,7 +737,7 @@ static struct radeon_bo *radeon_create_bo(struct radeon_drm_winsys *rws,
    return bo;
 }
 
-bool radeon_bo_can_reclaim(struct pb_buffer *_buf)
+bool radeon_bo_can_reclaim(void *winsys, struct pb_buffer *_buf)
 {
    struct radeon_bo *bo = radeon_bo(_buf);
 
@@ -751,10 +751,10 @@ bool radeon_bo_can_reclaim_slab(void *priv, struct pb_slab_entry *entry)
 {
    struct radeon_bo *bo = container_of(entry, struct radeon_bo, u.slab.entry);
 
-   return radeon_bo_can_reclaim(&bo->base);
+   return radeon_bo_can_reclaim(NULL, &bo->base);
 }
 
-static void radeon_bo_slab_destroy(struct pb_buffer *_buf)
+static void radeon_bo_slab_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct radeon_bo *bo = radeon_bo(_buf);
 
@@ -1156,7 +1156,7 @@ static struct pb_buffer *radeon_winsys_bo_from_ptr(struct radeon_winsys *rws,
       r = drmCommandWriteRead(ws->fd, DRM_RADEON_GEM_VA, &va, sizeof(va));
       if (r && va.operation == RADEON_VA_RESULT_ERROR) {
          fprintf(stderr, "radeon: Failed to assign virtual address space\n");
-         radeon_bo_destroy(&bo->base);
+         radeon_bo_destroy(NULL, &bo->base);
          return NULL;
       }
       mtx_lock(&ws->bo_handles_mutex);
@@ -1287,7 +1287,7 @@ done:
       r = drmCommandWriteRead(ws->fd, DRM_RADEON_GEM_VA, &va, sizeof(va));
       if (r && va.operation == RADEON_VA_RESULT_ERROR) {
          fprintf(stderr, "radeon: Failed to assign virtual address space\n");
-         radeon_bo_destroy(&bo->base);
+         radeon_bo_destroy(NULL, &bo->base);
          return NULL;
       }
       mtx_lock(&ws->bo_handles_mutex);
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.h b/src/gallium/winsys/radeon/drm/radeon_drm_bo.h
index 906d932d89a..98d1d04b9d9 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.h
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.h
@@ -76,8 +76,8 @@ struct radeon_slab {
    struct radeon_bo *entries;
 };
 
-void radeon_bo_destroy(struct pb_buffer *_buf);
-bool radeon_bo_can_reclaim(struct pb_buffer *_buf);
+void radeon_bo_destroy(void *winsys, struct pb_buffer *_buf);
+bool radeon_bo_can_reclaim(void *winsys, struct pb_buffer *_buf);
 void radeon_drm_bo_init_functions(struct radeon_drm_winsys *ws);
 
 bool radeon_bo_can_reclaim_slab(void *priv, struct pb_slab_entry *entry);
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
index 0e96eb37998..7c3e99404f9 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
@@ -851,7 +851,7 @@ radeon_drm_winsys_create(int fd, const struct pipe_screen_config *config,
 
    pb_cache_init(&ws->bo_cache, RADEON_MAX_CACHED_HEAPS,
                  500000, ws->check_vm ? 1.0f : 2.0f, 0,
-                 MIN2(ws->info.vram_size, ws->info.gart_size),
+                 MIN2(ws->info.vram_size, ws->info.gart_size), NULL,
                  radeon_bo_destroy,
                  radeon_bo_can_reclaim);
 
diff --git a/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c b/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c
index 4d8149d4422..7811dfbcfa1 100644
--- a/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c
+++ b/src/gallium/winsys/svga/drm/pb_buffer_simple_fenced.c
@@ -501,7 +501,7 @@ fenced_buffer_create_gpu_storage_locked(struct fenced_manager *fenced_mgr,
 
 
 static void
-fenced_buffer_destroy(struct pb_buffer *buf)
+fenced_buffer_destroy(void *winsys, struct pb_buffer *buf)
 {
    struct fenced_buffer *fenced_buf = fenced_buffer(buf);
    struct fenced_manager *fenced_mgr = fenced_buf->mgr;
diff --git a/src/gallium/winsys/svga/drm/vmw_buffer.c b/src/gallium/winsys/svga/drm/vmw_buffer.c
index 6bc7676c502..4c44cb517e4 100644
--- a/src/gallium/winsys/svga/drm/vmw_buffer.c
+++ b/src/gallium/winsys/svga/drm/vmw_buffer.c
@@ -101,7 +101,7 @@ vmw_gmr_bufmgr(struct pb_manager *mgr)
 
 
 static void
-vmw_gmr_buffer_destroy(struct pb_buffer *_buf)
+vmw_gmr_buffer_destroy(void *winsys, struct pb_buffer *_buf)
 {
    struct vmw_gmr_buffer *buf = vmw_gmr_buffer(_buf);
 



More information about the mesa-commit mailing list