On 17-01-31 13:40:01, Jason Ekstrand wrote:
On Mon, Jan 23, 2017 at 10:21 PM, Ben Widawsky <b...@bwidawsk.net> wrote:
FINISHME: Use the kernel's final choice for the fb modifier
bwidawsk@norris2:~/intel-gfx/kmscube (modifiers $)
~/scripts/measure_bandwidth.sh ./kmscube none
Read bandwidth: 603.91 MiB/s
Write bandwidth: 615.28 MiB/s
bwidawsk@norris2:~/intel-gfx/kmscube (modifiers $)
~/scripts/measure_bandwidth.sh ./kmscube ytile
Read bandwidth: 571.13 MiB/s
Write bandwidth: 555.51 MiB/s
bwidawsk@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 <b...@bwidawsk.net>
Acked-by: Daniel Stone <dani...@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)
Why not YfTILE_CCS? Y_TILE_*_Yf makes very little sense. I mean, it
sort-of does with the weird way the docs like to say things, but Y and Yf
are different tiling formats.
Yeah, I'll change that.
+#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
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev