Fix video submenu not updating when a driver swap happens.

Thanks to jdgleaver for this.
This commit is contained in:
Rinnegatamante 2019-10-11 13:05:32 +02:00
parent d18ae6dac6
commit 77d185ba8b
3 changed files with 75 additions and 58 deletions

View File

@ -4772,9 +4772,6 @@ unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ct
case DISPLAYLIST_LATENCY_SETTINGS_LIST: case DISPLAYLIST_LATENCY_SETTINGS_LIST:
{ {
menu_displaylist_build_info_t build_list[] = { menu_displaylist_build_info_t build_list[] = {
{MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, PARSE_ONLY_UINT },
{MENU_ENUM_LABEL_VIDEO_HARD_SYNC, PARSE_ONLY_BOOL },
{MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES, PARSE_ONLY_UINT },
{MENU_ENUM_LABEL_VIDEO_FRAME_DELAY, PARSE_ONLY_UINT }, {MENU_ENUM_LABEL_VIDEO_FRAME_DELAY, PARSE_ONLY_UINT },
{MENU_ENUM_LABEL_AUDIO_LATENCY, PARSE_ONLY_UINT }, {MENU_ENUM_LABEL_AUDIO_LATENCY, PARSE_ONLY_UINT },
{MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR, PARSE_ONLY_UINT }, {MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR, PARSE_ONLY_UINT },
@ -4785,6 +4782,25 @@ unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ct
{MENU_ENUM_LABEL_RUN_AHEAD_HIDE_WARNINGS, PARSE_ONLY_BOOL }, {MENU_ENUM_LABEL_RUN_AHEAD_HIDE_WARNINGS, PARSE_ONLY_BOOL },
}; };
if (video_driver_test_all_flags(GFX_CTX_FLAGS_CUSTOMIZABLE_SWAPCHAIN_IMAGES))
{
menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES,
PARSE_ONLY_UINT, false);
count++;
}
if (video_driver_test_all_flags(GFX_CTX_FLAGS_HARD_SYNC))
{
menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC,
PARSE_ONLY_BOOL, false);
count++;
menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES,
PARSE_ONLY_UINT, false);
count++;
}
for (i = 0; i < ARRAY_SIZE(build_list); i++) for (i = 0; i < ARRAY_SIZE(build_list); i++)
{ {
if (menu_displaylist_parse_settings_enum(list, if (menu_displaylist_parse_settings_enum(list,
@ -7420,18 +7436,24 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
menu_displaylist_parse_settings_enum(info->list, menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_ADAPTIVE_VSYNC, MENU_ENUM_LABEL_VIDEO_ADAPTIVE_VSYNC,
PARSE_ONLY_BOOL, false); PARSE_ONLY_BOOL, false);
if (menu_displaylist_parse_settings_enum(info->list, if (video_driver_test_all_flags(GFX_CTX_FLAGS_CUSTOMIZABLE_SWAPCHAIN_IMAGES))
MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, {
PARSE_ONLY_UINT, false) == 0) menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES,
PARSE_ONLY_UINT, false);
count++; count++;
if (menu_displaylist_parse_settings_enum(info->list, }
if (video_driver_test_all_flags(GFX_CTX_FLAGS_HARD_SYNC))
{
menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC, MENU_ENUM_LABEL_VIDEO_HARD_SYNC,
PARSE_ONLY_BOOL, false) == 0) PARSE_ONLY_BOOL, false);
count++; count++;
if (menu_displaylist_parse_settings_enum(info->list, menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES, MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES,
PARSE_ONLY_UINT, false) == 0) PARSE_ONLY_UINT, false);
count++; count++;
}
if (menu_displaylist_parse_settings_enum(info->list, if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_VIDEO_FRAME_DELAY, MENU_ENUM_LABEL_VIDEO_FRAME_DELAY,
PARSE_ONLY_UINT, false) == 0) PARSE_ONLY_UINT, false) == 0)

View File

