From 0089749ad058a209d3118812e03788396b67a9b3 Mon Sep 17 00:00:00 2001 From: Sasha Szpakowski Date: Fri, 26 Apr 2024 20:32:15 -0300 Subject: [PATCH] metal: work around texture swizzle bug in the github runner VM --- src/modules/graphics/metal/Graphics.h | 2 ++ src/modules/graphics/metal/Graphics.mm | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/modules/graphics/metal/Graphics.h b/src/modules/graphics/metal/Graphics.h index c23b5b090..c932ca9b2 100644 --- a/src/modules/graphics/metal/Graphics.h +++ b/src/modules/graphics/metal/Graphics.h @@ -251,6 +251,8 @@ private: DeviceFamilies families; + bool isVMDevice; + }; // Graphics } // metal diff --git a/src/modules/graphics/metal/Graphics.mm b/src/modules/graphics/metal/Graphics.mm index 87aea5e7a..399532777 100644 --- a/src/modules/graphics/metal/Graphics.mm +++ b/src/modules/graphics/metal/Graphics.mm @@ -283,6 +283,7 @@ Graphics::Graphics() , uniformBufferGPUStart(0) , defaultAttributesBuffer(nullptr) , families() + , isVMDevice(false) { @autoreleasepool { if (@available(macOS 10.15, iOS 13.0, *)) { @@ -296,6 +297,8 @@ Graphics::Graphics() throw love::Exception("LOVE's Metal graphics backend requires macOS 10.15+ or iOS 13+."); } + isVMDevice = [device.name containsString:@("Apple Paravirtual device")]; + #ifdef LOVE_MACOS // On multi-GPU macOS systems with a low and high power GPU (e.g. a 2016 // Macbook Pro), the OS doesn't activate the high power GPU for final @@ -1940,8 +1943,13 @@ bool Graphics::isPixelFormatSupported(PixelFormat format, uint32 usage) // Requires texture swizzle support. if (@available(macOS 10.15, iOS 13, *)) { - if (families.apple[1] || families.mac[2] || families.macCatalyst[2]) - flags |= commonsample; + // As of early 2024, the VM device doesn't properly support texture swizzles + // (observed on GitHub's runners) which is required for LA8 support. + if (!isVMDevice) + { + if (families.apple[1] || families.mac[2] || families.macCatalyst[2]) + flags |= commonsample; + } } break; case PIXELFORMAT_RG16_UNORM: