[Mesa-dev] [PATCH 2/4] mesa: make ARB_debug_output functions an alias of KHR_debug

Timothy Arceri t_arceri at yahoo.com.au
Mon Mar 3 00:33:26 PST 2014


The spec doesn't mention how ARB_debug_output and KHR_debug should
 interact but testing with Nvidia and AMD shows this is how they both
 treat these functions

Signed-off-by: Timothy Arceri <t_arceri at yahoo.com.au>
---
 src/mapi/glapi/gen/ARB_debug_output.xml |   8 +-
 src/mesa/main/errors.c                  | 293 ++++++++------------------------
 src/mesa/main/errors.h                  |  15 --
 src/mesa/main/mtypes.h                  |   1 -
 4 files changed, 78 insertions(+), 239 deletions(-)

diff --git a/src/mapi/glapi/gen/ARB_debug_output.xml b/src/mapi/glapi/gen/ARB_debug_output.xml
index 11f268d..0468d57 100644
--- a/src/mapi/glapi/gen/ARB_debug_output.xml
+++ b/src/mapi/glapi/gen/ARB_debug_output.xml
@@ -52,7 +52,7 @@
     <enum name="DEBUG_SEVERITY_LOW_ARB"                    value="0x9148"/>
 
 
-    <function name="DebugMessageControlARB" offset="assign">
+    <function name="DebugMessageControlARB" alias="DebugMessageControl">
         <param name="source" type="GLenum"/>
         <param name="type" type="GLenum"/>
         <param name="severity" type="GLenum"/>
@@ -61,7 +61,7 @@
         <param name="enabled" type="GLboolean"/>
     </function>
 
-    <function name="DebugMessageInsertARB" offset="assign">
+    <function name="DebugMessageInsertARB" alias="DebugMessageInsert">
         <param name="source" type="GLenum"/>
         <param name="type" type="GLenum"/>
         <param name="id" type="GLuint"/>
@@ -70,12 +70,12 @@
         <param name="buf" type="const GLcharARB *"/>
     </function>
 
-    <function name="DebugMessageCallbackARB" offset="assign">
+    <function name="DebugMessageCallbackARB" alias="DebugMessageCallback">
         <param name="callback" type="GLDEBUGPROCARB"/>
         <param name="userParam" type="const GLvoid *"/>
     </function>
 
-    <function name="GetDebugMessageLogARB" offset="assign">
+    <function name="GetDebugMessageLogARB" alias="GetDebugMessageLog">
         <return type="GLuint"/>
         <param name="count" type="GLuint"/>
         <param name="bufsize" type="GLsizei"/>
diff --git a/src/mesa/main/errors.c b/src/mesa/main/errors.c
index 5f4eac6..003d0d4 100644
--- a/src/mesa/main/errors.c
+++ b/src/mesa/main/errors.c
@@ -39,9 +39,6 @@
 #include "hash_table.h"
 #include "glapi/glthread.h"
 
-#define MESSAGE_LOG 1
-#define MESSAGE_LOG_ARB 2
-
 _glthread_DECLARE_STATIC_MUTEX(DynamicIDMutex);
 static GLuint NextDynamicID = 1;
 
