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 |
|