diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_stream_buffer.cpp | 19 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_stream_buffer.h | 1 |
2 files changed, 5 insertions, 15 deletions
diff --git a/src/video_core/renderer_opengl/gl_stream_buffer.cpp b/src/video_core/renderer_opengl/gl_stream_buffer.cpp index 164df4feb..3655ff629 100644 --- a/src/video_core/renderer_opengl/gl_stream_buffer.cpp +++ b/src/video_core/renderer_opengl/gl_stream_buffer.cpp | |||
| @@ -57,30 +57,21 @@ std::tuple<u8*, GLintptr, bool> OGLStreamBuffer::Map(GLsizeiptr size, GLintptr a | |||
| 57 | 57 | ||
| 58 | bool invalidate = false; | 58 | bool invalidate = false; |
| 59 | if (buffer_pos + size > buffer_size) { | 59 | if (buffer_pos + size > buffer_size) { |
| 60 | MICROPROFILE_SCOPE(OpenGL_StreamBuffer); | ||
| 61 | glInvalidateBufferData(gl_buffer.handle); | ||
| 62 | |||
| 60 | buffer_pos = 0; | 63 | buffer_pos = 0; |
| 61 | invalidate = true; | 64 | invalidate = true; |
| 62 | |||
| 63 | glUnmapNamedBuffer(gl_buffer.handle); | ||
| 64 | } | ||
| 65 | |||
| 66 | if (invalidate) { | ||
| 67 | static const GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | | ||
| 68 | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_FLUSH_EXPLICIT_BIT; | ||
| 69 | |||
| 70 | MICROPROFILE_SCOPE(OpenGL_StreamBuffer); | ||
| 71 | mapped_ptr = static_cast<u8*>( | ||
| 72 | glMapNamedBufferRange(gl_buffer.handle, buffer_pos, buffer_size - buffer_pos, flags)); | ||
| 73 | mapped_offset = buffer_pos; | ||
| 74 | } | 65 | } |
| 75 | 66 | ||
| 76 | return std::make_tuple(mapped_ptr + buffer_pos - mapped_offset, buffer_pos, invalidate); | 67 | return std::make_tuple(mapped_ptr + buffer_pos, buffer_pos, invalidate); |
| 77 | } | 68 | } |
| 78 | 69 | ||
| 79 | void OGLStreamBuffer::Unmap(GLsizeiptr size) { | 70 | void OGLStreamBuffer::Unmap(GLsizeiptr size) { |
| 80 | ASSERT(size <= mapped_size); | 71 | ASSERT(size <= mapped_size); |
| 81 | 72 | ||
| 82 | if (size > 0) { | 73 | if (size > 0) { |
| 83 | glFlushMappedNamedBufferRange(gl_buffer.handle, buffer_pos - mapped_offset, size); | 74 | glFlushMappedNamedBufferRange(gl_buffer.handle, buffer_pos, size); |
| 84 | } | 75 | } |
| 85 | 76 | ||
| 86 | buffer_pos += size; | 77 | buffer_pos += size; |
diff --git a/src/video_core/renderer_opengl/gl_stream_buffer.h b/src/video_core/renderer_opengl/gl_stream_buffer.h index e67a82980..307a67113 100644 --- a/src/video_core/renderer_opengl/gl_stream_buffer.h +++ b/src/video_core/renderer_opengl/gl_stream_buffer.h | |||
| @@ -48,7 +48,6 @@ private: | |||
| 48 | GLuint64EXT gpu_address = 0; | 48 | GLuint64EXT gpu_address = 0; |
| 49 | GLintptr buffer_pos = 0; | 49 | GLintptr buffer_pos = 0; |
| 50 | GLsizeiptr buffer_size = 0; | 50 | GLsizeiptr buffer_size = 0; |
| 51 | GLintptr mapped_offset = 0; | ||
| 52 | GLsizeiptr mapped_size = 0; | 51 | GLsizeiptr mapped_size = 0; |
| 53 | u8* mapped_ptr = nullptr; | 52 | u8* mapped_ptr = nullptr; |
| 54 | }; | 53 | }; |