Merge pull request #9988 from rschlaikjer/rs-gpu-page-table-copy-elision
Pass GPU page table by reference inside TextureCache::ForEachImageInRegionGPU
This commit is contained in:
commit
6892a0942f
1 changed files with 32 additions and 31 deletions
|
@ -1616,37 +1616,38 @@ void TextureCache<P>::ForEachImageInRegionGPU(size_t as_id, GPUVAddr gpu_addr, s
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto& gpu_page_table = gpu_page_table_storage[*storage_id];
|
auto& gpu_page_table = gpu_page_table_storage[*storage_id];
|
||||||
ForEachGPUPage(gpu_addr, size, [this, gpu_page_table, &images, gpu_addr, size, func](u64 page) {
|
ForEachGPUPage(gpu_addr, size,
|
||||||
const auto it = gpu_page_table.find(page);
|
[this, &gpu_page_table, &images, gpu_addr, size, func](u64 page) {
|
||||||
if (it == gpu_page_table.end()) {
|
const auto it = gpu_page_table.find(page);
|
||||||
if constexpr (BOOL_BREAK) {
|
if (it == gpu_page_table.end()) {
|
||||||
return false;
|
if constexpr (BOOL_BREAK) {
|
||||||
} else {
|
return false;
|
||||||
return;
|
} else {
|
||||||
}
|
return;
|
||||||
}
|
}
|
||||||
for (const ImageId image_id : it->second) {
|
}
|
||||||
Image& image = slot_images[image_id];
|
for (const ImageId image_id : it->second) {
|
||||||
if (True(image.flags & ImageFlagBits::Picked)) {
|
Image& image = slot_images[image_id];
|
||||||
continue;
|
if (True(image.flags & ImageFlagBits::Picked)) {
|
||||||
}
|
continue;
|
||||||
if (!image.OverlapsGPU(gpu_addr, size)) {
|
}
|
||||||
continue;
|
if (!image.OverlapsGPU(gpu_addr, size)) {
|
||||||
}
|
continue;
|
||||||
image.flags |= ImageFlagBits::Picked;
|
}
|
||||||
images.push_back(image_id);
|
image.flags |= ImageFlagBits::Picked;
|
||||||
if constexpr (BOOL_BREAK) {
|
images.push_back(image_id);
|
||||||
if (func(image_id, image)) {
|
if constexpr (BOOL_BREAK) {
|
||||||
return true;
|
if (func(image_id, image)) {
|
||||||
}
|
return true;
|
||||||
} else {
|
}
|
||||||
func(image_id, image);
|
} else {
|
||||||
}
|
func(image_id, image);
|
||||||
}
|
}
|
||||||
if constexpr (BOOL_BREAK) {
|
}
|
||||||
return false;
|
if constexpr (BOOL_BREAK) {
|
||||||
}
|
return false;
|
||||||
});
|
}
|
||||||
|
});
|
||||||
for (const ImageId image_id : images) {
|
for (const ImageId image_id : images) {
|
||||||
slot_images[image_id].flags &= ~ImageFlagBits::Picked;
|
slot_images[image_id].flags &= ~ImageFlagBits::Picked;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue