radv: allocate thin textures as linear.
authorDave Airlie <airlied@redhat.com>
Thu, 13 Apr 2017 04:12:28 +0000 (14:12 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 13 Apr 2017 10:31:38 +0000 (20:31 +1000)
This is ported from radeonsi, and avoids the bug in the
addrlib code. This should probably be something addrlib
does for us, but for now this fixes the regression without
changing addrlib and aligns us with radeonsi.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_image.c

index 0ada7ffa6153019f4e7bf7dd6d57ecb3fa0e82dd..3586e4c158bbeaa49e70027b99556c850e6fcc0f 100644 (file)
@@ -41,6 +41,13 @@ radv_choose_tiling(struct radv_device *Device,
                return RADEON_SURF_MODE_LINEAR_ALIGNED;
        }
 
+       /* Textures with a very small height are recommended to be linear. */
+       if (pCreateInfo->imageType == VK_IMAGE_TYPE_1D ||
+           /* Only very thin and long 2D textures should benefit from
+            * linear_aligned. */
+           (pCreateInfo->extent.width > 8 && pCreateInfo->extent.height <= 2))
+               return RADEON_SURF_MODE_LINEAR_ALIGNED;
+
        /* MSAA resources must be 2D tiled. */
        if (pCreateInfo->samples > 1)
                return RADEON_SURF_MODE_2D;