diff --git a/.pick_status.json b/.pick_status.json index ce7b8ed8e3c..e3d29281521 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -418,7 +418,7 @@ "description": "llvmpipe: Add some missing locking", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "a680fd078c0a7574b60fbf9a7e5c9f42c97a744e" }, diff --git a/src/gallium/drivers/llvmpipe/lp_flush.c b/src/gallium/drivers/llvmpipe/lp_flush.c index c49836432a9..ee509010f37 100644 --- a/src/gallium/drivers/llvmpipe/lp_flush.c +++ b/src/gallium/drivers/llvmpipe/lp_flush.c @@ -57,7 +57,9 @@ llvmpipe_flush( struct pipe_context *pipe, /* ask the setup module to flush */ lp_setup_flush(llvmpipe->setup, reason); + mtx_lock(&screen->rast_mutex); lp_rast_fence(screen->rast, (struct lp_fence **)fence); + mtx_unlock(&screen->rast_mutex); if (fence && (!*fence)) *fence = (struct pipe_fence_handle *)lp_fence_create(0); diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c index 4adfa705914..239e17f53db 100644 --- a/src/gallium/drivers/llvmpipe/lp_setup.c +++ b/src/gallium/drivers/llvmpipe/lp_setup.c @@ -1714,7 +1714,9 @@ lp_setup_end_query(struct lp_setup_context *setup, struct llvmpipe_query *pq) } else { struct llvmpipe_screen *screen = llvmpipe_screen(setup->pipe->screen); + mtx_lock(&screen->rast_mutex); lp_rast_fence(screen->rast, &pq->fence); + mtx_unlock(&screen->rast_mutex); } fail: