diff options
| author | Stenzek <stenzek@gmail.com> | 2016-02-18 20:22:55 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2016-03-26 00:01:26 +1000 |
| commit | 53cf42fb0649fe2e5eea79d56e1f6e2cb9f2269a (patch) | |
| tree | 96e9e6617a0c918d1f8fd75445120ecabce2e765 /Source/Core/VideoBackends/D3D/TextureCache.cpp | |
| parent | 63e4e076832c9bec2e41d6b7d72f9e92d5d1da56 (diff) | |
D3D11: Fix some cases where render target switches desynced StateManager
This was occuring in certain EFB copy patterns, leaving the textures
unbound for the next draw call.
Diffstat (limited to 'Source/Core/VideoBackends/D3D/TextureCache.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/TextureCache.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Source/Core/VideoBackends/D3D/TextureCache.cpp b/Source/Core/VideoBackends/D3D/TextureCache.cpp index ac8271fbb5..f30d0309ef 100644 --- a/Source/Core/VideoBackends/D3D/TextureCache.cpp +++ b/Source/Core/VideoBackends/D3D/TextureCache.cpp @@ -118,6 +118,9 @@ void TextureCache::TCacheEntry::CopyRectangleFromTexture( float(dstrect.GetWidth()), float(dstrect.GetHeight())); + D3D::stateman->UnsetTexture(texture->GetSRV()); + D3D::stateman->Apply(); + D3D::context->OMSetRenderTargets(1, &texture->GetRTV(), nullptr); D3D::context->RSSetViewports(1, &vp); D3D::SetLinearCopySampler(); @@ -234,6 +237,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u8* dst, PEControl::PixelFormat // Make sure we don't draw with the texture set as both a source and target. // (This can happen because we don't unbind textures when we free them.) D3D::stateman->UnsetTexture(texture->GetSRV()); + D3D::stateman->Apply(); D3D::context->OMSetRenderTargets(1, &texture->GetRTV(), nullptr); @@ -364,6 +368,7 @@ void TextureCache::ConvertTexture(TCacheEntryBase* entry, TCacheEntryBase* uncon // Make sure we don't draw with the texture set as both a source and target. // (This can happen because we don't unbind textures when we free them.) D3D::stateman->UnsetTexture(static_cast<TCacheEntry*>(entry)->texture->GetSRV()); + D3D::stateman->Apply(); D3D::context->OMSetRenderTargets(1, &static_cast<TCacheEntry*>(entry)->texture->GetRTV(), nullptr); |
