summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoragd5f <agd5f>2004-01-14 18:42:45 +0000
committeragd5f <agd5f>2004-01-14 18:42:45 +0000
commitee097c1058e34a9666b3f1bc1bd87660d808484c (patch)
tree0c8e97f521a00a0bbe85b3cb7ba26bc3fb453509
parent98fac59a9b9c02a61264760931ec7a86868f8311 (diff)
Fix pitch for savagespan when 2D is in linear mode.
-rw-r--r--xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dri.c7
-rw-r--r--xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c9
-rw-r--r--xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h3
3 files changed, 16 insertions, 3 deletions
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dri.c b/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dri.c
index bc4fc7b40..564a75d8a 100644
--- a/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dri.c
+++ b/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_dri.c
@@ -1432,7 +1432,8 @@ Bool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen )
if(pSAVAGEDRI->width > 1024)
shift = 1;
- pSAVAGEDRI->aperturePitch = psav->ulAperturePitch;
+ /* pSAVAGEDRI->aperturePitch = psav->ulAperturePitch; */
+ pSAVAGEDRI->aperturePitch = psav->ul3DAperturePitch;
}
{
@@ -1449,10 +1450,10 @@ Bool SAVAGEDRIFinishScreenInit( ScreenPtr pScreen )
|| (psav->Chipset == S3_SAVAGE3D)) {
if(pSAVAGEDRI->cpp == 2)
{
- value |= ((psav->lDelta / 4) >> 5) << 24;
+ value |= ((psav->l3DDelta / 4) >> 5) << 24; /* I assume psav->l3DDelta for 3D */
value |= 2<<30;
} else {
- value |= ((psav->lDelta / 4) >> 5) << 24;
+ value |= ((psav->l3DDelta / 4) >> 5) << 24; /* I assume psav->l3DDelta for 3D */
value |= 3<<30;
}
} else {
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c b/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c
index 2021227d1..1701cd597 100644
--- a/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c
+++ b/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c
@@ -2863,6 +2863,15 @@ void SavageEnableMode(ScrnInfoPtr pScrn,BOOL bEnable)
psav->lDelta = ((psav->lDelta + 31) >> 5) << 5;
psav->ulAperturePitch = psav->lDelta;
}
+
+ /* if you are using linear mode for 2D, 3D still needs to be tiled, linear AperturePitch
+ seems to be wrong for savagespan */
+ if (psav->Chipset == S3_SAVAGE_MX)
+ psav->ul3DAperturePitch = 0x2000;
+ else
+ psav->ul3DAperturePitch = GetTileAperturePitch(pScrn->virtualX,pScrn->bitsPerPixel);
+
+ psav->l3DDelta = (((pScrn->virtualX * (pScrn->bitsPerPixel >> 3)) + 127) >> 7) << 7;
psav->Bpp = pScrn->bitsPerPixel >> 3;
psav->cxMemory = psav->lDelta / (psav->Bpp);
diff --git a/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h b/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h
index 7af6de320..7aa7d55b0 100644
--- a/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h
+++ b/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h
@@ -400,6 +400,9 @@ typedef struct _Savage {
Bool bTiled;
int lDelta;
int ulAperturePitch; /* aperture pitch */
+
+ int l3DDelta;
+ int ul3DAperturePitch; /* pitch for 3D */
/*
* cxMemory is number of pixels across screen width
* cyMemory is number of scanlines in available adapter memory.