[Mesa-dev] [PATCH 34/34] i965: Handle compression modifier

Ben Widawsky ben at bwidawsk.net
Tue Jan 24 06:21:57 UTC 2017


FINISHME: Use the kernel's final choice for the fb modifier

bwidawsk at norris2:~/intel-gfx/kmscube (modifiers $) ~/scripts/measure_bandwidth.sh ./kmscube none
Read bandwidth: 603.91 MiB/s
Write bandwidth: 615.28 MiB/s
bwidawsk at norris2:~/intel-gfx/kmscube (modifiers $) ~/scripts/measure_bandwidth.sh ./kmscube ytile
Read bandwidth: 571.13 MiB/s
Write bandwidth: 555.51 MiB/s
bwidawsk at norris2:~/intel-gfx/kmscube (modifiers $) ~/scripts/measure_bandwidth.sh ./kmscube ccs
Read bandwidth: 259.34 MiB/s
Write bandwidth: 337.83 MiB/s

v2: Move all references to the new fourcc code(s) to this patch.

Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
Acked-by: Daniel Stone <daniels at collabora.com>
---
 src/mesa/drivers/dri/i965/intel_screen.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 12b3b071e4..9914eff6e0 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -560,11 +560,15 @@ select_best_modifier(struct gen_device_info *devinfo,
                      const uint64_t *modifiers,
                      const unsigned count)
 {
+#define YTILE_CCS_Yf (1 << 4)
+#define YTILE_CCS (1 << 3)
 #define YTILE  (1 << 2)
 #define XTILE  (1 << 1)
 #define LINEAR (1 << 0)
 
    const uint64_t prio_modifiers[] = {
+      /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5),
+      /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4),
       I915_FORMAT_MOD_Y_TILED,
       I915_FORMAT_MOD_X_TILED,
       DRM_FORMAT_MOD_LINEAR };
@@ -586,6 +590,12 @@ select_best_modifier(struct gen_device_info *devinfo,
 
          modifier_bitmask |= YTILE;
          break;
+      case /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4):
+         modifier_bitmask |= YTILE_CCS;
+         break;
+      case /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5):
+         modifier_bitmask |= YTILE_CCS_Yf;
+         break;
       }
    }
 
@@ -597,6 +607,8 @@ select_best_modifier(struct gen_device_info *devinfo,
 #undef LINEAR
 #undef XTILE
 #undef YTILE
+#undef YTILE_CCS
+#undef YTILE_CCS_Yf
 }
 
 static int
@@ -610,6 +622,10 @@ create_image_with_modifier(struct intel_screen *screen,
    unsigned ccs_height = 0;
 
    switch (modifier) {
+   case /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5):
+   case /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4):
+      ccs_height = ALIGN(DIV_ROUND_UP(height, 16), 32);
+      /* fallthrough */
    case I915_FORMAT_MOD_Y_TILED:
       requested_tiling = tiling = I915_TILING_Y;
       tiled_height = ALIGN(height, 32);
@@ -761,6 +777,8 @@ intel_create_image_with_modifiers(__DRIscreen *dri_screen,
    /* This compacts the actual modifiers to the ones we know how to handle */
    for (int i = 0; i < count; i++) {
       switch (modifiers[i]) {
+      case /* I915_FORMAT_MOD_Yf_TILED_CCS */ fourcc_mod_code(INTEL, 5):
+      case /* I915_FORMAT_MOD_Y_TILED_CCS */ fourcc_mod_code(INTEL, 4):
       case I915_FORMAT_MOD_Y_TILED:
       case I915_FORMAT_MOD_X_TILED:
       case DRM_FORMAT_MOD_LINEAR:
-- 
2.11.0



More information about the mesa-dev mailing list