diff --git a/src/d3d9/d3d9_common_texture.h b/src/d3d9/d3d9_common_texture.h index 91cab70e0..4e589691e 100644 --- a/src/d3d9/d3d9_common_texture.h +++ b/src/d3d9/d3d9_common_texture.h @@ -359,6 +359,9 @@ namespace dxvk { DWORD ExposedMipLevels() { return m_exposedMipLevels; } + void SetMipFilter(D3DTEXTUREFILTERTYPE filter) { m_mipFilter = filter; } + D3DTEXTUREFILTERTYPE GetMipFilter() const { return m_mipFilter; } + private: D3D9DeviceEx* m_device; @@ -400,6 +403,8 @@ namespace dxvk { bool m_needsMipGen = false; + D3DTEXTUREFILTERTYPE m_mipFilter = D3DTEXF_LINEAR; + /** * \brief Mip level * \returns Size of packed mip level in bytes diff --git a/src/d3d9/d3d9_texture.h b/src/d3d9/d3d9_texture.h index 448442eb3..43f4d2c81 100644 --- a/src/d3d9/d3d9_texture.h +++ b/src/d3d9/d3d9_texture.h @@ -26,8 +26,7 @@ namespace dxvk { D3DRESOURCETYPE ResourceType) : D3D9Resource ( pDevice ) , m_texture ( pDevice, pDesc, ResourceType ) - , m_lod ( 0 ) - , m_autogenFilter ( D3DTEXF_LINEAR ) { + , m_lod ( 0 ) { const uint32_t arraySlices = m_texture.Desc()->ArraySize; const uint32_t mipLevels = m_texture.Desc()->MipLevels; @@ -75,12 +74,15 @@ namespace dxvk { } HRESULT STDMETHODCALLTYPE SetAutoGenFilterType(D3DTEXTUREFILTERTYPE FilterType) final { - m_autogenFilter = FilterType; + if (unlikely(FilterType == D3DTEXF_NONE)) + return D3DERR_INVALIDCALL; + + m_texture.SetMipFilter(FilterType); return D3D_OK; } D3DTEXTUREFILTERTYPE STDMETHODCALLTYPE GetAutoGenFilterType() final { - return m_autogenFilter; + return m_texture.GetMipFilter(); } void STDMETHODCALLTYPE GenerateMipSubLevels() final { @@ -104,7 +106,6 @@ namespace dxvk { D3D9CommonTexture m_texture; DWORD m_lod; - D3DTEXTUREFILTERTYPE m_autogenFilter; std::vector m_subresources;