hasvk: Disable non-zero fast clears for 8xMSAA images
authorVäinö Mäkelä <vaino.o.makela@gmail.com>
Tue, 21 Feb 2023 12:39:21 +0000 (14:39 +0200)
committerMarge Bot <emma+marge@anholt.net>
Thu, 2 Mar 2023 17:26:09 +0000 (17:26 +0000)
Using texelFetch to read samples from an 8xMSAA fast cleared image on
Haswell can read transparent black pixels around triangles from where
there should be none. This issue isn't present when using sample
shading, resolving the image using vkCmdResolveImage or in a copy the
image. The easiest way to fix this is by just disabling non-zero fast
clears for 8xMSAA images.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7587

Cc: mesa-stable
Reviewed-by: Filip Gawin <filip@gawin.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21444>

src/intel/vulkan_hasvk/anv_image.c

index db7dcf5..d989f96 100644 (file)
@@ -375,6 +375,13 @@ can_fast_clear_with_non_zero_color(const struct intel_device_info *devinfo,
                                    uint32_t plane,
                                    const VkImageFormatListCreateInfo *fmt_list)
 {
+   /* Triangles rendered on non-zero fast cleared images with 8xMSAA can get
+    * black pixels around them on Haswell.
+    */
+   if (devinfo->ver == 7 && image->vk.samples == 8) {
+      return false;
+   }
+
    /* If we don't have an AUX surface where fast clears apply, we can return
     * early.
     */