diff options
| author | 2023-05-07 23:25:34 +0200 | |
|---|---|---|
| committer | 2023-05-07 23:46:12 +0200 | |
| commit | 2df19ef0fd5a91ca87e2c2cf201166a40c9d44dc (patch) | |
| tree | 2007ab777f557eba09cc85326438db0be943d980 | |
| parent | Texture cache: reverse inmediate flush changes (diff) | |
| download | yuzu-2df19ef0fd5a91ca87e2c2cf201166a40c9d44dc.tar.gz yuzu-2df19ef0fd5a91ca87e2c2cf201166a40c9d44dc.tar.xz yuzu-2df19ef0fd5a91ca87e2c2cf201166a40c9d44dc.zip | |
Buffer Cache: disable reactive flushing in it.
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 11 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 8 |
3 files changed, 8 insertions, 18 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 0b15944d6..6624919a4 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -203,11 +203,8 @@ bool BufferCache<P>::DMACopy(GPUVAddr src_address, GPUVAddr dest_address, u64 am | |||
| 203 | const VAddr new_base_address = *cpu_dest_address + diff; | 203 | const VAddr new_base_address = *cpu_dest_address + diff; |
| 204 | const IntervalType add_interval{new_base_address, new_base_address + size}; | 204 | const IntervalType add_interval{new_base_address, new_base_address + size}; |
| 205 | tmp_intervals.push_back(add_interval); | 205 | tmp_intervals.push_back(add_interval); |
| 206 | if (!Settings::values.use_reactive_flushing.GetValue() || | 206 | uncommitted_ranges.add(add_interval); |
| 207 | memory_tracker.IsRegionPreflushable(new_base_address, new_base_address + size)) { | 207 | pending_ranges.add(add_interval); |
| 208 | uncommitted_ranges.add(add_interval); | ||
| 209 | pending_ranges.add(add_interval); | ||
| 210 | } | ||
| 211 | }; | 208 | }; |
| 212 | ForEachInRangeSet(common_ranges, *cpu_src_address, amount, mirror); | 209 | ForEachInRangeSet(common_ranges, *cpu_src_address, amount, mirror); |
| 213 | // This subtraction in this order is important for overlapping copies. | 210 | // This subtraction in this order is important for overlapping copies. |
| @@ -1234,10 +1231,6 @@ void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 s | |||
| 1234 | 1231 | ||
| 1235 | const IntervalType base_interval{cpu_addr, cpu_addr + size}; | 1232 | const IntervalType base_interval{cpu_addr, cpu_addr + size}; |
| 1236 | common_ranges.add(base_interval); | 1233 | common_ranges.add(base_interval); |
| 1237 | if (Settings::values.use_reactive_flushing.GetValue() && | ||
| 1238 | !memory_tracker.IsRegionPreflushable(cpu_addr, cpu_addr + size)) { | ||
| 1239 | return; | ||
| 1240 | } | ||
| 1241 | uncommitted_ranges.add(base_interval); | 1234 | uncommitted_ranges.add(base_interval); |
| 1242 | pending_ranges.add(base_interval); | 1235 | pending_ranges.add(base_interval); |
| 1243 | } | 1236 | } |
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 2beb0efea..0bcc20544 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -510,13 +510,6 @@ VideoCore::RasterizerDownloadArea RasterizerVulkan::GetFlushArea(VAddr addr, u64 | |||
| 510 | return *area; | 510 | return *area; |
| 511 | } | 511 | } |
| 512 | } | 512 | } |
| 513 | { | ||
| 514 | std::scoped_lock lock{buffer_cache.mutex}; | ||
| 515 | auto area = buffer_cache.GetFlushArea(addr, size); | ||
| 516 | if (area) { | ||
| 517 | return *area; | ||
| 518 | } | ||
| 519 | } | ||
| 520 | VideoCore::RasterizerDownloadArea new_area{ | 513 | VideoCore::RasterizerDownloadArea new_area{ |
| 521 | .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), | 514 | .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), |
| 522 | .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), | 515 | .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), |
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 29ac01eb4..d49f3a7a0 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h | |||
| @@ -1323,7 +1323,6 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA | |||
| 1323 | all_siblings.push_back(overlap_id); | 1323 | all_siblings.push_back(overlap_id); |
| 1324 | } else { | 1324 | } else { |
| 1325 | bad_overlap_ids.push_back(overlap_id); | 1325 | bad_overlap_ids.push_back(overlap_id); |
| 1326 | overlap.flags |= ImageFlagBits::BadOverlap; | ||
| 1327 | } | 1326 | } |
| 1328 | }; | 1327 | }; |
| 1329 | ForEachImageInRegion(cpu_addr, size_bytes, region_check); | 1328 | ForEachImageInRegion(cpu_addr, size_bytes, region_check); |
| @@ -1434,7 +1433,12 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, VA | |||
| 1434 | ImageBase& aliased = slot_images[aliased_id]; | 1433 | ImageBase& aliased = slot_images[aliased_id]; |
| 1435 | aliased.overlapping_images.push_back(new_image_id); | 1434 | aliased.overlapping_images.push_back(new_image_id); |
| 1436 | new_image.overlapping_images.push_back(aliased_id); | 1435 | new_image.overlapping_images.push_back(aliased_id); |
| 1437 | new_image.flags |= ImageFlagBits::BadOverlap; | 1436 | if (aliased.info.resources.levels == 1 && aliased.overlapping_images.size() > 1) { |
| 1437 | aliased.flags |= ImageFlagBits::BadOverlap; | ||
| 1438 | } | ||
| 1439 | if (new_image.info.resources.levels == 1 && new_image.overlapping_images.size() > 1) { | ||
| 1440 | new_image.flags |= ImageFlagBits::BadOverlap; | ||
| 1441 | } | ||
| 1438 | } | 1442 | } |
| 1439 | RegisterImage(new_image_id); | 1443 | RegisterImage(new_image_id); |
| 1440 | return new_image_id; | 1444 | return new_image_id; |