#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include "xf4bpp.h"
#include "mfbmap.h"
#include "mfb.h"
#include "mi.h"
#include "mispans.h"
#include "ppcGCstr.h"
#include "ppcSpMcro.h"
#include "ibmTrace.h"
#define LeftMostBitInScreenLongWord SCRLEFT( 0xFFFFFFFF, 31 )
void
xf4bppSolidWindowFS( pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted )
DrawablePtr pDrawable ;
GCPtr pGC ;
int nInit ;
DDXPointPtr pptInit ;
int *pwidthInit ;
int fSorted ;
{
register unsigned long int pm ;
register unsigned long int fg ;
register int alu ;
int n ;
register DDXPointPtr ppt ;
register int *pwidth ;
int *pwidthFree ;
DDXPointPtr pptFree ;
TRACE( ( "xf4bppSolidWindowFS(pDrawable=0x%x,pGC=0x%x,nInit=%d,pptInit=0x%x,pwidthInit=0x%x,fSorted=%d)\n",
pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted ) ) ;
if ( pDrawable->type != DRAWABLE_WINDOW ) {
ErrorF( "xf4bppSolidWindowFS: drawable is not a window\n") ;
return ;
}
if ( ( alu = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.alu ) == GXnoop )
return ;
n = nInit * miFindMaxBand( pGC->pCompositeClip ) ;
if ( !( pwidthFree = (int *) ALLOCATE_LOCAL( n * sizeof( int ) ) ) )
return ;
pwidth = pwidthFree ;
if ( !( pptFree = (DDXPointRec *)
ALLOCATE_LOCAL( n * sizeof( DDXPointRec ) ) ) ) {
DEALLOCATE_LOCAL( pwidth ) ;
return ;
}
ppt = pptFree ;
n = miClipSpans( pGC->pCompositeClip, pptInit, pwidthInit, nInit,
ppt, pwidth, fSorted ) ;
pm = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.planemask ;
fg = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.fgPixel ;
for ( ; n-- ; ppt++, pwidth++ )
if ( *pwidth )
xf4bppFillSolid( (WindowPtr)pDrawable,
fg, alu, pm, ppt->x, ppt->y, *pwidth, 1 ) ;
DEALLOCATE_LOCAL( pptFree ) ;
DEALLOCATE_LOCAL( pwidthFree ) ;
return ;
}
void
xf4bppStippleWindowFS( pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted )
DrawablePtr pDrawable ;
register GC *pGC ;
int nInit ;
DDXPointPtr pptInit ;
int *pwidthInit ;
int fSorted ;
{
register unsigned long int pm ;
register unsigned long int fg ;
register int alu ;
int n ;
register DDXPointPtr ppt ;
register int *pwidth ;
PixmapPtr pTile ;
int xSrc ;
int ySrc ;
int *pwidthFree ;
DDXPointPtr pptFree ;
TRACE( ( "xf4bppStippleWindowFS(pDrawable=0x%x,pGC=0x%x,nInit=%d,pptInit=0x%x,pwidthInit=0x%x,fSorted=%d)\n",
pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted ) ) ;
if ( pDrawable->type != DRAWABLE_WINDOW ) {
ErrorF( "xf4bppStippleWindowFS: drawable is not a window\n" ) ;
return ;
}
if ( pGC->stipple->drawable.depth != 1 ) {
ErrorF("ppcStippleFS: bad depth\ntype = %d, depth = %d\n",
pDrawable->type, pGC->stipple->drawable.depth ) ;
return ;
}
if ( ( alu = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.alu ) == GXnoop )
return ;
SETSPANPTRS( nInit, n, pwidthInit, pwidthFree, pptInit,
pptFree, pwidth, ppt, fSorted ) ;
pm = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.planemask ;
fg = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.fgPixel ;
xSrc = pGC->patOrg.x + pDrawable->x ;
ySrc = pGC->patOrg.y + pDrawable->y ;
pTile = pGC->stipple ;
for ( ; n-- ; ppt++, pwidth++ )
xf4bppFillStipple( (WindowPtr)pDrawable, pTile, fg, alu, pm,
ppt->x, ppt->y, *pwidth, 1, xSrc, ySrc ) ;
DEALLOCATE_LOCAL( pptFree ) ;
DEALLOCATE_LOCAL( pwidthFree ) ;
return ;
}
void
xf4bppOpStippleWindowFS( pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted )
DrawablePtr pDrawable ;
register GC *pGC ;
int nInit ;
DDXPointPtr pptInit ;
int *pwidthInit ;
int fSorted ;
{
register DDXPointPtr ppt ;
register int *pwidth ;
int n ;
int xSrc ;
int ySrc ;
unsigned long int pm ;
unsigned long int fg, bg ;
int alu ;
int *pwidthFree ;
DDXPointPtr pptFree ;
TRACE( ( "xf4bppOpStippleWindowFS(pDrawable=0x%x,pGC=0x%x,nInit=%d,pptInit=0x%x,pwidthInit=0x%x,fSorted=%d)\n",
pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted ) ) ;
if ( pGC->stipple->drawable.depth != 1 ) {
ErrorF( "xf4bppOpStippleWindowFS: bad depth\ntype = %d, depth = %d\n",
pDrawable->type, pGC->stipple->drawable.depth ) ;
return ;
}
if ( ( alu = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.alu ) == GXnoop )
return ;
SETSPANPTRS( nInit, n, pwidthInit, pwidthFree, pptInit,
pptFree, pwidth, ppt, fSorted ) ;
pm = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.planemask ;
fg = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.fgPixel ;
bg = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.bgPixel ;
xSrc = pGC->patOrg.x + pDrawable->x ;
ySrc = pGC->patOrg.y + pDrawable->y ;
for ( ; n-- ; ppt++, pwidth++ )
xf4bppOpaqueStipple( (WindowPtr)pDrawable, pGC->stipple, fg, bg, alu, pm,
ppt->x, ppt->y, *pwidth, 1, xSrc, ySrc ) ;
DEALLOCATE_LOCAL( pptFree ) ;
DEALLOCATE_LOCAL( pwidthFree ) ;
return ;
}
void
xf4bppTileWindowFS( pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted )
DrawablePtr pDrawable ;
register GC *pGC ;
int nInit ;
DDXPointPtr pptInit ;
int *pwidthInit ;
int fSorted ;
{
register DDXPointPtr ppt ;
register int *pwidth ;
int n ;
unsigned char pm ;
int alu ;
int xSrc ;
int ySrc ;
int *pwidthFree ;
DDXPointPtr pptFree ;
TRACE( ( "xf4bppTileWindowFS(pDrawable=0x%x,pGC=0x%x,nInit=%d,pptInit=0x%x,pwidthInit=0x%x,fSorted=%d)\n",
pDrawable, pGC, nInit, pptInit, pwidthInit, fSorted ) ) ;
if ( ( alu = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.alu ) == GXnoop )
return ;
SETSPANPTRS( nInit, n, pwidthInit, pwidthFree, pptInit,
pptFree, pwidth, ppt, fSorted ) ;
xSrc = pGC->patOrg.x + pDrawable->x ;
ySrc = pGC->patOrg.y + pDrawable->y ;
pm = ( (ppcPrivGC *) pGC->devPrivates[mfbGetGCPrivateIndex()].ptr )->colorRrop.planemask ;
for ( ; n-- ; ppt++, pwidth++ )
xf4bppTileRect( (WindowPtr)pDrawable, pGC->tile.pixmap, alu, pm,
ppt->x, ppt->y, *pwidth, 1, xSrc, ySrc ) ;
DEALLOCATE_LOCAL( pptFree ) ;
DEALLOCATE_LOCAL( pwidthFree ) ;
return ;
}