[Mesa-dev] [PATCH 1/2] loader/dri3: add get_dri_screen() to the vtable

Emil Velikov emil.l.velikov at gmail.com
Thu Oct 6 14:56:38 UTC 2016


On 6 October 2016 at 15:13, Martin Peres <martin.peres at linux.intel.com> wrote:
> This allows querying the current active screen from the
> loader's common code.
>
> Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
> ---
>  src/egl/drivers/dri2/platform_x11_dri3.c | 12 ++++++++++++
>  src/glx/dri3_glx.c                       | 11 +++++++++++
>  src/loader/loader_dri3_helper.h          |  1 +
>  3 files changed, 24 insertions(+)
>
> diff --git a/src/egl/drivers/dri2/platform_x11_dri3.c b/src/egl/drivers/dri2/platform_x11_dri3.c
> index 31649fe..d93f5bc 100644
> --- a/src/egl/drivers/dri2/platform_x11_dri3.c
> +++ b/src/egl/drivers/dri2/platform_x11_dri3.c
> @@ -103,6 +103,17 @@ egl_dri3_get_dri_context(struct loader_dri3_drawable *draw)
>     return dri2_ctx->dri_context;
>  }
>
> +static __DRIscreen *
> +egl_dri3_get_dri_screen(struct loader_dri3_drawable *draw)
> +{
> +   _EGLContext *ctx = _eglGetCurrentContext();
> +   struct dri2_egl_context *dri2_ctx;
> +   if (!ctx)
> +      return NULL;

<thinking out loud>
Only the loader_dri3 code seems to do this NULL check. I'm wondering
how likely it is to hit.
At the same time, many places could/should check if we have a dummyctx
(via _eglIsCurrentThreadDummy) yet they don't bother.

We had a similar (bug) hunt on the GLX side recently and we should
audit the EGL codepaths one of these days.
</thinking out loud>

> +   dri2_ctx = dri2_egl_context(ctx);
> +   return dri2_egl_display(dri2_ctx->base.Resource.Display)->dri_screen;
> +}
> +
>  static void
>  egl_dri3_flush_drawable(struct loader_dri3_drawable *draw, unsigned flags)
>  {
> @@ -119,6 +130,7 @@ static struct loader_dri3_vtable egl_dri3_vtable = {
>     .set_drawable_size = egl_dri3_set_drawable_size,
>     .in_current_context = egl_dri3_in_current_context,
>     .get_dri_context = egl_dri3_get_dri_context,
> +   .get_dri_screen = egl_dri3_get_dri_screen,
>     .flush_drawable = egl_dri3_flush_drawable,
>     .show_fps = NULL,
>  };
> diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
> index 90d7bba..3bc2e1b 100644
> --- a/src/glx/dri3_glx.c
> +++ b/src/glx/dri3_glx.c
> @@ -132,6 +132,16 @@ glx_dri3_get_dri_context(struct loader_dri3_drawable *draw)
>     return (gc != &dummyContext) ? dri3Ctx->driContext : NULL;
>  }
>
> +static __DRIscreen *
> +glx_dri3_get_dri_screen(struct loader_dri3_drawable *draw)
> +{
> +   struct glx_context *gc = __glXGetCurrentContext();
> +   struct dri3_context *pcp = (struct dri3_context *) __glXGetCurrentContext();
s/__glXGetCurrentContext()/gc/

With this small fix the series is:
Cc: mesa-stable at lists.freedesktop.org
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>

Thanks,
Emil


More information about the mesa-dev mailing list