[Mesa-dev] [PATCH] dri: Fix robust context creation via EGL attribute
Chad Versace
chad.versace at intel.com
Mon Apr 11 23:34:23 UTC 2016
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*.
---
src/mesa/drivers/dri/common/dri_util.c | 25 +++++++++++++++++++++++--
1 file 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 a654508..79cb050 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -376,11 +376,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;
}
--
2.8.1
More information about the mesa-dev
mailing list