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); CacheLock lock(*this, m_lock);
bool found = false; bool found = false;
for (const auto id: FindImagesInRegion(address, size, true)) { for (const auto id: FindImagesInRegion(address, size, true)) {
auto owner = ResolveOwner(id); auto& image = ResolveImage(id);
if (owner == nullptr || owner->depth_id || !owner->Overlaps(address, size)) { if (image.depth_id || !image.Overlaps(address, size)) {
continue; continue;
} }
if (owner->IsGpuModified()) { if (image.IsGpuModified()) {
if (!formatted_buffer_write) { if (!formatted_buffer_write) {
EXIT("TextureCache: buffer write aliases GPU-modified image\n"); EXIT("TextureCache: buffer write aliases GPU-modified image\n");
} }
ClearGpuModified(id); image.ClearGpuModified();
} }
owner->MarkBufferModified(); image.MarkBufferModified();
found = true; found = true;
} }
return found; return found;
@@ -1781,13 +1781,13 @@ TextureCache::RegionInfo TextureCache::QueryRegion(uint64_t address, uint64_t si
} }
CacheLock lock(*this, m_lock); CacheLock lock(*this, m_lock);
for (const auto id: FindImagesInRegion(address, size, true)) { for (const auto id: FindImagesInRegion(address, size, true)) {
auto owner = ResolveOwner(id); const auto& image = ResolveImage(id);
if (owner == nullptr || owner->depth_id || !owner->Overlaps(address, size, true)) { if (image.depth_id) {
continue; continue;
} }
result.image_pages = true; result.image_pages = true;
result.image_bytes |= owner->Overlaps(address, size); result.image_bytes |= image.Overlaps(address, size);
result.gpu_image_bytes |= owner->GpuOverlaps(address, size); result.gpu_image_bytes |= image.GpuOverlaps(address, size);
} }
return result; return result;
} }