From 33a7283d3b281be2d5425217b7325561f2250b7d Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Tue, 1 Apr 2025 15:01:16 -0500 Subject: [PATCH] VideoBackends/Metal: Fix anisotropic filtering handling. --- Source/Core/VideoBackends/Metal/MTLObjectCache.h | 12 ++++++------ Source/Core/VideoBackends/Metal/MTLObjectCache.mm | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Source/Core/VideoBackends/Metal/MTLObjectCache.h b/Source/Core/VideoBackends/Metal/MTLObjectCache.h index 8404a6db57..18fac51253 100644 --- a/Source/Core/VideoBackends/Metal/MTLObjectCache.h +++ b/Source/Core/VideoBackends/Metal/MTLObjectCache.h @@ -44,7 +44,7 @@ struct DepthStencilSelector struct SamplerSelector { - u8 value; + u16 value; SamplerSelector() : value(0) {} SamplerSelector(SamplerState state) { @@ -54,17 +54,17 @@ struct SamplerSelector (static_cast(state.tm0.anisotropic_filtering) << 3); value |= (static_cast(state.tm0.wrap_u.Value()) + 3 * static_cast(state.tm0.wrap_v.Value())) - << 4; + << 7; } FilterMode MinFilter() const { return static_cast(value & 1); } FilterMode MagFilter() const { return static_cast((value >> 1) & 1); } FilterMode MipFilter() const { return static_cast((value >> 2) & 1); } - WrapMode WrapU() const { return static_cast((value >> 4) % 3); } - WrapMode WrapV() const { return static_cast((value >> 4) / 3); } - bool AnisotropicFiltering() const { return ((value >> 3) & 1); } + WrapMode WrapU() const { return static_cast((value >> 7) % 3); } + WrapMode WrapV() const { return static_cast((value >> 7) / 3); } + u32 AnisotropicFiltering() const { return ((value >> 3) & 0xf); } bool operator==(const SamplerSelector& other) const { return value == other.value; } - static constexpr size_t N_VALUES = (1 << 4) * 9; + static constexpr size_t N_VALUES = (1 << 7) * 9; }; class ObjectCache diff --git a/Source/Core/VideoBackends/Metal/MTLObjectCache.mm b/Source/Core/VideoBackends/Metal/MTLObjectCache.mm index 2a36530161..97cef130ed 100644 --- a/Source/Core/VideoBackends/Metal/MTLObjectCache.mm +++ b/Source/Core/VideoBackends/Metal/MTLObjectCache.mm @@ -173,10 +173,10 @@ MRCOwned> Metal::ObjectCache::CreateSampler(SamplerSelector [desc setTAddressMode:Convert(sel.WrapV())]; [desc setMaxAnisotropy:1 << sel.AnisotropicFiltering()]; [desc setLabel:MRCTransfer([[NSString alloc] - initWithFormat:@"%s%s%s %s%s%s", to_string(sel.MinFilter()), + initWithFormat:@"%s%s%s %s%s%d", to_string(sel.MinFilter()), to_string(sel.MagFilter()), to_string(sel.MipFilter()), to_string(sel.WrapU()), to_string(sel.WrapV()), - sel.AnisotropicFiltering() ? "(AF)" : ""])]; + 1 << sel.AnisotropicFiltering()])]; return MRCTransfer([Metal::g_device newSamplerStateWithDescriptor:desc]); } }