dri: Make classic drivers allow __DRI_CTX_FLAG_NO_ERROR.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 14 Jul 2017 21:46:09 +0000 (14:46 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 17 Jul 2017 08:37:51 +0000 (01:37 -0700)
Grigori recently added EGL_KHR_create_context_no_error support,
which causes EGL to pass a new __DRI_CTX_FLAG_NO_ERROR flag to
drivers when requesting an appropriate context mode.

driContextSetFlags() will already handle it properly for us, but the
classic drivers all have code to explicitly balk at unknown flags.  We
need to let it through or they'll fail to create a no_error context.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Grigori Goronzy <greg@chown.ath.cx>
src/mesa/drivers/dri/i915/intel_screen.c
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/nouveau/nouveau_context.c
src/mesa/drivers/dri/r200/r200_context.c
src/mesa/drivers/dri/radeon/radeon_context.c

index 9e23552b9987c4c0af31c4efa2fc40564277b6d2..1ac72e14a15a6ccce35f05daeba3afec2974071e 100644 (file)
@@ -972,7 +972,7 @@ intelCreateContext(gl_api api,
    __DRIscreen *sPriv = driContextPriv->driScreenPriv;
    struct intel_screen *intelScreen = sPriv->driverPrivate;
 
-   if (flags & ~__DRI_CTX_FLAG_DEBUG) {
+   if (flags & ~(__DRI_CTX_FLAG_DEBUG | __DRI_CTX_FLAG_NO_ERROR)) {
       *error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
       return false;
    }
index b23e811f305779772a3fe698c8e8fcb99efbf542..bd26e2332c753d74d037f733cb8a7732e8374e96 100644 (file)
@@ -813,8 +813,9 @@ brwCreateContext(gl_api api,
    /* Only allow the __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS flag if the kernel
     * provides us with context reset notifications.
     */
-   uint32_t allowed_flags = __DRI_CTX_FLAG_DEBUG
-      | __DRI_CTX_FLAG_FORWARD_COMPATIBLE;
+   uint32_t allowed_flags = __DRI_CTX_FLAG_DEBUG |
+                            __DRI_CTX_FLAG_FORWARD_COMPATIBLE |
+                            __DRI_CTX_FLAG_NO_ERROR;
 
    if (screen->has_context_reset_notification)
       allowed_flags |= __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS;
index 6ddcadce1f0d9c59f763581b221e4d414e948a07..d6f9e5338485cbc4e915fb59078b93581738f644 100644 (file)
@@ -63,7 +63,7 @@ nouveau_context_create(gl_api api,
        struct nouveau_context *nctx;
        struct gl_context *ctx;
 
-       if (flags & ~__DRI_CTX_FLAG_DEBUG) {
+       if (flags & ~(__DRI_CTX_FLAG_DEBUG | __DRI_CTX_FLAG_NO_ERROR)) {
                *error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
                return false;
        }
index aaa9b9317df95f8b3616a5ff13b7ea3ecef87221..5a7f33499b1d15780a24374cd6e0975113d3ee31 100644 (file)
@@ -189,7 +189,7 @@ GLboolean r200CreateContext( gl_api api,
    int i;
    int tcl_mode;
 
-   if (flags & ~__DRI_CTX_FLAG_DEBUG) {
+   if (flags & ~(__DRI_CTX_FLAG_DEBUG | __DRI_CTX_FLAG_NO_ERROR)) {
       *error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
       return false;
    }
index 11afe20c6a0dcdb0a8890c9470d09196acc3f21e..5ef3467ac17881063c3a87ceaee6ded7ba71060f 100644 (file)
@@ -155,7 +155,7 @@ r100CreateContext( gl_api api,
    int i;
    int tcl_mode, fthrottle_mode;
 
-   if (flags & ~__DRI_CTX_FLAG_DEBUG) {
+   if (flags & ~(__DRI_CTX_FLAG_DEBUG | __DRI_CTX_FLAG_NO_ERROR)) {
       *error = __DRI_CTX_ERROR_UNKNOWN_FLAG;
       return false;
    }