nouveau: stop using u_resource_vtbl::resource_destroy

Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10659>
This commit is contained in:
Marek Olšák 2021-05-05 13:39:20 -04:00 committed by Marge Bot
parent f60a44b686
commit 6d843c284d
9 changed files with 49 additions and 18 deletions

View File

@ -112,12 +112,17 @@ nouveau_buffer_reallocate(struct nouveau_screen *screen,
return nouveau_buffer_allocate(screen, buf, domain);
}
static void
void
nouveau_buffer_destroy(struct pipe_screen *pscreen,
struct pipe_resource *presource)
{
struct nv04_resource *res = nv04_resource(presource);
if (res->status & NOUVEAU_BUFFER_STATUS_USER_PTR) {
FREE(res);
return;
}
nouveau_buffer_release_gpu_storage(res);
if (res->data && !(res->status & NOUVEAU_BUFFER_STATUS_USER_MEMORY))
@ -630,19 +635,11 @@ nouveau_resource_map_offset(struct nouveau_context *nv,
const struct u_resource_vtbl nouveau_buffer_vtbl =
{
nouveau_buffer_destroy, /* resource_destroy */
NULL, /* resource_destroy */
nouveau_buffer_transfer_map, /* transfer_map */
nouveau_buffer_transfer_unmap, /* transfer_unmap */
};
static void
nouveau_user_ptr_destroy(struct pipe_screen *pscreen,
struct pipe_resource *presource)
{
struct nv04_resource *res = nv04_resource(presource);
FREE(res);
}
static void *
nouveau_user_ptr_transfer_map(struct pipe_context *pipe,
struct pipe_resource *resource,
@ -668,7 +665,7 @@ nouveau_user_ptr_transfer_unmap(struct pipe_context *pipe,
const struct u_resource_vtbl nouveau_user_ptr_buffer_vtbl =
{
nouveau_user_ptr_destroy, /* resource_destroy */
NULL, /* resource_destroy */
nouveau_user_ptr_transfer_map, /* transfer_map */
nouveau_user_ptr_transfer_unmap, /* transfer_unmap */
};

View File

@ -71,6 +71,10 @@ void *
nouveau_resource_map_offset(struct nouveau_context *, struct nv04_resource *,
uint32_t offset, uint32_t flags);
void
nouveau_buffer_destroy(struct pipe_screen *pscreen,
struct pipe_resource *presource);
void
nouveau_buffer_transfer_flush_region(struct pipe_context *pipe,
struct pipe_transfer *transfer,

View File

@ -67,7 +67,7 @@ nv30_miptree_get_handle(struct pipe_screen *pscreen,
return nouveau_screen_bo_get_handle(pscreen, mt->base.bo, stride, handle);
}
static void
void
nv30_miptree_destroy(struct pipe_screen *pscreen, struct pipe_resource *pt)
{
struct nv30_miptree *mt = nv30_miptree(pt);
@ -403,7 +403,7 @@ nv30_miptree_transfer_unmap(struct pipe_context *pipe,
}
const struct u_resource_vtbl nv30_miptree_vtbl = {
nv30_miptree_destroy,
NULL,
nv30_miptree_transfer_map,
nv30_miptree_transfer_unmap,
};

View File

@ -59,6 +59,15 @@ nv30_resource_create(struct pipe_screen *pscreen,
}
}
static void
nv30_resource_destroy(struct pipe_screen *pscreen, struct pipe_resource *res)
{
if (res->target == PIPE_BUFFER)
nouveau_buffer_destroy(pscreen, res);
else
nv30_miptree_destroy(pscreen, res);
}
static struct pipe_resource *
nv30_resource_from_handle(struct pipe_screen *pscreen,
const struct pipe_resource *tmpl,
@ -77,7 +86,7 @@ nv30_resource_screen_init(struct pipe_screen *pscreen)
pscreen->resource_create = nv30_resource_create;
pscreen->resource_from_handle = nv30_resource_from_handle;
pscreen->resource_get_handle = nv30_miptree_get_handle;
pscreen->resource_destroy = u_resource_destroy_vtbl;
pscreen->resource_destroy = nv30_resource_destroy;
}
void

View File

@ -65,6 +65,9 @@ nv30_miptree_get_handle(struct pipe_screen *pscreen,
struct winsys_handle *handle,
unsigned usage);
void
nv30_miptree_destroy(struct pipe_screen *pscreen, struct pipe_resource *pt);
void
nv30_resource_copy_region(struct pipe_context *pipe,
struct pipe_resource *dst, unsigned dst_level,

View File

@ -204,7 +204,7 @@ nv50_miptree_get_handle(struct pipe_screen *pscreen,
const struct u_resource_vtbl nv50_miptree_vtbl =
{
nv50_miptree_destroy, /* resource_destroy */
NULL, /* resource_destroy */
nv50_miptree_transfer_map, /* transfer_map */
nv50_miptree_transfer_unmap, /* transfer_unmap */
};

View File

@ -19,6 +19,15 @@ nv50_resource_create(struct pipe_screen *screen,
}
}
static void
nv50_resource_destroy(struct pipe_screen *pscreen, struct pipe_resource *res)
{
if (res->target == PIPE_BUFFER)
nouveau_buffer_destroy(pscreen, res);
else
nv50_miptree_destroy(pscreen, res);
}
static struct pipe_resource *
nv50_resource_from_handle(struct pipe_screen * screen,
const struct pipe_resource *templ,
@ -110,5 +119,5 @@ nv50_screen_init_resource_functions(struct pipe_screen *pscreen)
pscreen->resource_create = nv50_resource_create;
pscreen->resource_from_handle = nv50_resource_from_handle;
pscreen->resource_get_handle = nv50_miptree_get_handle;
pscreen->resource_destroy = u_resource_destroy_vtbl;
pscreen->resource_destroy = nv50_resource_destroy;
}

View File

@ -438,7 +438,7 @@ nvc0_miptree_select_best_modifier(struct pipe_screen *pscreen,
const struct u_resource_vtbl nvc0_miptree_vtbl =
{
nv50_miptree_destroy, /* resource_destroy */
NULL, /* resource_destroy */
nvc0_miptree_transfer_map, /* transfer_map */
nvc0_miptree_transfer_unmap, /* transfer_unmap */
};

View File

@ -30,6 +30,15 @@ nvc0_resource_create_with_modifiers(struct pipe_screen *screen,
}
}
static void
nvc0_resource_destroy(struct pipe_screen *pscreen, struct pipe_resource *res)
{
if (res->target == PIPE_BUFFER)
nouveau_buffer_destroy(pscreen, res);
else
nv50_miptree_destroy(pscreen, res);
}
static void
nvc0_query_dmabuf_modifiers(struct pipe_screen *screen,
enum pipe_format format, int max,
@ -164,6 +173,6 @@ nvc0_screen_init_resource_functions(struct pipe_screen *pscreen)
pscreen->is_dmabuf_modifier_supported = nvc0_is_dmabuf_modifier_supported;
pscreen->resource_from_handle = nvc0_resource_from_handle;
pscreen->resource_get_handle = nvc0_miptree_get_handle;
pscreen->resource_destroy = u_resource_destroy_vtbl;
pscreen->resource_destroy = nvc0_resource_destroy;
pscreen->resource_from_user_memory = nvc0_resource_from_user_memory;
}