intel/isl/gen6: Fix combined depth stencil alignment
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 15 May 2017 20:51:13 +0000 (13:51 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 17 May 2017 00:04:26 +0000 (17:04 -0700)
All combined depth stencil buffers (even those with just stencil)
require a 4x4 alignment on Sandy Bridge.  The only depth/stencil buffer
type that requires 4x2 is separate stencil.

Reviewed-by: Chad Versace <chadversary@chromium.org>
src/intel/isl/isl_gen6.c

index 6da0be7dc2057e57705eca2e068c4392162e2120..51f2100ac83784dbdf3080ddc720b27a95f5919d 100644 (file)
@@ -117,16 +117,16 @@ isl_gen6_choose_image_alignment_el(const struct isl_device *dev,
       return;
    }
 
-   if (isl_surf_usage_is_depth(info->usage)) {
-      /* depth buffer (possibly interleaved with stencil) */
-      *image_align_el = isl_extent3d(4, 4, 1);
+   /* Separate stencil requires 4x2 alignment */
+   if (isl_surf_usage_is_stencil(info->usage) &&
+       info->format == ISL_FORMAT_R8_UINT) {
+      *image_align_el = isl_extent3d(4, 2, 1);
       return;
    }
 
-   if (isl_surf_usage_is_stencil(info->usage)) {
-      /* separate stencil buffer */
-      assert(!isl_surf_usage_is_depth(info->usage));
-      *image_align_el = isl_extent3d(4, 2, 1);
+   /* Depth or combined depth stencil surfaces require 4x4 alignment */
+   if (isl_surf_usage_is_depth_or_stencil(info->usage)) {
+      *image_align_el = isl_extent3d(4, 4, 1);
       return;
    }