[Mesa-dev] [PATCH v2 08/32] intel/isl: Add gen10 variants of Yf and Ys tiling

Jason Ekstrand jason at jlekstrand.net
Fri Oct 12 18:46:38 UTC 2018


---
 src/intel/isl/isl.c               |  9 +++++++--
 src/intel/isl/isl.h               | 12 ++++++++++--
 src/intel/isl/isl_drm.c           |  2 ++
 src/intel/isl/isl_gen7.c          |  8 +++++++-
 src/intel/isl/isl_surface_state.c |  2 ++
 5 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
index 392c15ca3fb..3ffc6f627b2 100644
--- a/src/intel/isl/isl.c
+++ b/src/intel/isl/isl.c
@@ -218,8 +218,11 @@ isl_tiling_get_info(enum isl_tiling tiling,
       break;
 
    case ISL_TILING_GEN9_Yf:
-   case ISL_TILING_GEN9_Ys: {
-      bool is_Ys = tiling == ISL_TILING_GEN9_Ys;
+   case ISL_TILING_GEN9_Ys:
+   case ISL_TILING_GEN10_Yf:
+   case ISL_TILING_GEN10_Ys: {
+      bool is_Ys = tiling == ISL_TILING_GEN9_Ys ||
+                   tiling == ISL_TILING_GEN10_Ys;
 
       assert(bs > 0);
       unsigned width = 1 << (6 + (ffs(bs) / 2) + (2 * is_Ys));
@@ -375,7 +378,9 @@ isl_surf_choose_tiling(const struct isl_device *dev,
       CHOOSE(ISL_TILING_LINEAR);
    }
 
+   CHOOSE(ISL_TILING_GEN10_Ys);
    CHOOSE(ISL_TILING_GEN9_Ys);
+   CHOOSE(ISL_TILING_GEN10_Yf);
    CHOOSE(ISL_TILING_GEN9_Yf);
    CHOOSE(ISL_TILING_Y0);
    CHOOSE(ISL_TILING_X);
diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h
index 1c7990f2dc7..200bfbfa85b 100644
--- a/src/intel/isl/isl.h
+++ b/src/intel/isl/isl.h
@@ -462,6 +462,8 @@ enum isl_tiling {
    ISL_TILING_Y0, /**< Legacy Y tiling */
    ISL_TILING_GEN9_Yf, /**< Standard 4K tiling. The 'f' means "four". */
    ISL_TILING_GEN9_Ys, /**< Standard 64K tiling. The 's' means "sixty-four". */
+   ISL_TILING_GEN10_Yf, /**< Standard 4K tiling. The 'f' means "four". */
+   ISL_TILING_GEN10_Ys, /**< Standard 64K tiling. The 's' means "sixty-four". */
    ISL_TILING_HIZ, /**< Tiling format for HiZ surfaces */
    ISL_TILING_CCS, /**< Tiling format for CCS surfaces */
 };
@@ -477,6 +479,8 @@ typedef uint32_t isl_tiling_flags_t;
 #define ISL_TILING_Y0_BIT                 (1u << ISL_TILING_Y0)
 #define ISL_TILING_GEN9_Yf_BIT            (1u << ISL_TILING_GEN9_Yf)
 #define ISL_TILING_GEN9_Ys_BIT            (1u << ISL_TILING_GEN9_Ys)
+#define ISL_TILING_GEN10_Yf_BIT           (1u << ISL_TILING_GEN10_Yf)
+#define ISL_TILING_GEN10_Ys_BIT           (1u << ISL_TILING_GEN10_Ys)
 #define ISL_TILING_HIZ_BIT                (1u << ISL_TILING_HIZ)
 #define ISL_TILING_CCS_BIT                (1u << ISL_TILING_CCS)
 #define ISL_TILING_ANY_MASK               (~0u)
@@ -485,11 +489,15 @@ typedef uint32_t isl_tiling_flags_t;
 /** Any Y tiling, including legacy Y tiling. */
 #define ISL_TILING_ANY_Y_MASK             (ISL_TILING_Y0_BIT | \
                                            ISL_TILING_GEN9_Yf_BIT | \
-                                           ISL_TILING_GEN9_Ys_BIT)
+                                           ISL_TILING_GEN9_Ys_BIT | \
+                                           ISL_TILING_GEN10_Yf_BIT | \
+                                           ISL_TILING_GEN10_Ys_BIT)
 
 /** The Skylake BSpec refers to Yf and Ys as "standard tiling formats". */
 #define ISL_TILING_STD_Y_MASK             (ISL_TILING_GEN9_Yf_BIT | \
-                                           ISL_TILING_GEN9_Ys_BIT)
+                                           ISL_TILING_GEN9_Ys_BIT | \
+                                           ISL_TILING_GEN10_Yf_BIT | \
+                                           ISL_TILING_GEN10_Ys_BIT)
 /** @} */
 
 /**
diff --git a/src/intel/isl/isl_drm.c b/src/intel/isl/isl_drm.c
index 62fdd22d10d..03f433a1058 100644
--- a/src/intel/isl/isl_drm.c
+++ b/src/intel/isl/isl_drm.c
@@ -46,6 +46,8 @@ isl_tiling_to_i915_tiling(enum isl_tiling tiling)
    case ISL_TILING_W:
    case ISL_TILING_GEN9_Yf:
    case ISL_TILING_GEN9_Ys:
+   case ISL_TILING_GEN10_Yf:
+   case ISL_TILING_GEN10_Ys:
    case ISL_TILING_HIZ:
    case ISL_TILING_CCS:
       return I915_TILING_NONE;
diff --git a/src/intel/isl/isl_gen7.c b/src/intel/isl/isl_gen7.c
index 91cea299abc..f6f7e1ba7dc 100644
--- a/src/intel/isl/isl_gen7.c
+++ b/src/intel/isl/isl_gen7.c
@@ -197,16 +197,22 @@ isl_gen6_filter_tiling(const struct isl_device *dev,
    assert(ISL_DEV_USE_SEPARATE_STENCIL(dev));
 
    /* Clear flags unsupported on this hardware */
