hw/kdrive/ati/radeon_composite.c Support linear filtering
Change how touch screens work -- make them just another 'mouse' device. Add
    unfinished (and unused) code to accelerate tiled fills.
			
			
This commit is contained in:
		
							parent
							
								
									70d3a9192f
								
							
						
					
					
						commit
						db2c83551c
					
				| 
						 | 
				
			
			@ -164,7 +164,7 @@ R100TextureSetup(PicturePtr pPict, PixmapPtr pPix, int unit)
 | 
			
		|||
{
 | 
			
		||||
	ATIScreenInfo *atis = accel_atis;
 | 
			
		||||
	KdScreenPriv(pPix->drawable.pScreen);
 | 
			
		||||
	CARD32 txformat, txoffset, txpitch;
 | 
			
		||||
	CARD32 txfilter, txformat, txoffset, txpitch;
 | 
			
		||||
	int w = pPict->pDrawable->width;
 | 
			
		||||
	int h = pPict->pDrawable->height;
 | 
			
		||||
	int i;
 | 
			
		||||
| 
						 | 
				
			
			@ -196,10 +196,24 @@ R100TextureSetup(PicturePtr pPict, PixmapPtr pPix, int unit)
 | 
			
		|||
	if ((txpitch & 0x1f) != 0)
 | 
			
		||||
		ATI_FALLBACK(("Bad texture pitch 0x%x\n", txpitch));
 | 
			
		||||
 | 
			
		||||
	switch (pPict->filter) {
 | 
			
		||||
	case PictFilterNearest:
 | 
			
		||||
		txfilter = (RADEON_MAG_FILTER_NEAREST |
 | 
			
		||||
			    RADEON_MIN_FILTER_NEAREST);
 | 
			
		||||
		break;
 | 
			
		||||
	case PictFilterBilinear:
 | 
			
		||||
		txfilter = (RADEON_MAG_FILTER_LINEAR |
 | 
			
		||||
			    RADEON_MIN_FILTER_LINEAR);
 | 
			
		||||
		break;
 | 
			
		||||
	default:
 | 
			
		||||
		ATI_FALLBACK (("Bad filter 0x%x\n", pPict->filter));
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	BEGIN_DMA(7);
 | 
			
		||||
	if (unit == 0) {
 | 
			
		||||
		OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXFILTER_0, 3));
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXFILTER_0, 0);
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXFILTER_0, txfilter);
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXFORMAT_0, txformat);
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXOFFSET_0, txoffset);
 | 
			
		||||
		OUT_RING(DMA_PACKET0(RADEON_REG_PP_TEX_SIZE_0, 2));
 | 
			
		||||
