summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_buffer_cache.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2020-06-26 21:58:40 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2020-06-26 21:58:40 +0200
commit6481d91e4a5b5fbae899c3a7924af0b132c16bc8 (patch)
treee67f6966cabda53be653cda6ba346f88d5f5090d /src/video_core/renderer_opengl/gl_buffer_cache.cpp
parentMerge pull request #4159 from ogniK5377/mem-manager-dumb-assert (diff)
downloadyuzu-6481d91e4a5b5fbae899c3a7924af0b132c16bc8.tar
yuzu-6481d91e4a5b5fbae899c3a7924af0b132c16bc8.tar.gz
yuzu-6481d91e4a5b5fbae899c3a7924af0b132c16bc8.tar.bz2
yuzu-6481d91e4a5b5fbae899c3a7924af0b132c16bc8.tar.lz
yuzu-6481d91e4a5b5fbae899c3a7924af0b132c16bc8.tar.xz
yuzu-6481d91e4a5b5fbae899c3a7924af0b132c16bc8.tar.zst
yuzu-6481d91e4a5b5fbae899c3a7924af0b132c16bc8.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index d9f7b4cc6..e461e4c70 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -34,20 +34,27 @@ Buffer::Buffer(const Device& device, VAddr cpu_addr, std::size_t size)
Buffer::~Buffer() = default;
-void Buffer::Upload(std::size_t offset, std::size_t size, const u8* data) const {
+void Buffer::Upload(std::size_t offset, std::size_t size, const u8* data) {
glNamedBufferSubData(Handle(), static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size),
data);
}
-void Buffer::Download(std::size_t offset, std::size_t size, u8* data) const {
+void Buffer::Download(std::size_t offset, std::size_t size, u8* data) {
MICROPROFILE_SCOPE(OpenGL_Buffer_Download);
+ const GLsizeiptr gl_size = static_cast<GLsizeiptr>(size);
+ const GLintptr gl_offset = static_cast<GLintptr>(offset);
+ if (read_buffer.handle == 0) {
+ read_buffer.Create();
+ glNamedBufferData(read_buffer.handle, static_cast<GLsizeiptr>(Size()), nullptr,
+ GL_STREAM_READ);
+ }
glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT);
- glGetNamedBufferSubData(Handle(), static_cast<GLintptr>(offset), static_cast<GLsizeiptr>(size),
- data);
+ glCopyNamedBufferSubData(gl_buffer.handle, read_buffer.handle, gl_offset, gl_offset, gl_size);
+ glGetNamedBufferSubData(read_buffer.handle, gl_offset, gl_size, data);
}
void Buffer::CopyFrom(const Buffer& src, std::size_t src_offset, std::size_t dst_offset,
- std::size_t size) const {
+ std::size_t size) {
glCopyNamedBufferSubData(src.Handle(), Handle(), static_cast<GLintptr>(src_offset),
static_cast<GLintptr>(dst_offset), static_cast<GLsizeiptr>(size));
}