Просмотр исходного кода

Inline2Memory: Flush before writting buffer.

Fernando Sahmkow 4 лет назад
Родитель
Сommit
f54280dafd
2 измененных файлов с 3 добавлено и 2 удалено
  1. 1 0
      src/video_core/engines/engine_upload.cpp
  2. 2 2
      src/video_core/memory_manager.h

+ 1 - 0
src/video_core/engines/engine_upload.cpp

@@ -32,6 +32,7 @@ void State::ProcessData(const u32 data, const bool is_last_call) {
     }
     const GPUVAddr address{regs.dest.Address()};
     if (is_linear) {
+        memory_manager.FlushRegion(address, copy_size);
         memory_manager.WriteBlock(address, inner_buffer.data(), copy_size);
     } else {
         UNIMPLEMENTED_IF(regs.dest.z != 0);

+ 2 - 2
src/video_core/memory_manager.h

@@ -143,6 +143,8 @@ public:
     [[nodiscard]] GPUVAddr Allocate(std::size_t size, std::size_t align);
     void Unmap(GPUVAddr gpu_addr, std::size_t size);
 
+    void FlushRegion(GPUVAddr gpu_addr, size_t size) const;
+
 private:
     [[nodiscard]] PageEntry GetPageEntry(GPUVAddr gpu_addr) const;
     void SetPageEntry(GPUVAddr gpu_addr, PageEntry page_entry, std::size_t size = page_size);
@@ -153,8 +155,6 @@ private:
     void TryLockPage(PageEntry page_entry, std::size_t size);
     void TryUnlockPage(PageEntry page_entry, std::size_t size);
 
-    void FlushRegion(GPUVAddr gpu_addr, size_t size) const;
-
     void ReadBlockImpl(GPUVAddr gpu_src_addr, void* dest_buffer, std::size_t size,
                        bool is_safe) const;
     void WriteBlockImpl(GPUVAddr gpu_dest_addr, const void* src_buffer, std::size_t size,