diff options
author | Ben Widawsky <ben@bwidawsk.net> | 2017-01-02 15:01:54 -0800 |
---|---|---|
committer | Ben Widawsky <ben@bwidawsk.net> | 2017-03-13 10:37:38 -0700 |
commit | c3993b3f058698f38c5f6798e811d82801e2856e (patch) | |
tree | 63b332e6ffcc3623ff5c599ed71b738d3d4471d2 | |
parent | b5abecfee3a2e2ff8773c05d3c0614a02526c141 (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.c | 16 |
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; |