diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 162a1bc83..fffbab17a 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -5379,8 +5379,7 @@ namespace dxvk { colorInfo.minFilter = DecodeFilter(cKey.MinFilter); colorInfo.mipmapMode = mipFilter.MipFilter; colorInfo.maxAnisotropy = float(cKey.MaxAnisotropy); - colorInfo.useAnisotropy = IsAnisotropic(cKey.MinFilter) - || IsAnisotropic(cKey.MagFilter); + colorInfo.useAnisotropy = cKey.MaxAnisotropy > 1; colorInfo.mipmapLodBias = cKey.MipmapLodBias; colorInfo.mipmapLodMin = mipFilter.MipsEnabled ? float(cKey.MaxMipLevel) : 0; colorInfo.mipmapLodMax = mipFilter.MipsEnabled ? FLT_MAX : 0; diff --git a/src/d3d9/d3d9_sampler.h b/src/d3d9/d3d9_sampler.h index 6083a1244..a6d0a4a63 100644 --- a/src/d3d9/d3d9_sampler.h +++ b/src/d3d9/d3d9_sampler.h @@ -36,11 +36,15 @@ namespace dxvk { key.AddressV = std::clamp(key.AddressV, D3DTADDRESS_WRAP, D3DTADDRESS_MIRRORONCE); key.AddressW = std::clamp(key.AddressW, D3DTADDRESS_WRAP, D3DTADDRESS_MIRRORONCE); - key.MagFilter = std::clamp(key.MagFilter, D3DTEXF_NONE, D3DTEXF_ANISOTROPIC); - key.MinFilter = std::clamp(key.MinFilter, D3DTEXF_NONE, D3DTEXF_ANISOTROPIC); - key.MipFilter = std::clamp(key.MipFilter, D3DTEXF_NONE, D3DTEXF_ANISOTROPIC); + bool hasAnisotropy = IsAnisotropic(key.MagFilter) || IsAnisotropic(key.MinFilter); - key.MaxAnisotropy = std::min(key.MaxAnisotropy, 16); + key.MagFilter = std::clamp(key.MagFilter, D3DTEXF_NONE, D3DTEXF_LINEAR); + key.MinFilter = std::clamp(key.MinFilter, D3DTEXF_NONE, D3DTEXF_LINEAR); + key.MipFilter = std::clamp(key.MipFilter, D3DTEXF_NONE, D3DTEXF_LINEAR); + + key.MaxAnisotropy = hasAnisotropy + ? std::clamp(key.MaxAnisotropy, 1, 16) + : 1; if (key.MipFilter == D3DTEXF_NONE) { // May as well try and keep slots down.