glCullFace
glCullParameterdvEXT
glCullParameterfvEXT
+glDebugMessageCallback
glDebugMessageCallbackARB
+glDebugMessageControl
glDebugMessageControlARB
+glDebugMessageInsert
glDebugMessageInsertARB
glDeleteBuffers
glDeleteBuffersARB
glNormalP3uiv
glNormalPointer
glNormalPointerEXT
+glObjectLabel
+glObjectPtrLabel
glOrtho
glPassThrough
glPixelMapfv
glPolygonStipple
glPopAttrib
glPopClientAttrib
+glPopDebugGroup
glPopMatrix
glPopName
glPrimitiveRestartIndex
glProvokingVertexEXT
glPushAttrib
glPushClientAttrib
+glPushDebugGroup
glPushMatrix
glPushName
glQueryCounter
Name: "GetDebugMessageLog", ParamNames: 8, Params: 8, Return: "UInt32", Category: "KHR_debug", Version: "4.3", Profile: "", Deprecated: "", Lib: "gl" notlistable: 1
Name: "count", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "bufsize", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
- Name: "sources", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "types", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "ids", Type: "UInt32", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "severities", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "lengths", Type: "SizeI", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "messageLog", Type: "Char", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(bufsize)]", Retained: 0
+ Name: "sources", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "types", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "ids", Type: "UInt32", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "severities", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "lengths", Type: "SizeI", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "messageLog", Type: "Char", Direction: "out", Semantic: "array", ArraySize: "[bufsize]", Retained: 0
Name: "PushDebugGroup", ParamNames: 4, Params: 4, Return: "void", Category: "KHR_debug", Version: "4.3", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
Name: "source", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "GetDebugMessageLog", ParamNames: 8, Params: 8, Return: "UInt32", Category: "KHR_debug", Version: "4.3", Profile: "", Deprecated: "", Lib: "gl" notlistable: 1
Name: "count", Type: "UInt32", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
Name: "bufsize", Type: "SizeI", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
- Name: "sources", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "types", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "ids", Type: "UInt32", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "severities", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "lengths", Type: "SizeI", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(count)]", Retained: 0
- Name: "messageLog", Type: "Char", Direction: "out", Semantic: "array", ArraySize: "[COMPSIZE(bufsize)]", Retained: 0
+ Name: "sources", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "types", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "ids", Type: "UInt32", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "severities", Type: "GLenum", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "lengths", Type: "SizeI", Direction: "out", Semantic: "array", ArraySize: "[count]", Retained: 0
+ Name: "messageLog", Type: "Char", Direction: "out", Semantic: "array", ArraySize: "[bufsize]", Retained: 0
Name: "PushDebugGroup", ParamNames: 4, Params: 4, Return: "void", Category: "KHR_debug", Version: "4.3", Profile: "", Deprecated: "", Lib: "gl" notlistable: 0
Name: "source", Type: "GLenum", Direction: "in", Semantic: "value", ArraySize: "", Retained: 0
[COMPSIZE(attribute)]
[COMPSIZE(buf,length)]
[COMPSIZE(buffer)]
-[COMPSIZE(bufsize)]
[COMPSIZE(count)]
[COMPSIZE(count,type)]
[COMPSIZE(drawcount,stride)]
return UInt32
param count UInt32 in value
param bufsize SizeI in value
- param sources GLenum out array [COMPSIZE(count)]
- param types GLenum out array [COMPSIZE(count)]
- param ids UInt32 out array [COMPSIZE(count)]
- param severities GLenum out array [COMPSIZE(count)]
- param lengths SizeI out array [COMPSIZE(count)]
- param messageLog Char out array [COMPSIZE(bufsize)]
+ param sources GLenum out array [count]
+ param types GLenum out array [count]
+ param ids UInt32 out array [count]
+ param severities GLenum out array [count]
+ param lengths SizeI out array [count]
+ param messageLog Char out array [bufsize]
category KHR_debug
dlflags notlistable
version 4.3
glWindowPos3sARB
glWindowPos3sv
glWindowPos3svARB
+glPopDebugGroup
+glDebugMessageControl
+glDebugMessageControlARB
+glPushDebugGroup
glCreateShader
glCreateShaderObjectARB
glDebugMessageCallbackARB
-glDebugMessageControlARB
glDebugMessageInsertARB
glDeleteBuffers
glDeleteBuffersARB
glGetConvolutionParameteriv
glGetConvolutionParameterivEXT
glGetConvolutionParameterxvOES
-glGetDebugMessageLog
glGetDebugMessageLogAMD
glGetDebugMessageLogARB
glGetDetailTexFuncSGIS
glGetnUniformuivARB
glGetObjectBufferfvATI
glGetObjectBufferivATI
-glGetObjectLabel
glGetObjectParameterfvARB
glGetObjectParameterivAPPLE
glGetObjectParameterivARB
-glGetObjectPtrLabel
glGetOcclusionQueryivNV
glGetOcclusionQueryuivNV
glGetPathColorGenfvNV
glXUseXFont
glXWaitGL
glXWaitX
+glDebugMessageInsert
+glDebugMessageCallback
+glObjectLabel
+glObjectPtrLabel
+glGetObjectLabel
+glGetObjectPtrLabel
+glGetDebugMessageLog
}
}
+//----------------------------------------------------------------------------------------------------------------------
+// vogl_replayer::debug_callback
+//----------------------------------------------------------------------------------------------------------------------
+void vogl_gl_replayer::debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, GLvoid *pUser_param)
+{
+ VOGL_FUNC_TRACER
+
+ VOGL_NOTE_UNUSED(length);
+
+ char final_message[4096];
+
+ context_state *pContext_state = (context_state *)(pUser_param);
+
+ vogl_format_debug_output_arb(final_message, sizeof(final_message), source, type, id, severity, reinterpret_cast<const char *>(message));
+
+ if (pContext_state)
+ {
+ vogl_warning_printf("%s: Trace context: 0x%" PRIX64 ", Replay context 0x%" PRIX64 ", Last trace call counter: %" PRIu64 "\n%s\n", VOGL_FUNCTION_NAME,
+ cast_val_to_uint64(pContext_state->m_trace_context), cast_val_to_uint64(pContext_state->m_replay_context), cast_val_to_uint64(pContext_state->m_last_call_counter), final_message);
+ }
+ else
+ {
+ vogl_warning_printf("%s: %s\n", VOGL_FUNCTION_NAME, final_message);
+ }
+}
+
//----------------------------------------------------------------------------------------------------------------------
// vogl_replayer::is_extension_supported
//----------------------------------------------------------------------------------------------------------------------
// TODO - we need to hook up this extension to the tracer
break;
}
- case VOGL_ENTRYPOINT_glDebugMessageCallbackARB:
- case VOGL_ENTRYPOINT_glGetDebugMessageLogARB:
- case VOGL_ENTRYPOINT_glDebugMessageControlARB:
- case VOGL_ENTRYPOINT_glDebugMessageInsertARB:
- {
- // TODO
- break;
- }
case VOGL_ENTRYPOINT_glBitmap:
{
VOGL_REPLAY_LOAD_PARAMS_HELPER_glBitmap;
break;
}
+ case VOGL_ENTRYPOINT_glDebugMessageInsert:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glDebugMessageInsert;
+
+ VOGL_REPLAY_CALL_GL_HELPER_glDebugMessageInsert;
+ break;
+ }
+ case VOGL_ENTRYPOINT_glDebugMessageInsertARB:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glDebugMessageInsertARB;
+
+ VOGL_REPLAY_CALL_GL_HELPER_glDebugMessageInsertARB;
+ break;
+ }
+ case VOGL_ENTRYPOINT_glDebugMessageCallbackARB:
+ {
+ GL_ENTRYPOINT(glDebugMessageCallbackARB)(debug_callback_arb, (GLvoid *)m_pCur_context_state);
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glDebugMessageCallback:
+ {
+ GL_ENTRYPOINT(glDebugMessageCallback)(debug_callback, (GLvoid *)m_pCur_context_state);
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glObjectLabel:
+ {
+ VOGL_REPLAY_LOAD_PARAMS_HELPER_glObjectLabel;
+
+ switch (identifier)
+ {
+ case GL_BUFFER:
+ {
+ name = map_handle(get_shared_state()->m_buffers, name);
+ break;
+ }
+ case GL_SHADER:
+ case GL_PROGRAM:
+ {
+ name = map_handle(get_shared_state()->m_shadow_state.m_objs, name);
+ break;
+ }
+ case GL_VERTEX_ARRAY:
+ {
+ name = map_handle(get_shared_state()->m_vertex_array_objects, name);
+ break;
+ }
+ case GL_QUERY:
+ {
+ name = map_handle(get_shared_state()->m_queries, name);
+ break;
+ }
+ case GL_SAMPLER:
+ {
+ name = map_handle(get_shared_state()->m_sampler_objects, name);
+ break;
+ }
+ case GL_TEXTURE:
+ {
+ name = map_handle(get_shared_state()->m_shadow_state.m_textures, name);
+ break;
+ }
+ case GL_RENDERBUFFER:
+ {
+ name = map_handle(get_shared_state()->m_shadow_state.m_rbos, name);
+ break;
+ }
+ case GL_FRAMEBUFFER:
+ {
+ name = map_handle(get_shared_state()->m_framebuffers, name);
+ break;
+ }
+ case GL_DISPLAY_LIST:
+ {
+ name = map_handle(get_shared_state()->m_lists, name);
+ break;
+ }
+ case GL_TRANSFORM_FEEDBACK: // TODO: Investigate this more
+ case GL_PROGRAM_PIPELINE: // TODO: We don't support program pipelines yet
+ default:
+ {
+ process_entrypoint_error("%s: Unsupported object identifier 0x%X\n", VOGL_METHOD_NAME, identifier);
+ return cStatusSoftFailure;
+ }
+ }
+
+ VOGL_REPLAY_CALL_GL_HELPER_glObjectLabel;
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glObjectPtrLabel:
+ {
+ vogl_sync_ptr_value trace_sync = trace_packet.get_param_ptr_value(0);
+ GLsizei length = trace_packet.get_param_value<GLsizei>(1);
+ const GLchar *pTrace_label = reinterpret_cast<const GLchar *>(trace_packet.get_param_client_memory_ptr(2));
+ GLsync replay_sync = NULL;
+
+ if (trace_sync)
+ {
+ gl_sync_hash_map::const_iterator it = get_shared_state()->m_syncs.find(trace_sync);
+ if (it == get_shared_state()->m_syncs.end())
+ {
+ process_entrypoint_error("%s: Failed remapping trace sync value 0x%" PRIx64 "\n", VOGL_METHOD_NAME, static_cast<uint64_t>(trace_sync));
+ return cStatusSoftFailure;
+ }
+ else
+ {
+ replay_sync = it->second;
+ }
+ }
+
+ GL_ENTRYPOINT(glObjectPtrLabel)(replay_sync, length, pTrace_label);
+
+ break;
+ }
+ case VOGL_ENTRYPOINT_glGetDebugMessageLogARB:
+ case VOGL_ENTRYPOINT_glGetObjectLabel:
+ case VOGL_ENTRYPOINT_glGetObjectPtrLabel:
+ case VOGL_ENTRYPOINT_glGetDebugMessageLog:
case VOGL_ENTRYPOINT_glAreTexturesResident:
case VOGL_ENTRYPOINT_glAreTexturesResidentEXT:
case VOGL_ENTRYPOINT_glGetActiveAtomicCounterBufferiv:
case VOGL_ENTRYPOINT_glGetConvolutionParameteriv:
case VOGL_ENTRYPOINT_glGetConvolutionParameterivEXT:
case VOGL_ENTRYPOINT_glGetConvolutionParameterxvOES:
- case VOGL_ENTRYPOINT_glGetDebugMessageLog:
+
case VOGL_ENTRYPOINT_glGetDebugMessageLogAMD:
case VOGL_ENTRYPOINT_glGetDetailTexFuncSGIS:
case VOGL_ENTRYPOINT_glGetDoubleIndexedvEXT:
case VOGL_ENTRYPOINT_glGetNamedStringivARB:
case VOGL_ENTRYPOINT_glGetObjectBufferfvATI:
case VOGL_ENTRYPOINT_glGetObjectBufferivATI:
- case VOGL_ENTRYPOINT_glGetObjectLabel:
case VOGL_ENTRYPOINT_glGetObjectParameterfvARB:
case VOGL_ENTRYPOINT_glGetObjectParameterivAPPLE:
- case VOGL_ENTRYPOINT_glGetObjectPtrLabel:
case VOGL_ENTRYPOINT_glGetOcclusionQueryivNV:
case VOGL_ENTRYPOINT_glGetOcclusionQueryuivNV:
case VOGL_ENTRYPOINT_glGetPathColorGenfvNV:
// Loosely derived from http://www.altdevblogaday.com/2011/06/23/improving-opengl-error-messages/
static void debug_callback_arb(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, GLvoid *pUser_param);
+ static void debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *message, GLvoid *pUser_param);
bool is_extension_supported(const char *pExt);
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMap2f_points(e, c, rt, r, nu, ne, a, p) vogl_determine_glMap2_size(target, ustride, uorder, vstride, vorder)
#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glMap2d_points(e, c, rt, r, nu, ne, a, p) vogl_determine_glMap2_size(target, ustride, uorder, vstride, vorder)
+// KHR_debug
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glDebugMessageInsert_buf(e, c, rt, r, nu, ne, a, p) ((length < 0) ? (buf ? strlen((const char *)buf) : 0 ) : length)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glPushDebugGroup_message(e, c, rt, r, nu, ne, a, p) ((length < 0) ? (message ? strlen((const char *)message) : 0 ) : length)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glObjectLabel_label(e, c, rt, r, nu, ne, a, p) ((length < 0) ? (label ? strlen((const char *)label) : 0 ) : length)
+#define DEF_FUNCTION_PARAM_COMPUTE_ARRAY_SIZE_FUNC_glObjectPtrLabel_label(e, c, rt, r, nu, ne, a, p) ((length < 0) ? (label ? strlen((const char *)label) : 0 ) : length)
+
//----------------------------------------------------------------------------------------------------------------------
// Texture/image API's array size helper macros
// TODO: For glTexImage3DEXT, glTexSubImage1DEXT, etc. - should these check the currently bound GL_PIXEL_UNPACK_BUFFER?