diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 1a96028e..a797d574 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -5830,8 +5830,13 @@ namespace dxvk { m_dirtyTextures = 0; } - void D3D9DeviceEx::MarkSamplersDirty() { - m_dirtySamplerStates = 0x001fffff; // 21 bits. + void D3D9DeviceEx::MarkTextureBindingDirty(IDirect3DBaseTexture9* texture) { + D3D9DeviceLock lock = LockDevice(); + + for (uint32_t i = 0; i < m_state.textures.size(); i++) { + if (m_state.textures[i] == texture) + m_dirtyTextures |= 1u << i; + } } diff --git a/src/d3d9/d3d9_device.h b/src/d3d9/d3d9_device.h index c2adec34..d4ae629c 100644 --- a/src/d3d9/d3d9_device.h +++ b/src/d3d9/d3d9_device.h @@ -842,7 +842,7 @@ namespace dxvk { void UndirtyTextures(); - void MarkSamplersDirty(); + void MarkTextureBindingDirty(IDirect3DBaseTexture9* texture); D3D9DrawInfo GenerateDrawInfo( D3DPRIMITIVETYPE PrimitiveType, diff --git a/src/d3d9/d3d9_texture.h b/src/d3d9/d3d9_texture.h index b2b3345a..de1d6615 100644 --- a/src/d3d9/d3d9_texture.h +++ b/src/d3d9/d3d9_texture.h @@ -60,7 +60,7 @@ namespace dxvk { m_texture.CreateSampleView(LODNew); if (this->GetPrivateRefCount() > 0) - this->m_parent->MarkSamplersDirty(); + this->m_parent->MarkTextureBindingDirty(this); return oldLod; }