[Mesa-dev] [PATCH v13 15/36] st/dri: support format modifier queries

Lucas Stach l.stach at pengutronix.de
Fri May 19 14:50:32 UTC 2017


Am Freitag, den 19.05.2017, 10:37 +0100 schrieb Daniel Stone:
> From: Varad Gautam <varad.gautam at collabora.com>
> 
> ask the driver for supported modifiers for a given format.
> bump __DRIimageExtension to 16.
> 
> v2: move to __DRIimageExtension v16.
> v3: fail if the supplied format is not supported by driver.
> v4: purge PIPE_CAP_QUERY_DMABUF_ATTRIBS.
> 
> Signed-off-by: Varad Gautam <varad.gautam at collabora.com>
> Signed-off-by: Daniel Stone <daniels at collabora.com>

Reviewed-by: Lucas Stach <l.stach at pengutronix.de>

> ---
>  src/gallium/state_trackers/dri/dri2.c | 24 +++++++++++++++++++++++-
>  1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
> index 814a08e3cb..36cd235b3c 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -1431,6 +1431,24 @@ dri2_query_dma_buf_formats(__DRIscreen *_screen, int max, int *formats,
>     return true;
>  }
>  
> +static boolean
> +dri2_query_dma_buf_modifiers(__DRIscreen *_screen, int fourcc, int max,
> +                             uint64_t *modifiers, int *count)
> +{
> +   struct dri_screen *screen = dri_screen(_screen);
> +   struct pipe_screen *pscreen = screen->base.screen;
> +   enum pipe_format format = fourcc_to_pipe_format(fourcc);
> +   const unsigned usage = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
> +
> +   if (pscreen->query_dmabuf_modifiers != NULL &&
> +       pscreen->is_format_supported(pscreen, format, screen->target, 0, usage)) {
> +      pscreen->query_dmabuf_modifiers(pscreen, format, max, modifiers,
> +                                             count);
> +      return true;
> +   }
> +   return false;
> +}
> +
>  static __DRIimage *
>  dri2_from_dma_bufs(__DRIscreen *screen,
>                     int width, int height, int fourcc,
> @@ -1597,7 +1615,7 @@ dri2_get_capabilities(__DRIscreen *_screen)
>  
>  /* The extension is modified during runtime if DRI_PRIME is detected */
>  static __DRIimageExtension dri2ImageExtension = {
> -    .base = { __DRI_IMAGE, 15 },
> +    .base = { __DRI_IMAGE, 16 },
>  
>      .createImageFromName          = dri2_create_image_from_name,
>      .createImageFromRenderbuffer  = dri2_create_image_from_renderbuffer,
> @@ -1618,6 +1636,7 @@ static __DRIimageExtension dri2ImageExtension = {
>      .createImageWithModifiers     = NULL,
>      .createImageFromDmaBufs2      = NULL,
>      .queryDmaBufFormats           = NULL,
> +    .queryDmaBufModifiers         = NULL,
>  };
>  
> 
> @@ -2165,6 +2184,8 @@ dri2_init_screen(__DRIscreen * sPriv)
>           dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
>           dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2;
>           dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats;
> +         dri2ImageExtension.queryDmaBufModifiers =
> +                                    dri2_query_dma_buf_modifiers;
>        }
>     }
>  
> @@ -2243,6 +2264,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
>        dri2ImageExtension.createImageFromDmaBufs = dri2_from_dma_bufs;
>        dri2ImageExtension.createImageFromDmaBufs2 = dri2_from_dma_bufs2;
>        dri2ImageExtension.queryDmaBufFormats = dri2_query_dma_buf_formats;
> +      dri2ImageExtension.queryDmaBufModifiers = dri2_query_dma_buf_modifiers;
>     }
>  
>     sPriv->extensions = dri_screen_extensions;




More information about the mesa-dev mailing list