From aed8af54567e441830dab1ad9d2fe210a1806653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 23 Mar 2021 01:41:57 -0400 Subject: [PATCH] radeon_winsys.h: add a new function radeon_bo_reference that takes a winsys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will allow removing the winsys pointer from buffers. Reviewed-by: Zoltán Böszörményi Reviewed-by: Pierre-Eric Pelloux-Prayer Part-of: --- 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; }