summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Versace <chad.versace@intel.com>2016-04-11 15:12:15 -0700
committerEmil Velikov <emil.l.velikov@gmail.com>2016-05-05 11:51:39 +0100
commit9c5fd81b39be640005e2662990e3c1807177aeef (patch)
tree83d90412e26270914b3221f48e02daf18c9c6326
parentfb78982721c7451e55b9dcb03d4b709e035ca1db (diff)
dri: Fix robust context creation via EGL attribute
driCreateContextAttribs() emits an error if bit __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS is set for an ES context. But, EGL_EXT_create_context_robustness and EGL 1.5 both allow creation of robust ES contexts. One requests a robust ES context by setting the EGL_CONTEXT_OPENGL_ROBUST_ACCESS *attribute*, which Mesa's EGL layer translates into the __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS *bit*. Reviewed-by: Marek Olšák <marek.olsak@amd.com> (cherry picked from commit 7a835b3fd9b171eedecfdb23d326eae4bc0cb6d4)
-rw-r--r--src/mesa/drivers/dri/common/dri_util.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/common/dri_util.c b/src/mesa/drivers/dri/common/dri_util.c
index 5cfa2f8ca4f..1ac002347ca 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -375,11 +375,32 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
* EGL_CONTEXT_FLAGS_KHR, then a <debug context> will be created.
* [...] This bit is supported for OpenGL and OpenGL ES contexts.
*
- * None of the other flags have any meaning in an ES context, so this seems safe.
+ * No other EGL_CONTEXT_OPENGL_*_BIT is legal for an ES context.
+ *
+ * However, Mesa's EGL layer translates the context attribute
+ * EGL_CONTEXT_OPENGL_ROBUST_ACCESS into the context flag
+ * __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS. That attribute is legal for ES
+ * (with EGL 1.5 or EGL_EXT_create_context_robustness) and GL (only with
+ * EGL 1.5).
+ *
+ * From the EGL_EXT_create_context_robustness spec:
+ *
+ * This extension is written against the OpenGL ES 2.0 Specification
+ * but can apply to OpenGL ES 1.1 and up.
+ *
+ * From the EGL 1.5 (2014.08.27) spec, p55:
+ *
+ * If the EGL_CONTEXT_OPENGL_ROBUST_ACCESS attribute is set to
+ * EGL_TRUE, a context supporting robust buffer access will be created.
+ * OpenGL contexts must support the GL_ARB_robustness extension, or
+ * equivalent core API functional- ity. OpenGL ES contexts must support
+ * the GL_EXT_robustness extension, or equivalent core API
+ * functionality.
*/
if (mesa_api != API_OPENGL_COMPAT
&& mesa_api != API_OPENGL_CORE
- && (flags & ~__DRI_CTX_FLAG_DEBUG)) {
+ && (flags & ~(__DRI_CTX_FLAG_DEBUG |
+ __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS))) {
*error = __DRI_CTX_ERROR_BAD_FLAG;
return NULL;
}