anv: meta_blit2d: adapt texel fetch pitch for fake w-tiled
authorLionel Landwerlin <llandwerlin@gmail.com>
Wed, 24 Aug 2016 16:52:12 +0000 (17:52 +0100)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 24 Aug 2016 18:29:23 +0000 (11:29 -0700)
We need to compute detiling coordinates using the physical size of W tiling
(128x32) rather than the logical size (64x64).

v2: Correct comment (Jason)

Fixes dEQP-VK.api.copy_and_blit.image_to_image_stencil

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97448
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_meta_blit2d.c

index 7085f2da8b1e40f668fd95a115782b37f67f7c96..6b2222c73b5da72cefba59b325d91e28a3718430 100644 (file)
@@ -914,9 +914,11 @@ build_nir_w_tiled_fetch(struct nir_builder *b, struct anv_device *device,
    /* First, compute the block-aligned offset */
    nir_ssa_def *x_major = nir_ushr(b, x, nir_imm_int(b, 6));
    nir_ssa_def *y_major = nir_ushr(b, y, nir_imm_int(b, 6));
+   /* W tiles have physical size of 128x32 and logical size of 64x64, hence
+    * the multiplication by 32 (instead of 64). */
    nir_ssa_def *offset =
       nir_iadd(b, nir_imul(b, y_major,
-                              nir_imul(b, tex_pitch, nir_imm_int(b, 64))),
+                              nir_imul(b, tex_pitch, nir_imm_int(b, 32))),
                   nir_imul(b, x_major, nir_imm_int(b, 4096)));
 
    /* Compute the bottom 12 bits of the offset */