Metal: enable concurrent compilation only if available

Bug: https://bugs.dolphin-emu.org/issues/13404

On macOS 13.6 / Intel HD 5000, Dolphin crashes with this message:

> -[MTLIGAccelDevice setShouldMaximizeConcurrentCompilation:]: unrecognized selector

This should be available on all macOS 13.3+ systems – but when using OCLP drivers,
some devices use an older version of Metal.framework, which doesn't expose the selector.

This concerns Intel Ivy Bridge, Haswell and Nvidia Kepler when using OCLP on macOS 13.3
or newer.
(See
34676702f4/docs/PATCHEXPLAIN.md (L354C1-L354C83))

As the behavior is an optional optimization anyway, perform a dynamic
detection to avoid crashing if the feature is not available.
This commit is contained in:
Pierre de La Morinerie 2023-11-22 22:59:35 +01:00 committed by Admiral H. Curtiss
parent 3a3a935b9a
commit 0ecfaf3b9e
No known key found for this signature in database
GPG key ID: F051B4C4044F33FB

View file

@ -96,8 +96,23 @@ bool Metal::VideoBackend::Initialize(const WindowSystemInfo& wsi)
Util::PopulateBackendInfoFeatures(&g_Config, adapter);
#if TARGET_OS_OSX
if (@available(macOS 13.3, *))
// This should be available on all macOS 13.3+ systems but when using OCLP drivers, some devices
// fail with "Unrecognized selector -[MTLIGAccelDevice setShouldMaximizeConcurrentCompilation:]"
//
// This concerns Intel Ivy Bridge, Haswell and Nvidia Kepler on macOS 13.3 or newer.
// (See
// https://github.com/dortania/OpenCore-Legacy-Patcher/blob/34676702f494a2a789c514cc76dba19b8b7206b1/docs/PATCHEXPLAIN.md?plain=1#L354C1-L354C83)
//
// Perform the feature detection dynamically instead.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability"
if ([adapter respondsToSelector:@selector(setShouldMaximizeConcurrentCompilation:)])
{
[adapter setShouldMaximizeConcurrentCompilation:YES];
}
#pragma clang diagnostic pop
#endif
UpdateActiveConfig();