Browse Source

metal: fix a couple compiler warnings

Alex Szpakowski 3 years ago
parent
commit
dab174b120

+ 2 - 1
src/modules/graphics/metal/Metal.h

@@ -36,13 +36,14 @@ class Metal
 {
 public:
 
-	struct PixelFormatDesc
+	struct API_AVAILABLE(macos(10.15), ios(13.0)) PixelFormatDesc
 	{
 		MTLPixelFormat format;
 		bool swizzled = false;
 		MTLTextureSwizzleChannels swizzle;
 	};
 
+	API_AVAILABLE(macos(10.15), ios(13.0))
 	static PixelFormatDesc convertPixelFormat(PixelFormat format, bool &isSRGB);
 
 }; // Metal

+ 19 - 9
src/modules/graphics/metal/Shader.mm

@@ -926,9 +926,14 @@ id<MTLRenderPipelineState> Shader::getCachedRenderPipeline(const RenderPipelineK
 
 		MTLRenderPipelineColorAttachmentDescriptor *attachment = desc.colorAttachments[i];
 
-		bool isSRGB = false;
-		auto formatdesc = Metal::convertPixelFormat(format, isSRGB);
-		attachment.pixelFormat = formatdesc.format;
+		if (@available(macOS 10.15, iOS 13, *))
+		{
+			// We already don't really support metal on older systems, this just
+			// silences a compiler warning about it.
+			bool isSRGB = false;
+			auto formatdesc = Metal::convertPixelFormat(format, isSRGB);
+			attachment.pixelFormat = formatdesc.format;
+		}
 
 		if (key.blend.enable)
 		{
@@ -959,12 +964,17 @@ id<MTLRenderPipelineState> Shader::getCachedRenderPipeline(const RenderPipelineK
 	auto dsformat = (PixelFormat) key.depthStencilFormat;
 	if (isPixelFormatDepthStencil(dsformat))
 	{
-		bool isSRGB = false;
-		auto formatdesc = Metal::convertPixelFormat(dsformat, isSRGB);
-		if (isPixelFormatDepth(dsformat))
-			desc.depthAttachmentPixelFormat = formatdesc.format;
-		if (isPixelFormatStencil(dsformat))
-			desc.stencilAttachmentPixelFormat = formatdesc.format;
+		if (@available(macOS 10.15, iOS 13, *))
+		{
+			// We already don't really support metal on older systems, this just
+			// silences a compiler warning about it.
+			bool isSRGB = false;
+			auto formatdesc = Metal::convertPixelFormat(dsformat, isSRGB);
+			if (isPixelFormatDepth(dsformat))
+				desc.depthAttachmentPixelFormat = formatdesc.format;
+			if (isPixelFormatStencil(dsformat))
+				desc.stencilAttachmentPixelFormat = formatdesc.format;
+		}
 	}
 
 	{

+ 11 - 5
src/modules/graphics/metal/Texture.mm

@@ -52,17 +52,23 @@ Texture::Texture(love::graphics::Graphics *gfx, id<MTLDevice> device, const Sett
 	int w = pixelWidth;
 	int h = pixelHeight;
 
-	auto formatdesc = Metal::convertPixelFormat(format, sRGB);
-
 	desc.width = w;
 	desc.height = h;
 	desc.depth = depth;
 	desc.arrayLength = layers;
 	desc.mipmapLevelCount = mipmapCount;
 	desc.textureType = getMTLTextureType(texType, 1);
-	desc.pixelFormat = formatdesc.format;
-	if (formatdesc.swizzled)
-		desc.swizzle = formatdesc.swizzle;
+	if (@available(macOS 10.15, iOS 13, *))
+	{
+		// We already don't really support metal on older systems, this just
+		// silences a compiler warning about it.
+		auto formatdesc = Metal::convertPixelFormat(format, sRGB);
+		desc.pixelFormat = formatdesc.format;
+		if (formatdesc.swizzled)
+			desc.swizzle = formatdesc.swizzle;
+	}
+	else
+		throw love::Exception("Metal backend is only supported on macOS 10.15+ and iOS 13+.");
 	desc.storageMode = MTLStorageModePrivate;
 
 	if (readable)