apple: provide option to disable metal argument buffers

This commit is contained in:
Eric Warmenhoven 2025-06-22 11:41:02 -04:00
parent c27e815808
commit a8075aa35f
10 changed files with 54 additions and 0 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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 */

View File

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

View File

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

View File

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

View File

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