diff --git a/frontend/drivers/platform_wiiu.c b/frontend/drivers/platform_wiiu.c index 49fdeead2f..7325e3ab6f 100644 --- a/frontend/drivers/platform_wiiu.c +++ b/frontend/drivers/platform_wiiu.c @@ -48,6 +48,7 @@ #include #include +#include #include #include #include @@ -383,6 +384,16 @@ void SaveCallback() OSSavesDone_ReadyToRelease(); } +static bool swap_is_pending(void* start_time) +{ + uint32_t swap_count, flip_count; + OSTime last_flip , last_vsync; + + GX2GetSwapStatus(&swap_count, &flip_count, &last_flip, &last_vsync); + + return last_vsync < *(OSTime*)start_time; +} + int main(int argc, char **argv) { #if 1 @@ -447,12 +458,20 @@ int main(int argc, char **argv) do { unsigned sleep_ms = 0; + + if(video_driver_get_ptr(false)) + { + OSTime start_time = OSGetSystemTime(); + task_queue_wait(swap_is_pending, &start_time); + } + else + task_queue_wait(NULL, NULL); + int ret = runloop_iterate(&sleep_ms); if (ret == 1 && sleep_ms > 0) retro_sleep(sleep_ms); - task_queue_wait(); if (ret == -1) break; diff --git a/gfx/drivers/wiiu_gfx.c b/gfx/drivers/wiiu_gfx.c index 980473cd6e..58b08cd458 100644 --- a/gfx/drivers/wiiu_gfx.c +++ b/gfx/drivers/wiiu_gfx.c @@ -502,12 +502,6 @@ static bool wiiu_gfx_frame(void* data, const void* frame, wiiu_video_t* wiiu = (wiiu_video_t*) data; - if (!width || !height) - { - GX2WaitForVsync(); - return true; - } - if(wiiu->vsync) { uint32_t swap_count; @@ -527,6 +521,10 @@ static bool wiiu_gfx_frame(void* data, const void* frame, } GX2WaitForFlip(); + + if (!width || !height) + return true; + static u32 lastTick , currentTick; currentTick = OSGetSystemTick(); u32 diff = currentTick - lastTick;