Browse Source

metal: don't try to enable blending with integer canvases.

Sasha Szpakowski 1 year ago
parent
commit
9d5828a62f

+ 1 - 1
src/modules/graphics/metal/Graphics.mm

@@ -1001,7 +1001,7 @@ void Graphics::applyRenderState(id<MTLRenderCommandEncoder> encoder, const Verte
 			key.blend = state.blend;
 			key.colorChannelMask = state.colorMask;
 
-			pipeline = shader->getCachedRenderPipeline(key);
+			pipeline = shader->getCachedRenderPipeline(this, key);
 		}
 
 		[encoder setRenderPipelineState:pipeline];

+ 1 - 1
src/modules/graphics/metal/Shader.h

@@ -114,7 +114,7 @@ public:
 	ptrdiff_t getHandle() const override { return 0; }
 	void setVideoTextures(love::graphics::Texture *ytexture, love::graphics::Texture *cbtexture, love::graphics::Texture *crtexture) override;
 
-	id<MTLRenderPipelineState> getCachedRenderPipeline(const RenderPipelineKey &key);
+	id<MTLRenderPipelineState> getCachedRenderPipeline(Graphics *gfx, const RenderPipelineKey &key);
 	id<MTLComputePipelineState> getComputePipeline() const { return computePipeline; }
 
 	static int getUniformBufferBinding();

+ 2 - 2
src/modules/graphics/metal/Shader.mm

@@ -855,7 +855,7 @@ void Shader::setVideoTextures(love::graphics::Texture *ytexture, love::graphics:
 	}
 }
 
-id<MTLRenderPipelineState> Shader::getCachedRenderPipeline(const RenderPipelineKey &key)
+id<MTLRenderPipelineState> Shader::getCachedRenderPipeline(graphics::Graphics *gfx, const RenderPipelineKey &key)
 {
 	auto it = cachedRenderPipelines.find(key);
 
@@ -882,7 +882,7 @@ id<MTLRenderPipelineState> Shader::getCachedRenderPipeline(const RenderPipelineK
 		auto formatdesc = Metal::convertPixelFormat(device, format);
 		attachment.pixelFormat = formatdesc.format;
 
-		if (key.blend.enable)
+		if (key.blend.enable && gfx->isPixelFormatSupported(format, PIXELFORMATUSAGEFLAGS_BLEND))
 		{
 			attachment.blendingEnabled = YES;
 			attachment.sourceRGBBlendFactor = getMTLBlendFactor(key.blend.srcFactorRGB);