]> git.cworth.org Git - vogl/commitdiff
- Initial support for KHR_debug API's in tracer/replayer
authorRich Geldreich <richgel99@gmail.com>
Sat, 22 Mar 2014 03:49:39 +0000 (20:49 -0700)
committerCarl Worth <cworth@cworth.org>
Tue, 1 Apr 2014 19:37:31 +0000 (12:37 -0700)
glspec/dbg_final_gl_glx_whitelisted_funcs.txt
glspec/dbg_gl_all_funcs.txt
glspec/dbg_gl_funcs.txt
glspec/dbg_gl_glx_array_sizes.txt
glspec/gl.spec
glspec/gl_glx_simple_replay_funcs.txt
glspec/gl_glx_whitelisted_funcs.txt
src/voglcommon/vogl_gl_replayer.cpp
src/voglcommon/vogl_gl_replayer.h
src/vogltrace/vogl_intercept.cpp

index 162c057cc0b6a42c9696333c867581b09b2fdf5c..9be7ab376bf5406560bc250fbce0f93035f47794 100644 (file)
@@ -184,8 +184,11 @@ glCreateShaderObjectARB
 glCullFace
 glCullParameterdvEXT
 glCullParameterfvEXT
+glDebugMessageCallback
 glDebugMessageCallbackARB
+glDebugMessageControl
 glDebugMessageControlARB
+glDebugMessageInsert
 glDebugMessageInsertARB
 glDeleteBuffers
 glDeleteBuffersARB
@@ -882,6 +885,8 @@ glNormalP3ui
 glNormalP3uiv
 glNormalPointer
 glNormalPointerEXT
+glObjectLabel
+glObjectPtrLabel
 glOrtho
 glPassThrough
 glPixelMapfv
@@ -907,6 +912,7 @@ glPolygonOffsetEXT
 glPolygonStipple
 glPopAttrib
 glPopClientAttrib
+glPopDebugGroup
 glPopMatrix
 glPopName
 glPrimitiveRestartIndex
@@ -964,6 +970,7 @@ glProvokingVertex
 glProvokingVertexEXT
 glPushAttrib
 glPushClientAttrib
+glPushDebugGroup
 glPushMatrix
 glPushName
 glQueryCounter
index a4c487c2555e58cab282bf4df954a9ad5b66e7cf..fd600195dc1e655b91f70bf6669ddb6c8c25c9e8 100644 (file)
@@ -5640,12 +5640,12 @@ Name: "DebugMessageCallback", ParamNames: 2, Params: 2, Return: "void", Category
 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
index c8775f0d64a8a7d4f35442f27fec9e7c351e9f26..faf63cffdc83f923ecb34535a49d518071458b78 100644 (file)
@@ -5640,12 +5640,12 @@ Name: "DebugMessageCallback", ParamNames: 2, Params: 2, Return: "void", Category
 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
index 3327d90110022f52b2708b55200602362292aa15..a76ac9c38ea2d2a5dc7a35af8fe525adbeae1b2d 100644 (file)
@@ -9,7 +9,6 @@
 [COMPSIZE(attribute)]
 [COMPSIZE(buf,length)]
 [COMPSIZE(buffer)]
-[COMPSIZE(bufsize)]
 [COMPSIZE(count)]
 [COMPSIZE(count,type)]
 [COMPSIZE(drawcount,stride)]
index 64c356fa3228577807683f3875a009fc03f11909..ca6c2739093fd214f1faa8ad4e7545610c9cb19e 100644 (file)
@@ -15495,12 +15495,12 @@ GetDebugMessageLog(count, bufsize, sources, types, ids, severities, lengths, mes
        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
index 38f311e535e6b0fdbc3dbda830287d1f94126eb8..bc0f5846890d348b2bea963af2b25db2e6f73a1b 100644 (file)
@@ -648,3 +648,7 @@ glWindowPos3s
 glWindowPos3sARB
 glWindowPos3sv
 glWindowPos3svARB
+glPopDebugGroup
+glDebugMessageControl
+glDebugMessageControlARB
+glPushDebugGroup
index 6a63034d72f59bd5d619b5cd81317a27ec32659a..4ac6be1074cedd672761fd9910787e5b79dd7337 100644 (file)
@@ -58,7 +58,6 @@ glCreateProgramObjectARB
 glCreateShader
 glCreateShaderObjectARB
 glDebugMessageCallbackARB
-glDebugMessageControlARB
 glDebugMessageInsertARB
 glDeleteBuffers
 glDeleteBuffersARB
@@ -192,7 +191,6 @@ glGetConvolutionParameterfvEXT
 glGetConvolutionParameteriv
 glGetConvolutionParameterivEXT
 glGetConvolutionParameterxvOES
-glGetDebugMessageLog
 glGetDebugMessageLogAMD
 glGetDebugMessageLogARB
 glGetDetailTexFuncSGIS
@@ -322,11 +320,9 @@ glGetnUniformivARB
 glGetnUniformuivARB
 glGetObjectBufferfvATI
 glGetObjectBufferivATI
-glGetObjectLabel
 glGetObjectParameterfvARB
 glGetObjectParameterivAPPLE
 glGetObjectParameterivARB
-glGetObjectPtrLabel
 glGetOcclusionQueryivNV
 glGetOcclusionQueryuivNV
 glGetPathColorGenfvNV
@@ -730,3 +726,10 @@ glXSwapIntervalSGI
 glXUseXFont
 glXWaitGL
 glXWaitX
+glDebugMessageInsert
+glDebugMessageCallback
+glObjectLabel
+glObjectPtrLabel
+glGetObjectLabel
+glGetObjectPtrLabel
+glGetDebugMessageLog
index 2f7ef0abf6351fd3ea87901d9e009c9b7e602292..deb3ceabacb9efecab458370dbbe848f6712a19a 100644 (file)
@@ -1499,6 +1499,32 @@ void vogl_gl_replayer::debug_callback_arb(GLenum source, GLenum type, GLuint id,
     }
 }
 
+//----------------------------------------------------------------------------------------------------------------------
+// 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
 //----------------------------------------------------------------------------------------------------------------------
@@ -8449,14 +8475,6 @@ vogl_gl_replayer::status_t vogl_gl_replayer::process_gl_entrypoint_packet_intern
             // 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;
@@ -8723,6 +8741,126 @@ vogl_gl_replayer::status_t vogl_gl_replayer::process_gl_entrypoint_packet_intern
 
             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:
@@ -8774,7 +8912,7 @@ vogl_gl_replayer::status_t vogl_gl_replayer::process_gl_entrypoint_packet_intern
         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:
@@ -8876,10 +9014,8 @@ vogl_gl_replayer::status_t vogl_gl_replayer::process_gl_entrypoint_packet_intern
         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:
index 4d15b54a001f6c4bb920b3f50691b00194622525..2ae259c431cb7eae1f6f3d2171f028a6b6308343 100644 (file)
@@ -1281,6 +1281,7 @@ private:
 
     // 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);
 
index e8c81210e1bb57d2bdd40c10dbb3cdd0a8708b40..903752415bb03877349cb8a7d2430ff128e7b84c 100644 (file)
@@ -3080,6 +3080,12 @@ static inline bool vogl_func_is_nulled(gl_entrypoint_id_t id)
 #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?