From 4fe477ee39aa7958a37989b4f9fbf0c7e55cc160 Mon Sep 17 00:00:00 2001 From: sonninnos <45124675+sonninnos@users.noreply.github.com> Date: Mon, 3 Oct 2022 16:13:01 +0300 Subject: [PATCH] Avoid 'video_gpu_screenshot' with savestates (#14464) --- gfx/video_driver.c | 6 ------ tasks/task_screenshot.c | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 41e5398f04..cb4016decf 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -2030,12 +2030,6 @@ bool video_driver_supports_viewport_read(void) bool video_driver_prefer_viewport_read(void) { video_driver_state_t *video_st = &video_driver_st; - settings_t *settings = config_get_ptr(); -#ifdef HAVE_SCREENSHOTS - bool video_gpu_screenshot = settings->bools.video_gpu_screenshot; - if (video_gpu_screenshot) - return true; -#endif return (video_driver_is_hw_context() && !video_st->current_video->read_frame_raw); } diff --git a/tasks/task_screenshot.c b/tasks/task_screenshot.c index 37d8c932ee..cc8d5c1450 100644 --- a/tasks/task_screenshot.c +++ b/tasks/task_screenshot.c @@ -534,13 +534,22 @@ static bool take_screenshot_choice( bool take_screenshot( const char *screenshot_dir, const char *name_base, - bool silence, bool has_valid_framebuffer, + bool savestate, bool has_valid_framebuffer, bool fullpath, bool use_thread) { runloop_state_t *runloop_st = runloop_state_get_ptr(); + settings_t *settings = config_get_ptr(); + bool video_gpu_screenshot = settings->bools.video_gpu_screenshot; bool is_paused = false; bool is_idle = false; bool ret = false; + bool supports_viewport_read = video_driver_supports_viewport_read(); + bool prefer_viewport_read = supports_viewport_read && + video_driver_prefer_viewport_read(); + + /* Avoid GPU screenshots with savestates */ + if (supports_viewport_read && video_gpu_screenshot && !savestate) + prefer_viewport_read = true; if (runloop_st) { @@ -555,10 +564,9 @@ bool take_screenshot( ret = take_screenshot_choice( screenshot_dir, - name_base, silence, is_paused, is_idle, + name_base, savestate, is_paused, is_idle, has_valid_framebuffer, fullpath, use_thread, - video_driver_supports_viewport_read() && - video_driver_prefer_viewport_read(), + prefer_viewport_read, video_driver_supports_read_frame_raw(), video_driver_get_pixel_format() );