| 
						 | 
				
			
			@ -209,7 +223,7 @@ R100TextureSetup(PicturePtr pPict, PixmapPtr pPix, int unit)
 | 
			
		|||
		OUT_RING_REG(RADEON_REG_PP_TEX_PITCH_0, txpitch - 32);
 | 
			
		||||
	} else {
 | 
			
		||||
		OUT_RING(DMA_PACKET0(RADEON_REG_PP_TXFILTER_1, 3));
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXFILTER_1, 0);
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXFILTER_1, txfilter);
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXFORMAT_1, txformat);
 | 
			
		||||
		OUT_RING_REG(RADEON_REG_PP_TXOFFSET_1, txoffset);
 | 
			
		||||
		OUT_RING(DMA_PACKET0(RADEON_REG_PP_TEX_SIZE_1, 2));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ InitInput (int argc, char **argv)
 | 
			
		|||
{
 | 
			
		||||
    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
    KdInitTouchScreen (&TsFuncs);
 | 
			
		||||
    KdAddMouseDriver (&TsFuncs);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ InitInput (int argc, char **argv)
 | 
			
		|||
{
 | 
			
		||||
    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
    KdInitTouchScreen (&TsFuncs);
 | 
			
		||||
    KdAddMouseDriver (&TsFuncs);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ liblinux_a_SOURCES = 	\
 | 
			
		|||
	klinux.h	\
 | 
			
		||||
	linux.c		\
 | 
			
		||||
	mouse.c		\
 | 
			
		||||
	evdev.c		\
 | 
			
		||||
	ms.c		\
 | 
			
		||||
	ps2.c		\
 | 
			
		||||
	$(TSLIB_C)	\
 | 
			
		||||
| 
						 | 
				
			
			@ -32,6 +33,7 @@ liblinux_a_DEPENDENCIES = \
 | 
			
		|||
	keyboard.c	\
 | 
			
		||||
	linux.c		\
 | 
			
		||||
	mouse.c		\
 | 
			
		||||
	evdev.c		\
 | 
			
		||||
	ms.c		\
 | 
			
		||||
	ps2.c		\
 | 
			
		||||
	$(TSLIB_C)	\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -429,6 +429,8 @@ LinuxFini (void)
 | 
			
		|||
    }
 | 
			
		||||
    memset (&vts, '\0', sizeof (vts));	/* valgrind */
 | 
			
		||||
    ioctl (LinuxConsoleFd, VT_GETSTATE, &vts);
 | 
			
		||||
    if (vtno == vts.v_active)
 | 
			
		||||
    {
 | 
			
		||||
	/*
 | 
			
		||||
	 * Find a legal VT to switch to, either the one we started from
 | 
			
		||||
	 * or the lowest active one that isn't ours
 | 
			
		||||
| 
						 | 
				
			
			@ -452,6 +454,7 @@ LinuxFini (void)
 | 
			
		|||
	    ioctl (LinuxConsoleFd, VT_WAITACTIVE, activeVT);
 | 
			
		||||
	    activeVT = -1;
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
    close(LinuxConsoleFd);                /* make the vt-manager happy */
 | 
			
		||||
    fd = open ("/dev/tty0", O_RDWR|O_NDELAY, 0);
 | 
			
		||||
    if (fd >= 0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,6 +41,8 @@ InitCard (char *name)
 | 
			
		|||
	KdCardInfoAdd (&mach64Funcs, &attr, 0);
 | 
			
		||||
    else if (LinuxFindPci (0x1002, 0x4c46, 0, &attr))
 | 
			
		||||
	KdCardInfoAdd (&mach64Funcs, &attr, 0);
 | 
			
		||||
    else if (LinuxFindPci (0x1002, 0x4c42, 0, &attr))
 | 
			
		||||
	KdCardInfoAdd (&mach64Funcs, &attr, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,37 @@
 | 
			
		|||
2005-02-08  Keith Packard  <keithp@keithp.com>
 | 
			
		||||
 | 
			
		||||
	reviewed by: <delete if not using a buddy>
 | 
			
		||||
 | 
			
		||||
	* ChangeLog:
 | 
			
		||||
	* neomagicstub.c: (InitInput):
 | 
			
		||||
 | 
			
		||||
2005-02-08  Keith Packard  <keithp@keithp.com>
 | 
			
		||||
 | 
			
		||||
	reviewed by: <delete if not using a buddy>
 | 
			
		||||
 | 
			
		||||
	* ChangeLog:
 | 
			
		||||
	* neomagicstub.c: (InitInput):
 | 
			
		||||
 | 
			
		||||
2005-02-08  Keith Packard  <keithp@keithp.com>
 | 
			
		||||
 | 
			
		||||
	reviewed by: <delete if not using a buddy>
 | 
			
		||||
 | 
			
		||||
	* ChangeLog:
 | 
			
		||||
	* neomagicstub.c: (InitInput):
 | 
			
		||||
 | 
			
		||||
2005-02-08  Keith Packard  <keithp@keithp.com>
 | 
			
		||||
 | 
			
		||||
	reviewed by: <delete if not using a buddy>
 | 
			
		||||
 | 
			
		||||
	* ChangeLog:
 | 
			
		||||
	* neomagicstub.c: (InitInput):
 | 
			
		||||
 | 
			
		||||
2005-02-08  Keith Packard  <keithp@keithp.com>
 | 
			
		||||
 | 
			
		||||
	reviewed by: <delete if not using a buddy>
 | 
			
		||||
 | 
			
		||||
	* neomagicstub.c: (InitInput):
 | 
			
		||||
 | 
			
		||||
2004-07-21  Phil Blundell  <pb@nexus.co.uk>
 | 
			
		||||
 | 
			
		||||
	* Makefile.am (Xneomagic_LDADD): Include -lts if appropriate.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ InitInput (int argc, char **argv)
 | 
			
		|||
{
 | 
			
		||||
    KdInitInput (&LinuxMouseFuncs, &LinuxKeyboardFuncs);
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
    KdInitTouchScreen (&TsFuncs);
 | 
			
		||||
    KdAddMouseDriver (&TsFuncs);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -384,6 +384,53 @@ kaaDrawableIsOffscreen (DrawablePtr pDrawable)
 | 
			
		|||
    return kaaPixmapIsOffscreen (pPixmap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
static void
 | 
			
		||||
kaaFillTiled(int	dst_x,
 | 
			
		||||
	     int	dst_y,
 | 
			
		||||
	     int	width,
 | 
			
		||||
	     int	height,
 | 
			
		||||
	     int	src_x,
 | 
			
		||||
	     int	src_y,
 | 
			
		||||
	     int	src_width,
 | 
			
		||||
	     int	src_height,
 | 
			
		||||
	     void	(*Copy) (int	srcX,
 | 
			
		||||
				 int	srcY,
 | 
			
		||||
				 int	dstX,
 | 
			
		||||
				 int	dstY,
 | 
			
		||||
				 int	width,
 | 
			
		||||
				 int	height))
 | 
			
		||||
{
 | 
			
		||||
    modulus (src_x, src_width, src_x);
 | 
			
		||||
    modulus (src_y, src_height, src_y);
 | 
			
		||||
    
 | 
			
		||||
    while (height)
 | 
			
		||||
    {
 | 
			
		||||
	int dst_x_tmp = dst_x;
 | 
			
		||||
	int src_x_tmp = src_x;
 | 
			
		||||
	int width_tmp = width;
 | 
			
		||||
	int height_left = src_height - src_y;
 | 
			
		||||
	int height_this = min (height, height_left);
 | 
			
		||||
	
 | 
			
		||||
	while (width_tmp)
 | 
			
		||||
	{
 | 
			
		||||
	    int width_left = src_width - src_x_tmp;
 | 
			
		||||
	    int width_this = min (width_tmp, width_left);
 | 
			
		||||
 | 
			
		||||
	    (*Copy) (src_x_tmp, src_y,
 | 
			
		||||
		     dst_x_tmp, dst_y,
 | 
			
		||||
		     width_this, height_this);
 | 
			
		||||
 | 
			
		||||
	    width_tmp -= width_this;
 | 
			
		||||
	    dst_x_tmp += width_this;
 | 
			
		||||
	}
 | 
			
		||||
	height -= height_this;
 | 
			
		||||
	dst_y += height_this;
 | 
			
		||||
	src_y = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
kaaFillSpans(DrawablePtr pDrawable, GCPtr pGC, int n, 
 | 
			
		||||
	     DDXPointPtr ppt, int *pwidth, int fSorted)
 | 
			
		||||
| 
						 | 
				
			
			@ -956,6 +1003,18 @@ kaaFillRegionSolid (DrawablePtr	pDrawable,
 | 
			
		|||
    kaaDrawableDirty (pDrawable);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
static void
 | 
			
		||||
kaaFillRegionTiled (DrawablePtr pDrawable,
 | 
			
		||||
		    RegionPtr	pRegion,
 | 
			
		||||
		    Pixmap	pTile)
 | 
			
		||||
{
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
	KdCheckSync
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
kaaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -977,6 +1036,11 @@ kaaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
 | 
			
		|||
	case BackgroundPixel:
 | 
			
		||||
	    kaaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->background.pixel);
 | 
			
		||||
	    return;
 | 
			
		||||
#if 0	    
 | 
			
		||||
	case BackgroundPixmap:
 | 
			
		||||
	    kaaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->background.pixmap);
 | 
			
		||||
	    return;
 | 
			
		||||
#endif
 | 
			
		||||
    	}
 | 
			
		||||
    	break;
 | 
			
		||||
    case PW_BORDER:
 | 
			
		||||
| 
						 | 
				
			
			@ -985,6 +1049,13 @@ kaaPaintWindow(WindowPtr pWin, RegionPtr pRegion, int what)
 | 
			
		|||
	    kaaFillRegionSolid((DrawablePtr)pWin, pRegion, pWin->border.pixel);
 | 
			
		||||
	    return;
 | 
			
		||||
	}
 | 
			
		||||
#if 0
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
	    kaaFillRegionTiled((DrawablePtr)pWin, pRegion, pWin->border.pixmap);
 | 
			
		||||
	    return;
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
	break;
 | 
			
		||||
    }
 | 
			
		||||
    KdCheckPaintWindow (pWin, pRegion, what);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
 * $RCSId$
 | 
			
		||||
 * $RCSId: $
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright © 2001 Keith Packard
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -708,6 +708,9 @@ KdScreenInfoDispose (KdScreenInfo *si);
 | 
			
		|||
void
 | 
			
		||||
KdInitInput(KdMouseFuncs *, KdKeyboardFuncs *);
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
KdAddMouseDriver(KdMouseFuncs *);
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
KdAllocInputType (void);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -722,11 +725,6 @@ KdRegisterFdEnableDisable (int fd,
 | 
			
		|||
void
 | 
			
		||||
KdUnregisterFds (int type, Bool do_close);
 | 
			
		||||
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
void
 | 
			
		||||
KdInitTouchScreen(KdMouseFuncs *pTsFuncs);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
KdEnqueueKeyboardEvent(unsigned char	scan_code,
 | 
			
		||||
		       unsigned char	is_up);
 | 
			
		||||
| 
						 | 
				
			
			@ -778,6 +776,7 @@ void
 | 
			
		|||
ProcessInputEvents (void);
 | 
			
		||||
 | 
			
		||||
extern KdMouseFuncs	LinuxMouseFuncs;
 | 
			
		||||
extern KdMouseFuncs	LinuxEvdevFuncs;
 | 
			
		||||
extern KdMouseFuncs	Ps2MouseFuncs;
 | 
			
		||||
extern KdMouseFuncs	BusMouseFuncs;
 | 
			
		||||
extern KdMouseFuncs	MsMouseFuncs;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,10 @@
 | 
			
		|||
 | 
			
		||||
static DeviceIntPtr	pKdKeyboard, pKdPointer;
 | 
			
		||||
 | 
			
		||||
static KdMouseFuncs	*kdMouseFuncs;
 | 
			
		||||
#define MAX_MOUSE_DRIVERS   4
 | 
			
		||||
 | 
			
		||||
static KdMouseFuncs	*kdMouseFuncs[MAX_MOUSE_DRIVERS];
 | 
			
		||||
static int		kdNMouseFuncs;
 | 
			
		||||
static KdKeyboardFuncs	*kdKeyboardFuncs;
 | 
			
		||||
static int		kdBellPitch;
 | 
			
		||||
static int		kdBellDuration;
 | 
			
		||||
| 
						 | 
				
			
			@ -58,10 +61,6 @@ static KdMouseMatrix	kdMouseMatrix = {
 | 
			
		|||
     { 0, 1, 0 } }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
static KdMouseFuncs	*kdTsFuncs;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
int		kdMouseButtonCount;
 | 
			
		||||
int		kdMinScanCode;
 | 
			
		||||
int		kdMaxScanCode;
 | 
			
		||||
| 
						 | 
				
			
			@ -327,12 +326,8 @@ KdMouseProc(DeviceIntPtr pDevice, int onoff)
 | 
			
		|||
    case DEVICE_ON:
 | 
			
		||||
	pDev->on = TRUE;
 | 
			
		||||
	pKdPointer = pDevice;
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
	if (kdTsFuncs)
 | 
			
		||||
	    (*kdTsFuncs->Init) ();
 | 
			
		||||
#endif
 | 
			
		||||
	if (kdMouseFuncs)
 | 
			
		||||
	    (*kdMouseFuncs->Init) ();
 | 
			
		||||
	for (i = 0; i < kdNMouseFuncs; i++)
 | 
			
		||||
	    (*kdMouseFuncs[i]->Init)();
 | 
			
		||||
	break;
 | 
			
		||||
    case DEVICE_OFF:
 | 
			
		||||
    case DEVICE_CLOSE:
 | 
			
		||||
| 
						 | 
				
			
			@ -340,12 +335,8 @@ KdMouseProc(DeviceIntPtr pDevice, int onoff)
 | 
			
		|||
	{
 | 
			
		||||
	    pDev->on = FALSE;
 | 
			
		||||
	    pKdPointer = 0;
 | 
			
		||||
	    if (kdMouseFuncs)
 | 
			
		||||
		(*kdMouseFuncs->Fini) ();
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
	    if (kdTsFuncs)
 | 
			
		||||
		(*kdTsFuncs->Fini) ();
 | 
			
		||||
#endif
 | 
			
		||||
	    for (i = 0; i < kdNMouseFuncs; i++)
 | 
			
		||||
		(*kdMouseFuncs[i]->Fini) ();
 | 
			
		||||
	}
 | 
			
		||||
	break;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -578,6 +569,13 @@ KdInitModMap (void)
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
KdAddMouseDriver(KdMouseFuncs *pMouseFuncs)
 | 
			
		||||
{
 | 
			
		||||
    if (kdNMouseFuncs < MAX_MOUSE_DRIVERS)
 | 
			
		||||
	kdMouseFuncs[kdNMouseFuncs++] = pMouseFuncs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
KdInitInput(KdMouseFuncs    *pMouseFuncs,
 | 
			
		||||
	    KdKeyboardFuncs *pKeyboardFuncs)
 | 
			
		||||
| 
						 | 
				
			
			@ -594,7 +592,8 @@ KdInitInput(KdMouseFuncs    *pMouseFuncs,
 | 
			
		|||
	    kdMouseButtonCount = mi->nbutton;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    kdMouseFuncs = pMouseFuncs;
 | 
			
		||||
    kdNMouseFuncs = 0;
 | 
			
		||||
    KdAddMouseDriver (pMouseFuncs);
 | 
			
		||||
    kdKeyboardFuncs = pKeyboardFuncs;
 | 
			
		||||
    memset (kdKeyState, '\0', sizeof (kdKeyState));
 | 
			
		||||
    if (kdKeyboardFuncs)
 | 
			
		||||
| 
						 | 
				
			
			@ -629,14 +628,6 @@ KdInitInput(KdMouseFuncs    *pMouseFuncs,
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef TOUCHSCREEN
 | 
			
		||||
void
 | 
			
		||||
KdInitTouchScreen(KdMouseFuncs *pTsFuncs)
 | 
			
		||||
{
 | 
			
		||||
    kdTsFuncs = pTsFuncs;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Middle button emulation state machine
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue