Add threaded video option.

This commit is contained in:
Themaister 2013-10-06 17:23:49 +02:00
parent 79631ece8d
commit 3b97cdfdac
6 changed files with 22 additions and 1 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);