diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp index bb30cba3db..33fbdf8b71 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.cpp @@ -414,7 +414,7 @@ D3D12GSRender::D3D12GSRender() LOG_WARNING(RSX, "Modified %x, starting again", texadrr); ID3D12Resource *texToErase = m_texturesCache[texadrr]; m_texturesCache.erase(texadrr); - m_Textoclean.push_back(texToErase); + m_texToClean.push_back(texToErase); vm::page_protect(protectedRangeStart, protectedRangeSize, 0, vm::page_writable, 0); m_protectedTextures.erase(currentIt); @@ -613,6 +613,10 @@ D3D12GSRender::~D3D12GSRender() m_rtts.Release(); for (unsigned i = 0; i < 17; i++) m_rootSignatures[i]->Release(); + for (auto tmp : m_texToClean) + tmp->Release(); + for (auto tmp : m_texturesCache) + tmp.second->Release(); m_swapChain->Release(); m_outputScalingPass.Release(); m_device->Release(); @@ -1063,8 +1067,8 @@ void D3D12GSRender::Flip() }; std::lock_guard lock(mut); - std::vector textoclean = m_Textoclean; - m_Textoclean.clear(); + std::vector textoclean = m_texToClean; + m_texToClean.clear(); m_GC.pushWork([&, cleaningFunction, textoclean]() { diff --git a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h index 5eb4058930..7934a566e3 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12GSRender.h @@ -209,7 +209,8 @@ private: */ std::mutex mut; std::list > m_protectedTextures; // Texaddress, start of protected range, size of protected range - std::vector m_Textoclean; + std::vector m_texToClean; + GarbageCollectionThread m_GC; // Copy of RTT to be used as texture std::unordered_map m_texturesRTTs;