Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 338330 | Differences between
and this patch

Collapse All | Expand All

(-)xserver-xorg-video-psb-0.36.0-ref/src/psb_video.c (-3 / +45 lines)
Lines 610-615 Link Here
610
    float tc0[6], tc1[6], tc2[6];
612
    float tc0[6], tc1[6], tc2[6];
611
    int num_texture = 0;
613
    int num_texture = 0;
612
    float *conversion_data = NULL;    
614
    float *conversion_data = NULL;    
615
    Bool directFB = FALSE;
616
    short drw_x = pPixmap->screen_x;
617
    short drw_y = pPixmap->screen_y;
618
619
    if( drw_x < 0 ){
620
        dstRegion->extents.x2 += drw_x;
621
        drw_x = 0;
622
    }
623
    if( drw_y < 0 ){
624
        dstRegion->extents.y2 += drw_y;
625
        drw_y = 0;
626
    }
627
    if( drw_x + drw_w >= pScrn->virtualX ){
628
        short excess = drw_w - (pScrn->virtualX - drw_x) + 1;
629
        dstRegion->extents.x2 -= excess;
630
    }
631
    if( dstRegion->extents.x2 >= pScrn->virtualX ){
632
        dstRegion->extents.x2 = pScrn->virtualX-1;
633
    }
634
    if( drw_y + drw_h >= pScrn->virtualY ){
635
        short excess = drw_h - (pScrn->virtualY - drw_y) + 1;
636
        dstRegion->extents.y2 -= excess;
637
    }
638
    if( dstRegion->extents.y2 >= pScrn->virtualY ){
639
        dstRegion->extents.y2 = pScrn->virtualY-1;
640
    }
613
641
614
    hdtv = ((src_w >= PSB_HDTV_LIMIT_X) && (src_h >= PSB_HDTV_LIMIT_Y));
642
    hdtv = ((src_w >= PSB_HDTV_LIMIT_X) && (src_h >= PSB_HDTV_LIMIT_Y));
615
643
Lines 684-695 Link Here
684
     * coordinates) to the backing pixmap.
712
     * coordinates) to the backing pixmap.
685
     */
713
     */
686
714
687
    while (!psbExaGetSuperOffset(pPixmap, &pre_add, &dstBuf))
715
    if(!psbExaGetSuperOffset(pPixmap, &pre_add, &dstBuf)){
688
	exaMoveInPixmap(pPixmap);
716
	exaMoveInPixmap(pPixmap);
717
        if(!psbExaGetSuperOffset(pPixmap, &pre_add, &dstBuf)){
718
	   PsbBufListPtr b;
719
           PsbPtr pPsb = psbPTR(pScrn);
720
           pre_add = (drw_x + (drw_y*pScrn->displayWidth))*(pScrn->bitsPerPixel/8); //exaGetPixmapOffset(pPixmap);
721
           b = mmListBuf(&pPsb->buffers);
722
           dstBuf = b->buf;
723
           directFB = TRUE;
724
        }
725
    }
726
	
689
727
690
    dst.buffer = mmKernelBuf(dstBuf);
728
    dst.buffer = mmKernelBuf(dstBuf);
691
    dst.offset = pre_add;
729
    dst.offset = pre_add;
692
    dst.stride = pPixmap->devKind;
730
    if( directFB ){
731
	dst.stride = pScrn->displayWidth * (pScrn->bitsPerPixel/8);
732
    }else{
733
        dst.stride = pPixmap->devKind;
734
    }
693
735
694
    switch (pPixmap->drawable.depth) {
736
    switch (pPixmap->drawable.depth) {
695
    case 15:
737
    case 15:
Lines 771-777 Link Here
771
		} 
813
		} 
772
    }
814
    }
773
815
774
    DamageDamageRegion(&pPixmap->drawable, dstRegion);
816
    if( ! directFB ){
817
        DamageDamageRegion(&pPixmap->drawable, dstRegion);
818
    }
775
    return TRUE;
819
    return TRUE;
776
}
820
}
777
821

Return to bug 338330