From ba3c38e49599781e53f083a3b9e71ec8a04a17dc Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 27 Jan 2015 08:49:41 +0000 Subject: [PATCH] sna/dri2: Check for comparable back/front pitches more carefully Suppose for a moment that we don't have a DRI2Buffer associated with the Drawable just yet... Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=88814 Signed-off-by: Chris Wilson --- src/sna/sna_dri2.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/sna/sna_dri2.c b/src/sna/sna_dri2.c index fd3edcc..d702bad 100644 --- a/src/sna/sna_dri2.c +++ b/src/sna/sna_dri2.c @@ -139,6 +139,12 @@ struct sna_dri2_event { static void sna_dri2_flip_event(struct sna_dri2_event *flip); +static int front_pitch(DrawablePtr draw) +{ + DRI2BufferPtr buffer = sna_pixmap_get_buffer(get_drawable_pixmap(draw)); + return buffer ? buffer->pitch : 0; +} + static void sna_dri2_get_back(struct sna *sna, DrawablePtr draw, @@ -154,10 +160,10 @@ sna_dri2_get_back(struct sna *sna, __FUNCTION__, draw->width, draw->height, get_private(back)->size & 0xffff, get_private(back)->size >> 16, get_private(back)->bo->scanout, - back->pitch, sna_pixmap_get_buffer(get_drawable_pixmap(draw))->pitch )); + back->pitch, front_pitch(draw))); reuse = (draw->height << 16 | draw->width) == get_private(back)->size; if (reuse && get_private(back)->bo->scanout) - reuse = sna_pixmap_get_buffer(get_drawable_pixmap(draw))->pitch == back->pitch; + reuse = front_pitch(draw) == back->pitch; if (reuse) { bo = get_private(back)->bo; assert(bo->refcnt); -- 2.1.4