#include <string.h>
#include "c99_compat.h"
#include "c11/threads.h"
-#include "GL/mesa_glinterop.h"
#include "util/macros.h"
#include "eglglobals.h"
#include "eglimage.h"
#include "eglsync.h"
+#include "GL/mesa_glinterop.h"
/**
* Macros to help return an API entrypoint.
return EGL_TRUE;
}
- _eglDebugReportFull(EGL_BAD_ALLOC, funcName, funcName,
- EGL_DEBUG_MSG_CRITICAL_KHR, NULL, NULL);
+ _eglDebugReport(EGL_BAD_ALLOC, funcName, EGL_DEBUG_MSG_CRITICAL_KHR, NULL);
return EGL_FALSE;
}
RETURN_EGL_ERROR(NULL, EGL_BAD_DISPLAY, EGL_FALSE);
if (!disp->Initialized) {
- if (!_eglMatchDriver(disp, EGL_FALSE))
+ if (!_eglMatchDriver(disp))
RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE);
/* limit to APIs supported by core */
_fixupNativeWindow(_EGLDisplay *disp, void *native_window)
{
#ifdef HAVE_X11_PLATFORM
- if (disp->Platform == _EGL_PLATFORM_X11 && native_window != NULL) {
+ if (disp && disp->Platform == _EGL_PLATFORM_X11 && native_window != NULL) {
/* The `native_window` parameter for the X11 platform differs between
* eglCreateWindowSurface() and eglCreatePlatformPixmapSurfaceEXT(). In
* eglCreateWindowSurface(), the type of `native_window` is an Xlib
* `Pixmap*`. Convert `Pixmap*` to `Pixmap` because that's what
* dri2_x11_create_pixmap_surface() expects.
*/
- if (disp->Platform == _EGL_PLATFORM_X11 && native_pixmap != NULL)
+ if (disp && disp->Platform == _EGL_PLATFORM_X11 && native_pixmap != NULL)
return (void *)(* (Pixmap*) native_pixmap);
#endif
return native_pixmap;
if ((conf->SurfaceType & EGL_PIXMAP_BIT) == 0)
RETURN_EGL_ERROR(disp, EGL_BAD_MATCH, EGL_NO_SURFACE);
+ if (native_pixmap == NULL)
+ RETURN_EGL_ERROR(disp, EGL_BAD_NATIVE_PIXMAP, EGL_NO_SURFACE);
+
surf = drv->API.CreatePixmapSurface(drv, disp, conf, native_pixmap,
attrib_list);
ret = (surf) ? _eglLinkSurface(surf) : EGL_NO_SURFACE;
RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_BAD_PARAMETER);
}
-static EGLBoolean
-_validDebugMessageLevel(EGLAttrib level)
-{
- return (level >= EGL_DEBUG_MSG_CRITICAL_KHR &&
- level <= EGL_DEBUG_MSG_INFO_KHR);
-}
-
static EGLint EGLAPIENTRY
eglDebugMessageControlKHR(EGLDEBUGPROCKHR callback,
const EGLAttrib *attrib_list)
int i;
for (i = 0; attrib_list[i] != EGL_NONE; i += 2) {
- if (_validDebugMessageLevel(attrib_list[i])) {
+ switch (attrib_list[i]) {
+ case EGL_DEBUG_MSG_CRITICAL_KHR:
+ case EGL_DEBUG_MSG_ERROR_KHR:
+ case EGL_DEBUG_MSG_WARN_KHR:
+ case EGL_DEBUG_MSG_INFO_KHR:
if (attrib_list[i + 1])
newEnabled |= DebugBitFromType(attrib_list[i]);
else
newEnabled &= ~DebugBitFromType(attrib_list[i]);
- continue;
+ break;
+ default:
+ // 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;
}
-
- // 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;
}
}
mtx_lock(_eglGlobal.Mutex);
- do {
- if (_validDebugMessageLevel(attribute)) {
- if (_eglGlobal.debugTypesEnabled & DebugBitFromType(attribute))
- *value = EGL_TRUE;
- else
- *value = EGL_FALSE;
- break;
- }
-
- if (attribute == EGL_DEBUG_CALLBACK_KHR) {
- *value = (EGLAttrib) _eglGlobal.debugCallback;
- break;
- }
-
+ switch (attribute) {
+ case EGL_DEBUG_MSG_CRITICAL_KHR:
+ case EGL_DEBUG_MSG_ERROR_KHR:
+ case EGL_DEBUG_MSG_WARN_KHR:
+ case EGL_DEBUG_MSG_INFO_KHR:
+ if (_eglGlobal.debugTypesEnabled & DebugBitFromType(attribute))
+ *value = EGL_TRUE;
+ else
+ *value = EGL_FALSE;
+ break;
+ case EGL_DEBUG_CALLBACK_KHR:
+ *value = (EGLAttrib) _eglGlobal.debugCallback;
+ break;
+ default:
mtx_unlock(_eglGlobal.Mutex);
_eglReportError(EGL_BAD_ATTRIBUTE, NULL,
"Invalid attribute 0x%04lx", (unsigned long) attribute);
return EGL_FALSE;
- } while (0);
+ }
mtx_unlock(_eglGlobal.Mutex);
return EGL_TRUE;