mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-29 13:20:54 +00:00
Support Push/Pop markers from KHR_debug and implement begin/set/end
This commit is contained in:
@@ -158,9 +158,9 @@ const char *GLChunkNames[] =
|
||||
"glDeleteBuffer",
|
||||
|
||||
"glObjectLabel",
|
||||
"PushMarker",
|
||||
"SetMarker",
|
||||
"PopMarker",
|
||||
"glPushDebugGroup",
|
||||
"glDebugMessageInsert",
|
||||
"glPopDebugGroup",
|
||||
|
||||
"Capture",
|
||||
"BeginCapture",
|
||||
@@ -811,11 +811,94 @@ void WrappedOpenGL::glDebugMessageControl(GLenum source, GLenum type, GLenum sev
|
||||
m_Real.glDebugMessageControl(source, type, severity, count, ids, enabled);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf)
|
||||
{
|
||||
wstring name = name_ ? widen(string(buf, buf+length)) : L"";
|
||||
|
||||
m_pSerialiser->Serialise("Name", name);
|
||||
|
||||
if(m_State == READING)
|
||||
{
|
||||
FetchDrawcall draw;
|
||||
draw.name = name;
|
||||
draw.flags |= eDraw_SetMarker;
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glDebugMessageInsert(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf)
|
||||
{
|
||||
if(m_State == WRITING_CAPFRAME && type == eGL_DEBUG_TYPE_MARKER)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(SET_MARKER);
|
||||
Serialise_glDebugMessageInsert(source, type, id, severity, length, buf);
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
|
||||
m_Real.glDebugMessageInsert(source, type, id, severity, length, buf);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message)
|
||||
{
|
||||
wstring name = message ? widen(string(message, message+length)) : L"";
|
||||
|
||||
m_pSerialiser->Serialise("Name", name);
|
||||
|
||||
if(m_State == READING)
|
||||
{
|
||||
FetchDrawcall draw;
|
||||
draw.name = name;
|
||||
draw.flags |= eDraw_PushMarker;
|
||||
|
||||
AddDrawcall(draw, false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar *message)
|
||||
{
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(BEGIN_EVENT);
|
||||
Serialise_glPushDebugGroup(source, id, length, message);
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
|
||||
m_Real.glPushDebugGroup(source, id, length, message);
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glPopDebugGroup()
|
||||
{
|
||||
if(m_State == READING && !m_CurEvents.empty())
|
||||
{
|
||||
FetchDrawcall draw;
|
||||
draw.name = L"API Calls";
|
||||
draw.flags |= eDraw_SetMarker;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
void WrappedOpenGL::glPopDebugGroup()
|
||||
{
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(END_EVENT);
|
||||
Serialise_glPopDebugGroup();
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
|
||||
m_Real.glPopDebugGroup();
|
||||
}
|
||||
|
||||
void WrappedOpenGL::ReadLogInitialisation()
|
||||
{
|
||||
uint64_t lastFrame = 0;
|
||||
@@ -1258,6 +1341,15 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
|
||||
case OBJECT_LABEL:
|
||||
Serialise_glObjectLabel(eGL_UNKNOWN_ENUM, 0, 0, NULL);
|
||||
break;
|
||||
case BEGIN_EVENT:
|
||||
Serialise_glPushDebugGroup(eGL_UNKNOWN_ENUM, 0, 0, NULL);
|
||||
break;
|
||||
case SET_MARKER:
|
||||
Serialise_glDebugMessageInsert(eGL_UNKNOWN_ENUM, eGL_UNKNOWN_ENUM, 0, eGL_UNKNOWN_ENUM, 0, NULL);
|
||||
break;
|
||||
case END_EVENT:
|
||||
Serialise_glPopDebugGroup();
|
||||
break;
|
||||
|
||||
case CAPTURE_SCOPE:
|
||||
Serialise_CaptureScope(offset);
|
||||
|
||||
@@ -350,6 +350,8 @@ class WrappedOpenGL
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDebugMessageCallback(GLDEBUGPROC callback, const void *userParam));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDebugMessageControl(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled));
|
||||
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, glActiveTexture(GLenum texture));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glTexStorage1D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glTexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height));
|
||||
|
||||
@@ -143,6 +143,8 @@ struct GLHookSet
|
||||
PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback; // aliases glDebugMessageCallbackARB
|
||||
PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl;
|
||||
PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert;
|
||||
PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;
|
||||
PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
|
||||
PFNGLGETOBJECTLABELPROC glGetObjectLabel;
|
||||
PFNGLOBJECTLABELPROC glObjectLabel;
|
||||
PFNGLENABLEIPROC glEnablei;
|
||||
|
||||
@@ -155,6 +155,8 @@
|
||||
HookExtensionAlias(PFNGLDEBUGMESSAGECALLBACKPROC, glDebugMessageCallback, glDebugMessageCallbackARB); \
|
||||
HookExtension(PFNGLDEBUGMESSAGECONTROLPROC, glDebugMessageControl); \
|
||||
HookExtension(PFNGLDEBUGMESSAGEINSERTPROC, glDebugMessageInsert); \
|
||||
HookExtension(PFNGLPUSHDEBUGGROUPPROC, glPushDebugGroup); \
|
||||
HookExtension(PFNGLPOPDEBUGGROUPPROC, glPopDebugGroup); \
|
||||
HookExtension(PFNGLGETOBJECTLABELPROC, glGetObjectLabel); \
|
||||
HookExtension(PFNGLOBJECTLABELPROC, glObjectLabel); \
|
||||
HookExtension(PFNGLENABLEIPROC, glEnablei); \
|
||||
@@ -416,6 +418,8 @@
|
||||
HookWrapper2(void, glDebugMessageCallback, GLDEBUGPROC, callback, const void *, userParam); \
|
||||
HookWrapper6(void, glDebugMessageControl, GLenum, source, GLenum, type, GLenum, severity, GLsizei, count, const GLuint *, ids, GLboolean, enabled); \
|
||||
HookWrapper6(void, glDebugMessageInsert, GLenum, source, GLenum, type, GLuint, id, GLenum, severity, GLsizei, length, const GLchar *, buf); \
|
||||
HookWrapper4(void, glPushDebugGroup, GLenum, source, GLuint, id, GLsizei, length, const GLchar *, message); \
|
||||
HookWrapper0(void, glPopDebugGroup); \
|
||||
HookWrapper5(void, glGetObjectLabel, GLenum, identifier, GLuint, name, GLsizei, bufSize, GLsizei *, length, GLchar *, label); \
|
||||
HookWrapper4(void, glObjectLabel, GLenum, identifier, GLuint, name, GLsizei, length, const GLchar *, label); \
|
||||
HookWrapper2(void, glEnablei, GLenum, target, GLuint, index); \
|
||||
|
||||
Reference in New Issue
Block a user