apple: provide option to disable metal argument buffers
This commit is contained in:
parent
c27e815808
commit
a8075aa35f
|
@ -489,6 +489,10 @@
|
||||||
/* Choose if the screen will be able to write around the notch or not */
|
/* Choose if the screen will be able to write around the notch or not */
|
||||||
#define DEFAULT_NOTCH_WRITE_OVER_ENABLE false
|
#define DEFAULT_NOTCH_WRITE_OVER_ENABLE false
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#define DEFAULT_USE_METAL_ARG_BUFFERS (!!__builtin_available(macOS 12, iOS 13, tvOS 12, *))
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Enable use of shaders. */
|
/* Enable use of shaders. */
|
||||||
#ifdef RARCH_CONSOLE
|
#ifdef RARCH_CONSOLE
|
||||||
#define DEFAULT_SHADER_ENABLE true
|
#define DEFAULT_SHADER_ENABLE true
|
||||||
|
|
|
@ -1920,6 +1920,9 @@ static struct config_bool_setting *populate_settings_bool(
|
||||||
SETTING_BOOL("video_gpu_screenshot", &settings->bools.video_gpu_screenshot, true, DEFAULT_GPU_SCREENSHOT, false);
|
SETTING_BOOL("video_gpu_screenshot", &settings->bools.video_gpu_screenshot, true, DEFAULT_GPU_SCREENSHOT, false);
|
||||||
SETTING_BOOL("video_post_filter_record", &settings->bools.video_post_filter_record, true, DEFAULT_POST_FILTER_RECORD, false);
|
SETTING_BOOL("video_post_filter_record", &settings->bools.video_post_filter_record, true, DEFAULT_POST_FILTER_RECORD, false);
|
||||||
SETTING_BOOL("video_notch_write_over_enable", &settings->bools.video_notch_write_over_enable, true, DEFAULT_NOTCH_WRITE_OVER_ENABLE, false);
|
SETTING_BOOL("video_notch_write_over_enable", &settings->bools.video_notch_write_over_enable, true, DEFAULT_NOTCH_WRITE_OVER_ENABLE, false);
|
||||||
|
#if defined(__APPLE__) && defined(HAVE_VULKAN)
|
||||||
|
SETTING_BOOL("video_use_metal_arg_buffers", &settings->bools.video_use_metal_arg_buffers, true, DEFAULT_USE_METAL_ARG_BUFFERS, false);
|
||||||
|
#endif
|
||||||
SETTING_BOOL("video_msg_bgcolor_enable", &settings->bools.video_msg_bgcolor_enable, true, DEFAULT_MESSAGE_BGCOLOR_ENABLE, false);
|
SETTING_BOOL("video_msg_bgcolor_enable", &settings->bools.video_msg_bgcolor_enable, true, DEFAULT_MESSAGE_BGCOLOR_ENABLE, false);
|
||||||
SETTING_BOOL("video_window_show_decorations", &settings->bools.video_window_show_decorations, true, DEFAULT_WINDOW_DECORATIONS, false);
|
SETTING_BOOL("video_window_show_decorations", &settings->bools.video_window_show_decorations, true, DEFAULT_WINDOW_DECORATIONS, false);
|
||||||
SETTING_BOOL("video_window_save_positions", &settings->bools.video_window_save_positions, true, DEFAULT_WINDOW_SAVE_POSITIONS, false);
|
SETTING_BOOL("video_window_save_positions", &settings->bools.video_window_save_positions, true, DEFAULT_WINDOW_SAVE_POSITIONS, false);
|
||||||
|
|
|
@ -660,6 +660,7 @@ typedef struct settings
|
||||||
bool video_notch_write_over_enable;
|
bool video_notch_write_over_enable;
|
||||||
bool video_hdr_enable;
|
bool video_hdr_enable;
|
||||||
bool video_hdr_expand_gamut;
|
bool video_hdr_expand_gamut;
|
||||||
|
bool video_use_metal_arg_buffers;
|
||||||
|
|
||||||
/* Accessibility */
|
/* Accessibility */
|
||||||
bool accessibility_enable;
|
bool accessibility_enable;
|
||||||
|
|
|
@ -2370,6 +2370,13 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
vulkan_library = dylib_load("vulkan-1.dll");
|
vulkan_library = dylib_load("vulkan-1.dll");
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
|
/* allow overriding by environment variable; this means restart is required to change */
|
||||||
|
if (!getenv("MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS"))
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
int use_mab = settings->bools.video_use_metal_arg_buffers;
|
||||||
|
setenv("MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS", use_mab ? "1" : "0", 1);
|
||||||
|
}
|
||||||
if (__builtin_available(macOS 10.15, iOS 13, tvOS 12, *))
|
if (__builtin_available(macOS 10.15, iOS 13, tvOS 12, *))
|
||||||
vulkan_library = dylib_load("MoltenVK");
|
vulkan_library = dylib_load("MoltenVK");
|
||||||
if (!vulkan_library)
|
if (!vulkan_library)
|
||||||
|
|
|
@ -4576,6 +4576,10 @@ MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VIDEO_NOTCH_WRITE_OVER,
|
MENU_ENUM_LABEL_VIDEO_NOTCH_WRITE_OVER,
|
||||||
"video_notch_write_over"
|
"video_notch_write_over"
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VIDEO_USE_METAL_ARG_BUFFERS,
|
||||||
|
"video_use_metal_arg_buffers"
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VIDEO_OUTPUT_SETTINGS,
|
MENU_ENUM_LABEL_VIDEO_OUTPUT_SETTINGS,
|
||||||
"video_output_settings"
|
"video_output_settings"
|
||||||
|
|
|
@ -2174,6 +2174,14 @@ MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VALUE_VIDEO_NOTCH_WRITE_OVER,
|
MENU_ENUM_LABEL_VALUE_VIDEO_NOTCH_WRITE_OVER,
|
||||||
"Enable fullscreen over notch in Android and iOS devices"
|
"Enable fullscreen over notch in Android and iOS devices"
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_VIDEO_USE_METAL_ARG_BUFFERS,
|
||||||
|
"Use Metal Argument Buffers (Restart required)"
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_VIDEO_USE_METAL_ARG_BUFFERS,
|
||||||
|
"Try to improve performance by using Metal argument buffers. Some cores may require this. This may break some shaders, particularly on old hardware or OS versions."
|
||||||
|
)
|
||||||
|
|
||||||
/* Settings > Video > CRT SwitchRes */
|
/* Settings > Video > CRT SwitchRes */
|
||||||
|
|
||||||
|
|
|
@ -1284,6 +1284,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_dingux_rs90_softfilter_type,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_screen_resolution, MENU_ENUM_SUBLABEL_SCREEN_RESOLUTION)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_screen_resolution, MENU_ENUM_SUBLABEL_SCREEN_RESOLUTION)
|
||||||
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_use_metal_arg_buffers, MENU_ENUM_SUBLABEL_VIDEO_USE_METAL_ARG_BUFFERS)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_gpu_index, MENU_ENUM_SUBLABEL_VIDEO_GPU_INDEX)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_gpu_index, MENU_ENUM_SUBLABEL_VIDEO_GPU_INDEX)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_vp_custom_height, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_vp_custom_height, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_vp_custom_width, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_vp_custom_width, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH)
|
||||||
|
@ -2621,6 +2622,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||||
case MENU_ENUM_LABEL_SCREEN_RESOLUTION:
|
case MENU_ENUM_LABEL_SCREEN_RESOLUTION:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_screen_resolution);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_screen_resolution);
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_VIDEO_USE_METAL_ARG_BUFFERS:
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_use_metal_arg_buffers);
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_VIDEO_GPU_INDEX:
|
case MENU_ENUM_LABEL_VIDEO_GPU_INDEX:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_gpu_index);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_gpu_index);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -8082,6 +8082,11 @@ unsigned menu_displaylist_build_list(
|
||||||
MENU_ENUM_LABEL_VIDEO_NOTCH_WRITE_OVER,
|
MENU_ENUM_LABEL_VIDEO_NOTCH_WRITE_OVER,
|
||||||
PARSE_ONLY_BOOL, false) == 0)
|
PARSE_ONLY_BOOL, false) == 0)
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
|
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||||
|
MENU_ENUM_LABEL_VIDEO_USE_METAL_ARG_BUFFERS,
|
||||||
|
PARSE_ONLY_BOOL, false) == 0)
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DISPLAYLIST_OPTIONS_REMAPPINGS:
|
case DISPLAYLIST_OPTIONS_REMAPPINGS:
|
||||||
|
|
|
@ -12540,6 +12540,23 @@ static bool setting_append_list(
|
||||||
#ifdef HAVE_VULKAN
|
#ifdef HAVE_VULKAN
|
||||||
if (string_is_equal(video_driver_get_ident(), "vulkan"))
|
if (string_is_equal(video_driver_get_ident(), "vulkan"))
|
||||||
{
|
{
|
||||||
|
#ifdef __APPLE__
|
||||||
|
CONFIG_BOOL(
|
||||||
|
list, list_info,
|
||||||
|
&settings->bools.video_use_metal_arg_buffers,
|
||||||
|
MENU_ENUM_LABEL_VIDEO_USE_METAL_ARG_BUFFERS,
|
||||||
|
MENU_ENUM_LABEL_VALUE_VIDEO_USE_METAL_ARG_BUFFERS,
|
||||||
|
DEFAULT_USE_METAL_ARG_BUFFERS,
|
||||||
|
MENU_ENUM_LABEL_VALUE_OFF,
|
||||||
|
MENU_ENUM_LABEL_VALUE_ON,
|
||||||
|
&group_info,
|
||||||
|
&subgroup_info,
|
||||||
|
parent_group,
|
||||||
|
general_write_handler,
|
||||||
|
general_read_handler,
|
||||||
|
SD_FLAG_NONE);
|
||||||
|
#endif
|
||||||
|
|
||||||
CONFIG_INT(
|
CONFIG_INT(
|
||||||
list, list_info,
|
list, list_info,
|
||||||
&settings->ints.vulkan_gpu_index,
|
&settings->ints.vulkan_gpu_index,
|
||||||
|
|
|
@ -1466,6 +1466,7 @@ enum msg_hash_enums
|
||||||
MENU_LABEL(VIDEO_CROP_OVERSCAN),
|
MENU_LABEL(VIDEO_CROP_OVERSCAN),
|
||||||
|
|
||||||
MENU_LABEL(VIDEO_NOTCH_WRITE_OVER),
|
MENU_LABEL(VIDEO_NOTCH_WRITE_OVER),
|
||||||
|
MENU_LABEL(VIDEO_USE_METAL_ARG_BUFFERS),
|
||||||
|
|
||||||
MENU_LABEL(VIDEO_SCALE_INTEGER),
|
MENU_LABEL(VIDEO_SCALE_INTEGER),
|
||||||
MENU_LABEL(VIDEO_SCALE_INTEGER_AXIS),
|
MENU_LABEL(VIDEO_SCALE_INTEGER_AXIS),
|
||||||
|
|
Loading…
Reference in New Issue