- if (*api == __DRI_API_GLES2 && (*major_ver != 2 || *minor_ver != 0)) {
- *error = __DRI_CTX_ERROR_BAD_API;
+ if (noError && major < 2) {
+ *error = __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE;
+ return false;
+ }
+
+ /* The GLX_ARB_create_context_no_error specs say:
+ *
+ * BadMatch is generated if the value of GLX_CONTEXT_OPENGL_NO_ERROR_ARB
+ * used to create <share_context> does not match the value of
+ * GLX_CONTEXT_OPENGL_NO_ERROR_ARB for the context being created.
+ */
+ if (share_context && !!share_context->noError != !!noError) {
+ *error = __DRI_CTX_ERROR_BAD_FLAG;
+ return false;
+ }
+
+ /* The GLX_ARB_create_context_no_error specs say:
+ *
+ * BadMatch is generated if the GLX_CONTEXT_OPENGL_NO_ERROR_ARB is TRUE at
+ * the same time as a debug or robustness context is specified.
+ *
+ */
+ if (noError && ((flags & __DRI_CTX_FLAG_DEBUG) ||
+ (flags & __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS))) {
+ *error = __DRI_CTX_ERROR_BAD_FLAG;