diff options
author | Imre Deak <imre.deak@intel.com> | 2020-01-20 22:55:20 +0200 |
---|---|---|
committer | Imre Deak <imre.deak@intel.com> | 2020-02-03 14:04:16 +0200 |
commit | 8b90eefce9b47db1ad05857797efa5213778dbec (patch) | |
tree | d9325afb8a92e64f33b28ac5962d291301bc0023 /lib/igt_fb.c | |
parent | 9229028db4e08fdd9e2e0d0dccdbfd1ec6fae898 (diff) |
lib/igt_fb: Use render copy/blit on platforms w/o HW detiling
On platforms without HW detiling use render copy or blitting to convert
a framebuffer to a cairo surface.
Replaces [1] which used a slow device_coherent map, instead of the
faster engine copy in this version.
[1] https://patchwork.freedesktop.org/patch/349742/?series=72308&rev=1
Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Diffstat (limited to 'lib/igt_fb.c')
-rw-r--r-- | lib/igt_fb.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 613a9706..2be03380 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -1975,6 +1975,9 @@ static bool fast_blit_ok(const struct igt_fb *fb) static bool blitter_ok(const struct igt_fb *fb) { + if (is_ccs_modifier(fb->modifier)) + return false; + for (int i = 0; i < fb->num_planes; i++) { int width = fb->plane_width[i]; @@ -2003,16 +2006,22 @@ static bool blitter_ok(const struct igt_fb *fb) static bool use_enginecopy(const struct igt_fb *fb) { - return is_ccs_modifier(fb->modifier) || - (fb->modifier == I915_FORMAT_MOD_Yf_TILED && - !blitter_ok(fb)); + if (blitter_ok(fb)) + return false; + + return fb->modifier == I915_FORMAT_MOD_Yf_TILED || + is_ccs_modifier(fb->modifier) || + !gem_has_mappable_ggtt(fb->fd); } static bool use_blitter(const struct igt_fb *fb) { - return (fb->modifier == I915_FORMAT_MOD_Y_TILED || - fb->modifier == I915_FORMAT_MOD_Yf_TILED) && - blitter_ok(fb); + if (!blitter_ok(fb)) + return false; + + return fb->modifier == I915_FORMAT_MOD_Y_TILED || + fb->modifier == I915_FORMAT_MOD_Yf_TILED || + !gem_has_mappable_ggtt(fb->fd); } static void init_buf_ccs(struct igt_buf *buf, int ccs_idx, |