From: Ben Widawsky Date: Mon, 2 Jan 2017 23:01:54 +0000 (-0800) Subject: i965/dri: Handle X-tiled modifier X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cd6bd7f123c20c266a3fdee7dcecca720495e457;p=mesa.git i965/dri: Handle X-tiled modifier This doesn't really "do" anything because the default tiling for the winsys buffer is X tiled. We do however want the X tiled modifier to work correctly from the API perspective, which would imply that if you set this modifier, and later do a get_modifier, you get back at least X tiled. Running with a modified kmscube, here are the bandwidth measurements. Linear: Read bandwidth: 1039.31 MiB/s Write bandwidth: 1453.56 MiB/s Y-tiled: Read bandwidth: 458.29 MiB/s Write bandwidth: 542.12 MiB/s X-tiled: Read bandwidth: 575.01 MiB/s Write bandwidth: 606.25 MiB/s Cc: Kristian Høgsberg Signed-off-by: Ben Widawsky Acked-by: Daniel Stone Reviewed-by: Jason Ekstrand --- diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 89fc4686ce5..adcd1ad91cb 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -519,12 +519,14 @@ intel_destroy_image(__DRIimage *image) enum modifier_priority { MODIFIER_PRIORITY_INVALID = 0, MODIFIER_PRIORITY_LINEAR, + MODIFIER_PRIORITY_X, MODIFIER_PRIORITY_Y, }; const uint64_t priority_to_modifier[] = { [MODIFIER_PRIORITY_INVALID] = DRM_FORMAT_MOD_INVALID, [MODIFIER_PRIORITY_LINEAR] = DRM_FORMAT_MOD_LINEAR, + [MODIFIER_PRIORITY_X] = I915_FORMAT_MOD_X_TILED, [MODIFIER_PRIORITY_Y] = I915_FORMAT_MOD_Y_TILED, }; @@ -540,6 +542,9 @@ select_best_modifier(struct gen_device_info *devinfo, case I915_FORMAT_MOD_Y_TILED: prio = MAX2(prio, MODIFIER_PRIORITY_Y); break; + case I915_FORMAT_MOD_X_TILED: + prio = MAX2(prio, MODIFIER_PRIORITY_X); + break; case DRM_FORMAT_MOD_LINEAR: prio = MAX2(prio, MODIFIER_PRIORITY_LINEAR); break; @@ -577,6 +582,9 @@ intel_create_image_common(__DRIscreen *dri_screen, uint64_t modifier = select_best_modifier(&screen->devinfo, modifiers, count); switch (modifier) { + case I915_FORMAT_MOD_X_TILED: + assert(tiling == I915_TILING_X); + break; case DRM_FORMAT_MOD_LINEAR: tiling = I915_TILING_NONE; break;