diff options
| author | 2019-05-29 21:08:33 -0300 | |
|---|---|---|
| committer | 2019-07-06 00:37:55 -0300 | |
| commit | d14fbfb9b594f003f11902d53f8993466486dc9d (patch) | |
| tree | cdb549f8b2a85d7c58c5fdfa39388c8775cd60e6 /src/video_core | |
| parent | gl_rasterizer: Drop gl_global_cache in favor of gl_buffer_cache (diff) | |
| download | yuzu-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.cpp | 6 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.h | 7 |
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 | ||
| 33 | CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr) | 33 | CachedBufferEntry::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 | ||
| 36 | OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size) | 36 | OGLBufferCache::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 | ||
| 103 | void OGLBufferCache::FlushObjectInner(const std::shared_ptr<CachedBufferEntry>& entry) { | ||
| 104 | glGetNamedBufferSubData(entry->GetBuffer(), 0, entry->GetSize(), entry->GetWritableHostPtr()); | ||
| 105 | } | ||
| 106 | |||
| 103 | OGLBufferCache::BufferInfo OGLBufferCache::StreamBufferUpload(const void* raw_pointer, | 107 | OGLBufferCache::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 | ||
| 65 | private: | 69 | private: |
| 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 | ||
| 94 | protected: | 99 | protected: |
| 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 | ||
| 98 | private: | 103 | private: |
| 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); |