diff options
-rw-r--r-- | src/mesa/drivers/dri/common/xmlpool.h | 17 | ||||
-rw-r--r-- | src/mesa/drivers/dri/savage/savage_xmesa.c | 20 |
2 files changed, 35 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/common/xmlpool.h b/src/mesa/drivers/dri/common/xmlpool.h index 789d14fe2a1..29b5bf597d9 100644 --- a/src/mesa/drivers/dri/common/xmlpool.h +++ b/src/mesa/drivers/dri/common/xmlpool.h @@ -293,6 +293,23 @@ DRI_CONF_OPT_BEGIN_V(texture_units,int,def, # min ":" # max ) \ DRI_CONF_DESC(de,"Anzahl der Textureinheiten") \ DRI_CONF_OPT_END +#define DRI_CONF_TEXTURE_HEAPS_ALL 0 +#define DRI_CONF_TEXTURE_HEAPS_CARD 1 +#define DRI_CONF_TEXTURE_HEAPS_GART 2 +#define DRI_CONF_TEXTURE_HEAPS(def) \ +DRI_CONF_OPT_BEGIN_V(texture_heaps,enum,def,"0:2") \ + DRI_CONF_DESC_BEGIN(en,"Used types of texture memory") \ + DRI_CONF_ENUM(0,"All available") \ + DRI_CONF_ENUM(1,"Only card memory (if available)") \ + DRI_CONF_ENUM(2,"Only GART (AGP/PCIE) memory (if available)") \ + DRI_CONF_DESC_END \ + DRI_CONF_DESC_BEGIN(de,"Verwendete Texturspeicherarten") \ + DRI_CONF_ENUM(0,"Alle verfügbaren") \ + DRI_CONF_ENUM(1,"Nur Grafikspeicher (falls vorhanden)") \ + DRI_CONF_ENUM(2,"Nur GART (AGP/PCIE) Speicher (falls vorhanden)") \ + DRI_CONF_DESC_END \ +DRI_CONF_OPT_END + /* Options for features that are not done in hardware by the driver (like GL_ARB_vertex_program On cards where there is no documentation (r200) or on rasterization-only hardware). */ #define DRI_CONF_SECTION_SOFTWARE \ diff --git a/src/mesa/drivers/dri/savage/savage_xmesa.c b/src/mesa/drivers/dri/savage/savage_xmesa.c index 1ce8a4b88fd..9abb5584714 100644 --- a/src/mesa/drivers/dri/savage/savage_xmesa.c +++ b/src/mesa/drivers/dri/savage/savage_xmesa.c @@ -83,12 +83,13 @@ DRI_CONF_BEGIN DRI_CONF_MAX_TEXTURE_UNITS(2,1,2) SAVAGE_ENABLE_VDMA(true) SAVAGE_ENABLE_FASTPATH(true) + DRI_CONF_TEXTURE_HEAPS(DRI_CONF_TEXTURE_HEAPS_ALL) DRI_CONF_SECTION_END DRI_CONF_SECTION_DEBUG DRI_CONF_NO_RAST(false) DRI_CONF_SECTION_END DRI_CONF_END; -static const GLuint __driNConfigOptions = 7; +static const GLuint __driNConfigOptions = 8; #ifdef USE_NEW_INTERFACE static PFNGLXCREATECONTEXTMODES create_context_modes = NULL; @@ -295,6 +296,7 @@ savageCreateContext( const __GLcontextModes *mesaVis, savageScreenPrivate *savageScreen = (savageScreenPrivate *)sPriv->private; drm_savage_sarea_t *saPriv=(drm_savage_sarea_t *)(((char*)sPriv->pSAREA)+ savageScreen->sarea_priv_offset); + int textureSize[SAVAGE_NR_TEX_HEAPS]; int i; imesa = (savageContextPtr)Xcalloc(sizeof(savageContext), 1); if (!imesa) { @@ -367,11 +369,25 @@ savageCreateContext( const __GLcontextModes *mesaVis, (void) memset( imesa->textureHeaps, 0, sizeof( imesa->textureHeaps ) ); make_empty_list( & imesa->swapped ); + textureSize[SAVAGE_CARD_HEAP] = savageScreen->textureSize[SAVAGE_CARD_HEAP]; + textureSize[SAVAGE_AGP_HEAP] = savageScreen->textureSize[SAVAGE_AGP_HEAP]; imesa->lastTexHeap = savageScreen->texVirtual[SAVAGE_AGP_HEAP] ? 2 : 1; + switch(driQueryOptioni (&imesa->optionCache, "texture_heaps")) { + case DRI_CONF_TEXTURE_HEAPS_CARD: /* only use card memory, if available */ + if (textureSize[SAVAGE_CARD_HEAP]) + imesa->lastTexHeap = 1; + break; + case DRI_CONF_TEXTURE_HEAPS_GART: /* only use gart memory, if available */ + if (imesa->lastTexHeap == 2 && textureSize[SAVAGE_AGP_HEAP]) + textureSize[SAVAGE_CARD_HEAP] = 0; + break; + /*default: Nothing to do, use all available memory. */ + } + for (i = 0; i < imesa->lastTexHeap; i++) { imesa->textureHeaps[i] = driCreateTextureHeap( i, imesa, - savageScreen->textureSize[i], + textureSize[i], 11, /* 2^11 = 2k alignment */ SAVAGE_NR_TEX_REGIONS, (drmTextureRegionPtr)imesa->sarea->texList[i], |