diff options
| author | Michel Dänzer <michel@daenzer.net> | 2005-11-29 13:13:34 +0000 | 
|---|---|---|
| committer | Michel Dänzer <michel@daenzer.net> | 2005-11-29 13:13:34 +0000 | 
| commit | 9790e641ef24859833c01a1fa7004a1c2b73ddd1 (patch) | |
| tree | 61e97ca28db1dc16ae0cc164b93cc306bebfa3e6 | |
| parent | 58f45fa44deeb0277154a2f193d33824bb4c1c85 (diff) | |
If the DDX driver didn't reserve any video RAM for textures, fall back to
using only GART memory for textures instead of segfaulting in the texture
management code. (Bug 5115)
| -rw-r--r-- | src/mesa/drivers/dri/r128/r128_screen.c | 16 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/radeon/radeon_screen.c | 19 | 
2 files changed, 25 insertions, 10 deletions
| diff --git a/src/mesa/drivers/dri/r128/r128_screen.c b/src/mesa/drivers/dri/r128/r128_screen.c index c91f9fdbf7..4f1b20aadd 100644 --- a/src/mesa/drivers/dri/r128/r128_screen.c +++ b/src/mesa/drivers/dri/r128/r128_screen.c @@ -198,11 +198,19 @@ r128CreateScreen( __DRIscreenPrivate *sPriv )     r128Screen->depthPitch	= r128DRIPriv->depthPitch;     r128Screen->spanOffset	= r128DRIPriv->spanOffset; -   r128Screen->texOffset[R128_LOCAL_TEX_HEAP] = r128DRIPriv->textureOffset; -   r128Screen->texSize[R128_LOCAL_TEX_HEAP] = r128DRIPriv->textureSize; -   r128Screen->logTexGranularity[R128_LOCAL_TEX_HEAP] = r128DRIPriv->log2TexGran; +   if ( r128DRIPriv->textureSize == 0 ) { +      r128Screen->texOffset[R128_LOCAL_TEX_HEAP] = +	 r128DRIPriv->agpTexOffset + R128_AGP_TEX_OFFSET; +      r128Screen->texSize[R128_LOCAL_TEX_HEAP] = r128DRIPriv->agpTexMapSize; +      r128Screen->logTexGranularity[R128_LOCAL_TEX_HEAP] = +	 r128DRIPriv->log2AGPTexGran; +   } else { +      r128Screen->texOffset[R128_LOCAL_TEX_HEAP] = r128DRIPriv->textureOffset; +      r128Screen->texSize[R128_LOCAL_TEX_HEAP] = r128DRIPriv->textureSize; +      r128Screen->logTexGranularity[R128_LOCAL_TEX_HEAP] = r128DRIPriv->log2TexGran; +   } -   if ( r128Screen->IsPCI ) { +   if ( !r128Screen->agpTextures.map || r128DRIPriv->textureSize == 0 ) {        r128Screen->numTexHeaps = R128_NR_TEX_HEAPS - 1;        r128Screen->texOffset[R128_AGP_TEX_HEAP] = 0;        r128Screen->texSize[R128_AGP_TEX_HEAP] = 0; diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c index 213af6d34f..d92c2a7831 100644 --- a/src/mesa/drivers/dri/radeon/radeon_screen.c +++ b/src/mesa/drivers/dri/radeon/radeon_screen.c @@ -617,13 +617,20 @@ radeonCreateScreen( __DRIscreenPrivate *sPriv )     screen->depthHasSurface = ((sPriv->ddxMajor > 4) &&        (screen->chip_flags & RADEON_CHIPSET_TCL)); -   screen->texOffset[RADEON_LOCAL_TEX_HEAP] = dri_priv->textureOffset -				       + screen->fbLocation; -   screen->texSize[RADEON_LOCAL_TEX_HEAP] = dri_priv->textureSize; -   screen->logTexGranularity[RADEON_LOCAL_TEX_HEAP] = -      dri_priv->log2TexGran; +   if ( dri_priv->textureSize == 0 ) { +      screen->texOffset[RADEON_LOCAL_TEX_HEAP] = screen->gart_texture_offset; +      screen->texSize[RADEON_LOCAL_TEX_HEAP] = dri_priv->gartTexMapSize; +      screen->logTexGranularity[RADEON_LOCAL_TEX_HEAP] = +	 dri_priv->log2GARTTexGran; +   } else { +      screen->texOffset[RADEON_LOCAL_TEX_HEAP] = dri_priv->textureOffset +				               + screen->fbLocation; +      screen->texSize[RADEON_LOCAL_TEX_HEAP] = dri_priv->textureSize; +      screen->logTexGranularity[RADEON_LOCAL_TEX_HEAP] = +	 dri_priv->log2TexGran; +   } -   if ( !screen->gartTextures.map +   if ( !screen->gartTextures.map || dri_priv->textureSize == 0  	|| getenv( "RADEON_GARTTEXTURING_FORCE_DISABLE" ) ) {        screen->numTexHeaps = RADEON_NR_TEX_HEAPS - 1;        screen->texOffset[RADEON_GART_TEX_HEAP] = 0; | 
