[Mesa-dev] [PATCH 4/6] st/dri: handle emulated YUV texture sampling in query_dma_buf_modifiers

Eric Anholt eric at anholt.net
Fri Apr 19 18:28:35 UTC 2019


Lucas Stach <l.stach at pengutronix.de> writes:

> The Mesa state tracker will emulate YUV texture sampling for drivers that
> don't support it natively by using multiple R8/RG88 samplers. Teach
> dri2_query_dma_buf_modifiers about this special case.
> This allows clients like GStreamer glupload or Kodi to properly query
> the supported dma-buf import formats, without the need to take a special
> code path for the emulated OES_external texture handling.
>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
>  src/gallium/state_trackers/dri/dri2.c | 17 ++++++++++++++---
>  1 file changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
> index f139bd6722b9..4243a00cb38d 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -1358,19 +1358,30 @@ dri2_query_dma_buf_modifiers(__DRIscreen *_screen, int fourcc, int max,
>     const struct dri2_format_mapping *map = dri2_get_mapping_by_fourcc(fourcc);
>     enum pipe_format format;
>  
> -   if (!map)
> +   if (!map || !pscreen->query_dmabuf_modifiers)
>        return false;
>  
>     format = map->pipe_format;
>  
> -   if (pscreen->query_dmabuf_modifiers != NULL &&
> -       (pscreen->is_format_supported(pscreen, format, screen->target, 0, 0,
> +   if ((pscreen->is_format_supported(pscreen, format, screen->target, 0, 0,
>                                       PIPE_BIND_RENDER_TARGET) ||
>          pscreen->is_format_supported(pscreen, format, screen->target, 0, 0,
>                                       PIPE_BIND_SAMPLER_VIEW))) {
>        pscreen->query_dmabuf_modifiers(pscreen, format, max, modifiers,
>                                        external_only, count);
>        return true;
> +   } else if (util_format_is_yuv(format) &&
> +              pscreen->is_format_supported(pscreen, PIPE_FORMAT_R8_UNORM,
> +                                           screen->target, 0, 0,
> +                                           PIPE_BIND_SAMPLER_VIEW)) {
> +      /* YUV format sampling can be emulated by the Mesa state tracker by
> +       * using multiple R8/RG88 samplers if the driver doesn't support those
> +       * formats natively, so we need a special case here to give a mostly
> +       * accurate answer to the modifiers query.
> +       */
> +      pscreen->query_dmabuf_modifiers(pscreen, PIPE_FORMAT_R8_UNORM, max,
> +                                      modifiers, external_only, count);
> +      return true;

I think this will report image_external YUV emulation formats even when
the caller specified !external_only.  Add external_only to the condition
here?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20190419/aaf4f0d2/attachment.sig>


More information about the mesa-dev mailing list