Implement GREMEDY string marker and frame terminator extensions

* We don't try and detect duplicate markers between GREMEDY and KHR_debug,
  just assume the program is smart enough to detect that both are available
  and pick only one to use.
This commit is contained in:
baldurk
2014-12-20 09:29:43 +00:00
parent 00ee02eabc
commit c02a8d7786
5 changed files with 27 additions and 4 deletions
+2
View File
@@ -460,6 +460,8 @@ WrappedOpenGL::WrappedOpenGL(const char *logfile, const GLHookSet &funcs)
globalExts.push_back("GL_EXT_texture_mirror_clamp");
globalExts.push_back("GL_EXT_texture_sRGB_decode");
globalExts.push_back("GL_EXT_timer_query");
globalExts.push_back("GL_GREMEDY_string_marker");
globalExts.push_back("GL_GREMEDY_frame_terminator");
globalExts.push_back("GL_KHR_debug");
// we'll be sorting the implementation extension array, so make sure the
+3
View File
@@ -493,6 +493,9 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf));
IMPLEMENT_FUNCTION_SERIALISED(void, glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message));
IMPLEMENT_FUNCTION_SERIALISED(void, glPopDebugGroup());
IMPLEMENT_FUNCTION_SERIALISED(void, glFrameTerminatorGREMEDY());
IMPLEMENT_FUNCTION_SERIALISED(void, glStringMarkerGREMEDY(GLsizei len, const void *string));
bool Serialise_glFenceSync(GLsync real, GLenum condition, GLbitfield flags);
GLsync glFenceSync(GLenum condition, GLbitfield flags);
+2
View File
@@ -734,5 +734,7 @@ struct GLHookSet
PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC glVertexArrayVertexBindingDivisorEXT;
PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC glVertexArrayVertexAttribLOffsetEXT;
PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC glVertexArrayVertexAttribDivisorEXT;
PFNGLFRAMETERMINATORGREMEDYPROC glFrameTerminatorGREMEDY;
PFNGLSTRINGMARKERGREMEDYPROC glStringMarkerGREMEDY;
// --
};
+4 -4
View File
@@ -862,6 +862,8 @@
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC, glVertexArrayVertexAttribLOffsetEXT); \
HookExtension(PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC, glVertexArrayVertexAttribDivisorEXT); \
HookExtension(PFNGLPOLYGONOFFSETCLAMPEXTPROC, glPolygonOffsetClampEXT); \
HookExtension(PFNGLFRAMETERMINATORGREMEDYPROC, glFrameTerminatorGREMEDY); \
HookExtension(PFNGLSTRINGMARKERGREMEDYPROC, glStringMarkerGREMEDY); \
HookExtension(PFNGLCULLFACEPROC, glCullFace); \
HookExtension(PFNGLFRONTFACEPROC, glFrontFace); \
HookExtension(PFNGLHINTPROC, glHint); \
@@ -1634,6 +1636,8 @@
HookWrapper7(void, glVertexArrayVertexAttribLOffsetEXT, GLuint, vaobj, GLuint, buffer, GLuint, index, GLint, size, GLenum, type, GLsizei, stride, GLintptr, offset); \
HookWrapper3(void, glVertexArrayVertexAttribDivisorEXT, GLuint, vaobj, GLuint, index, GLuint, divisor); \
HookWrapper3(void, glPolygonOffsetClampEXT, GLfloat, factor, GLfloat, units, GLfloat, clamp); \
HookWrapper0(void, glFrameTerminatorGREMEDY); \
HookWrapper2(void, glStringMarkerGREMEDY, GLsizei, len, const void *, string); \
@@ -2722,8 +2726,6 @@
HookWrapper1(void, glvertexweightfvext, const GLfloat *, weight); \
HookWrapper4(void, glvertexweightpointerext, GLint, size, GLenum, type, GLsizei, stride, const void *, pointer); \
HookWrapper3(GLsync, glimportsyncext, GLenum, external_sync_type, GLintptr, external_sync, GLbitfield, flags); \
HookWrapper0(void, glframeterminatorgremedy); \
HookWrapper2(void, glstringmarkergremedy, GLsizei, len, const void *, string); \
HookWrapper3(void, glimagetransformparameterihp, GLenum, target, GLenum, pname, GLint, param); \
HookWrapper3(void, glimagetransformparameterfhp, GLenum, target, GLenum, pname, GLfloat, param); \
HookWrapper3(void, glimagetransformparameterivhp, GLenum, target, GLenum, pname, const GLint *, params); \
@@ -4419,8 +4421,6 @@
HandleUnsupported(PFNGLVERTEXWEIGHTFVEXTPROC, glvertexweightfvext); \
HandleUnsupported(PFNGLVERTEXWEIGHTPOINTEREXTPROC, glvertexweightpointerext); \
HandleUnsupported(PFNGLIMPORTSYNCEXTPROC, glimportsyncext); \
HandleUnsupported(PFNGLFRAMETERMINATORGREMEDYPROC, glframeterminatorgremedy); \
HandleUnsupported(PFNGLSTRINGMARKERGREMEDYPROC, glstringmarkergremedy); \
HandleUnsupported(PFNGLIMAGETRANSFORMPARAMETERIHPPROC, glimagetransformparameterihp); \
HandleUnsupported(PFNGLIMAGETRANSFORMPARAMETERFHPPROC, glimagetransformparameterfhp); \
HandleUnsupported(PFNGLIMAGETRANSFORMPARAMETERIVHPPROC, glimagetransformparameterivhp); \
@@ -167,6 +167,22 @@ void WrappedOpenGL::glDebugMessageInsert(GLenum source, GLenum type, GLuint id,
m_Real.glDebugMessageInsert(source, type, id, severity, length, buf);
}
void WrappedOpenGL::glFrameTerminatorGREMEDY()
{
Present(NULL);
}
void WrappedOpenGL::glStringMarkerGREMEDY(GLsizei len, const void *string)
{
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(SET_MARKER);
Serialise_glDebugMessageInsert(eGL_NONE, eGL_NONE, 0, eGL_NONE, len, (const GLchar *)string);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message)
{
string name = message ? string(message, message + (length > 0 ? length : strlen(message))) : "";