summaryrefslogtreecommitdiff
path: root/src/savage_accel.c
diff options
context:
space:
mode:
authorFelix Kuehling <fxkuehl@gmx.de>2005-01-01 20:32:23 +0000
committerFelix Kuehling <fxkuehl@gmx.de>2005-01-01 20:32:23 +0000
commit8fad99f52106c64bf7f5c88b2246313338286f54 (patch)
tree3ad68ac2503f71a4a966243ee7f4e22b123fbe20 /src/savage_accel.c
parentd0e9c3ad1cb9babbe841926c9a373ebe40dfe62c (diff)
Updates to support the new Savage DRM driver (version 2.0.x) which was just
committed to DRM CVS. Cleaned up the interface to the DRI driver. Bumped the Savage DDX version to 2.0.0 due to incompatible changes in that interface.
Diffstat (limited to 'src/savage_accel.c')
-rw-r--r--src/savage_accel.c69
1 files changed, 59 insertions, 10 deletions
diff --git a/src/savage_accel.c b/src/savage_accel.c
index 6f0d321..bce0b6c 100644
--- a/src/savage_accel.c
+++ b/src/savage_accel.c
@@ -309,7 +309,12 @@ SavageInitialize2DEngine(ScrnInfoPtr pScrn)
OUTREG(0x48C14, (psav->cobOffset >> 11) | (psav->cobIndex << 29)); /* tim */
/*OUTREG(S3_OVERFLOW_BUFFER, psav->cobOffset >> 11 | 0xE0000000);*/ /* S3 */
/* Program shadow status update. */
- OUTREG(0x48C10, 0x78207220);
+ {
+ unsigned long thresholds = ((psav->bciThresholdLo & 0xffff) << 16) |
+ (psav->bciThresholdHi & 0xffff);
+ OUTREG(0x48C10, thresholds);
+ /* used to be 0x78207220 */
+ }
if( psav->ShadowStatus )
{
OUTREG(0x48C0C, psav->ShadowPhysical | 1 );
@@ -336,7 +341,12 @@ SavageInitialize2DEngine(ScrnInfoPtr pScrn)
OUTREG(0x48C14, (psav->cobOffset >> 11) | (psav->cobIndex << 29));
}
/* Program shadow status update */ /* AGD: what should this be? */
- OUTREG(0x48C10, 0x00700040); /* tim */
+ {
+ unsigned long thresholds = ((psav->bciThresholdHi & 0x1fffe0) << 11) |
+ ((psav->bciThresholdLo & 0x1fffe0) >> 5);
+ OUTREG(0x48C10, thresholds);
+ }
+ /*OUTREG(0x48C10, 0x00700040);*/ /* tim */
/*OUTREG(0x48C10, 0x0e440f04L);*/ /* S3 */
if( psav->ShadowStatus )
{
@@ -1677,10 +1687,11 @@ SavageInitAccel(ScreenPtr pScreen)
int widthBytes = psav->lDelta;
int bufferSize = ((pScrn->virtualY * widthBytes + SAVAGE_BUFFER_ALIGN)
& ~SAVAGE_BUFFER_ALIGN);
- int tiledwidthBytes,tiledBufferSize;
+ int tiledWidth, tiledwidthBytes,tiledBufferSize;
pSAVAGEDRIServer->frontbufferSize = bufferSize;
tiledwidthBytes = psav->lDelta;
+ tiledWidth = tiledwidthBytes / cpp;
if (cpp == 2) {
tiledBufferSize = ((pScrn->virtualX+63)/64)*((pScrn->virtualY+15)/16)
@@ -1731,11 +1742,11 @@ SavageInitAccel(ScreenPtr pScreen)
0x200000;
xf86DrvMsg( pScrn->scrnIndex, X_INFO,
- "videoRambytes:0x%08lx \n",
+ "videoRambytes:0x%08x \n",
psav->videoRambytes);
xf86DrvMsg( pScrn->scrnIndex, X_INFO,
- "textureSize:0x%08lx \n",
+ "textureSize:0x%08x \n",
pSAVAGEDRIServer->textureSize);
/* If that gives us less than half the available memory, let's
@@ -1768,7 +1779,7 @@ SavageInitAccel(ScreenPtr pScreen)
}
xf86DrvMsg( pScrn->scrnIndex, X_INFO,
- "textureSize:0x%08lx \n",
+ "textureSize:0x%08x \n",
pSAVAGEDRIServer->textureSize);
/* Reserve space for textures */
@@ -1779,7 +1790,7 @@ SavageInitAccel(ScreenPtr pScreen)
pSAVAGEDRIServer->textureSize) & ~SAVAGE_BUFFER_ALIGN;
xf86DrvMsg( pScrn->scrnIndex, X_INFO,
- "textureOffset:0x%08lx \n",
+ "textureOffset:0x%08x \n",
pSAVAGEDRIServer->textureOffset);
/* Reserve space for the shared depth buffer */
@@ -1792,7 +1803,7 @@ SavageInitAccel(ScreenPtr pScreen)
pSAVAGEDRIServer->depthPitch = tiledwidthBytes;
xf86DrvMsg( pScrn->scrnIndex, X_INFO,
- "depthOffset:0x%08lx,depthPitch:%d\n",
+ "depthOffset:0x%08x,depthPitch:%d\n",
pSAVAGEDRIServer->depthOffset,pSAVAGEDRIServer->depthPitch);
/* Reserve space for the shared back buffer */
@@ -1802,9 +1813,47 @@ SavageInitAccel(ScreenPtr pScreen)
pSAVAGEDRIServer->backPitch = tiledwidthBytes;
xf86DrvMsg( pScrn->scrnIndex, X_INFO,
- "backOffset:0x%08lx,backPitch:%d\n",
+ "backOffset:0x%08x,backPitch:%d\n",
pSAVAGEDRIServer->backOffset,pSAVAGEDRIServer->backPitch);
+ /* Compute bitmap descriptors for front, back and depth buffers */
+ if ((psav->Chipset == S3_TWISTER)
+ || (psav->Chipset == S3_PROSAVAGE)
+ || (psav->Chipset == S3_PROSAVAGEDDR)
+ || (psav->Chipset == S3_SUPERSAVAGE)) {
+ pSAVAGEDRIServer->frontBitmapDesc =
+ BCI_BD_BW_DISABLE | /* block write disabled */
+ (1<<24) | /* destination tile format */
+ (pScrn->bitsPerPixel<<16) | /* bpp */
+ tiledWidth; /* stride */
+ pSAVAGEDRIServer->backBitmapDesc =
+ BCI_BD_BW_DISABLE |
+ (1<<24) |
+ (pScrn->bitsPerPixel<<16) |
+ tiledWidth;
+ pSAVAGEDRIServer->depthBitmapDesc =
+ BCI_BD_BW_DISABLE |
+ (1<<24) |
+ (pScrn->bitsPerPixel<<16) | /* FIXME: allow zpp != cpp */
+ tiledWidth;
+ } else {
+ pSAVAGEDRIServer->frontBitmapDesc =
+ BCI_BD_BW_DISABLE | /* block write disabled */
+ (cpp==2 ? BCI_BD_TILE_16:BCI_BD_TILE_32) | /*16/32 bpp tile format */
+ (pScrn->bitsPerPixel<<16) | /* bpp */
+ tiledWidth; /* stride */
+ pSAVAGEDRIServer->backBitmapDesc =
+ BCI_BD_BW_DISABLE |
+ (cpp==2 ? BCI_BD_TILE_16:BCI_BD_TILE_32) |
+ (pScrn->bitsPerPixel<<16) |
+ tiledWidth;
+ pSAVAGEDRIServer->depthBitmapDesc =
+ BCI_BD_BW_DISABLE |
+ (cpp==2 ? BCI_BD_TILE_16:BCI_BD_TILE_32) |
+ (pScrn->bitsPerPixel<<16) | /* FIXME: allow zpp != cpp */
+ tiledWidth;
+ }
+
/*scanlines = pSAVAGEDRIServer->backOffset / widthBytes - 1;*/
/*if ( scanlines > maxlines ) scanlines = maxlines;*/
/* CR47983, XvMC do not work on system with frame buffer less than 32MB.
@@ -1892,7 +1941,7 @@ SavageInitAccel(ScreenPtr pScreen)
}
if(psav->reserved)
xf86DrvMsg( pScrn->scrnIndex, X_INFO,
- "Reserved for tiled front buffer at offset 0x%08lx ,size:0x%08lx\n",
+ "Reserved for tiled front buffer at offset 0x%08x ,size:0x%08x\n",
psav->reserved->offset, psav->reserved->size);
xf86DrvMsg( pScrn->scrnIndex, X_INFO,