Mesa (master): radeon_winsys.h: add a new function radeon_bo_reference that takes a winsys

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


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

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

radeon_winsys.h: add a new function radeon_bo_reference that takes a winsys

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/drivers/radeon/radeon_winsys.h |  6 ++++++
 src/gallium/drivers/radeonsi/si_buffer.c   |  6 +++---
 src/gallium/drivers/radeonsi/si_pipe.c     |  4 ++--
 src/gallium/drivers/radeonsi/si_sqtt.c     |  2 +-
 src/gallium/drivers/radeonsi/si_texture.c  | 12 ++++++------
 5 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/radeon/radeon_winsys.h b/src/gallium/drivers/radeon/radeon_winsys.h
index 44dbf532a10..811a57ae8db 100644
--- a/src/gallium/drivers/radeon/radeon_winsys.h
+++ b/src/gallium/drivers/radeon/radeon_winsys.h
@@ -744,6 +744,12 @@ static inline bool radeon_uses_secure_bos(struct radeon_winsys* ws)
   return ws->uses_secure_bos;
 }
 
+static inline void
+radeon_bo_reference(struct radeon_winsys *rws, struct pb_buffer **dst, struct pb_buffer *src)
+{
+   pb_reference_with_winsys(rws, dst, src);
+}
+
 enum radeon_heap
 {
    RADEON_HEAP_VRAM_NO_CPU_ACCESS,
diff --git a/src/gallium/drivers/radeonsi/si_buffer.c b/src/gallium/drivers/radeonsi/si_buffer.c
index 7d4cc7ba073..c29b9676f3f 100644
--- a/src/gallium/drivers/radeonsi/si_buffer.c
+++ b/src/gallium/drivers/radeonsi/si_buffer.c
@@ -201,7 +201,7 @@ bool si_alloc_resource(struct si_screen *sscreen, struct si_resource *res)
       assert((last >> 32) == sscreen->info.address32_hi);
    }
 
-   pb_reference(&old_buf, NULL);
+   radeon_bo_reference(sscreen->ws, &old_buf, NULL);
 
    util_range_set_empty(&res->valid_buffer_range);
    res->TC_L2_dirty = false;
@@ -224,7 +224,7 @@ static void si_buffer_destroy(struct pipe_screen *screen, struct pipe_resource *
 
    threaded_resource_deinit(buf);
    util_range_destroy(&buffer->valid_buffer_range);
-   pb_reference(&buffer->buf, NULL);
+   radeon_bo_reference(((struct si_screen*)screen)->ws, &buffer->buf, NULL);
    FREE(buffer);
 }
 
