From 1276eda4c7507847ca179d7721dea38ecae73dc2 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 8 Nov 2014 13:05:24 +0000 Subject: [PATCH] Add glFlushMappedBufferRange, but not implemented yet * Still need to implement persistant/etc buffer Map()s --- renderdoc/driver/gl/gl_driver.h | 1 + renderdoc/driver/gl/gl_hookset.h | 1 + renderdoc/driver/gl/gl_hookset_defs.h | 2 ++ renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp | 14 ++++++++++++-- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index c727783f0..51f967e99 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -494,6 +494,7 @@ class WrappedOpenGL IMPLEMENT_FUNCTION_SERIALISED(void, glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size)); IMPLEMENT_FUNCTION_SERIALISED(void *, glMapBuffer(GLenum target, GLenum access)); IMPLEMENT_FUNCTION_SERIALISED(void *, glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access)); + IMPLEMENT_FUNCTION_SERIALISED(void, glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length)); IMPLEMENT_FUNCTION_SERIALISED(GLboolean, glUnmapBuffer(GLenum target)); IMPLEMENT_FUNCTION_SERIALISED(void, glDispatchCompute(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index b6f96e102..4e403efbf 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -303,6 +303,7 @@ struct GLHookSet PFNGLBINDBUFFERRANGEPROC glBindBufferRange; PFNGLMAPBUFFERPROC glMapBuffer; PFNGLMAPBUFFERRANGEPROC glMapBufferRange; + PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange; PFNGLUNMAPBUFFERPROC glUnmapBuffer; PFNGLDELETEBUFFERSPROC glDeleteBuffers; PFNGLGENVERTEXARRAYSPROC glGenVertexArrays; diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 9e5023b63..114292200 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -322,6 +322,7 @@ HookExtension(PFNGLBINDBUFFERRANGEPROC, glBindBufferRange); \ HookExtension(PFNGLMAPBUFFERPROC, glMapBuffer); \ HookExtension(PFNGLMAPBUFFERRANGEPROC, glMapBufferRange); \ + HookExtension(PFNGLFLUSHMAPPEDBUFFERRANGEPROC, glFlushMappedBufferRange); \ HookExtension(PFNGLUNMAPBUFFERPROC, glUnmapBuffer); \ HookExtension(PFNGLDELETEBUFFERSPROC, glDeleteBuffers); \ HookExtension(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays); \ @@ -925,6 +926,7 @@ HookWrapper5(void, glBindBufferRange, GLenum, target, GLuint, index, GLuint, buffer, GLintptr, offset, GLsizeiptr, size); \ HookWrapper2(void *, glMapBuffer, GLenum, target, GLenum, access); \ HookWrapper4(void *, glMapBufferRange, GLenum, target, GLintptr, offset, GLsizeiptr, length, GLbitfield, access); \ + HookWrapper3(void, glFlushMappedBufferRange, GLenum, target, GLintptr, offset, GLsizeiptr, length); \ HookWrapper1(GLboolean, glUnmapBuffer, GLenum, target); \ HookWrapper2(void, glDeleteBuffers, GLsizei, n, const GLuint *, buffers); \ HookWrapper2(void, glGenVertexArrays, GLsizei, n, GLuint *, arrays); \ diff --git a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp index 5293f959b..9b8270803 100644 --- a/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_buffer_funcs.cpp @@ -783,8 +783,8 @@ void *WrappedOpenGL::glMapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GL // TODO align return pointer to GL_MIN_MAP_BUFFER_ALIGNMENT (min 64) - if((access & (GL_MAP_COHERENT_BIT|GL_MAP_PERSISTENT_BIT)) != 0) - RDCUNIMPLEMENTED("haven't implemented coherent/persistant glMap calls"); + if((access & (GL_MAP_COHERENT_BIT|GL_MAP_PERSISTENT_BIT|GL_MAP_FLUSH_EXPLICIT_BIT|GL_MAP_UNSYNCHRONIZED_BIT)) != 0) + RDCUNIMPLEMENTED("haven't implemented coherent/persistant/flush explicit/unsynchronized glMap calls"); if((access & GL_MAP_READ_BIT) != 0) { @@ -1059,6 +1059,16 @@ GLboolean WrappedOpenGL::glUnmapBuffer(GLenum target) return m_Real.glUnmapBuffer(target); } +void WrappedOpenGL::glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) +{ + m_Real.glFlushMappedBufferRange(target, offset, length); + + if(m_State >= WRITING) + { + RDCUNIMPLEMENTED("Persistant/unsynchronised/explicit flash maps are not yet supported"); + } +} + #pragma endregion #pragma region Vertex Arrays