diff --git a/GPU/D3D11/GPU_D3D11.cpp b/GPU/D3D11/GPU_D3D11.cpp index d59b24850a..4c3fffbeb2 100644 --- a/GPU/D3D11/GPU_D3D11.cpp +++ b/GPU/D3D11/GPU_D3D11.cpp @@ -76,7 +76,6 @@ GPU_D3D11::GPU_D3D11(GraphicsContext *gfxCtx, Draw::DrawContext *draw) } void GPU_D3D11::FinishInitOnMainThread() { - textureCacheD3D11_->InitDeviceObjects(); stockD3D11.Create(device_); } @@ -111,14 +110,12 @@ void GPU_D3D11::DeviceLost() { // FBOs appear to survive? Or no? shaderManager_->ClearShaders(); drawEngine_.ClearInputLayoutMap(); - textureCache_->Clear(false); GPUCommonHW::DeviceLost(); } void GPU_D3D11::DeviceRestore(Draw::DrawContext *draw) { GPUCommonHW::DeviceRestore(draw); - // Nothing needed. } void GPU_D3D11::BeginHostFrame() { diff --git a/GPU/D3D11/TextureCacheD3D11.cpp b/GPU/D3D11/TextureCacheD3D11.cpp index c62ed66a6f..e4d33a8b87 100644 --- a/GPU/D3D11/TextureCacheD3D11.cpp +++ b/GPU/D3D11/TextureCacheD3D11.cpp @@ -140,6 +140,7 @@ TextureCacheD3D11::TextureCacheD3D11(Draw::DrawContext *draw, Draw2D *draw2D) TextureCacheD3D11::~TextureCacheD3D11() { Clear(true); + DestroyDeviceObjects(); } void TextureCacheD3D11::InitDeviceObjects() { @@ -148,6 +149,21 @@ void TextureCacheD3D11::InitDeviceObjects() { _dbg_assert_(SUCCEEDED(hr)); } +void TextureCacheD3D11::DestroyDeviceObjects() { + depalConstants_.Reset(); +} + +void TextureCacheD3D11::DeviceLost() { + Clear(false); + DestroyDeviceObjects(); + draw_ = nullptr; +} + +void TextureCacheD3D11::DeviceRestore(Draw::DrawContext *draw) { + draw_ = draw; + InitDeviceObjects(); +} + void TextureCacheD3D11::SetFramebufferManager(FramebufferManagerD3D11 *fbManager) { framebufferManager_ = fbManager; } diff --git a/GPU/D3D11/TextureCacheD3D11.h b/GPU/D3D11/TextureCacheD3D11.h index 124cdd705c..1e366156a3 100644 --- a/GPU/D3D11/TextureCacheD3D11.h +++ b/GPU/D3D11/TextureCacheD3D11.h @@ -55,10 +55,11 @@ public: bool GetCurrentTextureDebug(GPUDebugBuffer &buffer, int level, bool *isFramebuffer) override; - void DeviceLost() override { draw_ = nullptr; } - void DeviceRestore(Draw::DrawContext *draw) override { draw_ = draw; } + void DeviceLost() override; + void DeviceRestore(Draw::DrawContext *draw) override; void InitDeviceObjects(); + void DestroyDeviceObjects(); protected: void BindTexture(TexCacheEntry *entry) override;