Implement sparse multi-image page ownership

This commit is contained in:
nmzik committed 2026-07-18 03:31:36 +02:00
1 parent b434e3b260
commit 18479daabd
8 files changed
+744 -93

No files matched your search

+8 -8
View File
@@ -821,14 +821,11 @@ ClassifyRenderTargetOverlap(const ImageInfo& sampled, bool sampled_gpu_modified,
if (!ImagePageRangesOverlap(sampled.address, sampled.size, target.address, target.size)) {
return RenderTargetOverlap::None;
}
const bool exact = sampled.address == target.address && sampled.size == target.size;
const bool page_isolated_overlap =
sampled.address % TRACKER_PAGE_SIZE == 0 && sampled.size % TRACKER_PAGE_SIZE == 0 &&
target.address % TRACKER_PAGE_SIZE == 0 && target.size % TRACKER_PAGE_SIZE == 0 &&
ImageRangeOverlaps(sampled.address, sampled.size, target.address, target.size);
return !sampled_gpu_modified && same_context && (exact || page_isolated_overlap)
? RenderTargetOverlap::RetireSampled
: RenderTargetOverlap::Unsupported;
if (!ImageRangeOverlaps(sampled.address, sampled.size, target.address, target.size)) {
return RenderTargetOverlap::None;
}
return !sampled_gpu_modified && same_context ? RenderTargetOverlap::RetireSampled
: RenderTargetOverlap::Unsupported;
}
[[nodiscard]] inline RenderTargetOverlap
@@ -886,6 +883,9 @@ ClassifySampledRenderTargetOverlap(const ImageInfo& sampled, const RenderTargetI
if (!ImagePageRangesOverlap(sampled.address, sampled.size, target.address, target.size)) {
return RenderTargetOverlap::None;
}
if (!ImageRangeOverlaps(sampled.address, sampled.size, target.address, target.size)) {
return RenderTargetOverlap::None;
}
return same_context && !target_buffer_modified ? RenderTargetOverlap::RetireTarget
: RenderTargetOverlap::Unsupported;
}