Browse Source

metal: fix clampzero wrap mode.

Alex Szpakowski 4 years ago
parent
commit
6296e44425
1 changed files with 10 additions and 2 deletions
  1. 10 2
      src/modules/graphics/metal/Graphics.mm

+ 10 - 2
src/modules/graphics/metal/Graphics.mm

@@ -643,6 +643,11 @@ void Graphics::submitBlitEncoder()
 	}
 	}
 }
 }
 
 
+static bool isClampOne(SamplerState::WrapMode w)
+{
+	return w == SamplerState::WRAP_CLAMP_ONE;
+}
+
 id<MTLSamplerState> Graphics::getCachedSampler(const SamplerState &s)
 id<MTLSamplerState> Graphics::getCachedSampler(const SamplerState &s)
 { @autoreleasepool {
 { @autoreleasepool {
 	uint64 key = s.toKey();
 	uint64 key = s.toKey();
@@ -662,8 +667,11 @@ id<MTLSamplerState> Graphics::getCachedSampler(const SamplerState &s)
 	desc.tAddressMode = getMTLSamplerAddressMode(s.wrapV);
 	desc.tAddressMode = getMTLSamplerAddressMode(s.wrapV);
 	desc.rAddressMode = getMTLSamplerAddressMode(s.wrapW);
 	desc.rAddressMode = getMTLSamplerAddressMode(s.wrapW);
 
 
-	if (@available(macOS 10.12, iOS 10.14, *))
-		desc.borderColor = MTLSamplerBorderColorOpaqueWhite;
+	if (isClampOne(s.wrapU) || isClampOne(s.wrapV) || isClampOne(s.wrapW))
+	{
+		if (@available(macOS 10.12, iOS 10.14, *))
+			desc.borderColor = MTLSamplerBorderColorOpaqueWhite;
+	}
 
 
 	desc.lodMinClamp = s.minLod;
 	desc.lodMinClamp = s.minLod;
 	desc.lodMaxClamp = s.maxLod;
 	desc.lodMaxClamp = s.maxLod;