summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-05-29 21:08:33 -0300
committerGravatar ReinUsesLisp2019-07-06 00:37:55 -0300
commitd14fbfb9b594f003f11902d53f8993466486dc9d (patch)
treecdb549f8b2a85d7c58c5fdfa39388c8775cd60e6 /src/video_core
parentgl_rasterizer: Drop gl_global_cache in favor of gl_buffer_cache (diff)
downloadyuzu-d14fbfb9b594f003f11902d53f8993466486dc9d.tar.gz
yuzu-d14fbfb9b594f003f11902d53f8993466486dc9d.tar.xz
yuzu-d14fbfb9b594f003f11902d53f8993466486dc9d.zip
gl_buffer_cache: Implement flushing
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp6
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h7
2 files changed, 11 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index 2f603e3d7..3ce61c5cd 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -31,7 +31,7 @@ OGLBuffer CreateBuffer(std::size_t size, GLenum usage) {
31} // Anonymous namespace 31} // Anonymous namespace
32 32
33CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr) 33CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr)
34 : RasterizerCacheObject{host_ptr}, cpu_addr{cpu_addr} {} 34 : RasterizerCacheObject{host_ptr}, host_ptr{host_ptr}, cpu_addr{cpu_addr} {}
35 35
36OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size) 36OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size)
37 : RasterizerCache{rasterizer}, stream_buffer(size, true) {} 37 : RasterizerCache{rasterizer}, stream_buffer(size, true) {}
@@ -100,6 +100,10 @@ void OGLBufferCache::Unmap() {
100 stream_buffer.Unmap(buffer_offset - buffer_offset_base); 100 stream_buffer.Unmap(buffer_offset - buffer_offset_base);
101} 101}
102 102
103void OGLBufferCache::FlushObjectInner(const std::shared_ptr<CachedBufferEntry>& entry) {
104 glGetNamedBufferSubData(entry->GetBuffer(), 0, entry->GetSize(), entry->GetWritableHostPtr());
105}
106
103OGLBufferCache::BufferInfo OGLBufferCache::StreamBufferUpload(const void* raw_pointer, 107OGLBufferCache::BufferInfo OGLBufferCache::StreamBufferUpload(const void* raw_pointer,
104 std::size_t size, 108 std::size_t size,
105 std::size_t alignment) { 109 std::size_t alignment) {
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index b4fbd201d..4267a5067 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -33,6 +33,10 @@ public:
33 return size; 33 return size;
34 } 34 }
35 35
36 u8* GetWritableHostPtr() const {
37 return host_ptr;
38 }
39
36 std::size_t GetSize() const { 40 std::size_t GetSize() const {
37 return size; 41 return size;
38 } 42 }
@@ -63,6 +67,7 @@ public:
63 } 67 }
64 68
65private: 69private:
70 u8* host_ptr{};
66 VAddr cpu_addr{}; 71 VAddr cpu_addr{};
67 std::size_t size{}; 72 std::size_t size{};
68 std::size_t capacity{}; 73 std::size_t capacity{};
@@ -93,7 +98,7 @@ public:
93 98
94protected: 99protected:
95 // We do not have to flush this cache as things in it are never modified by us. 100 // We do not have to flush this cache as things in it are never modified by us.
96 void FlushObjectInner(const std::shared_ptr<CachedBufferEntry>& object) override {} 101 void FlushObjectInner(const std::shared_ptr<CachedBufferEntry>& entry) override;
97 102
98private: 103private:
99 BufferInfo StreamBufferUpload(const void* raw_pointer, std::size_t size, std::size_t alignment); 104 BufferInfo StreamBufferUpload(const void* raw_pointer, std::size_t size, std::size_t alignment);