Преглед изворни кода

Buffer Cache: Eliminate the AC Hack as the base game is fixed in Hades.

Fernando Sahmkow пре 5 година
родитељ
комит
73638ca593
1 измењених фајлова са 4 додато и 14 уклоњено
  1. 4 14
      src/video_core/buffer_cache/buffer_cache.h

+ 4 - 14
src/video_core/buffer_cache/buffer_cache.h

@@ -586,9 +586,6 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
                     cpu_addr_base += u64(std::max<s64>(difference2, 0));
                     const u64 new_size = cpu_addr_end2 - cpu_addr_base;
                     const u64 new_offset = cpu_addr_base - buffer.CpuAddr();
-                    if (IsRegionCpuModified(cpu_addr_base, new_size)) {
-                        return;
-                    }
                     downloads.push_back({
                         BufferCopy{
                             .src_offset = new_offset,
@@ -601,11 +598,11 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
                     largest_copy = std::max(largest_copy, new_size);
                     constexpr u64 align_mask = ~(32ULL - 1);
                     const VAddr align_up_address = (cpu_addr_base + 31) & align_mask;
-                    const u64 difference = align_up_address - cpu_addr_base;
-                    if (difference > new_size) {
+                    const u64 difference_base = align_up_address - cpu_addr_base;
+                    if (difference_base > new_size) {
                         return;
                     }
-                    const u64 fixed_size = new_size - difference;
+                    const u64 fixed_size = new_size - difference_base;
                     buffer.UnmarkRegionAsGpuModified(align_up_address, fixed_size & align_mask);
                 });
         });
@@ -1384,16 +1381,9 @@ typename BufferCache<P>::Binding BufferCache<P>::StorageBufferBinding(GPUVAddr s
     if (!cpu_addr || size == 0) {
         return NULL_BINDING;
     }
-    // HACK(Rodrigo): This is the number of bytes bound in host beyond the guest API's range.
-    // It exists due to some games like Astral Chain operate out of bounds.
-    // Binding the whole map range would be technically correct, but games have large maps that make
-    // this approach unaffordable for now.
-    static constexpr u32 arbitrary_extra_bytes = 0xc000;
-    const u32 bytes_to_map_end =
-        std::max(size, static_cast<u32>(gpu_memory.BytesToMapEnd(gpu_addr)));
     const Binding binding{
         .cpu_addr = *cpu_addr,
-        .size = std::min(size + arbitrary_extra_bytes, bytes_to_map_end),
+        .size = size,
         .buffer_id = BufferId{},
     };
     return binding;