diff options
| author | 2020-05-11 16:21:08 -0300 | |
|---|---|---|
| committer | 2020-06-24 02:35:33 -0300 | |
| commit | 00c66a728958c3b2804131ce5baf44880119e018 (patch) | |
| tree | f8c3264b33c49b2faae23680db8f62b80c8271b8 /src | |
| parent | gl_stream_buffer: Always use persistent memory maps (diff) | |
| download | yuzu-00c66a728958c3b2804131ce5baf44880119e018.tar.gz yuzu-00c66a728958c3b2804131ce5baf44880119e018.tar.xz yuzu-00c66a728958c3b2804131ce5baf44880119e018.zip | |
gl_stream_buffer: Always use a non-coherent buffer
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_stream_buffer.cpp | 20 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_stream_buffer.h | 4 |
2 files changed, 10 insertions, 14 deletions
diff --git a/src/video_core/renderer_opengl/gl_stream_buffer.cpp b/src/video_core/renderer_opengl/gl_stream_buffer.cpp index 9cf0f6b46..aeafcfbfe 100644 --- a/src/video_core/renderer_opengl/gl_stream_buffer.cpp +++ b/src/video_core/renderer_opengl/gl_stream_buffer.cpp | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #include <deque> | 5 | #include <deque> |
| 6 | #include <vector> | 6 | #include <vector> |
| 7 | |||
| 7 | #include "common/alignment.h" | 8 | #include "common/alignment.h" |
| 8 | #include "common/assert.h" | 9 | #include "common/assert.h" |
| 9 | #include "common/microprofile.h" | 10 | #include "common/microprofile.h" |
| @@ -14,8 +15,7 @@ MICROPROFILE_DEFINE(OpenGL_StreamBuffer, "OpenGL", "Stream Buffer Orphaning", | |||
| 14 | 15 | ||
| 15 | namespace OpenGL { | 16 | namespace OpenGL { |
| 16 | 17 | ||
| 17 | OGLStreamBuffer::OGLStreamBuffer(GLsizeiptr size, bool vertex_data_usage, bool prefer_coherent) | 18 | OGLStreamBuffer::OGLStreamBuffer(GLsizeiptr size, bool vertex_data_usage) : buffer_size(size) { |
| 18 | : buffer_size(size) { | ||
| 19 | gl_buffer.Create(); | 19 | gl_buffer.Create(); |
| 20 | 20 | ||
| 21 | GLsizeiptr allocate_size = size; | 21 | GLsizeiptr allocate_size = size; |
| @@ -28,12 +28,10 @@ OGLStreamBuffer::OGLStreamBuffer(GLsizeiptr size, bool vertex_data_usage, bool p | |||
| 28 | allocate_size *= 2; | 28 | allocate_size *= 2; |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | coherent = prefer_coherent; | 31 | static constexpr GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT; |
| 32 | const GLbitfield flags = | ||
| 33 | GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | (coherent ? GL_MAP_COHERENT_BIT : 0); | ||
| 34 | glNamedBufferStorage(gl_buffer.handle, allocate_size, nullptr, flags); | 32 | glNamedBufferStorage(gl_buffer.handle, allocate_size, nullptr, flags); |
| 35 | mapped_ptr = static_cast<u8*>(glMapNamedBufferRange( | 33 | mapped_ptr = static_cast<u8*>( |
| 36 | gl_buffer.handle, 0, buffer_size, flags | (coherent ? 0 : GL_MAP_FLUSH_EXPLICIT_BIT))); | 34 | glMapNamedBufferRange(gl_buffer.handle, 0, buffer_size, flags | GL_MAP_FLUSH_EXPLICIT_BIT)); |
| 37 | } | 35 | } |
| 38 | 36 | ||
| 39 | OGLStreamBuffer::~OGLStreamBuffer() { | 37 | OGLStreamBuffer::~OGLStreamBuffer() { |
| @@ -59,10 +57,10 @@ std::tuple<u8*, GLintptr, bool> OGLStreamBuffer::Map(GLsizeiptr size, GLintptr a | |||
| 59 | } | 57 | } |
| 60 | 58 | ||
| 61 | if (invalidate) { | 59 | if (invalidate) { |
| 60 | static const GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | | ||
| 61 | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_FLUSH_EXPLICIT_BIT; | ||
| 62 | |||
| 62 | MICROPROFILE_SCOPE(OpenGL_StreamBuffer); | 63 | MICROPROFILE_SCOPE(OpenGL_StreamBuffer); |
| 63 | const GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | | ||
| 64 | GL_MAP_INVALIDATE_BUFFER_BIT | | ||
| 65 | (coherent ? GL_MAP_COHERENT_BIT : GL_MAP_FLUSH_EXPLICIT_BIT); | ||
| 66 | mapped_ptr = static_cast<u8*>( | 64 | mapped_ptr = static_cast<u8*>( |
| 67 | glMapNamedBufferRange(gl_buffer.handle, buffer_pos, buffer_size - buffer_pos, flags)); | 65 | glMapNamedBufferRange(gl_buffer.handle, buffer_pos, buffer_size - buffer_pos, flags)); |
| 68 | mapped_offset = buffer_pos; | 66 | mapped_offset = buffer_pos; |
| @@ -74,7 +72,7 @@ std::tuple<u8*, GLintptr, bool> OGLStreamBuffer::Map(GLsizeiptr size, GLintptr a | |||
| 74 | void OGLStreamBuffer::Unmap(GLsizeiptr size) { | 72 | void OGLStreamBuffer::Unmap(GLsizeiptr size) { |
| 75 | ASSERT(size <= mapped_size); | 73 | ASSERT(size <= mapped_size); |
| 76 | 74 | ||
| 77 | if (!coherent && size > 0) { | 75 | if (size > 0) { |
| 78 | glFlushMappedNamedBufferRange(gl_buffer.handle, buffer_pos - mapped_offset, size); | 76 | glFlushMappedNamedBufferRange(gl_buffer.handle, buffer_pos - mapped_offset, size); |
| 79 | } | 77 | } |
| 80 | 78 | ||
diff --git a/src/video_core/renderer_opengl/gl_stream_buffer.h b/src/video_core/renderer_opengl/gl_stream_buffer.h index 65c3da93f..826c2e361 100644 --- a/src/video_core/renderer_opengl/gl_stream_buffer.h +++ b/src/video_core/renderer_opengl/gl_stream_buffer.h | |||
| @@ -13,7 +13,7 @@ namespace OpenGL { | |||
| 13 | 13 | ||
| 14 | class OGLStreamBuffer : private NonCopyable { | 14 | class OGLStreamBuffer : private NonCopyable { |
| 15 | public: | 15 | public: |
| 16 | explicit OGLStreamBuffer(GLsizeiptr size, bool vertex_data_usage, bool prefer_coherent = false); | 16 | explicit OGLStreamBuffer(GLsizeiptr size, bool vertex_data_usage); |
| 17 | ~OGLStreamBuffer(); | 17 | ~OGLStreamBuffer(); |
| 18 | 18 | ||
| 19 | /* | 19 | /* |
| @@ -39,8 +39,6 @@ public: | |||
| 39 | private: | 39 | private: |
| 40 | OGLBuffer gl_buffer; | 40 | OGLBuffer gl_buffer; |
| 41 | 41 | ||
| 42 | bool coherent = false; | ||
| 43 | |||
| 44 | GLintptr buffer_pos = 0; | 42 | GLintptr buffer_pos = 0; |
| 45 | GLsizeiptr buffer_size = 0; | 43 | GLsizeiptr buffer_size = 0; |
| 46 | GLintptr mapped_offset = 0; | 44 | GLintptr mapped_offset = 0; |