isl: Finish tiling filtering for Gen6.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 26 Aug 2016 20:01:13 +0000 (13:01 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 16 Sep 2016 04:21:50 +0000 (21:21 -0700)
Gen6 only has one additional restriction over Gen7+, so we just add it
to the existing gen7 function (which actually covers later gens too).

This should stop FINISHME spew when running GL on Sandybridge.

v2: Fix bytes per block vs. bits per block confusion (Jason) and
    rename function to gen6_filter_tiling (Jason and Chad).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/isl/isl.c
src/intel/isl/isl_gen7.c
src/intel/isl/isl_gen7.h

index a883aecddb4e49a3e3ce35d3f66cca96909e5e00..b6e88ad03e601229813a0ba74104bed87ba4ba1e 100644 (file)
@@ -236,11 +236,11 @@ isl_surf_choose_tiling(const struct isl_device *dev,
 {
    isl_tiling_flags_t tiling_flags = info->tiling_flags;
 
-   if (ISL_DEV_GEN(dev) >= 7) {
-      gen7_filter_tiling(dev, info, &tiling_flags);
+   if (ISL_DEV_GEN(dev) >= 6) {
+      gen6_filter_tiling(dev, info, &tiling_flags);
    } else {
       isl_finishme("%s: gen%u", __func__, ISL_DEV_GEN(dev));
-      gen7_filter_tiling(dev, info, &tiling_flags);
+      gen6_filter_tiling(dev, info, &tiling_flags);
    }
 
    #define CHOOSE(__tiling) \
index f3d8428d059f11b7d77c1f66d01fdba00f844a7e..4f1cc9d5f1ad2b6fa8afa51e7a96c4d8f29013e4 100644 (file)
@@ -198,7 +198,7 @@ gen7_format_needs_valign2(const struct isl_device *dev,
  * flags except ISL_TILING_X_BIT and ISL_TILING_LINEAR_BIT.
  */
 void
-gen7_filter_tiling(const struct isl_device *dev,
+gen6_filter_tiling(const struct isl_device *dev,
                    const struct isl_surf_init_info *restrict info,
                    isl_tiling_flags_t *flags)
 {
@@ -297,6 +297,16 @@ gen7_filter_tiling(const struct isl_device *dev,
        */
       *flags &= ~ISL_TILING_Y0_BIT;
    }
+
+   /* From the Sandybridge PRM, Volume 1, Part 2, page 32:
+    *
+    *    "NOTE: 128BPE Format Color Buffer ( render target ) MUST be either
+    *     TileX or Linear."
+    *
+    * This is necessary all the way back to 965, but is permitted on Gen7+.
+    */
+   if (ISL_DEV_GEN(dev) < 7 && isl_format_get_layout(info->format)->bpb >= 128)
+      *flags &= ~ISL_TILING_Y0_BIT;
 }
 
 /**
index 5d19812092a478af74e33298249c093cc1cc938c..e35e2df4c4faab5dc4d885d50f296786e8aa0a0a 100644 (file)
@@ -30,7 +30,7 @@ extern "C" {
 #endif
 
 void
-gen7_filter_tiling(const struct isl_device *dev,
+gen6_filter_tiling(const struct isl_device *dev,
                    const struct isl_surf_init_info *restrict info,
                    isl_tiling_flags_t *flags);