diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 09c946c0a..60551b8c8 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -3644,48 +3644,47 @@ namespace dxvk { auto& state = m_state.samplerStates; - bool changed = state[StateSampler][Type] != Value; + if (state[StateSampler][Type] == Value) + return D3D_OK; - if (likely(changed)) { - state[StateSampler][Type] = Value; + state[StateSampler][Type] = Value; - if (Type == D3DSAMP_ADDRESSU - || Type == D3DSAMP_ADDRESSV - || Type == D3DSAMP_ADDRESSW - || Type == D3DSAMP_MAGFILTER - || Type == D3DSAMP_MINFILTER - || Type == D3DSAMP_MIPFILTER - || Type == D3DSAMP_MAXANISOTROPY - || Type == D3DSAMP_MIPMAPLODBIAS - || Type == D3DSAMP_MAXMIPLEVEL - || Type == D3DSAMP_BORDERCOLOR) - m_dirtySamplerStates |= 1u << StateSampler; - else if (Type == D3DSAMP_SRGBTEXTURE && m_state.textures[StateSampler] != nullptr) - m_dirtyTextures |= 1u << StateSampler; + if (Type == D3DSAMP_ADDRESSU + || Type == D3DSAMP_ADDRESSV + || Type == D3DSAMP_ADDRESSW + || Type == D3DSAMP_MAGFILTER + || Type == D3DSAMP_MINFILTER + || Type == D3DSAMP_MIPFILTER + || Type == D3DSAMP_MAXANISOTROPY + || Type == D3DSAMP_MIPMAPLODBIAS + || Type == D3DSAMP_MAXMIPLEVEL + || Type == D3DSAMP_BORDERCOLOR) + m_dirtySamplerStates |= 1u << StateSampler; + else if (Type == D3DSAMP_SRGBTEXTURE && m_state.textures[StateSampler] != nullptr) + m_dirtyTextures |= 1u << StateSampler; - constexpr DWORD Fetch4Enabled = MAKEFOURCC('G', 'E', 'T', '4'); - constexpr DWORD Fetch4Disabled = MAKEFOURCC('G', 'E', 'T', '1'); + constexpr DWORD Fetch4Enabled = MAKEFOURCC('G', 'E', 'T', '4'); + constexpr DWORD Fetch4Disabled = MAKEFOURCC('G', 'E', 'T', '1'); - if (unlikely(Type == D3DSAMP_MIPMAPLODBIAS)) { - if (unlikely(Value == Fetch4Enabled)) { - m_fetch4Enabled |= 1u << StateSampler; - if (state[StateSampler][D3DSAMP_MAGFILTER] == D3DTEXF_POINT) - m_fetch4 |= 1u << StateSampler; - } - else if (unlikely(Value == Fetch4Disabled)) { - m_fetch4Enabled &= ~(1u << StateSampler); - m_fetch4 &= ~(1u << StateSampler); - } + if (unlikely(Type == D3DSAMP_MIPMAPLODBIAS)) { + if (unlikely(Value == Fetch4Enabled)) { + m_fetch4Enabled |= 1u << StateSampler; + if (state[StateSampler][D3DSAMP_MAGFILTER] == D3DTEXF_POINT) + m_fetch4 |= 1u << StateSampler; } - - if (unlikely(Type == D3DSAMP_MAGFILTER && m_fetch4Enabled & (1u << StateSampler))) { - if (Value == D3DTEXF_POINT) - m_fetch4 |= 1u << StateSampler; - else - m_fetch4 &= ~(1u << StateSampler); + else if (unlikely(Value == Fetch4Disabled)) { + m_fetch4Enabled &= ~(1u << StateSampler); + m_fetch4 &= ~(1u << StateSampler); } } + if (unlikely(Type == D3DSAMP_MAGFILTER && m_fetch4Enabled & (1u << StateSampler))) { + if (Value == D3DTEXF_POINT) + m_fetch4 |= 1u << StateSampler; + else + m_fetch4 &= ~(1u << StateSampler); + } + return D3D_OK; }