diff --git a/renderdoc/driver/gl/gl_driver.h b/renderdoc/driver/gl/gl_driver.h index 6602f46d9..05874caf7 100644 --- a/renderdoc/driver/gl/gl_driver.h +++ b/renderdoc/driver/gl/gl_driver.h @@ -616,6 +616,7 @@ class WrappedOpenGL : public IFrameCapturer GLenum glCheckFramebufferStatus(GLenum target); IMPLEMENT_FUNCTION_SERIALISED(void, glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar *label)); + IMPLEMENT_FUNCTION_SERIALISED(void, glLabelObjectEXT(GLenum identifier, GLuint name, GLsizei length, const GLchar *label)); IMPLEMENT_FUNCTION_SERIALISED(void, glObjectPtrLabel(const void *ptr, GLsizei length, const GLchar *label)); IMPLEMENT_FUNCTION_SERIALISED(void, glDebugMessageCallback(GLDEBUGPROC callback, const void *userParam)); @@ -928,6 +929,7 @@ class WrappedOpenGL : public IFrameCapturer IMPLEMENT_FUNCTION_SERIALISED(void, glGetNamedStringivARB(GLint namelen, const GLchar *name, GLenum pname, GLint *params)); IMPLEMENT_FUNCTION_SERIALISED(GLenum, glGetGraphicsResetStatus()); IMPLEMENT_FUNCTION_SERIALISED(void, glGetObjectLabel(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label)); + IMPLEMENT_FUNCTION_SERIALISED(void, glGetObjectLabelEXT(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetObjectPtrLabel(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label)); IMPLEMENT_FUNCTION_SERIALISED(GLuint, glGetDebugMessageLog(GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog)); IMPLEMENT_FUNCTION_SERIALISED(void, glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params)); diff --git a/renderdoc/driver/gl/gl_hookset.h b/renderdoc/driver/gl/gl_hookset.h index 3353a4bb3..1945a08b6 100644 --- a/renderdoc/driver/gl/gl_hookset.h +++ b/renderdoc/driver/gl/gl_hookset.h @@ -161,7 +161,8 @@ struct GLHookSet PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC glGetProgramResourceLocationIndex; PFNGLGETPROGRAMSTAGEIVPROC glGetProgramStageiv; PFNGLGETGRAPHICSRESETSTATUSPROC glGetGraphicsResetStatus; // aliases glGetGraphicsResetStatusARB - PFNGLGETOBJECTLABELPROC glGetObjectLabel; // aliases glGetObjectLabelEXT + PFNGLGETOBJECTLABELPROC glGetObjectLabel; + PFNGLGETOBJECTLABELEXTPROC glGetObjectLabelEXT; PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel; PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog; // aliases glGetDebugMessageLogARB PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv; // aliases glGetFramebufferAttachmentParameterivEXT @@ -270,7 +271,8 @@ struct GLHookSet PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert; // aliases glDebugMessageInsertARB PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup; PFNGLPOPDEBUGGROUPPROC glPopDebugGroup; - PFNGLOBJECTLABELPROC glObjectLabel; // aliases glLabelObjectEXT + PFNGLOBJECTLABELPROC glObjectLabel; + PFNGLLABELOBJECTEXTPROC glLabelObjectEXT; PFNGLOBJECTPTRLABELPROC glObjectPtrLabel; PFNGLENABLEIPROC glEnablei; // aliases glEnableIndexedEXT PFNGLDISABLEIPROC glDisablei; // aliases glDisableIndexedEXT diff --git a/renderdoc/driver/gl/gl_hookset_defs.h b/renderdoc/driver/gl/gl_hookset_defs.h index 4811c49ca..d7c41e6ba 100644 --- a/renderdoc/driver/gl/gl_hookset_defs.h +++ b/renderdoc/driver/gl/gl_hookset_defs.h @@ -804,9 +804,7 @@ HookExtension(PFNGLPUSHDEBUGGROUPPROC, glPushDebugGroup); \ HookExtension(PFNGLPOPDEBUGGROUPPROC, glPopDebugGroup); \ HookExtension(PFNGLOBJECTLABELPROC, glObjectLabel); \ - HookExtensionAlias(PFNGLOBJECTLABELPROC, glObjectLabel, glLabelObjectEXT); \ HookExtension(PFNGLGETOBJECTLABELPROC, glGetObjectLabel); \ - HookExtensionAlias(PFNGLGETOBJECTLABELPROC, glGetObjectLabel, glGetObjectLabelEXT); \ HookExtension(PFNGLOBJECTPTRLABELPROC, glObjectPtrLabel); \ HookExtension(PFNGLGETOBJECTPTRLABELPROC, glGetObjectPtrLabel); \ HookExtension(PFNGLBUFFERSTORAGEPROC, glBufferStorage); \ @@ -973,6 +971,8 @@ HookExtension(PFNGLGETNAMEDSTRINGARBPROC, glGetNamedStringARB); \ HookExtension(PFNGLGETNAMEDSTRINGIVARBPROC, glGetNamedStringivARB); \ HookExtension(PFNGLBLENDBARRIERKHRPROC, glBlendBarrierKHR); \ + HookExtension(PFNGLLABELOBJECTEXTPROC, glLabelObjectEXT); \ + HookExtension(PFNGLGETOBJECTLABELEXTPROC, glGetObjectLabelEXT); \ HookExtension(PFNGLINSERTEVENTMARKEREXTPROC, glInsertEventMarkerEXT); \ HookExtension(PFNGLPUSHGROUPMARKEREXTPROC, glPushGroupMarkerEXT); \ HookExtension(PFNGLPOPGROUPMARKEREXTPROC, glPopGroupMarkerEXT); \ @@ -1815,6 +1815,8 @@ HookWrapper5(void, glGetNamedStringARB, GLint, namelen, const GLchar *, name, GLsizei, bufSize, GLint *, stringlen, GLchar *, string); \ HookWrapper4(void, glGetNamedStringivARB, GLint, namelen, const GLchar *, name, GLenum, pname, GLint *, params); \ HookWrapper0(void, glBlendBarrierKHR); \ + HookWrapper4(void, glLabelObjectEXT, GLenum, type, GLuint, object, GLsizei, length, const GLchar *, label); \ + HookWrapper5(void, glGetObjectLabelEXT, GLenum, type, GLuint, object, GLsizei, bufSize, GLsizei *, length, GLchar *, label); \ HookWrapper2(void, glInsertEventMarkerEXT, GLsizei, length, const GLchar *, marker); \ HookWrapper2(void, glPushGroupMarkerEXT, GLsizei, length, const GLchar *, marker); \ HookWrapper0(void, glPopGroupMarkerEXT); \ diff --git a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp index a05435436..7902c6cac 100644 --- a/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_debug_funcs.cpp @@ -31,6 +31,8 @@ bool WrappedOpenGL::Serialise_glObjectLabel(GLenum identifier, GLuint name, GLsi { ResourceId liveid; + bool extvariant = false; + string Label; if(m_State >= WRITING) { @@ -44,27 +46,33 @@ bool WrappedOpenGL::Serialise_glObjectLabel(GLenum identifier, GLuint name, GLsi case eGL_TEXTURE: liveid = GetResourceManager()->GetID(TextureRes(GetCtx(), name)); break; - case eGL_BUFFER: case eGL_BUFFER_OBJECT_EXT: + extvariant = true; + case eGL_BUFFER: liveid = GetResourceManager()->GetID(BufferRes(GetCtx(), name)); break; case eGL_PROGRAM_OBJECT_EXT: + extvariant = true; case eGL_PROGRAM: liveid = GetResourceManager()->GetID(ProgramRes(GetCtx(), name)); break; case eGL_PROGRAM_PIPELINE_OBJECT_EXT: + extvariant = true; case eGL_PROGRAM_PIPELINE: liveid = GetResourceManager()->GetID(ProgramPipeRes(GetCtx(), name)); break; case eGL_VERTEX_ARRAY_OBJECT_EXT: + extvariant = true; case eGL_VERTEX_ARRAY: liveid = GetResourceManager()->GetID(VertexArrayRes(GetCtx(), name)); break; - case eGL_SHADER: case eGL_SHADER_OBJECT_EXT: + extvariant = true; + case eGL_SHADER: liveid = GetResourceManager()->GetID(ShaderRes(GetCtx(), name)); break; case eGL_QUERY_OBJECT_EXT: + extvariant = true; case eGL_QUERY: liveid = GetResourceManager()->GetID(QueryRes(GetCtx(), name)); break; @@ -95,12 +103,29 @@ bool WrappedOpenGL::Serialise_glObjectLabel(GLenum identifier, GLuint name, GLsi if(m_State == READING && GetResourceManager()->HasLiveResource(id)) { GLResource res = GetResourceManager()->GetLiveResource(id); - m_Real.glObjectLabel(Identifier, res.name, Length, HasLabel ? Label.c_str() : NULL); + + if(extvariant && m_Real.glLabelObjectEXT) + m_Real.glLabelObjectEXT(Identifier, res.name, Length, HasLabel ? Label.c_str() : NULL); + else + m_Real.glObjectLabel(Identifier, res.name, Length, HasLabel ? Label.c_str() : NULL); } return true; } +void WrappedOpenGL::glLabelObjectEXT(GLenum identifier, GLuint name, GLsizei length, const GLchar *label) +{ + m_Real.glLabelObjectEXT(identifier, name, length, label); + + if(m_State >= WRITING) + { + SCOPED_SERIALISE_CONTEXT(OBJECT_LABEL); + Serialise_glObjectLabel(identifier, name, length, label); + + m_DeviceRecord->AddChunk(scope.Get()); + } +} + void WrappedOpenGL::glObjectLabel(GLenum identifier, GLuint name, GLsizei length, const GLchar *label) { m_Real.glObjectLabel(identifier, name, length, label); diff --git a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp index 60f3917b7..bfb83c58b 100644 --- a/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp +++ b/renderdoc/driver/gl/wrappers/gl_get_funcs.cpp @@ -570,6 +570,11 @@ void WrappedOpenGL::glGetObjectLabel(GLenum identifier, GLuint name, GLsizei buf m_Real.glGetObjectLabel(identifier, name, bufSize, length, label); } +void WrappedOpenGL::glGetObjectLabelEXT(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label) +{ + m_Real.glGetObjectLabelEXT(identifier, name, bufSize, length, label); +} + void WrappedOpenGL::glGetObjectPtrLabel(const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label) { m_Real.glGetObjectPtrLabel(ptr, bufSize, length, label);