From 77e11abf07fe3c8400fe361751e91fc9d8e3eb34 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 11 Nov 2021 15:20:43 +0000 Subject: [PATCH] Test that mapping and unmapping a "persistent" buffer each frame works --- util/test/demos/gl/gl_buffer_updates.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/util/test/demos/gl/gl_buffer_updates.cpp b/util/test/demos/gl/gl_buffer_updates.cpp index 426407b27..3a368d252 100644 --- a/util/test/demos/gl/gl_buffer_updates.cpp +++ b/util/test/demos/gl/gl_buffer_updates.cpp @@ -105,7 +105,8 @@ void main() BUFFER_TEST(NonCoherentMapFlush) \ BUFFER_TEST(NonCoherentMapFlushUnsynchronised) \ BUFFER_TEST(OffsetMapWrite) \ - BUFFER_TEST(OffsetMapFlush) + BUFFER_TEST(OffsetMapFlush) \ + BUFFER_TEST(PersistentBufferFrameMapped) #undef BUFFER_TEST #define BUFFER_TEST(name) name, @@ -266,6 +267,11 @@ void main() for(int i = 0; i < 100; i++) glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(Vec4f), &cyan); + glBindBuffer(GL_UNIFORM_BUFFER, buffers[PersistentBufferFrameMapped]); + glBufferStorage( + GL_UNIFORM_BUFFER, sizeof(Vec4f), &red, + GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT | GL_DYNAMIC_STORAGE_BIT); + // these buffers are used for indicating a CPU readback passed or failed GLuint pass = MakeBuffer(); glBindBuffer(GL_UNIFORM_BUFFER, pass); @@ -416,6 +422,15 @@ void main() glFlushMappedBufferRange(GL_UNIFORM_BUFFER, 0, sizeof(float)); glUnmapBuffer(GL_UNIFORM_BUFFER); + glBindBuffer(GL_UNIFORM_BUFFER, buffers[PersistentBufferFrameMapped]); + glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(Vec4f), &cyan); + + ptr = (Vec4f *)glMapBufferRange(GL_UNIFORM_BUFFER, sizeof(float) * 2, sizeof(float), + GL_MAP_PERSISTENT_BIT | GL_MAP_WRITE_BIT); + if(ptr) + ptr->x = 0.0f; + glUnmapBuffer(GL_UNIFORM_BUFFER); + const int squareSize = 50; int buf = 0;