Serialise glObjectLabel calls in the resource's own record

This commit is contained in:
baldurk
2018-09-26 12:53:52 +01:00
parent e13c292fac
commit 9aedacdc90
2 changed files with 49 additions and 24 deletions
+2
View File
@@ -92,6 +92,8 @@ private:
bool m_SuppressDebugMessages;
GLResource GetResource(GLenum identifier, GLuint name);
void DebugSnoop(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
const GLchar *message);
static void APIENTRY DebugSnoopStatic(GLenum source, GLenum type, GLuint id, GLenum severity,
+47 -24
View File
@@ -27,6 +27,35 @@
#include "common/common.h"
#include "strings/string_utils.h"
GLResource WrappedOpenGL::GetResource(GLenum identifier, GLuint name)
{
GLResource Resource;
switch(identifier)
{
case eGL_TEXTURE: Resource = TextureRes(GetCtx(), name); break;
case eGL_BUFFER_OBJECT_EXT:
case eGL_BUFFER: Resource = BufferRes(GetCtx(), name); break;
case eGL_PROGRAM_OBJECT_EXT:
case eGL_PROGRAM: Resource = ProgramRes(GetCtx(), name); break;
case eGL_PROGRAM_PIPELINE_OBJECT_EXT:
case eGL_PROGRAM_PIPELINE: Resource = ProgramPipeRes(GetCtx(), name); break;
case eGL_VERTEX_ARRAY_OBJECT_EXT:
case eGL_VERTEX_ARRAY: Resource = VertexArrayRes(GetCtx(), name); break;
case eGL_SHADER_OBJECT_EXT:
case eGL_SHADER: Resource = ShaderRes(GetCtx(), name); break;
case eGL_QUERY_OBJECT_EXT:
case eGL_QUERY: Resource = QueryRes(GetCtx(), name); break;
case eGL_TRANSFORM_FEEDBACK: Resource = FeedbackRes(GetCtx(), name); break;
case eGL_SAMPLER: Resource = SamplerRes(GetCtx(), name); break;
case eGL_RENDERBUFFER: Resource = RenderbufferRes(GetCtx(), name); break;
case eGL_FRAMEBUFFER: Resource = FramebufferRes(GetCtx(), name); break;
default: RDCERR("Unhandled namespace in glObjectLabel");
}
return Resource;
}
template <typename SerialiserType>
bool WrappedOpenGL::Serialise_glObjectLabel(SerialiserType &ser, GLenum identifier, GLuint name,
GLsizei length, const GLchar *label)
@@ -53,27 +82,7 @@ bool WrappedOpenGL::Serialise_glObjectLabel(SerialiserType &ser, GLenum identifi
else
Label = std::string(label, label + realLength);
switch(identifier)
{
case eGL_TEXTURE: Resource = TextureRes(GetCtx(), name); break;
case eGL_BUFFER_OBJECT_EXT:
case eGL_BUFFER: Resource = BufferRes(GetCtx(), name); break;
case eGL_PROGRAM_OBJECT_EXT:
case eGL_PROGRAM: Resource = ProgramRes(GetCtx(), name); break;
case eGL_PROGRAM_PIPELINE_OBJECT_EXT:
case eGL_PROGRAM_PIPELINE: Resource = ProgramPipeRes(GetCtx(), name); break;
case eGL_VERTEX_ARRAY_OBJECT_EXT:
case eGL_VERTEX_ARRAY: Resource = VertexArrayRes(GetCtx(), name); break;
case eGL_SHADER_OBJECT_EXT:
case eGL_SHADER: Resource = ShaderRes(GetCtx(), name); break;
case eGL_QUERY_OBJECT_EXT:
case eGL_QUERY: Resource = QueryRes(GetCtx(), name); break;
case eGL_TRANSFORM_FEEDBACK: Resource = FeedbackRes(GetCtx(), name); break;
case eGL_SAMPLER: Resource = SamplerRes(GetCtx(), name); break;
case eGL_RENDERBUFFER: Resource = RenderbufferRes(GetCtx(), name); break;
case eGL_FRAMEBUFFER: Resource = FramebufferRes(GetCtx(), name); break;
default: RDCERR("Unhandled namespace in glObjectLabel");
}
Resource = GetResource(identifier, name);
}
SERIALISE_ELEMENT(Resource);
@@ -107,7 +116,14 @@ void WrappedOpenGL::glLabelObjectEXT(GLenum identifier, GLuint name, GLsizei len
SCOPED_SERIALISE_CHUNK(gl_CurChunk);
Serialise_glObjectLabel(ser, identifier, name, length, label);
m_DeviceRecord->AddChunk(scope.Get());
GLResourceRecord *record = m_DeviceRecord;
GLResource res = GetResource(identifier, name);
if(GetResourceManager()->HasResourceRecord(res))
record = GetResourceManager()->GetResourceRecord(res);
record->AddChunk(scope.Get());
}
}
@@ -121,7 +137,14 @@ void WrappedOpenGL::glObjectLabel(GLenum identifier, GLuint name, GLsizei length
SCOPED_SERIALISE_CHUNK(gl_CurChunk);
Serialise_glObjectLabel(ser, identifier, name, length, label);
m_DeviceRecord->AddChunk(scope.Get());
GLResourceRecord *record = m_DeviceRecord;
GLResource res = GetResource(identifier, name);
if(GetResourceManager()->HasResourceRecord(res))
record = GetResourceManager()->GetResourceRecord(res);
record->AddChunk(scope.Get());
}
}
@@ -137,7 +160,7 @@ void WrappedOpenGL::glObjectPtrLabel(const void *ptr, GLsizei length, const GLch
Serialise_glObjectLabel(ser, eGL_SYNC_FENCE, GetResourceManager()->GetCurrentResource(id).name,
length, label);
m_DeviceRecord->AddChunk(scope.Get());
GetContextRecord()->AddChunk(scope.Get());
}
}