summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h11
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp7
-rw-r--r--src/video_core/texture_cache/texture_cache.h8
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;