When adding GL_MAP_READ_BIT to persistent maps, remove INVALIDATE_*_BIT

This commit is contained in:
baldurk
2019-04-30 13:35:00 +01:00
parent 9c7430c305
commit a1adcd431d
2 changed files with 32 additions and 3 deletions
@@ -1928,6 +1928,13 @@ void *WrappedOpenGL::glMapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GL
{
// reading must be available
access |= GL_MAP_READ_BIT;
// can't invalidate if we are reading. This flag is safe to remove because it only has a perf
// impact - invalid data could by coincidence be the precise previous contents. We've also
// already set invalidateMap above so if we're verifying buffer contents we know to check for
// it.
access &= ~(GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_INVALIDATE_RANGE_BIT);
directMap = true;
persistent = true;
}
+25 -3
View File
@@ -96,6 +96,8 @@ void main()
BUFFER_TEST(CleanBufferMapFlushExplicit) \
BUFFER_TEST(DirtyBufferMapFlushExplicit) \
BUFFER_TEST(CoherentMapWrite) \
BUFFER_TEST(CoherentMapWriteInvalidateRange) \
BUFFER_TEST(CoherentMapWriteInvalidateBuffer) \
BUFFER_TEST(NonCoherentMapFlush) \
BUFFER_TEST(OffsetMapWrite) \
BUFFER_TEST(OffsetMapFlush)
@@ -195,7 +197,8 @@ void main()
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(Vec4f), &red);
glBindBuffer(GL_UNIFORM_BUFFER, buffers[DirtyBufferMapFlushExplicit]);
glBufferStorage(GL_UNIFORM_BUFFER, sizeof(Vec4f), &red, GL_MAP_WRITE_BIT);
glBufferStorage(GL_UNIFORM_BUFFER, sizeof(Vec4f), &red,
GL_MAP_WRITE_BIT | GL_DYNAMIC_STORAGE_BIT);
for(int i = 0; i < 100; i++)
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(Vec4f), &red);
@@ -207,6 +210,22 @@ void main()
(Vec4f *)glMapBufferRange(GL_UNIFORM_BUFFER, 0, sizeof(Vec4f),
GL_MAP_COHERENT_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_WRITE_BIT);
glBindBuffer(GL_UNIFORM_BUFFER, buffers[CoherentMapWriteInvalidateRange]);
glBufferStorage(GL_UNIFORM_BUFFER, sizeof(Vec4f), &red,
GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
ptrs[CoherentMapWriteInvalidateRange] = (Vec4f *)glMapBufferRange(
GL_UNIFORM_BUFFER, 0, sizeof(Vec4f), GL_MAP_COHERENT_BIT | GL_MAP_PERSISTENT_BIT |
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT);
glBindBuffer(GL_UNIFORM_BUFFER, buffers[CoherentMapWriteInvalidateBuffer]);
glBufferStorage(GL_UNIFORM_BUFFER, sizeof(Vec4f), &red,
GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
ptrs[CoherentMapWriteInvalidateBuffer] = (Vec4f *)glMapBufferRange(
GL_UNIFORM_BUFFER, 0, sizeof(Vec4f), GL_MAP_COHERENT_BIT | GL_MAP_PERSISTENT_BIT |
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
glBindBuffer(GL_UNIFORM_BUFFER, buffers[NonCoherentMapFlush]);
glBufferStorage(GL_UNIFORM_BUFFER, sizeof(Vec4f), &red, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT);
@@ -324,6 +343,8 @@ void main()
glUnmapBuffer(GL_UNIFORM_BUFFER);
memcpy(ptrs[CoherentMapWrite], &red, sizeof(Vec4f));
memcpy(ptrs[CoherentMapWriteInvalidateRange], &red, sizeof(Vec4f));
memcpy(ptrs[CoherentMapWriteInvalidateBuffer], &red, sizeof(Vec4f));
glBindBuffer(GL_UNIFORM_BUFFER, buffers[NonCoherentMapFlush]);
memcpy(ptrs[NonCoherentMapFlush], &red, sizeof(Vec4f));
@@ -359,8 +380,9 @@ void main()
glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0,
GL_DEBUG_SEVERITY_HIGH, -1, TestNames[buf]);
if(buf == CoherentMapWrite)
memcpy(ptrs[CoherentMapWrite], &green, sizeof(Vec4f));
if(buf == CoherentMapWrite || buf == CoherentMapWriteInvalidateRange ||
buf == CoherentMapWriteInvalidateBuffer)
memcpy(ptrs[buf], &green, sizeof(Vec4f));
if(buf == NonCoherentMapFlush)
{