egl: Print the actual message to the console from _eglError().
authorEric Anholt <eric@anholt.net>
Fri, 16 Nov 2018 01:31:28 +0000 (17:31 -0800)
committerEric Anholt <eric@anholt.net>
Sat, 17 Nov 2018 01:49:31 +0000 (17:49 -0800)
Previously we would print errors on the console like:

   libEGL debug: EGL user error 0x3001 (EGL_NOT_INITIALIZED) in eglInitialize

When we had everything we needed for:

   libEGL debug: EGL user error 0x3001 (EGL_NOT_INITIALIZED) in eglInitialize: DRI2: failed to find EGLDevice

(for a gbm error in my case)

Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
src/egl/main/eglcurrent.c

index 7af3011b75764deeebc65abe1a7136f794291c59..479f231fb8f65dae3f5673bfbe29ac6ab3110ad2 100644 (file)
@@ -310,20 +310,28 @@ _eglDebugReport(EGLenum error, const char *funcName,
 
    mtx_unlock(_eglGlobal.Mutex);
 
-   if (callback != NULL) {
-      char *buf = NULL;
+   char *message_buf = NULL;
+   if (message != NULL) {
+      va_start(args, message);
+      if (vasprintf(&message_buf, message, args) < 0)
+         message_buf = NULL;
+      va_end(args);
+   }
 
-      if (message != NULL) {
-         va_start(args, message);
-         if (vasprintf(&buf, message, args) < 0)
-            buf = NULL;
+   if (callback != NULL) {
+      callback(error, funcName, type, thr->Label, thr->CurrentObjectLabel,
+               message_buf);
+   }
 
-         va_end(args);
+   if (type == EGL_DEBUG_MSG_CRITICAL_KHR || type == EGL_DEBUG_MSG_ERROR_KHR) {
+      char *func_message_buf = NULL;
+      /* Note: _eglError() is often called with msg == thr->currentFuncName */
+      if (message_buf && funcName && strcmp(message_buf, funcName) != 0) {
+         if (asprintf(&func_message_buf, "%s: %s", funcName, message_buf) < 0)
+            func_message_buf = NULL;
       }
-      callback(error, funcName, type, thr->Label, thr->CurrentObjectLabel, buf);
-      free(buf);
+      _eglInternalError(error, func_message_buf ? func_message_buf : funcName);
+      free(func_message_buf);
    }
-
-   if (type == EGL_DEBUG_MSG_CRITICAL_KHR || type == EGL_DEBUG_MSG_ERROR_KHR)
-      _eglInternalError(error, funcName);
+   free(message_buf);
 }