From 325b7692f8bf98cfee147bdd4a7df6d93a0c10e7 Mon Sep 17 00:00:00 2001 From: Tanner Van De Walle Date: Tue, 31 Mar 2026 18:33:21 -0700 Subject: [PATCH] d3d12: Fix d3d12_surface_destroy() to match pipe_surface_destroy_func() Fixes: 0615a276 ("gallium: add a destructor param to surface refcounting functions") Reviewed-by: Jesse Natalie Part-of: --- src/gallium/drivers/d3d12/d3d12_batch.cpp | 2 +- src/gallium/drivers/d3d12/d3d12_context_graphics.cpp | 4 ++-- src/gallium/drivers/d3d12/d3d12_surface.cpp | 3 ++- src/gallium/drivers/d3d12/d3d12_surface.h | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/d3d12/d3d12_batch.cpp b/src/gallium/drivers/d3d12/d3d12_batch.cpp index 4eee68c13ef..8e7a45a49fe 100644 --- a/src/gallium/drivers/d3d12/d3d12_batch.cpp +++ b/src/gallium/drivers/d3d12/d3d12_batch.cpp @@ -168,7 +168,7 @@ d3d12_reset_batch(struct d3d12_context *ctx, struct d3d12_batch *batch, uint64_t _mesa_hash_table_clear(batch->bos, delete_bo_entry); set_foreach_remove(batch->surfaces, entry) { struct pipe_surface *surf = (struct pipe_surface *)entry->key; - pipe_surface_reference(&surf, NULL, &ctx->base, (pipe_surface_destroy_func)d3d12_surface_destroy); + pipe_surface_reference(&surf, NULL, &ctx->base, d3d12_surface_destroy); } _mesa_set_clear(batch->objects, delete_object); diff --git a/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp b/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp index 54832567e51..a2012e97d58 100644 --- a/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp +++ b/src/gallium/drivers/d3d12/d3d12_context_graphics.cpp @@ -2026,7 +2026,7 @@ d3d12_clear_render_target(struct pipe_context *pctx, clear_color, 1, &rect); ctx->has_commands = true; d3d12_batch_reference_surface_texture(d3d12_current_batch(ctx), surf); - d3d12_surface_destroy(surf); + d3d12_surface_destroy(NULL, &surf->base); } @@ -2075,7 +2075,7 @@ d3d12_clear_depth_stencil(struct pipe_context *pctx, if (!render_condition_enabled && ctx->current_predication) { d3d12_enable_predication(ctx); } - d3d12_surface_destroy(surf); + d3d12_surface_destroy(NULL, &surf->base); } static void diff --git a/src/gallium/drivers/d3d12/d3d12_surface.cpp b/src/gallium/drivers/d3d12/d3d12_surface.cpp index 9abde8e9696..976eda656d3 100644 --- a/src/gallium/drivers/d3d12/d3d12_surface.cpp +++ b/src/gallium/drivers/d3d12/d3d12_surface.cpp @@ -257,8 +257,9 @@ d3d12_create_surface(struct d3d12_screen *screen, } void -d3d12_surface_destroy(struct d3d12_surface *surface) +d3d12_surface_destroy(struct pipe_context *ctx, struct pipe_surface *psurf) { + struct d3d12_surface *surface = (struct d3d12_surface *)psurf; struct d3d12_screen *screen = surface->screen; mtx_lock(&screen->descriptor_pool_mutex); diff --git a/src/gallium/drivers/d3d12/d3d12_surface.h b/src/gallium/drivers/d3d12/d3d12_surface.h index 19e31d14028..3bb2da67f15 100644 --- a/src/gallium/drivers/d3d12/d3d12_surface.h +++ b/src/gallium/drivers/d3d12/d3d12_surface.h @@ -63,7 +63,7 @@ d3d12_create_surface(struct d3d12_screen *screen, const struct pipe_surface *tpl); void -d3d12_surface_destroy(struct d3d12_surface *surf); +d3d12_surface_destroy(struct pipe_context *ctx, struct pipe_surface *psurf); static inline void d3d12_surface_reference(struct d3d12_surface **dst, struct d3d12_surface *src) @@ -74,7 +74,7 @@ d3d12_surface_reference(struct d3d12_surface **dst, struct d3d12_surface *src) src ? &src->base.reference : NULL, (debug_reference_descriptor) debug_describe_surface)) - d3d12_surface_destroy(old_dst); + d3d12_surface_destroy(NULL, &old_dst->base); *dst = src; }