summaryrefslogtreecommitdiffstats
path: root/src/video_core/memory_manager.h
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-04-16 16:11:35 +0200
committerFernando Sahmkow <fsahmkow27@gmail.com>2019-04-16 16:11:35 +0200
commit06d1c5a9912dac4f20e6f0d31839ef44d8a260f2 (patch)
tree60b313ec3cc9854320a9abeaeead37db14091009 /src/video_core/memory_manager.h
parentUse ReadBlockUnsafe for Shader Cache (diff)
downloadyuzu-06d1c5a9912dac4f20e6f0d31839ef44d8a260f2.tar
yuzu-06d1c5a9912dac4f20e6f0d31839ef44d8a260f2.tar.gz
yuzu-06d1c5a9912dac4f20e6f0d31839ef44d8a260f2.tar.bz2
yuzu-06d1c5a9912dac4f20e6f0d31839ef44d8a260f2.tar.lz
yuzu-06d1c5a9912dac4f20e6f0d31839ef44d8a260f2.tar.xz
yuzu-06d1c5a9912dac4f20e6f0d31839ef44d8a260f2.tar.zst
yuzu-06d1c5a9912dac4f20e6f0d31839ef44d8a260f2.zip
Diffstat (limited to 'src/video_core/memory_manager.h')
-rw-r--r--src/video_core/memory_manager.h30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/video_core/memory_manager.h b/src/video_core/memory_manager.h
index 29f3860c1..084d834c8 100644
--- a/src/video_core/memory_manager.h
+++ b/src/video_core/memory_manager.h
@@ -65,11 +65,31 @@ public:
u8* GetPointer(GPUVAddr addr);
const u8* GetPointer(GPUVAddr addr) const;
- void ReadBlock(GPUVAddr src_addr, void* dest_buffer, std::size_t size) const;
- void WriteBlock(GPUVAddr dest_addr, const void* src_buffer, std::size_t size);
- void ReadBlockUnsafe(GPUVAddr src_addr, void* dest_buffer, std::size_t size) const;
- void WriteBlockUnsafe(GPUVAddr dest_addr, const void* src_buffer, std::size_t size);
- void CopyBlock(GPUVAddr dest_addr, GPUVAddr src_addr, std::size_t size);
+
+ /*
+ * ReadBlock and WriteBlock are full read and write operations over virtual
+ * GPU Memory. It's important to use these when GPU memory may not be continous
+ * in the Host Memory counterpart. Note: This functions cause Host GPU Memory
+ * Flushes and Invalidations, respectively to each operation.
+ */
+ void ReadBlock(GPUVAddr src_addr, void* dest_buffer, const std::size_t size) const;
+ void WriteBlock(GPUVAddr dest_addr, const void* src_buffer, const std::size_t size);
+ void CopyBlock(GPUVAddr dest_addr, GPUVAddr src_addr, const std::size_t size);
+
+ /*
+ * ReadBlockUnsafe and WriteBlockUnsafe are special versions of ReadBlock and
+ * WriteBlock respectively. In this versions, no flushing or invalidation is actually
+ * done and their performance is similar to a memcpy. This functions can be used
+ * on either of this 2 scenarios instead of their safe counterpart:
+ * - Memory which is sure to never be represented in the Host GPU.
+ * - Memory Managed by a Cache Manager. Example: Texture Flushing should use
+ * WriteBlockUnsafe instead of WriteBlock since it shouldn't invalidate the texture
+ * being flushed.
+ */
+ void ReadBlockUnsafe(GPUVAddr src_addr, void* dest_buffer, const std::size_t size) const;
+ void WriteBlockUnsafe(GPUVAddr dest_addr, const void* src_buffer, const std::size_t size);
+ void CopyBlockUnsafe(GPUVAddr dest_addr, GPUVAddr src_addr, const std::size_t size);
+
private:
using VMAMap = std::map<GPUVAddr, VirtualMemoryArea>;