summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/i830/i830_context.c
diff options
context:
space:
mode:
authorIan Romanick <idr@us.ibm.com>2004-05-07 17:30:31 +0000
committerIan Romanick <idr@us.ibm.com>2004-05-07 17:30:31 +0000
commitd81d2aeca8ee43ddec39a043a5acb4cb44be70ac (patch)
tree954d5e2024d4f7bf68e9eb40d514630fba0bbd0c /src/mesa/drivers/dri/i830/i830_context.c
parentf539860f792feaec69f8033f2b0b86cc2212ee0b (diff)
Add support for the 3rd and 4th texture units. The actual number of
available units is configurable via the texture_units option.
Diffstat (limited to 'src/mesa/drivers/dri/i830/i830_context.c')
-rw-r--r--src/mesa/drivers/dri/i830/i830_context.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/mesa/drivers/dri/i830/i830_context.c b/src/mesa/drivers/dri/i830/i830_context.c
index 97a9f793fc..1c169e1d33 100644
--- a/src/mesa/drivers/dri/i830/i830_context.c
+++ b/src/mesa/drivers/dri/i830/i830_context.c
@@ -64,6 +64,7 @@
#include "utils.h"
+#include "xmlpool.h" /* for symbolic values of enum-type options */
#ifndef I830_DEBUG
int I830_DEBUG = (0);
#endif
@@ -75,9 +76,6 @@ int I830_DEBUG = (0);
#define DRIVER_DATE "20040506"
-const char __driConfigOptions[] = { 0 };
-const GLuint __driNConfigOptions = 0;
-
static const GLubyte *i830DDGetString( GLcontext *ctx, GLenum name )
{
const char * chipset;
@@ -248,6 +246,8 @@ GLboolean i830CreateContext( const __GLcontextModes *mesaVis,
imesa->sarea = saPriv;
imesa->glBuffer = NULL;
+ driParseConfigFiles (&imesa->optionCache, &screen->optionCache,
+ screen->driScrnPriv->myNum, "i830");
(void) memset( imesa->texture_heaps, 0, sizeof( imesa->texture_heaps ) );
make_empty_list( & imesa->swapped );
@@ -263,16 +263,16 @@ GLboolean i830CreateContext( const __GLcontextModes *mesaVis,
sizeof( struct i830_texture_object_t ),
(destroy_texture_object_t *) i830DestroyTexObj );
-
/* Set the maximum texture size small enough that we can guarantee
- * that both texture units can bind a maximal texture and have them
+ * that every texture unit can bind a maximal texture and have them
* in memory at once.
*/
ctx = imesa->glCtx;
- ctx->Const.MaxTextureUnits = 2;
- ctx->Const.MaxTextureImageUnits = 2;
- ctx->Const.MaxTextureCoordUnits = 2;
+ ctx->Const.MaxTextureUnits = driQueryOptioni(&imesa->optionCache,
+ "texture_units");
+ ctx->Const.MaxTextureImageUnits = ctx->Const.MaxTextureUnits;
+ ctx->Const.MaxTextureCoordUnits = ctx->Const.MaxTextureUnits;
/* FIXME: driCalculateMaxTextureLevels assumes that mipmaps are tightly
* FIXME: packed, but they're not in Intel graphics hardware.
@@ -478,16 +478,21 @@ static void i830XMesaWindowMoved( i830ContextPtr imesa )
GLboolean i830UnbindContext(__DRIcontextPrivate *driContextPriv)
{
i830ContextPtr imesa = (i830ContextPtr) driContextPriv->driverPrivate;
+ unsigned i;
+
if (imesa) {
/* Might want to change this so texblend isn't always updated */
imesa->dirty |= (I830_UPLOAD_CTX |
I830_UPLOAD_BUFFERS |
I830_UPLOAD_STIPPLE |
I830_UPLOAD_TEXBLEND0 |
- I830_UPLOAD_TEXBLEND1);
+ I830_UPLOAD_TEXBLEND1 |
+ I830_UPLOAD_TEXBLEND2 |
+ I830_UPLOAD_TEXBLEND3);
- if (imesa->CurrentTexObj[0]) imesa->dirty |= I830_UPLOAD_TEX0;
- if (imesa->CurrentTexObj[1]) imesa->dirty |= I830_UPLOAD_TEX1;
+ for ( i = 0 ; i < imesa->glCtx->Const.MaxTextureUnits ; i++ ) {
+ if (imesa->CurrentTexObj[i]) imesa->dirty |= I830_UPLOAD_TEX_N( i );
+ }
}
return GL_TRUE;
}
@@ -549,10 +554,10 @@ void i830GetLock( i830ContextPtr imesa, GLuint flags )
I830_UPLOAD_BUFFERS |
I830_UPLOAD_STIPPLE);
- if(imesa->CurrentTexObj[0]) imesa->dirty |= I830_UPLOAD_TEX0;
- if(imesa->CurrentTexObj[1]) imesa->dirty |= I830_UPLOAD_TEX1;
- if(imesa->TexBlendWordsUsed[0]) imesa->dirty |= I830_UPLOAD_TEXBLEND0;
- if(imesa->TexBlendWordsUsed[1]) imesa->dirty |= I830_UPLOAD_TEXBLEND1;
+ for ( i = 0 ; i < imesa->glCtx->Const.MaxTextureUnits ; i++ ) {
+ if(imesa->CurrentTexObj[i]) imesa->dirty |= I830_UPLOAD_TEX_N( i );
+ if(imesa->TexBlendWordsUsed[i]) imesa->dirty |= I830_UPLOAD_TEXBLEND_N( i );
+ }
sarea->perf_boxes = imesa->perf_boxes | I830_BOX_LOST_CONTEXT;
sarea->ctxOwner = me;