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)
This commit is contained in:
Michel Dänzer 2005-11-29 13:13:34 +00:00
parent 58f45fa44d
commit 9790e641ef
2 changed files with 25 additions and 10 deletions

View file

@ -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;

View file

@ -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;