egl: Add EGL_KHR_create_context_no_error support
[mesa.git] / src / egl / main / eglcontext.c
index df8b45c7bd648762857bdc4278aba7c50a22d360..1a8e9bda1a27039ca1d89326443b70905eb69863 100644 (file)
@@ -312,6 +312,37 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
             ctx->Flags |= EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR;
          break;
 
+      case EGL_CONTEXT_OPENGL_NO_ERROR_KHR:
+         if (dpy->Version < 14 ||
+             !dpy->Extensions.KHR_create_context_no_error) {
+            err = EGL_BAD_ATTRIBUTE;
+            break;
+         }
+
+         /* The KHR_no_error spec only applies against OpenGL 2.0+ and
+          * OpenGL ES 2.0+
+          */
+         if ((api != EGL_OPENGL_API && api != EGL_OPENGL_ES_API) ||
+             ctx->ClientMajorVersion < 2) {
+            err = EGL_BAD_ATTRIBUTE;
+            break;
+         }
+
+         /* The EGL_KHR_create_context_no_error spec says:
+          *
+          *    "BAD_MATCH is generated if the EGL_CONTEXT_OPENGL_NO_ERROR_KHR is TRUE at
+          *    the same time as a debug or robustness context is specified."
+          */
+         if (ctx->Flags & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR ||
+             ctx->Flags & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) {
+            err = EGL_BAD_MATCH;
+            break;
+         }
+
+         /* Canonicalize value to EGL_TRUE/EGL_FALSE definitions */
+         ctx->NoError = !!val;
+         break;
+
       default:
          err = EGL_BAD_ATTRIBUTE;
          break;