@@ -271,7 +271,7 @@ void si_replace_buffer_storage(struct pipe_context *ctx, struct pipe_resource *d
    struct si_resource *sdst = si_resource(dst);
    struct si_resource *ssrc = si_resource(src);
 
-   pb_reference(&sdst->buf, ssrc->buf);
+   radeon_bo_reference(sctx->screen->ws, &sdst->buf, ssrc->buf);
    sdst->gpu_address = ssrc->gpu_address;
    sdst->b.b.bind = ssrc->b.b.bind;
    sdst->b.max_forced_staging_uploads = ssrc->b.max_forced_staging_uploads;
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index ddfdf2d9482..fd070c7a43e 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -313,8 +313,8 @@ static void si_destroy_context(struct pipe_context *context)
    si_resource_reference(&sctx->barrier_buf, NULL);
    si_resource_reference(&sctx->last_ib_barrier_buf, NULL);
    si_resource_reference(&sctx->shadowed_regs, NULL);
-   pb_reference(&sctx->gds, NULL);
-   pb_reference(&sctx->gds_oa, NULL);
+   radeon_bo_reference(sctx->screen->ws, &sctx->gds, NULL);
+   radeon_bo_reference(sctx->screen->ws, &sctx->gds_oa, NULL);
 
    si_destroy_compiler(&sctx->compiler);
 
diff --git a/src/gallium/drivers/radeonsi/si_sqtt.c b/src/gallium/drivers/radeonsi/si_sqtt.c
index e4b745eb6e5..c05d1fa3c66 100644
--- a/src/gallium/drivers/radeonsi/si_sqtt.c
+++ b/src/gallium/drivers/radeonsi/si_sqtt.c
@@ -606,7 +606,7 @@ si_destroy_thread_trace(struct si_context *sctx)
 {
    struct si_screen *sscreen = sctx->screen;
    struct pb_buffer *bo = sctx->thread_trace->bo;
-   pb_reference(&bo, NULL);
+   radeon_bo_reference(sctx->screen->ws, &bo, NULL);
 
    if (sctx->thread_trace->trigger_file)
       free(sctx->thread_trace->trigger_file);
diff --git a/src/gallium/drivers/radeonsi/si_texture.c b/src/gallium/drivers/radeonsi/si_texture.c
index 7797f6cb83c..d62dd95ba03 100644
--- a/src/gallium/drivers/radeonsi/si_texture.c
+++ b/src/gallium/drivers/radeonsi/si_texture.c
@@ -432,7 +432,7 @@ static void si_reallocate_texture_inplace(struct si_context *sctx, struct si_tex
 
    /* Replace the structure fields of tex. */
    tex->buffer.b.b.bind = templ.bind;
-   pb_reference(&tex->buffer.buf, new_tex->buffer.buf);
+   radeon_bo_reference(sctx->screen->ws, &tex->buffer.buf, new_tex->buffer.buf);
    tex->buffer.gpu_address = new_tex->buffer.gpu_address;
    tex->buffer.vram_usage_kb = new_tex->buffer.vram_usage_kb;
    tex->buffer.gart_usage_kb = new_tex->buffer.gart_usage_kb;
@@ -789,7 +789,7 @@ static void si_texture_destroy(struct pipe_screen *screen, struct pipe_resource
    if (tex->cmask_buffer != &tex->buffer) {
       si_resource_reference(&tex->cmask_buffer, NULL);
    }
-   pb_reference(&resource->buf, NULL);
+   radeon_bo_reference(((struct si_screen*)screen)->ws, &resource->buf, NULL);
    si_resource_reference(&tex->dcc_separate_buffer, NULL);
    si_resource_reference(&tex->last_dcc_separate_buffer, NULL);
    si_resource_reference(&tex->dcc_retile_buffer, NULL);
@@ -996,7 +996,7 @@ static struct si_texture *si_texture_create_object(struct pipe_screen *screen,
       resource->vram_usage_kb = plane0->buffer.vram_usage_kb;
       resource->gart_usage_kb = plane0->buffer.gart_usage_kb;
 
-      pb_reference(&resource->buf, plane0->buffer.buf);
+      radeon_bo_reference(sscreen->ws, &resource->buf, plane0->buffer.buf);
       resource->gpu_address = plane0->buffer.gpu_address;
    } else if (!(surface->flags & RADEON_SURF_IMPORTED)) {
       /* Create the backing buffer. */
@@ -1508,7 +1508,7 @@ static void si_auxiliary_texture_destroy(struct pipe_screen *screen,
 {
    struct si_auxiliary_texture *tex = (struct si_auxiliary_texture *)ptex;
 
-   pb_reference(&tex->buffer, NULL);
+   radeon_bo_reference(((struct si_screen*)screen)->ws, &tex->buffer, NULL);
    FREE(ptex);
 }
 
@@ -2461,7 +2461,7 @@ static void si_memobj_destroy(struct pipe_screen *screen, struct pipe_memory_obj
 {
    struct si_memory_object *memobj = (struct si_memory_object *)_memobj;
 
-   pb_reference(&memobj->buf, NULL);
+   radeon_bo_reference(((struct si_screen*)screen)->ws, &memobj->buf, NULL);
    free(memobj);
 }
 
@@ -2491,7 +2491,7 @@ static struct pipe_resource *si_resource_from_memobj(struct pipe_screen *screen,
     * memobj->buf, so increment it here.
     */
    struct pb_buffer *buf = NULL;
-   pb_reference(&buf, memobj->buf);
+   radeon_bo_reference(sscreen->ws, &buf, memobj->buf);
    return res;
 }
 



More information about the mesa-commit mailing list