On Thursday, 2017-11-02 15:01:45 -0400, Adam Jackson wrote: > Signed-off-by: Adam Jackson <a...@redhat.com>
Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> > --- > src/egl/drivers/dri2/egl_dri2.c | 11 ++++++++++- > src/egl/drivers/dri2/egl_dri2.h | 1 + > src/egl/main/eglapi.c | 1 + > src/egl/main/eglcontext.c | 10 ++++++++++ > src/egl/main/eglcontext.h | 1 + > src/egl/main/egldisplay.h | 1 + > 6 files changed, 24 insertions(+), 1 deletion(-) > > diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c > index 57226f60a7..15e6c9bb8b 100644 > --- a/src/egl/drivers/dri2/egl_dri2.c > +++ b/src/egl/drivers/dri2/egl_dri2.c > @@ -92,7 +92,7 @@ > #define DRM_FORMAT_MOD_INVALID ((1ULL<<56) - 1) > #endif > > -#define NUM_ATTRIBS 10 > +#define NUM_ATTRIBS 12 > > static void > dri_set_background_context(void *loaderPrivate) > @@ -457,6 +457,7 @@ static const struct dri2_extension_match > optional_core_extensions[] = { > { __DRI2_RENDERER_QUERY, 1, offsetof(struct dri2_egl_display, > rendererQuery) }, > { __DRI2_INTEROP, 1, offsetof(struct dri2_egl_display, interop) }, > { __DRI_IMAGE, 1, offsetof(struct dri2_egl_display, image) }, > + { __DRI2_FLUSH_CONTROL, 1, offsetof(struct dri2_egl_display, > flush_control) }, > { NULL, 0, 0 } > }; > > @@ -766,6 +767,9 @@ dri2_setup_screen(_EGLDisplay *disp) > } > #endif > } > + > + if (dri2_dpy->flush_control) > + disp->Extensions.KHR_context_flush_control = EGL_TRUE; > } > > void > @@ -1227,6 +1231,11 @@ dri2_fill_context_attribs(struct dri2_egl_context > *dri2_ctx, > ctx_attribs[pos++] = val; > } > > + if (dri2_ctx->base.ReleaseBehavior == > EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR) { > + ctx_attribs[pos++] = __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR; > + ctx_attribs[pos++] = __DRI_CTX_RELEASE_BEHAVIOR_NONE; > + } > + > *num_attribs = pos; > > return true; > diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h > index cd2487ab22..0ec8f44dce 100644 > --- a/src/egl/drivers/dri2/egl_dri2.h > +++ b/src/egl/drivers/dri2/egl_dri2.h > @@ -164,6 +164,7 @@ struct dri2_egl_display > const __DRIdri2Extension *dri2; > const __DRIswrastExtension *swrast; > const __DRI2flushExtension *flush; > + const __DRI2flushControlExtension *flush_control; > const __DRItexBufferExtension *tex_buffer; > const __DRIimageExtension *image; > const __DRIrobustnessExtension *robustness; > diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c > index 215332f99c..76dabba2eb 100644 > --- a/src/egl/main/eglapi.c > +++ b/src/egl/main/eglapi.c > @@ -494,6 +494,7 @@ _eglCreateExtensionsString(_EGLDisplay *dpy) > > _EGL_CHECK_EXTENSION(KHR_cl_event2); > _EGL_CHECK_EXTENSION(KHR_config_attribs); > + _EGL_CHECK_EXTENSION(KHR_context_flush_control); > _EGL_CHECK_EXTENSION(KHR_create_context); > _EGL_CHECK_EXTENSION(KHR_create_context_no_error); > _EGL_CHECK_EXTENSION(KHR_fence_sync); > diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c > index 8c64f9ab82..18c1bc59ac 100644 > --- a/src/egl/main/eglcontext.c > +++ b/src/egl/main/eglcontext.c > @@ -386,6 +386,15 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay > *dpy, > break; > } > > + case EGL_CONTEXT_RELEASE_BEHAVIOR_KHR: > + if (val == EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR || > + val == EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR) { > + ctx->ReleaseBehavior = val; > + } else { > + err = EGL_BAD_ATTRIBUTE; > + } > + break; > + > default: > err = EGL_BAD_ATTRIBUTE; > break; > @@ -588,6 +597,7 @@ _eglInitContext(_EGLContext *ctx, _EGLDisplay *dpy, > _EGLConfig *conf, > ctx->Profile = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR; > ctx->ResetNotificationStrategy = EGL_NO_RESET_NOTIFICATION_KHR; > ctx->ContextPriority = EGL_CONTEXT_PRIORITY_MEDIUM_IMG; > + ctx->ReleaseBehavior = EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR; > > err = _eglParseContextAttribList(ctx, dpy, attrib_list); > if (err == EGL_SUCCESS && ctx->Config) { > diff --git a/src/egl/main/eglcontext.h b/src/egl/main/eglcontext.h > index a752368313..8d97ef9eab 100644 > --- a/src/egl/main/eglcontext.h > +++ b/src/egl/main/eglcontext.h > @@ -64,6 +64,7 @@ struct _egl_context > EGLint ResetNotificationStrategy; > EGLint ContextPriority; > EGLBoolean NoError; > + EGLint ReleaseBehavior; > > /* The real render buffer when a window surface is bound */ > EGLint WindowRenderBuffer; > diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h > index 952bfe53f0..981cbf4ca0 100644 > --- a/src/egl/main/egldisplay.h > +++ b/src/egl/main/egldisplay.h > @@ -112,6 +112,7 @@ struct _egl_extensions > > EGLBoolean KHR_cl_event2; > EGLBoolean KHR_config_attribs; > + EGLBoolean KHR_context_flush_control; > EGLBoolean KHR_create_context; > EGLBoolean KHR_fence_sync; > EGLBoolean KHR_get_all_proc_addresses; > -- > 2.14.3 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev