gallium: check all planes' pipe formats in case of multi-samplers
authorDongwon Kim <dongwon.kim@intel.com>
Wed, 15 Jan 2020 04:01:41 +0000 (20:01 -0800)
committerDongwon Kim <downor@gmail.com>
Tue, 21 Jan 2020 23:04:33 +0000 (23:04 +0000)
Current code only checks whether first plane's format is supported
in case YUV format sampling is done by sampling each plane separately.
It would be safer to check other planes' as well.

Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/2863>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/2863>

src/gallium/state_trackers/dri/dri2.c

index e6f0e40465a234d7bde9933b400b2e8d3964df12..82c57b78d9989b661b76501a10b3a2cedf867f38 100644 (file)
@@ -751,14 +751,19 @@ dri2_create_image_from_winsys(__DRIscreen *_screen,
       /* YUV format sampling can be emulated by the Mesa state tracker by
        * using multiple samplers of varying formats.
        * If no tex_usage is set and we detect a YUV format,
-       * test for support of the first plane's sampler format and
+       * test for support of all planes' sampler formats and
        * add sampler view usage.
        */
       use_lowered = true;
-      if (pscreen->is_format_supported(pscreen,
-                                       dri2_get_pipe_format_for_dri_format(map->planes[0].dri_format),
-                                       screen->target, 0, 0,
-                                       PIPE_BIND_SAMPLER_VIEW))
+      for (i = 0; i < map->nplanes; i++) {
+          if (!pscreen->is_format_supported(pscreen,
+                                            dri2_get_pipe_format_for_dri_format(map->planes[i].dri_format),
+                                            screen->target, 0, 0,
+                                            PIPE_BIND_SAMPLER_VIEW))
+             break;
+      }
+
+      if (i == map->nplanes)
          tex_usage |= PIPE_BIND_SAMPLER_VIEW;
    }