On Wed, May 17, 2017 at 6:30 AM, Philipp Zabel <[email protected]> wrote: > 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 <[email protected] >> Signed-off-by: Rob Clark <[email protected]> >> --- >> 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.
possibly, this doesn't seem to be enforced elsewhere.. but I've already pushed this patch BR, -R _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
