Commit 663075ac by Le Hoang Quyen Committed by Commit Bot

Metal: Fix Intel's LOD clamp and blit shader's filtering.

1. Setting max LOD clamp = FLT_MAX via setSamplerState caused mipmap tests failure on Intel. It always picked wrong mipmap level during texture sampling. Fix: Use value from SamplerState::getMaxLod() instead. 2. Also set default linear filtering for blit shader's sampler. Previously there was no sampler set for this shader. It caused black fragments on Intel. This CL is a prerequisite for enabling end2end tests on Intel & Metal. Bug: angleproject:4133 Bug: angleproject:4915 Bug: angleproject:2634 Change-Id: I9e6b669712a294e09ab692a3c65f3956a799ef8b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2329089 Commit-Queue: Jonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent 6c5ad2e9
...@@ -797,10 +797,12 @@ angle::Result TextureMtl::bindToShader(const gl::Context *context, ...@@ -797,10 +797,12 @@ angle::Result TextureMtl::bindToShader(const gl::Context *context,
{ {
ASSERT(mNativeTexture); ASSERT(mNativeTexture);
float maxLodClamp = FLT_MAX; float minLodClamp = std::max(0.f, mState.getSamplerState().getMinLod());
float maxLodClamp = mState.getSamplerState().getMaxLod();
cmdEncoder->setTexture(shaderType, mNativeTexture, textureSlotIndex); cmdEncoder->setTexture(shaderType, mNativeTexture, textureSlotIndex);
cmdEncoder->setSamplerState(shaderType, mMetalSamplerState, 0, maxLodClamp, samplerSlotIndex); cmdEncoder->setSamplerState(shaderType, mMetalSamplerState, minLodClamp, maxLodClamp,
samplerSlotIndex);
return angle::Result::Continue; return angle::Result::Continue;
} }
......
...@@ -756,6 +756,16 @@ void ColorBlitUtils::setupBlitWithDraw(const gl::Context *context, ...@@ -756,6 +756,16 @@ void ColorBlitUtils::setupBlitWithDraw(const gl::Context *context,
cmdEncoder->setFragmentTexture(params.src, 0); cmdEncoder->setFragmentTexture(params.src, 0);
// Set default sampler state with linear filtering.
// NOTE(hqle): Support configurable filtering (required by glBitFramebuffer).
SamplerDesc samplerDesc;
samplerDesc.reset();
samplerDesc.minFilter = samplerDesc.magFilter = MTLSamplerMinMagFilterLinear;
cmdEncoder->setFragmentSamplerState(contextMtl->getDisplay()->getStateCache().getSamplerState(
contextMtl->getMetalDevice(), samplerDesc),
0, FLT_MAX, 0);
// Uniform // Uniform
SetupBlitWithDrawUniformData(cmdEncoder, params); SetupBlitWithDrawUniformData(cmdEncoder, params);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment