summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Widawsky <ben@bwidawsk.net>2017-01-02 15:01:54 -0800
committerBen Widawsky <ben@bwidawsk.net>2017-03-13 10:37:38 -0700
commitc3993b3f058698f38c5f6798e811d82801e2856e (patch)
tree63b332e6ffcc3623ff5c599ed71b738d3d4471d2
parentb5abecfee3a2e2ff8773c05d3c0614a02526c141 (diff)
i965: 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. v2: priority lits was in reverse order. Cc: Kristian Høgsberg <krh@bitplanet.net> Signed-off-by: Ben Widawsky <ben@bwidawsk.net> Acked-by: Daniel Stone <daniels@collabora.com>
-rw-r--r--src/mesa/drivers/dri/i965/intel_screen.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 2c52168f84..c3a811ddfb 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -525,10 +525,14 @@ select_best_modifier(struct gen_device_info *devinfo,
const uint64_t *modifiers,
const unsigned count)
{
-#define YTILE (1 << 1)
+#define YTILE (1 << 2)
+#define XTILE (1 << 1)
#define LINEAR (1 << 0)
- const uint64_t prio_modifiers[] = { I915_FORMAT_MOD_Y_TILED, DRM_FORMAT_MOD_LINEAR };
+ const uint64_t prio_modifiers[] = {
+ DRM_FORMAT_MOD_LINEAR,
+ I915_FORMAT_MOD_X_TILED,
+ I915_FORMAT_MOD_Y_TILED};
uint32_t modifier_bitmask = 0; /* API only allows 32 */
for (int i = 0; i < count; i++) {
@@ -536,6 +540,9 @@ select_best_modifier(struct gen_device_info *devinfo,
case DRM_FORMAT_MOD_LINEAR:
modifier_bitmask |= LINEAR;
break;
+ case I915_FORMAT_MOD_X_TILED:
+ modifier_bitmask |= XTILE;
+ break;
case I915_FORMAT_MOD_Y_TILED:
if (devinfo->gen < 9) {
_mesa_warning(NULL, "Invalid Y-tiling parameter\n");
@@ -553,6 +560,7 @@ select_best_modifier(struct gen_device_info *devinfo,
return DRM_FORMAT_MOD_INVALID;
#undef LINEAR
+#undef XTILE
#undef YTILE
}
@@ -581,6 +589,9 @@ __intel_create_image(__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;
@@ -645,6 +656,7 @@ intel_create_image_with_modifiers(__DRIscreen *dri_screen,
for (int i = 0; i < count; i++) {
switch (modifiers[i]) {
case I915_FORMAT_MOD_Y_TILED:
+ case I915_FORMAT_MOD_X_TILED:
case DRM_FORMAT_MOD_LINEAR:
local_mods[local_count++] = modifiers[i];
break;