On Thu, Mar 31, 2016 at 3:34 AM, Michel Dänzer <[email protected]> wrote: > From: Michel Dänzer <[email protected]> > > Stop second guessing it in drmmode_crtc_scanout_create. > > Should fix display corruption in some cases with TearFree enabled. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94751 > Signed-off-by: Michel Dänzer <[email protected]>
Reviewed-by: Alex Deucher <[email protected]> > --- > src/drmmode_display.c | 11 ++--------- > src/radeon.h | 10 ++++++++-- > 2 files changed, 10 insertions(+), 11 deletions(-) > > diff --git a/src/drmmode_display.c b/src/drmmode_display.c > index 7ed8d6c..7331015 100644 > --- a/src/drmmode_display.c > +++ b/src/drmmode_display.c > @@ -97,7 +97,6 @@ RADEONZaphodStringMatches(ScrnInfoPtr pScrn, const char *s, > char *output_name) > static PixmapPtr drmmode_create_bo_pixmap(ScrnInfoPtr pScrn, > int width, int height, > int depth, int bpp, > - int pitch, > struct radeon_bo *bo, struct > radeon_surface *psurf) > { > RADEONInfoPtr info = RADEONPTR(pScrn); > @@ -112,7 +111,7 @@ static PixmapPtr drmmode_create_bo_pixmap(ScrnInfoPtr > pScrn, > return NULL; > > if (!(*pScreen->ModifyPixmapHeader)(pixmap, width, height, > - depth, bpp, pitch, NULL)) { > + depth, bpp, -1, NULL)) { > return NULL; > } > > @@ -401,8 +400,7 @@ create_pixmap_for_fbcon(drmmode_ptr drmmode, > } > > pixmap = drmmode_create_bo_pixmap(pScrn, fbcon->width, fbcon->height, > - fbcon->depth, fbcon->bpp, > - fbcon->pitch, bo, NULL); > + fbcon->depth, fbcon->bpp, bo, NULL); > info->fbcon_pixmap = pixmap; > radeon_bo_unref(bo); > out_free_fb: > @@ -577,7 +575,6 @@ drmmode_crtc_scanout_create(xf86CrtcPtr crtc, struct > drmmode_scanout *scanout, > ScrnInfoPtr pScrn = crtc->scrn; > drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private; > drmmode_ptr drmmode = drmmode_crtc->drmmode; > - unsigned long rotate_pitch; > > if (scanout->pixmap) { > if (scanout->width == width && scanout->height == height) > @@ -591,14 +588,10 @@ drmmode_crtc_scanout_create(xf86CrtcPtr crtc, struct > drmmode_scanout *scanout, > return NULL; > } > > - rotate_pitch = RADEON_ALIGN(width, drmmode_get_pitch_align(pScrn, > drmmode->cpp, 0)) > - * drmmode->cpp; > - > scanout->pixmap = drmmode_create_bo_pixmap(pScrn, > width, height, > pScrn->depth, > pScrn->bitsPerPixel, > - rotate_pitch, > scanout->bo, NULL); > if (scanout->pixmap == NULL) > xf86DrvMsg(pScrn->scrnIndex, X_ERROR, > diff --git a/src/radeon.h b/src/radeon.h > index 37d5fb6..011b66b 100644 > --- a/src/radeon.h > +++ b/src/radeon.h > @@ -656,6 +656,8 @@ uint32_t radeon_get_pixmap_tiling(PixmapPtr pPix); > > static inline void radeon_set_pixmap_bo(PixmapPtr pPix, struct radeon_bo *bo) > { > + ScreenPtr pScreen = pPix->drawable.pScreen; > + > #ifdef USE_GLAMOR > RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(pPix->drawable.pScreen)); > > @@ -691,7 +693,9 @@ static inline void radeon_set_pixmap_bo(PixmapPtr pPix, > struct radeon_bo *bo) > radeon_bo_ref(bo); > priv->bo = bo; > > - radeon_bo_get_tiling(bo, &priv->tiling_flags, &pitch); > + if (radeon_bo_get_tiling(bo, &priv->tiling_flags, &pitch) == 0 && > + pitch != pPix->devKind) > + pScreen->ModifyPixmapHeader(pPix, -1, -1, -1, -1, pitch, > NULL); > } > out: > radeon_set_pixmap_private(pPix, priv); > @@ -710,7 +714,9 @@ out: > radeon_bo_ref(bo); > driver_priv->bo = bo; > > - radeon_bo_get_tiling(bo, &driver_priv->tiling_flags, &pitch); > + if (radeon_bo_get_tiling(bo, &driver_priv->tiling_flags, &pitch) > == 0 && > + pitch != pPix->devKind) > + pScreen->ModifyPixmapHeader(pPix, -1, -1, -1, -1, pitch, > NULL); > } > } > } > -- > 2.8.0.rc3 > > _______________________________________________ > xorg-driver-ati mailing list > [email protected] > https://lists.x.org/mailman/listinfo/xorg-driver-ati _______________________________________________ xorg-driver-ati mailing list [email protected] https://lists.x.org/mailman/listinfo/xorg-driver-ati
