[Mesa-dev] [PATCH] mesa/st: fix yuv EGLImage's

Rob Clark robdclark at gmail.com
Wed May 17 11:01:45 UTC 2017


On Wed, May 17, 2017 at 6:30 AM, Philipp Zabel <p.zabel at pengutronix.de> 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 <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.

possibly, this doesn't seem to be enforced elsewhere.. but I've
already pushed this patch

BR,
-R


More information about the mesa-dev mailing list