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 */
|
||||
#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. */
|
||||
#ifdef RARCH_CONSOLE
|
||||
#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_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);
|
||||
#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_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);
|
||||
|
|
|
@ -660,6 +660,7 @@ typedef struct settings
|
|||
bool video_notch_write_over_enable;
|
||||
bool video_hdr_enable;
|
||||
bool video_hdr_expand_gamut;
|
||||
bool video_use_metal_arg_buffers;
|
||||
|
||||
/* Accessibility */
|
||||
bool accessibility_enable;
|
||||
|
|
|
@ -2370,6 +2370,13 @@ bool vulkan_context_init(gfx_ctx_vulkan_data_t *vk,
|
|||
#ifdef _WIN32
|
||||
vulkan_library = dylib_load("vulkan-1.dll");
|
||||
#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, *))
|
||||
vulkan_library = dylib_load("MoltenVK");
|
||||
if (!vulkan_library)
|
||||
|
|
|
@ -4576,6 +4576,10 @@ MSG_HASH(
|
|||
MENU_ENUM_LABEL_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(
|
||||
MENU_ENUM_LABEL_VIDEO_OUTPUT_SETTINGS,
|
||||
"video_output_settings"
|
||||
|
|
|
@ -2174,6 +2174,14 @@ MSG_HASH(
|
|||
MENU_ENUM_LABEL_VALUE_VIDEO_NOTCH_WRITE_OVER,
|
||||
"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 */
|
||||
|
||||
|
|
|
@ -1284,6 +1284,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_dingux_rs90_softfilter_type,
|
|||
#endif
|
||||
#endif
|
||||
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_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)
|
||||
|
@ -2621,6 +2622,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
|||
case MENU_ENUM_LABEL_SCREEN_RESOLUTION:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_screen_resolution);
|
||||
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:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_gpu_index);
|
||||
break;
|
||||
|
|
|
@ -8082,6 +8082,11 @@ unsigned menu_displaylist_build_list(
|
|||
MENU_ENUM_LABEL_VIDEO_NOTCH_WRITE_OVER,
|
||||
PARSE_ONLY_BOOL, false) == 0)
|
||||
count++;
|
||||
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
MENU_ENUM_LABEL_VIDEO_USE_METAL_ARG_BUFFERS,
|
||||
PARSE_ONLY_BOOL, false) == 0)
|
||||
count++;
|
||||
}
|
||||
break;
|
||||
case DISPLAYLIST_OPTIONS_REMAPPINGS:
|
||||
|
|
|
@ -12540,6 +12540,23 @@ static bool setting_append_list(
|
|||
#ifdef HAVE_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(
|
||||
list, list_info,
|
||||
&settings->ints.vulkan_gpu_index,
|
||||
|
|
|
@ -1466,6 +1466,7 @@ enum msg_hash_enums
|
|||
MENU_LABEL(VIDEO_CROP_OVERSCAN),
|
||||
|
||||
MENU_LABEL(VIDEO_NOTCH_WRITE_OVER),
|
||||
MENU_LABEL(VIDEO_USE_METAL_ARG_BUFFERS),
|
||||
|
||||
MENU_LABEL(VIDEO_SCALE_INTEGER),
|
||||
MENU_LABEL(VIDEO_SCALE_INTEGER_AXIS),
|
||||
|
|
Loading…
Reference in New Issue