From 9c22df774e698339f094dd18bfdc134be138c8da Mon Sep 17 00:00:00 2001 From: cdozdil Date: Tue, 5 Aug 2025 23:49:45 +0300 Subject: [PATCH] Resource tracking improvements --- OptiScaler/resource_tracking/ResTrack_dx12.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/OptiScaler/resource_tracking/ResTrack_dx12.cpp b/OptiScaler/resource_tracking/ResTrack_dx12.cpp index 030200e9..1df81881 100644 --- a/OptiScaler/resource_tracking/ResTrack_dx12.cpp +++ b/OptiScaler/resource_tracking/ResTrack_dx12.cpp @@ -793,7 +793,8 @@ ULONG ResTrack_Dx12::hkRelease(ID3D12Resource* This) _trMutex.lock(); - if (This->AddRef() == 2 && _trackedResources.contains(This)) + This->AddRef(); + if (o_Release(This) <= 1 && _trackedResources.contains(This)) { auto vector = &_trackedResources[This]; @@ -801,16 +802,18 @@ ULONG ResTrack_Dx12::hkRelease(ID3D12Resource* This) for (size_t i = 0; i < vector->size(); i++) { - LOG_TRACK(" Resource: {:X}, Clearing: {:X}", (size_t) This, (size_t) vector->at(i)); - vector->at(i)->buffer = nullptr; - vector->at(i)->lastUsedFrame = 0; + // Be sure something else is not using this heap + if (vector->at(i)->buffer == This) + { + LOG_TRACK(" Resource: {:X}, Clearing: {:X}", (size_t) This, (size_t) vector->at(i)); + vector->at(i)->buffer = nullptr; + vector->at(i)->lastUsedFrame = 0; + } } _trackedResources.erase(This); } - o_Release(This); - _trMutex.unlock(); return o_Release(This);