@ -9548,55 +9548,48 @@ static bool setting_append_list(
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO); SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED); SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
if (video_driver_test_all_flags(GFX_CTX_FLAGS_CUSTOMIZABLE_SWAPCHAIN_IMAGES)) CONFIG_UINT(
{ list, list_info,
CONFIG_UINT( &settings->uints.video_max_swapchain_images,
list, list_info, MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES,
&settings->uints.video_max_swapchain_images, MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES,
MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES, DEFAULT_MAX_SWAPCHAIN_IMAGES,
MENU_ENUM_LABEL_VALUE_VIDEO_MAX_SWAPCHAIN_IMAGES, &group_info,
DEFAULT_MAX_SWAPCHAIN_IMAGES, &subgroup_info,
&group_info, parent_group,
&subgroup_info, general_write_handler,
parent_group, general_read_handler);
general_write_handler, menu_settings_list_current_add_range(list, list_info, 1, 4, 1, true, true);
general_read_handler); SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
menu_settings_list_current_add_range(list, list_info, 1, 4, 1, true, true);
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
}
if (video_driver_test_all_flags(GFX_CTX_FLAGS_HARD_SYNC)) CONFIG_BOOL(
{ list, list_info,
CONFIG_BOOL( &settings->bools.video_hard_sync,
list, list_info, MENU_ENUM_LABEL_VIDEO_HARD_SYNC,
&settings->bools.video_hard_sync, MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC, DEFAULT_HARD_SYNC,
MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC, MENU_ENUM_LABEL_VALUE_OFF,
DEFAULT_HARD_SYNC, MENU_ENUM_LABEL_VALUE_ON,
MENU_ENUM_LABEL_VALUE_OFF, &group_info,
MENU_ENUM_LABEL_VALUE_ON, &subgroup_info,
&group_info, parent_group,
&subgroup_info, general_write_handler,
parent_group, general_read_handler,
general_write_handler, SD_FLAG_NONE);
general_read_handler,
SD_FLAG_NONE
);
CONFIG_UINT( CONFIG_UINT(
list, list_info, list, list_info,
&settings->uints.video_hard_sync_frames, &settings->uints.video_hard_sync_frames,
MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES, MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES,
MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES, MENU_ENUM_LABEL_VALUE_VIDEO_HARD_SYNC_FRAMES,
DEFAULT_HARD_SYNC_FRAMES, DEFAULT_HARD_SYNC_FRAMES,
&group_info, &group_info,
&subgroup_info, &subgroup_info,
parent_group, parent_group,
general_write_handler, general_write_handler,
general_read_handler); general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true); menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true);
}
if (video_driver_test_all_flags(GFX_CTX_FLAGS_ADAPTIVE_VSYNC)) if (video_driver_test_all_flags(GFX_CTX_FLAGS_ADAPTIVE_VSYNC))
{ {

View File

@ -19021,6 +19021,7 @@ static bool video_driver_find_driver(void)
if (hwr && hw_render_context_is_vulkan(hwr->context_type)) if (hwr && hw_render_context_is_vulkan(hwr->context_type))
{ {
RARCH_LOG("[Video]: Using HW render, Vulkan driver forced.\n"); RARCH_LOG("[Video]: Using HW render, Vulkan driver forced.\n");
strcpy(settings->arrays.video_driver, "vulkan");
current_video = &video_vulkan; current_video = &video_vulkan;
} }
#endif #endif
@ -21093,7 +21094,8 @@ static void drivers_init(int flags)
{ {
/* Initialize menu driver */ /* Initialize menu driver */
if (flags & DRIVER_MENU_MASK) if (flags & DRIVER_MENU_MASK)
menu_driver_init(video_is_threaded); if (!menu_driver_init(video_is_threaded))
RARCH_ERR("Unable to init menu driver.\n");
} }
#else #else
/* Qt uses core info, even if the menu is disabled */ /* Qt uses core info, even if the menu is disabled */