[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