From 275d93c9ab0f533fa70d698726afc8adaaefb664 Mon Sep 17 00:00:00 2001
From: Adeniyi Mayokun adeniyimayokun17@gmail.com Date: Wed, 14 Mar 2018 05:35:20 +0100 Subject: [PATCH] wined3d use SwitchToThread waits in wined3d_pause
--- dlls/wined3d/cs.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c index 480717c06a..ca8b40c0af 100644 --- a/dlls/wined3d/cs.c +++ b/dlls/wined3d/cs.c @@ -494,7 +494,7 @@ void wined3d_cs_emit_present(struct wined3d_cs *cs, struct wined3d_swapchain *sw * IDXGIDevice1 allows tuning this. */ while (pending > 1) { - wined3d_pause(); + wined3d_pause(i++); pending = InterlockedCompareExchange(&cs->pending_presents, 0, 0); } } @@ -2589,10 +2589,13 @@ static void *wined3d_cs_mt_require_space(struct wined3d_cs *cs, size_t size, enu return wined3d_cs_queue_require_space(&cs->queue[queue_id], size, cs); }
-static void wined3d_cs_mt_finish(struct wined3d_cs *cs, enum wined3d_cs_queue_id queue_id) +static void wined3d_cs_mt_finish(struct wined3d_cs) { - if (cs->thread_id == GetCurrentThreadId()) - return wined3d_cs_st_finish(cs, queue_id); + + int i = 0; + + if (cs->thread_id == GetCurrentThreadId()) + return wined3d_cs_st_finish(cs);
while (cs->queue[queue_id].head != *(volatile LONG *)&cs->queue[queue_id].tail) wined3d_pause();