diff --git a/src/atombios_crtc.c b/src/atombios_crtc.c index 6f083b4..f22b043 100644 --- a/src/atombios_crtc.c +++ b/src/atombios_crtc.c @@ -827,6 +827,26 @@ static void avivo_set_base_format(xf86CrtcPtr crtc, #if X_BYTE_ORDER == X_BIG_ENDIAN uint32_t fb_swap = R600_D1GRPH_SWAP_ENDIAN_NONE; #endif +#ifdef XF86DRI + if (info->directRenderingInited) { + drm_radeon_sarea_t *pSAREAPriv = DRIGetSAREAPrivate(screenInfo.screens[pScrn->scrnIndex]); + /* can't get at sarea in a semi-sane way? */ + XF86DRISAREAPtr pSAREA = (void *)((char*)pSAREAPriv - sizeof(XF86DRISAREARec)); + + if (radeon_crtc->crtc_id) { + pSAREAPriv->crtc2_base = crtc->scrn->fbOffset; + } else { + pSAREA->frame.x = x; + pSAREA->frame.y = y; + pSAREA->frame.width = pScrn->frameX1 - x + 1; + pSAREA->frame.height = pScrn->frameY1 - y + 1; + } + + if (pSAREAPriv->pfCurrentPage == 1) { + fb_location += info->dri->backOffset - info->dri->frontOffset; + } + } +#endif switch (crtc->scrn->bitsPerPixel) { case 15: