diff options
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.cpp | 38 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.h | 16 |
2 files changed, 25 insertions, 29 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp index e09b47f57..d9f7b4cc6 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp | |||
| @@ -34,6 +34,24 @@ Buffer::Buffer(const Device& device, VAddr cpu_addr, std::size_t size) | |||
| 34 | 34 | ||
| 35 | Buffer::~Buffer() = default; | 35 | Buffer::~Buffer() = default; |
| 36 | 36 | ||
| 37 | void Buffer::Upload(std::size_t offset, std::size_t size, const u8* data) const { | ||
| 38 | glNamedBufferSubData(Handle(), static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size), | ||
| 39 | data); | ||
| 40 | } | ||
| 41 | |||
| 42 | void Buffer::Download(std::size_t offset, std::size_t size, u8* data) const { | ||
| 43 | MICROPROFILE_SCOPE(OpenGL_Buffer_Download); | ||
| 44 | glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); | ||
| 45 | glGetNamedBufferSubData(Handle(), static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size), | ||
| 46 | data); | ||
| 47 | } | ||
| 48 | |||
| 49 | void Buffer::CopyFrom(const Buffer& src, std::size_t src_offset, std::size_t dst_offset, | ||
| 50 | std::size_t size) const { | ||
| 51 | glCopyNamedBufferSubData(src.Handle(), Handle(), static_cast<GLintptr>(src_offset), | ||
| 52 | static_cast<GLintptr>(dst_offset), static_cast<GLsizeiptr>(size)); | ||
| 53 | } | ||
| 54 | |||
| 37 | OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, Core::System& system, | 55 | OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, Core::System& system, |
| 38 | const Device& device_, std::size_t stream_size) | 56 | const Device& device_, std::size_t stream_size) |
| 39 | : GenericBufferCache{rasterizer, system, | 57 | : GenericBufferCache{rasterizer, system, |
| @@ -62,26 +80,6 @@ OGLBufferCache::BufferInfo OGLBufferCache::GetEmptyBuffer(std::size_t) { | |||
| 62 | return {0, 0, 0}; | 80 | return {0, 0, 0}; |
| 63 | } | 81 | } |
| 64 | 82 | ||
| 65 | void OGLBufferCache::UploadBlockData(const Buffer& buffer, std::size_t offset, std::size_t size, | ||
| 66 | const u8* data) { | ||
| 67 | glNamedBufferSubData(buffer.Handle(), static_cast<GLintptr>(offset), | ||
| 68 | static_cast<GLsizeiptr>(size), data); | ||
| 69 | } | ||
| 70 | |||
| 71 | void OGLBufferCache::DownloadBlockData(const Buffer& buffer, std::size_t offset, std::size_t size, | ||
| 72 | u8* data) { | ||
| 73 | MICROPROFILE_SCOPE(OpenGL_Buffer_Download); | ||
| 74 | glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT); | ||
| 75 | glGetNamedBufferSubData(buffer.Handle(), static_cast<GLintptr>(offset), | ||
| 76 | static_cast<GLsizeiptr>(size), data); | ||
| 77 | } | ||
| 78 | |||
| 79 | void OGLBufferCache::CopyBlock(const Buffer& src, const Buffer& dst, std::size_t src_offset, | ||
| 80 | std::size_t dst_offset, std::size_t size) { | ||
| 81 | glCopyNamedBufferSubData(src.Handle(), dst.Handle(), static_cast<GLintptr>(src_offset), | ||
| 82 | static_cast<GLintptr>(dst_offset), static_cast<GLsizeiptr>(size)); | ||
| 83 | } | ||
| 84 | |||
| 85 | OGLBufferCache::BufferInfo OGLBufferCache::ConstBufferUpload(const void* raw_pointer, | 83 | OGLBufferCache::BufferInfo OGLBufferCache::ConstBufferUpload(const void* raw_pointer, |
| 86 | std::size_t size) { | 84 | std::size_t size) { |
| 87 | DEBUG_ASSERT(cbuf_cursor < std::size(cbufs)); | 85 | DEBUG_ASSERT(cbuf_cursor < std::size(cbufs)); |
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h index 6462cfae5..59d95adbc 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.h +++ b/src/video_core/renderer_opengl/gl_buffer_cache.h | |||
| @@ -28,6 +28,13 @@ public: | |||
| 28 | explicit Buffer(const Device& device, VAddr cpu_addr, std::size_t size); | 28 | explicit Buffer(const Device& device, VAddr cpu_addr, std::size_t size); |
| 29 | ~Buffer(); | 29 | ~Buffer(); |
| 30 | 30 | ||
| 31 | void Upload(std::size_t offset, std::size_t size, const u8* data) const; | ||
| 32 | |||
| 33 | void Download(std::size_t offset, std::size_t size, u8* data) const; | ||
| 34 | |||
| 35 | void CopyFrom(const Buffer& src, std::size_t src_offset, std::size_t dst_offset, | ||
| 36 | std::size_t size) const; | ||
| 37 | |||
| 31 | GLuint Handle() const noexcept { | 38 | GLuint Handle() const noexcept { |
| 32 | return gl_buffer.handle; | 39 | return gl_buffer.handle; |
| 33 | } | 40 | } |
| @@ -57,15 +64,6 @@ public: | |||
| 57 | protected: | 64 | protected: |
| 58 | std::shared_ptr<Buffer> CreateBlock(VAddr cpu_addr, std::size_t size) override; | 65 | std::shared_ptr<Buffer> CreateBlock(VAddr cpu_addr, std::size_t size) override; |
| 59 | 66 | ||
| 60 | void UploadBlockData(const Buffer& buffer, std::size_t offset, std::size_t size, | ||
| 61 | const u8* data) override; | ||
| 62 | |||
| 63 | void DownloadBlockData(const Buffer& buffer, std::size_t offset, std::size_t size, | ||
| 64 | u8* data) override; | ||
| 65 | |||
| 66 | void CopyBlock(const Buffer& src, const Buffer& dst, std::size_t src_offset, | ||
| 67 | std::size_t dst_offset, std::size_t size) override; | ||
| 68 | |||
| 69 | BufferInfo ConstBufferUpload(const void* raw_pointer, std::size_t size) override; | 67 | BufferInfo ConstBufferUpload(const void* raw_pointer, std::size_t size) override; |
| 70 | 68 | ||
| 71 | private: | 69 | private: |