From a6af34fbff448f2b0ba5622fee198e9c57a2b550 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Mon, 22 Feb 2021 09:09:21 +0100 Subject: [PATCH] optional wait_for_vblank on flip --- inc/fps_limiter.h | 2 +- src/dd.c | 2 +- src/fps_limiter.c | 29 ++++++++++++++++------------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/inc/fps_limiter.h b/inc/fps_limiter.h index 21cf1de..7a44cb3 100644 --- a/inc/fps_limiter.h +++ b/inc/fps_limiter.h @@ -53,7 +53,7 @@ typedef struct fps_limiter extern fps_limiter g_fpsl; void fpsl_init(); -BOOL fpsl_wait_for_vblank(); +BOOL fpsl_wait_for_vblank(BOOL open_adapter); BOOL fpsl_dwm_flush(); BOOL fpsl_dwm_is_enabled(); void fpsl_frame_start(); diff --git a/src/dd.c b/src/dd.c index fd61a1c..f6d5fde 100644 --- a/src/dd.c +++ b/src/dd.c @@ -706,7 +706,7 @@ HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE h) { if (g_ddraw->maxgameticks == -2) { - if (fpsl_dwm_flush()) + if (fpsl_dwm_flush() || fpsl_wait_for_vblank(FALSE)) return DD_OK; } diff --git a/src/fps_limiter.c b/src/fps_limiter.c index fa28e8d..083f0d3 100644 --- a/src/fps_limiter.c +++ b/src/fps_limiter.c @@ -76,22 +76,25 @@ void fpsl_init() g_fpsl.initialized = TRUE; } -BOOL fpsl_wait_for_vblank() +BOOL fpsl_wait_for_vblank(BOOL open_adapter) { - if (g_fpsl.initialized && g_fpsl.D3DKMTOpenAdapterFromHdc && !g_fpsl.got_adapter) + if (g_fpsl.initialized) { - g_fpsl.adapter.hDc = g_ddraw->render.hdc; - - if (g_fpsl.D3DKMTOpenAdapterFromHdc(&g_fpsl.adapter) == 0) + if (open_adapter && g_fpsl.D3DKMTOpenAdapterFromHdc && !g_fpsl.got_adapter) { - g_fpsl.vblank_event.hAdapter = g_fpsl.adapter.hAdapter; - g_fpsl.got_adapter = TRUE; - } - } + g_fpsl.adapter.hDc = g_ddraw->render.hdc; - if (g_fpsl.got_adapter && g_fpsl.D3DKMTWaitForVerticalBlankEvent) - { - return g_fpsl.D3DKMTWaitForVerticalBlankEvent(&g_fpsl.vblank_event) == 0; + if (g_fpsl.D3DKMTOpenAdapterFromHdc(&g_fpsl.adapter) == 0) + { + g_fpsl.vblank_event.hAdapter = g_fpsl.adapter.hAdapter; + g_fpsl.got_adapter = TRUE; + } + } + + if (g_fpsl.got_adapter && g_fpsl.D3DKMTWaitForVerticalBlankEvent) + { + return g_fpsl.D3DKMTWaitForVerticalBlankEvent(&g_fpsl.vblank_event) == 0; + } } return FALSE; @@ -122,7 +125,7 @@ void fpsl_frame_end() { if (g_ddraw->render.maxfps < 0 || g_ddraw->vsync) { - if (fpsl_dwm_flush() || fpsl_wait_for_vblank()) + if (fpsl_dwm_flush() || fpsl_wait_for_vblank(TRUE)) return; }