summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-05-11 16:21:08 -0300
committerGravatar ReinUsesLisp2020-06-24 02:35:33 -0300
commit00c66a728958c3b2804131ce5baf44880119e018 (patch)
treef8c3264b33c49b2faae23680db8f62b80c8271b8 /src
parentgl_stream_buffer: Always use persistent memory maps (diff)
downloadyuzu-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.cpp20
-rw-r--r--src/video_core/renderer_opengl/gl_stream_buffer.h4
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
15namespace OpenGL { 16namespace OpenGL {
16 17
17OGLStreamBuffer::OGLStreamBuffer(GLsizeiptr size, bool vertex_data_usage, bool prefer_coherent) 18OGLStreamBuffer::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
39OGLStreamBuffer::~OGLStreamBuffer() { 37OGLStreamBuffer::~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
74void OGLStreamBuffer::Unmap(GLsizeiptr size) { 72void 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
14class OGLStreamBuffer : private NonCopyable { 14class OGLStreamBuffer : private NonCopyable {
15public: 15public:
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:
39private: 39private:
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;