From 3b97cdfdac38705062f01ef34be2f3b95ce16a2f Mon Sep 17 00:00:00 2001 From: Themaister Date: Sun, 6 Oct 2013 17:23:49 +0200 Subject: [PATCH] Add threaded video option. --- driver.c | 2 +- frontend/menu/menu_common.h | 1 + frontend/menu/menu_settings.c | 15 +++++++++++++++ frontend/menu/rgui.c | 1 + frontend/menu/rguidisp_bitmap.c | 3 +++ settings.c | 1 + 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/driver.c b/driver.c index 9e8b112097..6024fabf2d 100644 --- a/driver.c +++ b/driver.c @@ -986,9 +986,9 @@ void init_video_input(void) const input_driver_t *tmp = driver.input; #ifdef HAVE_THREADS + find_video_driver(); // Need to grab the "real" video driver interface on a reinit. if (g_settings.video.threaded && !g_extern.system.hw_render_callback.context_type) // Can't do hardware rendering with threaded driver currently. { - find_video_driver(); // Need to grab the "real" video driver interface on a reinit. RARCH_LOG("Starting threaded video driver ...\n"); if (!rarch_threaded_video_init(&driver.video, &driver.video_data, &driver.input, &driver.input_data, diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index 19a38afc5b..c77f1b9de5 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -75,6 +75,7 @@ typedef enum RGUI_SETTINGS_CUSTOM_VIEWPORT, RGUI_SETTINGS_CUSTOM_VIEWPORT_2, RGUI_SETTINGS_TOGGLE_FULLSCREEN, + RGUI_SETTINGS_VIDEO_THREADED, RGUI_SETTINGS_VIDEO_ROTATION, RGUI_SETTINGS_VIDEO_VSYNC, RGUI_SETTINGS_VIDEO_HARD_SYNC, diff --git a/frontend/menu/menu_settings.c b/frontend/menu/menu_settings.c index c291068e89..0e35428ff9 100644 --- a/frontend/menu/menu_settings.c +++ b/frontend/menu/menu_settings.c @@ -812,6 +812,21 @@ int menu_set_settings(unsigned setting, unsigned action) break; } + case RGUI_SETTINGS_VIDEO_THREADED: + { + bool old = g_settings.video.threaded; + if (action == RGUI_ACTION_OK || + action == RGUI_ACTION_LEFT || + action == RGUI_ACTION_RIGHT) + g_settings.video.threaded = !g_settings.video.threaded; + else if (action == RGUI_ACTION_START) + g_settings.video.threaded = false; + + if (g_settings.video.threaded != old) + rarch_set_fullscreen(g_settings.video.fullscreen); // Reinit video driver. + break; + } + case RGUI_SETTINGS_VIDEO_SWAP_INTERVAL: { unsigned old = g_settings.video.swap_interval; diff --git a/frontend/menu/rgui.c b/frontend/menu/rgui.c index a5158bd4ae..662f691b70 100644 --- a/frontend/menu/rgui.c +++ b/frontend/menu/rgui.c @@ -337,6 +337,7 @@ static void rgui_settings_video_options_populate_entries(rgui_handle_t *rgui) rgui_list_push(rgui->selection_buf, "Hard GPU Sync Frames", RGUI_SETTINGS_VIDEO_HARD_SYNC_FRAMES, 0); rgui_list_push(rgui->selection_buf, "Black Frame Insertion", RGUI_SETTINGS_VIDEO_BLACK_FRAME_INSERTION, 0); rgui_list_push(rgui->selection_buf, "VSync Swap Interval", RGUI_SETTINGS_VIDEO_SWAP_INTERVAL, 0); + rgui_list_push(rgui->selection_buf, "Threaded Driver", RGUI_SETTINGS_VIDEO_THREADED, 0); #if !defined(RARCH_CONSOLE) && !defined(RARCH_MOBILE) rgui_list_push(rgui->selection_buf, "Windowed Scale (X)", RGUI_SETTINGS_VIDEO_WINDOW_SCALE_X, 0); rgui_list_push(rgui->selection_buf, "Windowed Scale (Y)", RGUI_SETTINGS_VIDEO_WINDOW_SCALE_Y, 0); diff --git a/frontend/menu/rguidisp_bitmap.c b/frontend/menu/rguidisp_bitmap.c index e25b499c4c..7366999ae0 100644 --- a/frontend/menu/rguidisp_bitmap.c +++ b/frontend/menu/rguidisp_bitmap.c @@ -447,6 +447,9 @@ static void render_text(rgui_handle_t *rgui) case RGUI_SETTINGS_VIDEO_SWAP_INTERVAL: snprintf(type_str, sizeof(type_str), "%u", g_settings.video.swap_interval); break; + case RGUI_SETTINGS_VIDEO_THREADED: + strlcpy(type_str, g_settings.video.threaded ? "ON" : "OFF", sizeof(type_str)); + break; case RGUI_SETTINGS_VIDEO_WINDOW_SCALE_X: snprintf(type_str, sizeof(type_str), "%.1fx", g_settings.video.xscale); break; diff --git a/settings.c b/settings.c index 9b5af6aeb5..fd3a204342 100644 --- a/settings.c +++ b/settings.c @@ -1062,6 +1062,7 @@ bool config_save_file(const char *path) config_set_bool(conf, "video_crop_overscan", g_settings.video.crop_overscan); config_set_bool(conf, "video_scale_integer", g_settings.video.scale_integer); config_set_bool(conf, "video_smooth", g_settings.video.smooth); + config_set_bool(conf, "video_threaded", g_settings.video.threaded); config_set_bool(conf, "video_fullscreen", g_settings.video.fullscreen); config_set_float(conf, "video_refresh_rate", g_settings.video.refresh_rate); config_set_string(conf, "video_driver", g_settings.video.driver);