[Mesa-dev] [PATCH 14/14] egl: Implement EGL_KHR_debug

Emil Velikov emil.l.velikov at gmail.com
Tue Sep 13 16:17:30 UTC 2016


Hi guys,

There's a bunch of outstanding style nitpicks (come to think of it
13/14 could use the same)

Those aside: there's a bunch of serious suggestions which I missed last time.

On 12 September 2016 at 23:19, Adam Jackson <ajax at redhat.com> wrote:
> From: Kyle Brenneman <kbrenneman at nvidia.com>
>
> Wire up the debug entrypoints to EGL dispatch, and add the extension
> string to the client extension list.
> ---
>  src/egl/main/eglapi.c     | 140 ++++++++++++++++++++++++++++++++++++++++++++++
>  src/egl/main/eglglobals.c |   3 +-
>  2 files changed, 142 insertions(+), 1 deletion(-)
>
> diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
> index 0a6ebe7..6b0fd2e 100644
> --- a/src/egl/main/eglapi.c
> +++ b/src/egl/main/eglapi.c
> @@ -1987,6 +1987,143 @@ eglExportDMABUFImageMESA(EGLDisplay dpy, EGLImage image,
>     RETURN_EGL_EVAL(disp, ret);
>  }
>
> +static EGLint EGLAPIENTRY
> +eglLabelObjectKHR(EGLDisplay dpy, EGLenum objectType, EGLObjectKHR object,
> +                 EGLLabelKHR label)
> +{
> +   _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_BAD_ALLOC);
> +
> +   if (objectType == EGL_OBJECT_THREAD_KHR) {
> +      _EGLThreadInfo *t = _eglGetCurrentThread();
> +
> +      if (!_eglIsCurrentThreadDummy()) {
> +         t->Label = label;
> +         return EGL_SUCCESS;
> +      } else {
> +         _eglDebugReportFull(EGL_BAD_ALLOC, __func__, __func__,
> +               EGL_DEBUG_MSG_CRITICAL_KHR, NULL, NULL);
> +         return EGL_BAD_ALLOC;
> +      }
Nit: Please use the same style as the "objectType ==
EGL_OBJECT_DISPLAY_KHR" case.


> +   } else {
Nit: You can also drop the "else" and flatten (indent one level less)
all of the following code.

> +      _EGLDisplay *disp = _eglLookupDisplay(dpy);
> +
> +      if (disp == NULL) {
> +         _eglError(EGL_BAD_DISPLAY, "eglLabelObjectKHR");
> +         return EGL_BAD_DISPLAY;
> +      }
> +
> +      if (objectType == EGL_OBJECT_DISPLAY_KHR) {
> +         if (dpy != (EGLDisplay) object) {
> +            _eglError(EGL_BAD_PARAMETER, "eglLabelObjectKHR");
> +            return EGL_BAD_PARAMETER;
> +         }
> +         disp->Label = label;
> +         return EGL_SUCCESS;
> +      } else {
Nit: kill this "else {" as well ?

> +         _EGLResourceType type;
> +
> +         switch (objectType)
> +         {
Nit: move to previous line

> +            case EGL_OBJECT_CONTEXT_KHR:
> +               type = _EGL_RESOURCE_CONTEXT;
> +               break;
> +            case EGL_OBJECT_SURFACE_KHR:
> +               type = _EGL_RESOURCE_SURFACE;
> +               break;
> +            case EGL_OBJECT_IMAGE_KHR:
> +               type = _EGL_RESOURCE_IMAGE;
> +               break;
> +            case EGL_OBJECT_SYNC_KHR:
> +               type = _EGL_RESOURCE_SYNC;
> +               break;
> +            case EGL_OBJECT_STREAM_KHR:
> +            default:
> +                _eglError(EGL_BAD_PARAMETER, "eglLabelObjectKHR");
> +               return EGL_BAD_PARAMETER;
> +         }

> +
> +         if (_eglCheckResource(object, type, disp)) {
> +            _EGLResource *res = (_EGLResource *) object;
> +            res->Label = label;
> +            return EGL_SUCCESS;
> +         } else {
> +            _eglError(EGL_BAD_PARAMETER, "eglLabelObjectKHR");
> +            return EGL_BAD_PARAMETER;
> +         }
Nit: coding style.

> +      }
> +   }
> +}
> +
> +static EGLint
Missing EGLAPIENTRY

> +eglDebugMessageControlKHR(EGLDEBUGPROCKHR callback,
> +                         const EGLAttrib *attrib_list)
> +{
> +   unsigned int newEnabled;
> +
> +   _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_BAD_ALLOC);
> +
> +   mtx_lock(_eglGlobal.Mutex);
> +
> +   newEnabled = _eglGlobal.debugTypesEnabled;
> +   if (attrib_list != NULL) {
> +      int i;
> +
> +      for (i = 0; attrib_list[i] != EGL_NONE; i += 2) {
Don't think we check it elsewhere (and/or if we should care too much) but still:
Check if i overflows or use unsigned type ?

> +         if (attrib_list[i] >= EGL_DEBUG_MSG_CRITICAL_KHR &&
> +               attrib_list[i] <= EGL_DEBUG_MSG_INFO_KHR) {
> +            if (attrib_list[i + 1]) {
> +               newEnabled |= DebugBitFromType(attrib_list[i]);
> +            } else {
> +               newEnabled &= ~DebugBitFromType(attrib_list[i]);
> +            }
Nit: break; ?

> +         } else {
> +            // On error, set the last error code, call the current
> +            // debug callback, and return the error code.
> +            mtx_unlock(_eglGlobal.Mutex);
> +            _eglReportError(EGL_BAD_ATTRIBUTE, NULL,
> +                  "Invalid attribute 0x%04lx", (unsigned long) attrib_list[i]);
> +            return EGL_BAD_ATTRIBUTE;
> +         }
> +      }
> +   }
> +
> +   if (callback != NULL) {
> +      _eglGlobal.debugCallback = callback;
> +      _eglGlobal.debugTypesEnabled = newEnabled;
> +   } else {
> +      _eglGlobal.debugCallback = NULL;
> +      _eglGlobal.debugTypesEnabled = _EGL_DEBUG_BIT_CRITICAL | _EGL_DEBUG_BIT_ERROR;
> +   }
> +
> +   mtx_unlock(_eglGlobal.Mutex);
> +   return EGL_SUCCESS;
> +}
> +
> +static EGLBoolean
Missing EGLAPIENTRY

> +eglQueryDebugKHR(EGLint attribute, EGLAttrib *value)
> +{
> +   _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_BAD_ALLOC);
> +
> +   mtx_lock(_eglGlobal.Mutex);
> +   if (attribute >= EGL_DEBUG_MSG_CRITICAL_KHR &&
> +         attribute <= EGL_DEBUG_MSG_INFO_KHR) {
> +      if (_eglGlobal.debugTypesEnabled & DebugBitFromType(attribute)) {
> +         *value = EGL_TRUE;
> +      } else {
> +         *value = EGL_FALSE;
> +      }
> +   } else if (attribute == EGL_DEBUG_CALLBACK_KHR) {
> +      *value = (EGLAttrib) _eglGlobal.debugCallback;
> +   } else {
> +      mtx_unlock(_eglGlobal.Mutex);
> +      _eglReportError(EGL_BAD_ATTRIBUTE, NULL,
> +              "Invalid attribute 0x%04lx", (unsigned long) attribute);
> +      return EGL_FALSE;
> +   }
Nit: Switch statement will be a lot easier to read.

-Emil


More information about the mesa-dev mailing list