@@ -374,40 +371,6 @@ store_message_details(struct gl_debug_msg *emptySlot,
 
 
 /**
- * Remap any type exclusive to KHR_debug to something suitable
- * for ARB_debug_output
- */
-inline static int
-remap_type(GLenum type) {
-
-   switch(type) {
-   case GL_DEBUG_TYPE_MARKER:
-   case GL_DEBUG_TYPE_PUSH_GROUP:
-   case GL_DEBUG_TYPE_POP_GROUP:
-      type = GL_DEBUG_TYPE_OTHER;
-   default:
-      ;
-   }
-
-  return type;
-}
-
-
-/**
- * Remap severity exclusive to KHR_debug to something suitable
- * for ARB_debug_output
- */
-inline static int
-remap_severity(GLenum severity) {
-
-   if (GL_DEBUG_SEVERITY_NOTIFICATION == severity)
-      severity = GL_DEBUG_SEVERITY_LOW;
-
-   return severity;
-}
-
-
-/**
  * 'buf' is not necessarily a null-terminated string. When logging, copy
  * 'len' characters from it, store them in a new, null-terminated string,
  * and remember the number of bytes used by that string, *including*
@@ -434,10 +397,6 @@ log_msg(struct gl_context *ctx, enum mesa_debug_source source,
        GLenum gl_type = debug_type_enums[type];
        GLenum gl_severity = debug_severity_enums[severity];
 
-       if (debug->ARBCallback) {
-          gl_severity = remap_severity(gl_severity);
-          gl_type = remap_type(gl_type);
-      }
       debug->Callback(debug_source_enums[source], gl_type, id, gl_severity,
                       len, buf, debug->CallbackData);
       return;
@@ -471,8 +430,7 @@ log_msg(struct gl_context *ctx, enum mesa_debug_source source,
  */
 static GLsizei
 get_msg(struct gl_context *ctx, GLenum *source, GLenum *type,
-        GLuint *id, GLenum *severity, GLsizei bufSize, char *buf,
-        unsigned caller)
+        GLuint *id, GLenum *severity, GLsizei bufSize, char *buf)
 {
    struct gl_debug_state *debug = _mesa_get_debug_state(ctx);
    struct gl_debug_msg *msg;
@@ -491,8 +449,6 @@ get_msg(struct gl_context *ctx, GLenum *source, GLenum *type,
 
    if (severity) {
       *severity = debug_severity_enums[msg->severity];
-      if (caller == MESSAGE_LOG_ARB)
-         *severity = remap_severity(*severity);
    }
 
    if (source) {
@@ -501,8 +457,6 @@ get_msg(struct gl_context *ctx, GLenum *source, GLenum *type,
 
    if (type) {
       *type = debug_type_enums[msg->type];
-      if (caller == MESSAGE_LOG_ARB)
-         *type = remap_type(*type);
    }
 
    if (id) {
@@ -530,12 +484,9 @@ get_msg(struct gl_context *ctx, GLenum *source, GLenum *type,
 
 /**
  * Verify that source, type, and severity are valid enums.
- * glDebugMessageInsertARB only accepts two values for 'source',
- * and glDebugMessageControlARB will additionally accept GL_DONT_CARE
- * in any parameter, so handle those cases specially.
  *
- * There is also special cases for handling values available in
- * GL_KHR_debug that are not avaliable in GL_ARB_debug_output
+ * The 'caller' param is used for handling values available
+ * only in glDebugMessageInsert or glDebugMessageControl
  */
 static GLboolean
 validate_params(struct gl_context *ctx, unsigned caller,
@@ -544,8 +495,6 @@ validate_params(struct gl_context *ctx, unsigned caller,
 {
 #define INSERT 1
 #define CONTROL 2
-#define INSERT_ARB 3
-#define CONTROL_ARB 4
    switch(source) {
    case GL_DEBUG_SOURCE_APPLICATION_ARB:
    case GL_DEBUG_SOURCE_THIRD_PARTY_ARB:
@@ -554,10 +503,10 @@ validate_params(struct gl_context *ctx, unsigned caller,
    case GL_DEBUG_SOURCE_SHADER_COMPILER_ARB:
    case GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB:
    case GL_DEBUG_SOURCE_OTHER_ARB:
-      if (caller != INSERT || caller == INSERT_ARB)
+      if (caller != INSERT)
          break;
    case GL_DONT_CARE:
-      if (caller == CONTROL || caller == CONTROL_ARB)
+      if (caller == CONTROL)
          break;
    default:
       goto error;
@@ -570,13 +519,10 @@ validate_params(struct gl_context *ctx, unsigned caller,
    case GL_DEBUG_TYPE_PERFORMANCE_ARB:
    case GL_DEBUG_TYPE_PORTABILITY_ARB:
    case GL_DEBUG_TYPE_OTHER_ARB:
-      break;
    case GL_DEBUG_TYPE_MARKER:
-      /* this value is only valid for GL_KHR_debug functions */
-      if (caller == CONTROL || caller == INSERT)
-         break;
+      break;
    case GL_DONT_CARE:
-      if (caller == CONTROL || caller == CONTROL_ARB)
+      if (caller == CONTROL)
          break;
    default:
       goto error;
@@ -586,13 +532,10 @@ validate_params(struct gl_context *ctx, unsigned caller,
    case GL_DEBUG_SEVERITY_HIGH_ARB:
    case GL_DEBUG_SEVERITY_MEDIUM_ARB:
    case GL_DEBUG_SEVERITY_LOW_ARB:
-      break;
    case GL_DEBUG_SEVERITY_NOTIFICATION:
-      /* this value is only valid for GL_KHR_debug functions */
-      if (caller == CONTROL || caller == INSERT)
-         break;
+      break;
    case GL_DONT_CARE:
-      if (caller == CONTROL || caller == CONTROL_ARB)
+      if (caller == CONTROL)
          break;
    default:
       goto error;
@@ -707,44 +650,6 @@ control_app_messages(struct gl_context *ctx, GLenum esource, GLenum etype,
 
 
 /**
- * This is a generic message control function for use by both
- * glDebugMessageControlARB and glDebugMessageControl.
- */
-static void
-message_control(GLenum gl_source, GLenum gl_type,
-                GLenum gl_severity,
-                GLsizei count, const GLuint *ids,
-                GLboolean enabled,
-                unsigned caller, const char *callerstr)
-{
-   GET_CURRENT_CONTEXT(ctx);
-
-   if (count < 0) {
-      _mesa_error(ctx, GL_INVALID_VALUE,
-                  "%s(count=%d : count must not be negative)", callerstr,
-                  count);
-      return;
-   }
-
-   if (!validate_params(ctx, caller, callerstr, gl_source, gl_type,
-                        gl_severity))
-      return; /* GL_INVALID_ENUM */
-
-   if (count && (gl_severity != GL_DONT_CARE || gl_type == GL_DONT_CARE
-                 || gl_source == GL_DONT_CARE)) {
-      _mesa_error(ctx, GL_INVALID_OPERATION,
-                  "%s(When passing an array of ids, severity must be"
-         " GL_DONT_CARE, and source and type must not be GL_DONT_CARE.",
-                  callerstr);
-      return;
-   }
-
-   control_app_messages(ctx, gl_source, gl_type, gl_severity,
-                        count, ids, enabled);
-}
-
-
-/**
  * This is a generic message insert function.
  * Validation of source, type and severity parameters should be done
  * before calling this funtion.
@@ -774,58 +679,6 @@ message_insert(GLenum source, GLenum type, GLuint id,
 }
 
 
-/**
- * This is a generic message insert function for use by both
- * glGetDebugMessageLogARB and glGetDebugMessageLog.
- */
-static GLuint
-get_message_log(GLuint count, GLsizei logSize, GLenum *sources,
-                GLenum *types, GLenum *ids, GLenum *severities,
-                GLsizei *lengths, GLchar *messageLog,
-                unsigned caller, const char *callerstr)
-{
-   GET_CURRENT_CONTEXT(ctx);
-   GLuint ret;
-
-   if (!messageLog)
-      logSize = 0;
-
-   if (logSize < 0) {
-      _mesa_error(ctx, GL_INVALID_VALUE,
-                  "%s(logSize=%d : logSize must not be negative)", callerstr,
-                  logSize);
-      return 0;
-   }
-
-   for (ret = 0; ret < count; ret++) {
-      GLsizei written = get_msg(ctx, sources, types, ids, severities,
-                                logSize, messageLog, caller);
-      if (!written)
-         break;
-
-      if (messageLog) {
-         messageLog += written;
-         logSize -= written;
-      }
-      if (lengths) {
-         *lengths = written;
-         lengths++;
-      }
-
-      if (severities)
-         severities++;
-      if (sources)
-         sources++;
-      if (types)
-         types++;
-      if (ids)
-         ids++;
-   }
-
-   return ret;
-}
-
-
 static void
 do_nothing(GLuint key, void *data, void *userData)
 {
@@ -888,22 +741,79 @@ _mesa_GetDebugMessageLog(GLuint count, GLsizei logSize, GLenum *sources,
                          GLenum *types, GLenum *ids, GLenum *severities,
                          GLsizei *lengths, GLchar *messageLog)
 {
-   const char *callerstr = "glGetDebugMessageLog";
+   GET_CURRENT_CONTEXT(ctx);
+   GLuint ret;
+
+   if (!messageLog)
+      logSize = 0;
+
+   if (logSize < 0) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "glGetDebugMessageLog(logSize=%d : logSize must not be"
+                  " negative)", logSize);
+      return 0;
+   }
+
+   for (ret = 0; ret < count; ret++) {
+      GLsizei written = get_msg(ctx, sources, types, ids, severities,
+                                logSize, messageLog);
+      if (!written)
+         break;
+
+      if (messageLog) {
+         messageLog += written;
+         logSize -= written;
+      }
+      if (lengths) {
+         *lengths = written;
+         lengths++;
+      }
+
+      if (severities)
+         severities++;
+      if (sources)
+         sources++;
+      if (types)
+         types++;
+      if (ids)
+         ids++;
+   }
 
-   return get_message_log(count, logSize, sources, types, ids, severities,
-                          lengths, messageLog, MESSAGE_LOG, callerstr);
+   return ret;
 }
 
 
 void GLAPIENTRY
-_mesa_DebugMessageControl(GLenum source, GLenum type, GLenum severity,
-                          GLsizei count, const GLuint *ids,
-                          GLboolean enabled)
+_mesa_DebugMessageControl(GLenum gl_source, GLenum gl_type,
+                          GLenum gl_severity, GLsizei count,
+                          const GLuint *ids, GLboolean enabled)
 {
    const char *callerstr = "glDebugMessageControl";
 
-   message_control(source, type, severity, count, ids,
-                   enabled, CONTROL, callerstr);
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (count < 0) {
+      _mesa_error(ctx, GL_INVALID_VALUE,
+                  "%s(count=%d : count must not be negative)", callerstr,
+                  count);
+      return;
+   }
+
+   if (!validate_params(ctx, CONTROL, callerstr, gl_source, gl_type,
+                        gl_severity))
+      return; /* GL_INVALID_ENUM */
+
+   if (count && (gl_severity != GL_DONT_CARE || gl_type == GL_DONT_CARE
+                 || gl_source == GL_DONT_CARE)) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "%s(When passing an array of ids, severity must be"
+         " GL_DONT_CARE, and source and type must not be GL_DONT_CARE.",
+                  callerstr);
+      return;
+   }
+
+   control_app_messages(ctx, gl_source, gl_type, gl_severity,
+                        count, ids, enabled);
 }
 
 
@@ -915,7 +825,6 @@ _mesa_DebugMessageCallback(GLDEBUGPROC callback, const void *userParam)
    if (debug) {
       debug->Callback = callback;
       debug->CallbackData = userParam;
-      debug->ARBCallback = GL_FALSE;
    }
 }
 
@@ -1042,60 +951,6 @@ _mesa_PopDebugGroup(void)
 }
 
 
-void GLAPIENTRY
-_mesa_DebugMessageInsertARB(GLenum source, GLenum type, GLuint id,
-                            GLenum severity, GLint length,
-                            const GLcharARB *buf)
-{
-   const char *callerstr = "glDebugMessageInsertARB";
-
-   GET_CURRENT_CONTEXT(ctx);
-
-   if (!validate_params(ctx, INSERT_ARB, callerstr, source, type, severity))
-      return; /* GL_INVALID_ENUM */
-
-   message_insert(source, type, id, severity, length, buf, callerstr);
-}
-
-
-GLuint GLAPIENTRY
-_mesa_GetDebugMessageLogARB(GLuint count, GLsizei logSize, GLenum *sources,
-                            GLenum *types, GLenum *ids, GLenum *severities,
-                            GLsizei *lengths, GLcharARB *messageLog)
-{
-   const char *callerstr = "glGetDebugMessageLogARB";
-
-   return get_message_log(count, logSize, sources, types, ids, severities,
-                          lengths, messageLog, MESSAGE_LOG_ARB, callerstr);
-}
-
-
-void GLAPIENTRY
-_mesa_DebugMessageControlARB(GLenum gl_source, GLenum gl_type,
-                             GLenum gl_severity,
-                             GLsizei count, const GLuint *ids,
-                             GLboolean enabled)
-{
-   const char *callerstr = "glDebugMessageControlARB";
-
-   message_control(gl_source, gl_type, gl_severity, count, ids,
-                   enabled, CONTROL_ARB, callerstr);
-}
-
-
-void GLAPIENTRY
-_mesa_DebugMessageCallbackARB(GLDEBUGPROCARB callback, const void *userParam)
-{
-   GET_CURRENT_CONTEXT(ctx);
-   struct gl_debug_state *debug = _mesa_get_debug_state(ctx);
-   if (debug) {
-      debug->Callback = callback;
-      debug->CallbackData = userParam;
-      debug->ARBCallback = GL_TRUE;
-   }
-}
-
-
 void
 _mesa_init_errors(struct gl_context *ctx)
 {
diff --git a/src/mesa/main/errors.h b/src/mesa/main/errors.h
index cd414e6..e0706e5 100644
--- a/src/mesa/main/errors.h
+++ b/src/mesa/main/errors.h
@@ -91,21 +91,6 @@ _mesa_shader_debug(struct gl_context *ctx, GLenum type, GLuint *id,
                    const char *msg, int len);
 
 void GLAPIENTRY
-_mesa_DebugMessageInsertARB(GLenum source, GLenum type, GLuint id,
-                            GLenum severity, GLint length,
-                            const GLcharARB* buf);
-GLuint GLAPIENTRY
-_mesa_GetDebugMessageLogARB(GLuint count, GLsizei logSize, GLenum* sources,
-                            GLenum* types, GLenum* ids, GLenum* severities,
-                            GLsizei* lengths, GLcharARB* messageLog);
-void GLAPIENTRY
-_mesa_DebugMessageControlARB(GLenum source, GLenum type, GLenum severity,
-                             GLsizei count, const GLuint *ids,
-                             GLboolean enabled);
-void GLAPIENTRY
-_mesa_DebugMessageCallbackARB(GLDEBUGPROCARB callback,
-                              const void *userParam);
-void GLAPIENTRY
 _mesa_DebugMessageInsert(GLenum source, GLenum type, GLuint id,
                          GLenum severity, GLint length,
                          const GLchar* buf);
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 7246b1e..8a4d125 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3843,7 +3843,6 @@ struct gl_debug_state
    const void *CallbackData;
    GLboolean SyncOutput;
    GLboolean DebugOutput;
-   GLboolean ARBCallback; /* Used to track if current callback is of type ARB_debug_output or KHR_debug */
    GLboolean Defaults[MAX_DEBUG_GROUP_STACK_DEPTH][MESA_DEBUG_SEVERITY_COUNT][MESA_DEBUG_SOURCE_COUNT][MESA_DEBUG_TYPE_COUNT];
    struct gl_debug_namespace Namespaces[MAX_DEBUG_GROUP_STACK_DEPTH][MESA_DEBUG_SOURCE_COUNT][MESA_DEBUG_TYPE_COUNT];
    struct gl_debug_msg Log[MAX_DEBUG_LOGGED_MESSAGES];
-- 
1.8.5.3



More information about the mesa-dev mailing list