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.
This commit is contained in:
parent
63e4e07683
commit
53cf42fb06
|
@ -118,6 +118,9 @@ void TextureCache::TCacheEntry::CopyRectangleFromTexture(
|
||||||
float(dstrect.GetWidth()),
|
float(dstrect.GetWidth()),
|
||||||
float(dstrect.GetHeight()));
|
float(dstrect.GetHeight()));
|
||||||
|
|
||||||
|
D3D::stateman->UnsetTexture(texture->GetSRV());
|
||||||
|
D3D::stateman->Apply();
|
||||||
|
|
||||||
D3D::context->OMSetRenderTargets(1, &texture->GetRTV(), nullptr);
|
D3D::context->OMSetRenderTargets(1, &texture->GetRTV(), nullptr);
|
||||||
D3D::context->RSSetViewports(1, &vp);
|
D3D::context->RSSetViewports(1, &vp);
|
||||||
D3D::SetLinearCopySampler();
|
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.
|
// 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.)
|
// (This can happen because we don't unbind textures when we free them.)
|
||||||
D3D::stateman->UnsetTexture(texture->GetSRV());
|
D3D::stateman->UnsetTexture(texture->GetSRV());
|
||||||
|
D3D::stateman->Apply();
|
||||||
|
|
||||||
D3D::context->OMSetRenderTargets(1, &texture->GetRTV(), nullptr);
|
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.
|
// 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.)
|
// (This can happen because we don't unbind textures when we free them.)
|
||||||
D3D::stateman->UnsetTexture(static_cast<TCacheEntry*>(entry)->texture->GetSRV());
|
D3D::stateman->UnsetTexture(static_cast<TCacheEntry*>(entry)->texture->GetSRV());
|
||||||
|
D3D::stateman->Apply();
|
||||||
|
|
||||||
D3D::context->OMSetRenderTargets(1, &static_cast<TCacheEntry*>(entry)->texture->GetRTV(), nullptr);
|
D3D::context->OMSetRenderTargets(1, &static_cast<TCacheEntry*>(entry)->texture->GetRTV(), nullptr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue