From f60a44b6861631933fb9cb147299b5f944a0c2a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 5 May 2021 13:27:53 -0400 Subject: [PATCH] r300: stop using u_resource_vtbl::resource_destroy Acked-By: Mike Blumenkrantz Acked-by: Pierre-Eric Pelloux-Prayer Part-of: --- src/gallium/drivers/r300/r300_resource.c | 2 +- src/gallium/drivers/r300/r300_screen_buffer.c | 31 ++++++++++++++----- src/gallium/drivers/r300/r300_screen_buffer.h | 3 ++ src/gallium/drivers/r300/r300_texture.c | 19 +----------- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/gallium/drivers/r300/r300_resource.c b/src/gallium/drivers/r300/r300_resource.c index 3da5fefef6d..b34a9b10fca 100644 --- a/src/gallium/drivers/r300/r300_resource.c +++ b/src/gallium/drivers/r300/r300_resource.c @@ -54,5 +54,5 @@ void r300_init_screen_resource_functions(struct r300_screen *r300screen) r300screen->screen.resource_create = r300_resource_create; r300screen->screen.resource_from_handle = r300_texture_from_handle; r300screen->screen.resource_get_handle = r300_resource_get_handle; - r300screen->screen.resource_destroy = u_resource_destroy_vtbl; + r300screen->screen.resource_destroy = r300_resource_destroy; } diff --git a/src/gallium/drivers/r300/r300_screen_buffer.c b/src/gallium/drivers/r300/r300_screen_buffer.c index 079e55d3942..7f6c15a7cb6 100644 --- a/src/gallium/drivers/r300/r300_screen_buffer.c +++ b/src/gallium/drivers/r300/r300_screen_buffer.c @@ -50,17 +50,32 @@ void r300_upload_index_buffer(struct r300_context *r300, *start = index_offset / index_size; } -static void r300_buffer_destroy(struct pipe_screen *screen, - struct pipe_resource *buf) +void r300_resource_destroy(struct pipe_screen *screen, + struct pipe_resource *buf) { - struct r300_resource *rbuf = r300_resource(buf); + if (buf->target == PIPE_BUFFER) { + struct r300_resource *rbuf = r300_resource(buf); - align_free(rbuf->malloced_buffer); + align_free(rbuf->malloced_buffer); - if (rbuf->buf) - pb_reference(&rbuf->buf, NULL); + if (rbuf->buf) + pb_reference(&rbuf->buf, NULL); - FREE(rbuf); + FREE(rbuf); + } else { + struct r300_screen *rscreen = r300_screen(screen); + struct r300_resource* tex = (struct r300_resource*)buf; + + if (tex->tex.cmask_dwords) { + mtx_lock(&rscreen->cmask_mutex); + if (buf == rscreen->cmask_resource) { + rscreen->cmask_resource = NULL; + } + mtx_unlock(&rscreen->cmask_mutex); + } + pb_reference(&tex->buf, NULL); + FREE(tex); + } } static void * @@ -148,7 +163,7 @@ static void r300_buffer_transfer_unmap( struct pipe_context *pipe, static const struct u_resource_vtbl r300_buffer_vtbl = { - r300_buffer_destroy, /* resource_destroy */ + NULL, /* resource_destroy */ r300_buffer_transfer_map, /* transfer_map */ r300_buffer_transfer_unmap, /* transfer_unmap */ }; diff --git a/src/gallium/drivers/r300/r300_screen_buffer.h b/src/gallium/drivers/r300/r300_screen_buffer.h index 14b849c8c93..bd025dfddec 100644 --- a/src/gallium/drivers/r300/r300_screen_buffer.h +++ b/src/gallium/drivers/r300/r300_screen_buffer.h @@ -41,6 +41,9 @@ void r300_upload_index_buffer(struct r300_context *r300, unsigned index_size, unsigned *start, unsigned count, const uint8_t *ptr); +void r300_resource_destroy(struct pipe_screen *screen, + struct pipe_resource *buf); + struct pipe_resource *r300_buffer_create(struct pipe_screen *screen, const struct pipe_resource *templ); diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 5d86be42762..626856c3b5f 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -1021,23 +1021,6 @@ static void r300_texture_setup_fb_state(struct r300_surface *surf) } } -static void r300_texture_destroy(struct pipe_screen *screen, - struct pipe_resource* texture) -{ - struct r300_screen *rscreen = r300_screen(screen); - struct r300_resource* tex = (struct r300_resource*)texture; - - if (tex->tex.cmask_dwords) { - mtx_lock(&rscreen->cmask_mutex); - if (texture == rscreen->cmask_resource) { - rscreen->cmask_resource = NULL; - } - mtx_unlock(&rscreen->cmask_mutex); - } - pb_reference(&tex->buf, NULL); - FREE(tex); -} - bool r300_resource_get_handle(struct pipe_screen* screen, struct pipe_context *ctx, struct pipe_resource *texture, @@ -1059,7 +1042,7 @@ bool r300_resource_get_handle(struct pipe_screen* screen, static const struct u_resource_vtbl r300_texture_vtbl = { - r300_texture_destroy, /* resource_destroy */ + NULL, /* resource_destroy */ r300_texture_transfer_map, /* transfer_map */ r300_texture_transfer_unmap, /* transfer_unmap */ };