turnip: Disable UBWC on images used as storage images.
authorEric Anholt <eric@anholt.net>
Thu, 16 Jan 2020 00:58:21 +0000 (16:58 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 21 Jan 2020 19:29:59 +0000 (19:29 +0000)
The closed GL driver doesn't use UBWC on any storage images.  It does tile
mostly (skipping tiling on writeonly images, it seems), but for freedreno
we've been enabling tiling in all cases and it's fine.  We do need to
disable UBWC, as tests fail otherwise and just plugging in the equivalent
UBWC regs like we were setting up a texture isn't enough.

Fixes dEQP-VK.image.atomic_operations.*

Reviewed-by: Jonathan Marek <jonathan@marek.ca>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3433>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3433>

src/freedreno/vulkan/tu_image.c

index 978b1b1845359c85eb30cd45c48b834a78c87e83..f596feb9855408f57a70201b10b051830fddba1e 100644 (file)
@@ -126,6 +126,18 @@ tu_image_create(VkDevice _device,
       ubwc_enabled = false;
    }
 
+   /* Disable UBWC for storage images.
+    *
+    * The closed GL driver skips UBWC for storage images (and additionally
+    * uses linear for writeonly images).  We seem to have image tiling working
+    * in freedreno in general, so turnip matches that.  freedreno also enables
+    * UBWC on images, but it's not really tested due to the lack of
+    * UBWC-enabled mipmaps in freedreno currently.  Just match the closed GL
+    * behavior of no UBWC.
+   */
+   if (image->usage & VK_IMAGE_USAGE_STORAGE_BIT)
+      ubwc_enabled = false;
+
    uint32_t ubwc_blockwidth, ubwc_blockheight;
    fdl6_get_ubwc_blockwidth(&image->layout,
                             &ubwc_blockwidth, &ubwc_blockheight);