diff --git a/Source/Core/VideoBackends/Metal/MTLMain.mm b/Source/Core/VideoBackends/Metal/MTLMain.mm index 15cce280b0..ad646b9bf0 100644 --- a/Source/Core/VideoBackends/Metal/MTLMain.mm +++ b/Source/Core/VideoBackends/Metal/MTLMain.mm @@ -54,6 +54,7 @@ static bool WindowSystemTypeSupportsMetal(WindowSystemType type) switch (type) { case WindowSystemType::MacOS: + case WindowSystemType::Headless: return true; default: return false; @@ -64,7 +65,8 @@ bool Metal::VideoBackend::Initialize(const WindowSystemInfo& wsi) { @autoreleasepool { - if (!WindowSystemTypeSupportsMetal(wsi.type) || !wsi.render_surface) + const bool surface_ok = wsi.type == WindowSystemType::Headless || wsi.render_surface; + if (!WindowSystemTypeSupportsMetal(wsi.type) || !surface_ok) { PanicAlertFmt("Bad WindowSystemInfo for Metal renderer."); return false; @@ -100,6 +102,8 @@ bool Metal::VideoBackend::Initialize(const WindowSystemInfo& wsi) [layer setPixelFormat:MTLPixelFormatBGRA8Unorm]; CGSize size = [layer bounds].size; float scale = [layer contentsScale]; + if (!layer) // headless + scale = 1.0; ObjectCache::Initialize(std::move(adapter)); g_state_tracker = std::make_unique();