intel/isl: Refactor gen6_choose_image_alignment_el
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 10 May 2017 19:15:01 +0000 (12:15 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 17 May 2017 00:04:26 +0000 (17:04 -0700)
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Chad Versace <chadversary@chromium.org>
src/intel/isl/isl_gen6.c

index b74690319e92e335953e10b0919dd35c132f679b..6da0be7dc2057e57705eca2e068c4392162e2120 100644 (file)
@@ -88,6 +88,8 @@ isl_gen6_choose_image_alignment_el(const struct isl_device *dev,
     *    | format                 | halign | valign |
     *    +------------------------+--------+--------+
     *    | YUV 4:2:2 formats      |      4 |      * |
+    *    | BC1-5                  |      4 |      4 |
+    *    | FXT1                   |      8 |      4 |
     *    | uncompressed formats   |      4 |      * |
     *    +------------------------+--------+--------+
     *
@@ -110,38 +112,32 @@ isl_gen6_choose_image_alignment_el(const struct isl_device *dev,
     */
 
    if (isl_format_is_compressed(info->format)) {
+      /* Compressed formats have an alignment equal to their block size */
       *image_align_el = isl_extent3d(1, 1, 1);
       return;
    }
 
-   if (isl_format_is_yuv(info->format)) {
-      *image_align_el = isl_extent3d(4, 2, 1);
-      return;
-   }
-
-   if (info->samples > 1) {
-      *image_align_el = isl_extent3d(4, 4, 1);
-      return;
-   }
-
-   if (isl_surf_usage_is_depth_or_stencil(info->usage) &&
-       !ISL_DEV_USE_SEPARATE_STENCIL(dev)) {
-      /* interleaved depthstencil buffer */
-      *image_align_el = isl_extent3d(4, 4, 1);
-      return;
-   }
-
    if (isl_surf_usage_is_depth(info->usage)) {
-      /* separate depth buffer */
+      /* depth buffer (possibly interleaved with stencil) */
       *image_align_el = isl_extent3d(4, 4, 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);
       return;
    }
 
+   if (info->samples > 1) {
+      *image_align_el = isl_extent3d(4, 4, 1);
+      return;
+   }
+
+   /* For everything else, 4x2 is always a valid alignment.  Since this is
+    * also the smallest alignment we can specify, we use 4x2 for everything
+    * else because it uses the least memory.
+    */
    *image_align_el = isl_extent3d(4, 2, 1);
 }