[Mesa-dev] [PATCH 6/9] egl: Implement EGL_KHR_context_flush_control
Eric Engestrom
eric.engestrom at imgtec.com
Fri Nov 3 15:18:08 UTC 2017
On Thursday, 2017-11-02 15:01:45 -0400, Adam Jackson wrote:
> Signed-off-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Eric Engestrom <eric.engestrom at 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
>
More information about the mesa-dev
mailing list