From 9525f53d00e2d6f9597a93ffac3f91b561ab5dc7 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sun, 14 Jun 2020 00:16:07 +0100 Subject: [PATCH] [d3d9] Only enable FETCH4 when POINT sampling Closes #1660 --- src/d3d9/d3d9_device.cpp | 18 +++++++++++++++--- src/d3d9/d3d9_device.h | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 5eebd6181..954b3c017 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -3531,10 +3531,22 @@ namespace dxvk { constexpr DWORD Fetch4Disabled = MAKEFOURCC('G', 'E', 'T', '1'); if (Type == D3DSAMP_MIPMAPLODBIAS) { - if (Value == Fetch4Enabled) + if (Value == Fetch4Enabled) { m_fetch4Enabled |= 1u << StateSampler; - else if (Value == Fetch4Disabled) + if (state[StateSampler][D3DSAMP_MAGFILTER] == D3DTEXF_POINT) + m_fetch4 |= 1u << StateSampler; + } + else if (Value == Fetch4Disabled) { m_fetch4Enabled &= ~(1u << StateSampler); + m_fetch4 &= ~(1u << StateSampler); + } + } + + if (Type == D3DSAMP_MAGFILTER && m_fetch4Enabled & (1u << StateSampler)) { + if (Value == D3DTEXF_POINT) + m_fetch4 |= 1u << StateSampler; + else + m_fetch4 &= ~(1u << StateSampler); } } @@ -5759,7 +5771,7 @@ namespace dxvk { const uint32_t psTextureMask = m_activeTextures & m_psShaderMasks.samplerMask; - uint32_t fetch4 = m_fetch4Enabled & psTextureMask; + uint32_t fetch4 = m_fetch4 & psTextureMask; uint32_t projected = m_projectionBitfield & psTextureMask; if (GetCommonShader(m_state.pixelShader)->GetInfo().majorVersion() >= 2) diff --git a/src/d3d9/d3d9_device.h b/src/d3d9/d3d9_device.h index adb84724a..ccc7e4944 100644 --- a/src/d3d9/d3d9_device.h +++ b/src/d3d9/d3d9_device.h @@ -1048,6 +1048,7 @@ namespace dxvk { uint32_t m_activeTexturesToGen = 0; uint32_t m_fetch4Enabled = 0; + uint32_t m_fetch4 = 0; uint32_t m_lastFetch4 = 0; uint32_t m_activeHazardsDS = 0;