-   if (ISL_DEV_GEN(dev) < 9) {
+   if (ISL_DEV_GEN(dev) != 9) {
       *flags &= ~ISL_TILING_GEN9_Yf_BIT;
       *flags &= ~ISL_TILING_GEN9_Ys_BIT;
    }
+   if (ISL_DEV_GEN(dev) < 10) {
+      *flags &= ~ISL_TILING_GEN10_Yf_BIT;
+      *flags &= ~ISL_TILING_GEN10_Ys_BIT;
+   }
 
    /* And... clear the Yf and Ys bits anyway because Anvil doesn't support
     * them yet.
     */
    *flags &= ~ISL_TILING_GEN9_Yf_BIT; /* FINISHME[SKL]: Support Yf */
    *flags &= ~ISL_TILING_GEN9_Ys_BIT; /* FINISHME[SKL]: Support Ys */
+   *flags &= ~ISL_TILING_GEN10_Yf_BIT; /* FINISHME[SKL]: Support Yf */
+   *flags &= ~ISL_TILING_GEN10_Ys_BIT; /* FINISHME[SKL]: Support Ys */
 
    if (isl_surf_usage_is_depth(info->usage)) {
       /* Depth requires Y. */
diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c
index 6ac0969f00c..26cb2a87c55 100644
--- a/src/intel/isl/isl_surface_state.c
+++ b/src/intel/isl/isl_surface_state.c
@@ -72,6 +72,8 @@ static const uint8_t isl_to_gen_tiling[] = {
    [ISL_TILING_Y0]      = YMAJOR,
    [ISL_TILING_GEN9_Yf] = YMAJOR,
    [ISL_TILING_GEN9_Ys] = YMAJOR,
+   [ISL_TILING_GEN10_Yf] = YMAJOR,
+   [ISL_TILING_GEN10_Ys] = YMAJOR,
    [ISL_TILING_W]       = WMAJOR,
 };
 #endif
-- 
2.19.1



More information about the mesa-dev mailing list