isl: Add and use isl_tiling_flag_to_enum()
authorNanley Chery <nanley.g.chery@intel.com>
Mon, 14 Jan 2019 19:32:21 +0000 (11:32 -0800)
committerNanley Chery <nanley.g.chery@intel.com>
Mon, 28 Oct 2019 17:47:05 +0000 (10:47 -0700)
Use a helper that will automatically handle Gen12's CCS tiling when
creating a CCS isl_surf.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/intel/isl/isl.c
src/intel/isl/isl.h

index 39e5dca530744a891b30b86d2c764e2e4b2a4a2e..a91c7204f6612b64ad24883aa09e3e73e7ce3dff 100644 (file)
@@ -384,7 +384,7 @@ isl_surf_choose_tiling(const struct isl_device *dev,
    if (info->usage & ISL_SURF_USAGE_HIZ_BIT) {
       assert(info->format == ISL_FORMAT_HIZ);
       assert(tiling_flags == ISL_TILING_HIZ_BIT);
-      *tiling = ISL_TILING_HIZ;
+      *tiling = isl_tiling_flag_to_enum(tiling_flags);
       return true;
    }
 
@@ -392,7 +392,7 @@ isl_surf_choose_tiling(const struct isl_device *dev,
    if (info->usage & ISL_SURF_USAGE_CCS_BIT) {
       assert(isl_format_get_layout(info->format)->txc == ISL_TXC_CCS);
       assert(tiling_flags == ISL_TILING_CCS_BIT);
-      *tiling = ISL_TILING_CCS;
+      *tiling = isl_tiling_flag_to_enum(tiling_flags);
       return true;
    }
 
index 757d5fb0ae82512bea0d52968f1da69d24755f04..5b7458a228524fcf7b45dd92a93b8f5a1ace49e9 100644 (file)
@@ -1636,6 +1636,13 @@ bool
 isl_has_matching_typed_storage_image_format(const struct gen_device_info *devinfo,
                                             enum isl_format fmt);
 
+static inline enum isl_tiling
+isl_tiling_flag_to_enum(isl_tiling_flags_t flag)
+{
+   assert(__builtin_popcount(flag) == 1);
+   return (enum isl_tiling) (__builtin_ffs(flag) - 1);
+}
+
 static inline bool
 isl_tiling_is_any_y(enum isl_tiling tiling)
 {