svga: 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:
parent
bee4236606
commit
8b2c0e725a
|
@ -139,6 +139,6 @@ svga_init_screen_resource_functions(struct svga_screen *is)
|
|||
is->screen.resource_create = svga_resource_create;
|
||||
is->screen.resource_from_handle = svga_resource_from_handle;
|
||||
is->screen.resource_get_handle = svga_resource_get_handle;
|
||||
is->screen.resource_destroy = u_resource_destroy_vtbl;
|
||||
is->screen.resource_destroy = svga_resource_destroy;
|
||||
is->screen.can_create_resource = svga_can_create_resource;
|
||||
}
|
||||
|
|
|
@ -37,6 +37,8 @@
|
|||
#include "svga_screen.h"
|
||||
#include "svga_resource_buffer.h"
|
||||
#include "svga_resource_buffer_upload.h"
|
||||
#include "svga_resource_texture.h"
|
||||
#include "svga_sampler_view.h"
|
||||
#include "svga_winsys.h"
|
||||
#include "svga_debug.h"
|
||||
|
||||
|
@ -388,43 +390,73 @@ svga_buffer_transfer_unmap(struct pipe_context *pipe,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
svga_buffer_destroy(struct pipe_screen *screen,
|
||||
struct pipe_resource *buf)
|
||||
void
|
||||
svga_resource_destroy(struct pipe_screen *screen,
|
||||
struct pipe_resource *buf)
|
||||
{
|
||||
struct svga_screen *ss = svga_screen(screen);
|
||||
struct svga_buffer *sbuf = svga_buffer(buf);
|
||||
if (buf->target == PIPE_BUFFER) {
|
||||
struct svga_screen *ss = svga_screen(screen);
|
||||
struct svga_buffer *sbuf = svga_buffer(buf);
|
||||
|
||||
assert(!p_atomic_read(&buf->reference.count));
|
||||
assert(!p_atomic_read(&buf->reference.count));
|
||||
|
||||
assert(!sbuf->dma.pending);
|
||||
assert(!sbuf->dma.pending);
|
||||
|
||||
if (sbuf->handle)
|
||||
svga_buffer_destroy_host_surface(ss, sbuf);
|
||||
if (sbuf->handle)
|
||||
svga_buffer_destroy_host_surface(ss, sbuf);
|
||||
|
||||
if (sbuf->uploaded.buffer)
|
||||
pipe_resource_reference(&sbuf->uploaded.buffer, NULL);
|
||||
if (sbuf->uploaded.buffer)
|
||||
pipe_resource_reference(&sbuf->uploaded.buffer, NULL);
|
||||
|
||||
if (sbuf->hwbuf)
|
||||
svga_buffer_destroy_hw_storage(ss, sbuf);
|
||||
if (sbuf->hwbuf)
|
||||
svga_buffer_destroy_hw_storage(ss, sbuf);
|
||||
|
||||
if (sbuf->swbuf && !sbuf->user)
|
||||
align_free(sbuf->swbuf);
|
||||
if (sbuf->swbuf && !sbuf->user)
|
||||
align_free(sbuf->swbuf);
|
||||
|
||||
pipe_resource_reference(&sbuf->translated_indices.buffer, NULL);
|
||||
pipe_resource_reference(&sbuf->translated_indices.buffer, NULL);
|
||||
|
||||
ss->hud.total_resource_bytes -= sbuf->size;
|
||||
assert(ss->hud.num_resources > 0);
|
||||
if (ss->hud.num_resources > 0)
|
||||
ss->hud.num_resources--;
|
||||
ss->hud.total_resource_bytes -= sbuf->size;
|
||||
assert(ss->hud.num_resources > 0);
|
||||
if (ss->hud.num_resources > 0)
|
||||
ss->hud.num_resources--;
|
||||
|
||||
FREE(sbuf);
|
||||
FREE(sbuf);
|
||||
} else {
|
||||
struct svga_screen *ss = svga_screen(screen);
|
||||
struct svga_texture *tex = svga_texture(buf);
|
||||
|
||||
ss->texture_timestamp++;
|
||||
|
||||
svga_sampler_view_reference(&tex->cached_view, NULL);
|
||||
|
||||
/*
|
||||
DBG("%s deleting %p\n", __FUNCTION__, (void *) tex);
|
||||
*/
|
||||
SVGA_DBG(DEBUG_DMA, "unref sid %p (texture)\n", tex->handle);
|
||||
svga_screen_surface_destroy(ss, &tex->key, &tex->handle);
|
||||
|
||||
/* Destroy the backed surface handle if exists */
|
||||
if (tex->backed_handle)
|
||||
svga_screen_surface_destroy(ss, &tex->backed_key, &tex->backed_handle);
|
||||
|
||||
ss->hud.total_resource_bytes -= tex->size;
|
||||
|
||||
FREE(tex->defined);
|
||||
FREE(tex->rendered_to);
|
||||
FREE(tex->dirty);
|
||||
FREE(tex);
|
||||
|
||||
assert(ss->hud.num_resources > 0);
|
||||
if (ss->hud.num_resources > 0)
|
||||
ss->hud.num_resources--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct u_resource_vtbl svga_buffer_vtbl =
|
||||
{
|
||||
svga_buffer_destroy, /* resource_destroy */
|
||||
NULL, /* resource_destroy */
|
||||
svga_buffer_transfer_map, /* transfer_map */
|
||||
svga_buffer_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
|
|
@ -378,4 +378,8 @@ svga_buffer_transfer_flush_region(struct pipe_context *pipe,
|
|||
struct pipe_transfer *transfer,
|
||||
const struct pipe_box *box);
|
||||
|
||||
void
|
||||
svga_resource_destroy(struct pipe_screen *screen,
|
||||
struct pipe_resource *buf);
|
||||
|
||||
#endif /* SVGA_BUFFER_H */
|
||||
|
|
|
@ -220,40 +220,6 @@ svga_resource_get_handle(struct pipe_screen *screen,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
svga_texture_destroy(struct pipe_screen *screen,
|
||||
struct pipe_resource *pt)
|
||||
{
|
||||
struct svga_screen *ss = svga_screen(screen);
|
||||
struct svga_texture *tex = svga_texture(pt);
|
||||
|
||||
ss->texture_timestamp++;
|
||||
|
||||
svga_sampler_view_reference(&tex->cached_view, NULL);
|
||||
|
||||
/*
|
||||
DBG("%s deleting %p\n", __FUNCTION__, (void *) tex);
|
||||
*/
|
||||
SVGA_DBG(DEBUG_DMA, "unref sid %p (texture)\n", tex->handle);
|
||||
svga_screen_surface_destroy(ss, &tex->key, &tex->handle);
|
||||
|
||||
/* Destroy the backed surface handle if exists */
|
||||
if (tex->backed_handle)
|
||||
svga_screen_surface_destroy(ss, &tex->backed_key, &tex->backed_handle);
|
||||
|
||||
ss->hud.total_resource_bytes -= tex->size;
|
||||
|
||||
FREE(tex->defined);
|
||||
FREE(tex->rendered_to);
|
||||
FREE(tex->dirty);
|
||||
FREE(tex);
|
||||
|
||||
assert(ss->hud.num_resources > 0);
|
||||
if (ss->hud.num_resources > 0)
|
||||
ss->hud.num_resources--;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine if we need to read back a texture image before mapping it.
|
||||
*/
|
||||
|
@ -877,7 +843,7 @@ format_has_depth(enum pipe_format format)
|
|||
|
||||
struct u_resource_vtbl svga_texture_vtbl =
|
||||
{
|
||||
svga_texture_destroy, /* resource_destroy */
|
||||
NULL, /* resource_destroy */
|
||||
svga_texture_transfer_map, /* transfer_map */
|
||||
svga_texture_transfer_unmap, /* transfer_unmap */
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue