diff --git a/configuration.c b/configuration.c index 0b0af3763e..c2f93da4e1 100644 --- a/configuration.c +++ b/configuration.c @@ -768,7 +768,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, SETTING_BOOL("video_scale_integer", &settings->bools.video_scale_integer, true, scale_integer, false); SETTING_BOOL("video_smooth", &settings->bools.video_smooth, true, video_smooth, false); SETTING_BOOL("video_force_aspect", &settings->bools.video_force_aspect, true, force_aspect, false); - SETTING_BOOL("video_threaded", &settings->bools.video_threaded, true, video_threaded, false); + SETTING_BOOL("video_threaded", video_driver_get_threaded(), true, video_threaded, false); SETTING_BOOL("video_shared_context", &settings->bools.video_shared_context, true, video_shared_context, false); SETTING_BOOL("auto_screenshot_filename", &settings->bools.auto_screenshot_filename, true, auto_screenshot_filename, false); SETTING_BOOL("video_force_srgb_disable", &settings->bools.video_force_srgb_disable, true, false, false); @@ -1145,7 +1145,7 @@ static void config_set_defaults(void) } if (g_defaults.settings.video_threaded_enable != video_threaded) - settings->bools.video_threaded = g_defaults.settings.video_threaded_enable; + video_driver_set_threaded(g_defaults.settings.video_threaded_enable); settings->floats.video_msg_color_r = ((message_color >> 16) & 0xff) / 255.0f; settings->floats.video_msg_color_g = ((message_color >> 8) & 0xff) / 255.0f; diff --git a/gfx/video_driver.c b/gfx/video_driver.c index e9cbd02288..dd0244edd0 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -130,6 +130,7 @@ const void *frame_cache_data = NULL; static unsigned frame_cache_width = 0; static unsigned frame_cache_height = 0; static size_t frame_cache_pitch = 0; +static bool video_driver_threaded = false; static float video_driver_aspect_ratio = 0.0f; static unsigned video_driver_width = 0; @@ -349,12 +350,20 @@ static bool hw_render_context_is_gl(enum retro_hw_context_type type) return false; } +bool *video_driver_get_threaded(void) +{ + return &video_driver_threaded; +} + +void video_driver_set_threaded(bool val) +{ + video_driver_threaded = val; +} + bool video_driver_is_threaded(void) { #ifdef HAVE_THREADS - settings_t *settings = config_get_ptr(); - if (!video_driver_is_hw_context() - && settings->bools.video_threaded) + if (!video_driver_is_hw_context() && video_driver_threaded) return true; #endif return false; diff --git a/gfx/video_driver.h b/gfx/video_driver.h index 7d480d231c..066e8cae6c 100644 --- a/gfx/video_driver.h +++ b/gfx/video_driver.h @@ -606,6 +606,10 @@ void video_driver_get_record_status( bool *has_gpu_record, uint8_t **gpu_buf); +bool *video_driver_get_threaded(void); + +void video_driver_set_threaded(bool val); + void video_driver_get_status(uint64_t *frame_count, bool * is_alive, bool *is_focused); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 6e65b71b9a..fb3b3974c2 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -3498,7 +3498,7 @@ static bool setting_append_list( #if defined(HAVE_THREADS) CONFIG_BOOL( list, list_info, - &settings->bools.video_threaded, + video_driver_get_threaded(), MENU_ENUM_LABEL_VIDEO_THREADED, MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, video_threaded,