|
|
@@ -1616,37 +1616,38 @@ void TextureCache<P>::ForEachImageInRegionGPU(size_t as_id, GPUVAddr gpu_addr, s
|
|
|
return;
|
|
|
}
|
|
|
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) {
|
|
|
- const auto it = gpu_page_table.find(page);
|
|
|
- if (it == gpu_page_table.end()) {
|
|
|
- if constexpr (BOOL_BREAK) {
|
|
|
- return false;
|
|
|
- } else {
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- for (const ImageId image_id : it->second) {
|
|
|
- Image& image = slot_images[image_id];
|
|
|
- if (True(image.flags & ImageFlagBits::Picked)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (!image.OverlapsGPU(gpu_addr, size)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- image.flags |= ImageFlagBits::Picked;
|
|
|
- images.push_back(image_id);
|
|
|
- if constexpr (BOOL_BREAK) {
|
|
|
- if (func(image_id, image)) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- } else {
|
|
|
- func(image_id, image);
|
|
|
- }
|
|
|
- }
|
|
|
- if constexpr (BOOL_BREAK) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- });
|
|
|
+ ForEachGPUPage(gpu_addr, size,
|
|
|
+ [this, &gpu_page_table, &images, gpu_addr, size, func](u64 page) {
|
|
|
+ const auto it = gpu_page_table.find(page);
|
|
|
+ if (it == gpu_page_table.end()) {
|
|
|
+ if constexpr (BOOL_BREAK) {
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (const ImageId image_id : it->second) {
|
|
|
+ Image& image = slot_images[image_id];
|
|
|
+ if (True(image.flags & ImageFlagBits::Picked)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (!image.OverlapsGPU(gpu_addr, size)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ image.flags |= ImageFlagBits::Picked;
|
|
|
+ images.push_back(image_id);
|
|
|
+ if constexpr (BOOL_BREAK) {
|
|
|
+ if (func(image_id, image)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ func(image_id, image);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if constexpr (BOOL_BREAK) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
for (const ImageId image_id : images) {
|
|
|
slot_images[image_id].flags &= ~ImageFlagBits::Picked;
|
|
|
}
|