anv/formats: Set the swizzle to RGB1 when using an RGBA format to fake RGB
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 16 May 2016 04:50:47 +0000 (21:50 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 17 May 2016 19:17:22 +0000 (12:17 -0700)
This way we get correct sampling from RGB formats that are faked as RGBA.
This should also cause it to disable rendering and blending on those
formats.  We should be able to render to them and, on Broadwell and above,
we can blend on them with work-arounds.  However, we'll add support for
that more properly later when it's deemed useful.  For now, disabling
rendering and blending should be safe.

src/intel/vulkan/anv_formats.c

index 228f46720730410034fe3f5a058fae808f300f70..233abc1882e9d3f6862c4c22bfa6026ea908fa80 100644 (file)
@@ -34,6 +34,7 @@
 
 #define RGBA ISL_SWIZZLE(RED, GREEN, BLUE, ALPHA)
 #define BGRA ISL_SWIZZLE(BLUE, GREEN, RED, ALPHA)
+#define RGB1 ISL_SWIZZLE(RED, GREEN, BLUE, ONE)
 
 #define swiz_fmt(__vk_fmt, __hw_fmt, __swizzle)     \
    [__vk_fmt] = { \
@@ -278,10 +279,12 @@ anv_get_format(VkFormat vk_format, VkImageAspectFlags aspect,
        * hood.
        */
       enum isl_format rgbx = isl_format_rgb_to_rgbx(format.isl_format);
-      if (rgbx != ISL_FORMAT_UNSUPPORTED)
+      if (rgbx != ISL_FORMAT_UNSUPPORTED) {
          format.isl_format = rgbx;
-      else
+      } else {
          format.isl_format = isl_format_rgb_to_rgba(format.isl_format);
+         format.swizzle = (struct anv_format_swizzle) RGB1;
+      }
    }
 
    return format;