From 81d83e81db32ce4a7fae396c7647941e8dd7131a Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 15 Jul 2022 08:26:04 -0400 Subject: [PATCH] zink: break out tc/trace context unwrapping Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_context.c | 14 ++++++++++++++ src/gallium/drivers/zink/zink_context.h | 3 ++- src/gallium/drivers/zink/zink_screen.c | 8 +------- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 145c0d93a43..4b904e89843 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -51,6 +51,8 @@ #include "util/strndup.h" #include "nir.h" +#include "driver_trace/tr_context.h" + #include "util/u_memory.h" #include "util/u_upload_mgr.h" @@ -4516,3 +4518,15 @@ fail: zink_context_destroy(&ctx->base); return NULL; } + +struct zink_context * +zink_tc_context_unwrap(struct pipe_context *pctx) +{ + struct zink_context *ctx = zink_context(pctx); + struct zink_screen *screen = zink_screen(ctx->base.screen); + /* need to get the actual zink_context, not the threaded context */ + if (screen->threaded) + pctx = threaded_context_unwrap_sync(pctx); + pctx = trace_get_possibly_threaded_context(pctx); + return zink_context(pctx); +} diff --git a/src/gallium/drivers/zink/zink_context.h b/src/gallium/drivers/zink/zink_context.h index c4e62cd9efc..3a409439607 100644 --- a/src/gallium/drivers/zink/zink_context.h +++ b/src/gallium/drivers/zink/zink_context.h @@ -486,7 +486,8 @@ void zink_init_draw_functions(struct zink_context *ctx, struct zink_screen *screen); void zink_init_grid_functions(struct zink_context *ctx); - +struct zink_context * +zink_tc_context_unwrap(struct pipe_context *pctx); #ifdef __cplusplus } #endif diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 6fa8f50c7bd..9d4b6d36330 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -53,8 +53,6 @@ #include "util/u_cpu_detect.h" -#include "driver_trace/tr_context.h" - #if DETECT_OS_WINDOWS #include #define VK_LIBNAME "vulkan-1.dll" @@ -1428,11 +1426,7 @@ zink_flush_frontbuffer(struct pipe_screen *pscreen, if (!zink_is_swapchain(res) || (!zink_kopper_acquired(res->obj->dt, res->obj->dt_idx) && res->obj->last_dt_idx == UINT32_MAX)) return; - /* need to get the actual zink_context, not the threaded context */ - if (screen->threaded) - pctx = threaded_context_unwrap_sync(pctx); - pctx = trace_get_possibly_threaded_context(pctx); - ctx = zink_context(pctx); + ctx = zink_tc_context_unwrap(pctx); if (ctx->batch.swapchain || ctx->needs_present) { ctx->batch.has_work = true; pctx->flush(pctx, NULL, PIPE_FLUSH_END_OF_FRAME);