renderer: simplify texture cache queries

Remove the duplicate texture page-overlap check and avoid shared-owner refcount traffic for already validated query candidates.
This commit is contained in:
nmzik
2026-08-18 03:14:05 +02:00
parent 79e424182b
commit c59a4565bc
+9 -9
View File
@@ -1758,17 +1758,17 @@ bool TextureCache::InvalidateMemoryFromGPU(uint64_t address, uint64_t size,
CacheLock lock(*this, m_lock);
bool found = false;
for (const auto id: FindImagesInRegion(address, size, true)) {
auto owner = ResolveOwner(id);
if (owner == nullptr || owner->depth_id || !owner->Overlaps(address, size)) {
auto& image = ResolveImage(id);
if (image.depth_id || !image.Overlaps(address, size)) {
continue;
}
if (owner->IsGpuModified()) {
if (image.IsGpuModified()) {
if (!formatted_buffer_write) {
EXIT("TextureCache: buffer write aliases GPU-modified image\n");
}
ClearGpuModified(id);
image.ClearGpuModified();
}
owner->MarkBufferModified();
image.MarkBufferModified();
found = true;
}
return found;
@@ -1781,13 +1781,13 @@ TextureCache::RegionInfo TextureCache::QueryRegion(uint64_t address, uint64_t si
}
CacheLock lock(*this, m_lock);
for (const auto id: FindImagesInRegion(address, size, true)) {
auto owner = ResolveOwner(id);
if (owner == nullptr || owner->depth_id || !owner->Overlaps(address, size, true)) {
const auto& image = ResolveImage(id);
if (image.depth_id) {
continue;
}
result.image_pages = true;
result.image_bytes |= owner->Overlaps(address, size);
result.gpu_image_bytes |= owner->GpuOverlaps(address, size);
result.image_bytes |= image.Overlaps(address, size);
result.gpu_image_bytes |= image.GpuOverlaps(address, size);
}
return result;
}