[Mesa-dev] [PATCH] mesa/st: fix yuv EGLImage's
Philipp Zabel
p.zabel at pengutronix.de
Wed May 17 10:30:39 UTC 2017
On Tue, 2017-05-16 at 10:33 -0400, Rob Clark wrote:
> Don't reject YUV formats that the driver doesn't handle natively, since
> mesa/st already knows how to lower this in shader.
>
> Fixes: 83e9de2 ("st/mesa: EGLImageTarget* error handling")
> Cc: 17.1 <mesa-stable at lists.freedesktop.org
> Signed-off-by: Rob Clark <robdclark at gmail.com>
> ---
> src/mesa/state_tracker/st_cb_eglimage.c | 32 ++++++++++++++++++++++++++++++--
> 1 file changed, 30 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_cb_eglimage.c b/src/mesa/state_tracker/st_cb_eglimage.c
> index 3a62ef7..a104b64 100644
> --- a/src/mesa/state_tracker/st_cb_eglimage.c
> +++ b/src/mesa/state_tracker/st_cb_eglimage.c
> @@ -39,6 +39,35 @@
> #include "st_sampler_view.h"
> #include "util/u_surface.h"
>
> +static bool
> +is_format_supported(struct pipe_screen *screen, enum pipe_format format,
> + unsigned nr_samples, unsigned usage)
> +{
> + bool supported = screen->is_format_supported(screen, format, PIPE_TEXTURE_2D,
> + nr_samples, usage);
> +
> + /* for sampling, some formats can be emulated.. it doesn't matter that
> + * the surface will have a format that the driver can't cope with because
> + * we'll give it sampler view formats that it can deal with and generate
> + * a shader variant that converts.
> + */
> + if ((usage == PIPE_BIND_SAMPLER_VIEW) && !supported) {
> + if (format == PIPE_FORMAT_IYUV) {
> + supported = screen->is_format_supported(screen, PIPE_FORMAT_R8_UNORM,
> + PIPE_TEXTURE_2D, nr_samples,
> + usage);
> + } else if (format == PIPE_FORMAT_NV12) {
> + supported = screen->is_format_supported(screen, PIPE_FORMAT_R8_UNORM,
> + PIPE_TEXTURE_2D, nr_samples,
> + usage) &&
> + screen->is_format_supported(screen, PIPE_FORMAT_R8G8_UNORM,
> + PIPE_TEXTURE_2D, nr_samples,
> + usage);
> + }
> + }
> +
> + return supported;
> +}
But this only works for target == GL_TEXTURE_EXTERNAL_OES, right?
If so, I think we would have to pass the target enum through
st_egl_image_get_surface to is_format_supported and make a decision
based on that.
regards
Philipp
More information about the mesa-dev
mailing list