From 0dccec8e89f87b9fc12722ac56ac5fd8bba575c4 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 16 Feb 2022 11:30:45 +1000 Subject: [PATCH] llvmpipe: add support for fence_server_sync. This fixes multi-context flushes with async fs processing. Reviewed-by: Roland Scheidegger Part-of: --- src/gallium/drivers/llvmpipe/lp_context.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c index da7c4d2e2d3..8038e219015 100644 --- a/src/gallium/drivers/llvmpipe/lp_context.c +++ b/src/gallium/drivers/llvmpipe/lp_context.c @@ -47,6 +47,7 @@ #include "lp_query.h" #include "lp_setup.h" #include "lp_screen.h" +#include "lp_fence.h" /* This is only safe if there's just one concurrent context */ #ifdef EMBEDDED_DEVICE @@ -118,6 +119,16 @@ do_flush( struct pipe_context *pipe, llvmpipe_flush(pipe, fence, __FUNCTION__); } +static void +llvmpipe_fence_server_sync(struct pipe_context *pipe, + struct pipe_fence_handle *fence) +{ + struct lp_fence *f = (struct lp_fence *)fence; + + if (!f->issued) + return; + lp_fence_wait(f); +} static void llvmpipe_render_condition(struct pipe_context *pipe, @@ -207,6 +218,7 @@ llvmpipe_create_context(struct pipe_screen *screen, void *priv, llvmpipe->pipe.render_condition = llvmpipe_render_condition; llvmpipe->pipe.render_condition_mem = llvmpipe_render_condition_mem; + llvmpipe->pipe.fence_server_sync = llvmpipe_fence_server_sync; llvmpipe->pipe.get_device_reset_status = llvmpipe_get_device_reset_status; llvmpipe_init_blend_funcs(llvmpipe); llvmpipe_init_clip_funcs(llvmpipe);