Address feedback

This commit is contained in:
Henrik Rydgård 2022-07-19 17:10:59 +02:00
parent 7f0f119cfe
commit 71ae6e3ad2

View file

@ -509,12 +509,9 @@ void FramebufferManagerCommon::DestroyFramebuf(VirtualFramebuffer *v) {
prevPrevDisplayFramebuf_ = nullptr;
// Remove any depth buffer tracking related to this vfb.
for (auto it = trackedDepthBuffers_.begin(); it != trackedDepthBuffers_.end(); it) {
for (auto it = trackedDepthBuffers_.begin(); it != trackedDepthBuffers_.end(); it++) {
if ((*it)->vfb == v) {
delete *it;
it = trackedDepthBuffers_.erase(it);
} else {
it++;
(*it)->vfb = nullptr; // Mark for deletion in the next Decimate
}
}
@ -565,8 +562,13 @@ TrackedDepthBuffer *FramebufferManagerCommon::GetOrCreateTrackedDepthBuffer(Virt
continue;
}
if (vfb->z_address == tracked->z_address && vfb->z_stride == tracked->z_stride) {
return tracked;
if (vfb->z_address == tracked->z_address) {
if (vfb->z_stride == tracked->z_stride) {
return tracked;
} else {
// Stride has changed, mark as bad.
tracked->vfb = nullptr;
}
}
}
@ -1321,6 +1323,16 @@ void FramebufferManagerCommon::DecimateFBOs() {
bvfbs_.erase(bvfbs_.begin() + i--);
}
}
// Also clean up the TrackedDepthBuffer array...
for (auto it = trackedDepthBuffers_.begin(); it != trackedDepthBuffers_.end(); it) {
if ((*it)->vfb == nullptr) {
delete *it;
it = trackedDepthBuffers_.erase(it);
} else {
it++;
}
}
}
// Requires width/height to be set already.