diff options
| -rw-r--r-- | src/mesa/drivers/dri/common/texmem.c | 10 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/gamma/gamma_tex.c | 8 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/mga/mga_texstate.c | 8 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/r300_state.c | 2 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/s3v/s3v_tex.c | 8 | ||||
| -rw-r--r-- | src/mesa/drivers/x11/xm_api.c | 6 | ||||
| -rw-r--r-- | src/mesa/main/attrib.c | 38 | ||||
| -rw-r--r-- | src/mesa/main/get.c | 42 | ||||
| -rw-r--r-- | src/mesa/main/get_gen.py | 14 | ||||
| -rw-r--r-- | src/mesa/main/mtypes.h | 12 | ||||
| -rw-r--r-- | src/mesa/main/teximage.c | 14 | ||||
| -rw-r--r-- | src/mesa/main/texobj.c | 136 | ||||
| -rw-r--r-- | src/mesa/main/texparam.c | 14 | ||||
| -rw-r--r-- | src/mesa/main/texstate.c | 103 | ||||
| -rw-r--r-- | src/mesa/state_tracker/st_texture.c | 2 | ||||
| -rw-r--r-- | src/mesa/swrast/s_triangle.c | 15 | 
16 files changed, 168 insertions, 264 deletions
| diff --git a/src/mesa/drivers/dri/common/texmem.c b/src/mesa/drivers/dri/common/texmem.c index ff174a251d..041d8c6e97 100644 --- a/src/mesa/drivers/dri/common/texmem.c +++ b/src/mesa/drivers/dri/common/texmem.c @@ -1063,31 +1063,31 @@ void driInitTextureObjects( GLcontext *ctx, driTextureObject * swapped,        ctx->Texture.CurrentUnit = i;        if ( (targets & DRI_TEXMGR_DO_TEXTURE_1D) != 0 ) { -	 texObj = ctx->Texture.Unit[i].Current1D; +	 texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_1D_INDEX];  	 ctx->Driver.BindTexture( ctx, GL_TEXTURE_1D, texObj );  	 move_to_tail( swapped, (driTextureObject *) texObj->DriverData );        }        if ( (targets & DRI_TEXMGR_DO_TEXTURE_2D) != 0 ) { -	 texObj = ctx->Texture.Unit[i].Current2D; +	 texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_2D_INDEX];  	 ctx->Driver.BindTexture( ctx, GL_TEXTURE_2D, texObj );  	 move_to_tail( swapped, (driTextureObject *) texObj->DriverData );        }        if ( (targets & DRI_TEXMGR_DO_TEXTURE_3D) != 0 ) { -	 texObj = ctx->Texture.Unit[i].Current3D; +	 texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_3D_INDEX];  	 ctx->Driver.BindTexture( ctx, GL_TEXTURE_3D, texObj );  	 move_to_tail( swapped, (driTextureObject *) texObj->DriverData );        }        if ( (targets & DRI_TEXMGR_DO_TEXTURE_CUBE) != 0 ) { -	 texObj = ctx->Texture.Unit[i].CurrentCubeMap; +	 texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_CUBE_INDEX]Map;  	 ctx->Driver.BindTexture( ctx, GL_TEXTURE_CUBE_MAP_ARB, texObj );  	 move_to_tail( swapped, (driTextureObject *) texObj->DriverData );        }        if ( (targets & DRI_TEXMGR_DO_TEXTURE_RECT) != 0 ) { -	 texObj = ctx->Texture.Unit[i].CurrentRect; +	 texObj = ctx->Texture.Unit[i].CurrentTex[TEXTURE_RECT_INDEX];  	 ctx->Driver.BindTexture( ctx, GL_TEXTURE_RECTANGLE_NV, texObj );  	 move_to_tail( swapped, (driTextureObject *) texObj->DriverData );        } diff --git a/src/mesa/drivers/dri/gamma/gamma_tex.c b/src/mesa/drivers/dri/gamma/gamma_tex.c index 2ffb790f28..ca33c1740f 100644 --- a/src/mesa/drivers/dri/gamma/gamma_tex.c +++ b/src/mesa/drivers/dri/gamma/gamma_tex.c @@ -400,19 +400,19 @@ void gammaInitTextureObjects( GLcontext *ctx )     ctx->Texture.CurrentUnit = 0; -   texObj = ctx->Texture.Unit[0].Current1D; +   texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX];     gammaBindTexture( ctx, GL_TEXTURE_1D, texObj ); -   texObj = ctx->Texture.Unit[0].Current2D; +   texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];     gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );  #if 0     ctx->Texture.CurrentUnit = 1; -   texObj = ctx->Texture.Unit[1].Current1D; +   texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX];     gammaBindTexture( ctx, GL_TEXTURE_1D, texObj ); -   texObj = ctx->Texture.Unit[1].Current2D; +   texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX];     gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );  #endif diff --git a/src/mesa/drivers/dri/mga/mga_texstate.c b/src/mesa/drivers/dri/mga/mga_texstate.c index d4c5b6fd97..ad765d1dd7 100644 --- a/src/mesa/drivers/dri/mga/mga_texstate.c +++ b/src/mesa/drivers/dri/mga/mga_texstate.c @@ -206,8 +206,8 @@ static void mgaUpdateTextureEnvG200( GLcontext *ctx, GLuint unit )     mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;     GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat; -   if (tObj != ctx->Texture.Unit[0].Current2D && -       tObj != ctx->Texture.Unit[0].CurrentRect) +   if (tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX] && +       tObj != ctx->Texture.Unit[0].CurrentTex[TEXTURE_RECT_INDEX])        return; @@ -635,8 +635,8 @@ static void mgaUpdateTextureEnvG400( GLcontext *ctx, GLuint unit )     mgaTextureObjectPtr t = (mgaTextureObjectPtr) tObj->DriverData;     GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat; -   if (tObj != ctx->Texture.Unit[source].Current2D && -       tObj != ctx->Texture.Unit[source].CurrentRect) +   if (tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_2D_INDEX] && +       tObj != ctx->Texture.Unit[source].CurrentTex[TEXTURE_RECT_INDEX])        return;     switch (ctx->Texture.Unit[source].EnvMode) { diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c index c192fecca4..ade45f581c 100644 --- a/src/mesa/drivers/dri/r300/r300_state.c +++ b/src/mesa/drivers/dri/r300/r300_state.c @@ -1199,7 +1199,7 @@ r300FetchStateParameter(GLcontext * ctx,  		case STATE_R300_TEXRECT_FACTOR:{  				struct gl_texture_object *t = -				    ctx->Texture.Unit[state[2]].CurrentRect; +				    ctx->Texture.Unit[state[2]].CurrentTex[TEXTURE_RECT_INDEX];  				if (t && t->Image[0][t->BaseLevel]) {  					struct gl_texture_image *image = diff --git a/src/mesa/drivers/dri/s3v/s3v_tex.c b/src/mesa/drivers/dri/s3v/s3v_tex.c index 8bf2ea9878..db66026363 100644 --- a/src/mesa/drivers/dri/s3v/s3v_tex.c +++ b/src/mesa/drivers/dri/s3v/s3v_tex.c @@ -502,20 +502,20 @@ static void s3vInitTextureObjects( GLcontext *ctx )  #if 1  	ctx->Texture.CurrentUnit = 0; -	texObj = ctx->Texture.Unit[0].Current1D; +	texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_1D_INDEX];  	s3vBindTexture( ctx, GL_TEXTURE_1D, texObj ); -	texObj = ctx->Texture.Unit[0].Current2D; +	texObj = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];  	s3vBindTexture( ctx, GL_TEXTURE_2D, texObj );  #endif  #if 0  	ctx->Texture.CurrentUnit = 1; -	texObj = ctx->Texture.Unit[1].Current1D; +	texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_1D_INDEX];  	s3vBindTexture( ctx, GL_TEXTURE_1D, texObj ); -	texObj = ctx->Texture.Unit[1].Current2D; +	texObj = ctx->Texture.Unit[1].CurrentTex[TEXTURE_2D_INDEX];  	s3vBindTexture( ctx, GL_TEXTURE_2D, texObj );  #endif diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c index 2a8c3a4fd3..62d30a6987 100644 --- a/src/mesa/drivers/x11/xm_api.c +++ b/src/mesa/drivers/x11/xm_api.c @@ -2461,13 +2461,13 @@ XMesaBindTexImage(XMesaDisplay *dpy, XMesaBuffer drawable, int buffer,  #if 0     switch (drawable->TextureTarget) {     case GLX_TEXTURE_1D_EXT: -      texObj = texUnit->Current1D; +      texObj = texUnit->CurrentTex[TEXTURE_1D_INDEX];        break;     case GLX_TEXTURE_2D_EXT: -      texObj = texUnit->Current2D; +      texObj = texUnit->CurrentTex[TEXTURE_2D_INDEX];        break;     case GLX_TEXTURE_RECTANGLE_EXT: -      texObj = texUnit->CurrentRect; +      texObj = texUnit->CurrentTex[TEXTURE_RECT_INDEX];        break;     default:        return; /* BadMatch error */ diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c index dc33eb1fac..996033a2d8 100644 --- a/src/mesa/main/attrib.c +++ b/src/mesa/main/attrib.c @@ -365,7 +365,7 @@ _mesa_PushAttrib(GLbitfield mask)     if (mask & GL_TEXTURE_BIT) {        struct texture_state *texstate = CALLOC_STRUCT(texture_state); -      GLuint u; +      GLuint u, tex;        if (!texstate) {           _mesa_error(ctx, GL_OUT_OF_MEMORY, "glPushAttrib(GL_TEXTURE_BIT)"); @@ -381,38 +381,18 @@ _mesa_PushAttrib(GLbitfield mask)         * accidentally get deleted while referenced in the attribute stack.         */        for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { -         _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_1D_INDEX], -                                ctx->Texture.Unit[u].Current1D); -         _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_2D_INDEX], -                                ctx->Texture.Unit[u].Current2D); -         _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_3D_INDEX], -                                ctx->Texture.Unit[u].Current3D); -         _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_CUBE_INDEX], -                                ctx->Texture.Unit[u].CurrentCubeMap); -         _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_RECT_INDEX], -                                ctx->Texture.Unit[u].CurrentRect); -         _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_1D_ARRAY_INDEX], -                                ctx->Texture.Unit[u].Current1DArray); -         _mesa_reference_texobj(&texstate->SavedTexRef[u][TEXTURE_2D_ARRAY_INDEX], -                                ctx->Texture.Unit[u].Current2DArray); +         for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +            _mesa_reference_texobj(&texstate->SavedTexRef[u][tex], +                                   ctx->Texture.Unit[u].CurrentTex[tex]); +         }        }        /* copy state/contents of the currently bound texture objects */        for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { -         _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_1D_INDEX], -                                   ctx->Texture.Unit[u].Current1D); -         _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_2D_INDEX], -                                   ctx->Texture.Unit[u].Current2D); -         _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_3D_INDEX], -                                   ctx->Texture.Unit[u].Current3D); -         _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_CUBE_INDEX], -                                   ctx->Texture.Unit[u].CurrentCubeMap); -         _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_RECT_INDEX], -                                   ctx->Texture.Unit[u].CurrentRect); -         _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_1D_ARRAY_INDEX], -                                   ctx->Texture.Unit[u].Current1DArray); -         _mesa_copy_texture_object(&texstate->SavedObj[u][TEXTURE_2D_ARRAY_INDEX], -                                   ctx->Texture.Unit[u].Current2DArray); +         for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +            _mesa_copy_texture_object(&texstate->SavedObj[u][tex], +                                      ctx->Texture.Unit[u].CurrentTex[tex]); +         }        }        _mesa_unlock_context_textures(ctx); diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 87a821b12d..3a8d56140f 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -884,21 +884,21 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )           params[0] = _mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT);           break;        case GL_TEXTURE_BINDING_1D: -         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name); +         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_2D: -         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name); +         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_3D: -         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name); +         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_1D_ARRAY_EXT:           CHECK_EXT1(MESA_texture_array, "GetBooleanv"); -         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name); +         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_2D_ARRAY_EXT:           CHECK_EXT1(MESA_texture_array, "GetBooleanv"); -         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name); +         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);           break;        case GL_TEXTURE_GEN_S:           params[0] = ((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0); @@ -1071,7 +1071,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )           break;        case GL_TEXTURE_BINDING_CUBE_MAP_ARB:           CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv"); -         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name); +         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);           break;        case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:           CHECK_EXT1(ARB_texture_cube_map, "GetBooleanv"); @@ -1558,7 +1558,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )           break;        case GL_TEXTURE_BINDING_RECTANGLE_NV:           CHECK_EXT1(NV_texture_rectangle, "GetBooleanv"); -         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name); +         params[0] = INT_TO_BOOLEAN(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);           break;        case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:           CHECK_EXT1(NV_texture_rectangle, "GetBooleanv"); @@ -2710,21 +2710,21 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )           params[0] = BOOLEAN_TO_FLOAT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));           break;        case GL_TEXTURE_BINDING_1D: -         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name); +         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_2D: -         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name); +         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_3D: -         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name); +         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_1D_ARRAY_EXT:           CHECK_EXT1(MESA_texture_array, "GetFloatv"); -         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name); +         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name);           break;        case GL_TEXTURE_BINDING_2D_ARRAY_EXT:           CHECK_EXT1(MESA_texture_array, "GetFloatv"); -         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name); +         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name);           break;        case GL_TEXTURE_GEN_S:           params[0] = BOOLEAN_TO_FLOAT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)); @@ -2897,7 +2897,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )           break;        case GL_TEXTURE_BINDING_CUBE_MAP_ARB:           CHECK_EXT1(ARB_texture_cube_map, "GetFloatv"); -         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name); +         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name);           break;        case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:           CHECK_EXT1(ARB_texture_cube_map, "GetFloatv"); @@ -3384,7 +3384,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )           break;        case GL_TEXTURE_BINDING_RECTANGLE_NV:           CHECK_EXT1(NV_texture_rectangle, "GetFloatv"); -         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name); +         params[0] = (GLfloat)(ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name);           break;        case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:           CHECK_EXT1(NV_texture_rectangle, "GetFloatv"); @@ -4536,21 +4536,21 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )           params[0] = BOOLEAN_TO_INT(_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT));           break;        case GL_TEXTURE_BINDING_1D: -         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name; +         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name;           break;        case GL_TEXTURE_BINDING_2D: -         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name; +         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name;           break;        case GL_TEXTURE_BINDING_3D: -         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name; +         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name;           break;        case GL_TEXTURE_BINDING_1D_ARRAY_EXT:           CHECK_EXT1(MESA_texture_array, "GetIntegerv"); -         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name; +         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name;           break;        case GL_TEXTURE_BINDING_2D_ARRAY_EXT:           CHECK_EXT1(MESA_texture_array, "GetIntegerv"); -         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name; +         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name;           break;        case GL_TEXTURE_GEN_S:           params[0] = BOOLEAN_TO_INT(((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)); @@ -4723,7 +4723,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )           break;        case GL_TEXTURE_BINDING_CUBE_MAP_ARB:           CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv"); -         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name; +         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name;           break;        case GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB:           CHECK_EXT1(ARB_texture_cube_map, "GetIntegerv"); @@ -5210,7 +5210,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )           break;        case GL_TEXTURE_BINDING_RECTANGLE_NV:           CHECK_EXT1(NV_texture_rectangle, "GetIntegerv"); -         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name; +         params[0] = ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name;           break;        case GL_MAX_RECTANGLE_TEXTURE_SIZE_NV:           CHECK_EXT1(NV_texture_rectangle, "GetIntegerv"); diff --git a/src/mesa/main/get_gen.py b/src/mesa/main/get_gen.py index 3b2496c663..729f382b4b 100644 --- a/src/mesa/main/get_gen.py +++ b/src/mesa/main/get_gen.py @@ -432,15 +432,15 @@ StateVars = [  	( "GL_TEXTURE_1D_ARRAY_EXT", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_1D_ARRAY_EXT)"], "", ["MESA_texture_array"] ),  	( "GL_TEXTURE_2D_ARRAY_EXT", GLboolean, ["_mesa_IsEnabled(GL_TEXTURE_2D_ARRAY_EXT)"], "", ["MESA_texture_array"] ),  	( "GL_TEXTURE_BINDING_1D", GLint, -	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1D->Name"], "", None ), +	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_INDEX]->Name"], "", None ),  	( "GL_TEXTURE_BINDING_2D", GLint, -	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2D->Name"], "", None ), +	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_INDEX]->Name"], "", None ),  	( "GL_TEXTURE_BINDING_3D", GLint, -	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current3D->Name"], "", None ), +	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_3D_INDEX]->Name"], "", None ),  	( "GL_TEXTURE_BINDING_1D_ARRAY_EXT", GLint, -	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current1DArray->Name"], "", ["MESA_texture_array"] ), +	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_1D_ARRAY_INDEX]->Name"], "", ["MESA_texture_array"] ),  	( "GL_TEXTURE_BINDING_2D_ARRAY_EXT", GLint, -	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].Current2DArray->Name"], "", ["MESA_texture_array"] ), +	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_2D_ARRAY_INDEX]->Name"], "", ["MESA_texture_array"] ),  	( "GL_TEXTURE_GEN_S", GLboolean,  	  ["((ctx->Texture.Unit[ctx->Texture.CurrentUnit].TexGenEnabled & S_BIT) ? 1 : 0)"], "", None ),  	( "GL_TEXTURE_GEN_T", GLboolean, @@ -515,7 +515,7 @@ StateVars = [  	( "GL_TEXTURE_CUBE_MAP_ARB", GLboolean,  	  ["_mesa_IsEnabled(GL_TEXTURE_CUBE_MAP_ARB)"], "", ["ARB_texture_cube_map"] ),  	( "GL_TEXTURE_BINDING_CUBE_MAP_ARB", GLint, -	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentCubeMap->Name"], +	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_CUBE_INDEX]->Name"],  	  "", ["ARB_texture_cube_map"] ),  	( "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB", GLint,  	  ["(1 << (ctx->Const.MaxCubeTextureLevels - 1))"], @@ -795,7 +795,7 @@ StateVars = [  	( "GL_TEXTURE_RECTANGLE_NV", GLboolean,  	  ["_mesa_IsEnabled(GL_TEXTURE_RECTANGLE_NV)"], "", ["NV_texture_rectangle"] ),  	( "GL_TEXTURE_BINDING_RECTANGLE_NV", GLint, -	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentRect->Name"], +	  ["ctx->Texture.Unit[ctx->Texture.CurrentUnit].CurrentTex[TEXTURE_RECT_INDEX]->Name"],  	  "", ["NV_texture_rectangle"] ),  	( "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV", GLint,  	  ["ctx->Const.MaxTextureRectSize"], "", ["NV_texture_rectangle"] ), diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index bd7d6f0784..06cef3d670 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1543,15 +1543,11 @@ struct gl_texture_unit      */     struct gl_tex_env_combine_state *_CurrentCombine; -   struct gl_texture_object *Current1D; -   struct gl_texture_object *Current2D; -   struct gl_texture_object *Current3D; -   struct gl_texture_object *CurrentCubeMap; /**< GL_ARB_texture_cube_map */ -   struct gl_texture_object *CurrentRect;    /**< GL_NV_texture_rectangle */ -   struct gl_texture_object *Current1DArray; /**< GL_MESA_texture_array */ -   struct gl_texture_object *Current2DArray; /**< GL_MESA_texture_array */ +   /** Current texture object pointers */ +   struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; -   struct gl_texture_object *_Current; /**< Points to really enabled tex obj */ +   /** Points to highest priority, complete and enabled texture object */ +   struct gl_texture_object *_Current;     /** GL_SGI_texture_color_table */     /*@{*/ diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 8fd69c4f6a..e3d4404759 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -766,15 +766,15 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit,  {     switch (target) {        case GL_TEXTURE_1D: -         return texUnit->Current1D; +         return texUnit->CurrentTex[TEXTURE_1D_INDEX];        case GL_PROXY_TEXTURE_1D:           return ctx->Texture.ProxyTex[TEXTURE_1D_INDEX];        case GL_TEXTURE_2D: -         return texUnit->Current2D; +         return texUnit->CurrentTex[TEXTURE_2D_INDEX];        case GL_PROXY_TEXTURE_2D:           return ctx->Texture.ProxyTex[TEXTURE_2D_INDEX];        case GL_TEXTURE_3D: -         return texUnit->Current3D; +         return texUnit->CurrentTex[TEXTURE_3D_INDEX];        case GL_PROXY_TEXTURE_3D:           return ctx->Texture.ProxyTex[TEXTURE_3D_INDEX];        case GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB: @@ -785,25 +785,25 @@ _mesa_select_tex_object(GLcontext *ctx, const struct gl_texture_unit *texUnit,        case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB:        case GL_TEXTURE_CUBE_MAP_ARB:           return ctx->Extensions.ARB_texture_cube_map -                ? texUnit->CurrentCubeMap : NULL; +                ? texUnit->CurrentTex[TEXTURE_CUBE_INDEX] : NULL;        case GL_PROXY_TEXTURE_CUBE_MAP_ARB:           return ctx->Extensions.ARB_texture_cube_map                  ? ctx->Texture.ProxyTex[TEXTURE_CUBE_INDEX] : NULL;        case GL_TEXTURE_RECTANGLE_NV:           return ctx->Extensions.NV_texture_rectangle -                ? texUnit->CurrentRect : NULL; +                ? texUnit->CurrentTex[TEXTURE_RECT_INDEX] : NULL;        case GL_PROXY_TEXTURE_RECTANGLE_NV:           return ctx->Extensions.NV_texture_rectangle                  ? ctx->Texture.ProxyTex[TEXTURE_RECT_INDEX] : NULL;        case GL_TEXTURE_1D_ARRAY_EXT:           return ctx->Extensions.MESA_texture_array -                ? texUnit->Current1DArray : NULL; +                ? texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX] : NULL;        case GL_PROXY_TEXTURE_1D_ARRAY_EXT:           return ctx->Extensions.MESA_texture_array                  ? ctx->Texture.ProxyTex[TEXTURE_1D_ARRAY_INDEX] : NULL;        case GL_TEXTURE_2D_ARRAY_EXT:           return ctx->Extensions.MESA_texture_array -                ? texUnit->Current2DArray : NULL; +                ? texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX] : NULL;        case GL_PROXY_TEXTURE_2D_ARRAY_EXT:           return ctx->Extensions.MESA_texture_array                  ? ctx->Texture.ProxyTex[TEXTURE_2D_ARRAY_INDEX] : NULL; diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index 52a651c4b6..2de2dcc95d 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -759,44 +759,17 @@ unbind_texobj_from_fbo(GLcontext *ctx, struct gl_texture_object *texObj)  static void  unbind_texobj_from_texunits(GLcontext *ctx, struct gl_texture_object *texObj)  { -   GLuint u; +   GLuint u, tex;     for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {        struct gl_texture_unit *unit = &ctx->Texture.Unit[u]; -      if (texObj == unit->Current1D) { -         _mesa_reference_texobj(&unit->Current1D, -                                ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]); -         ASSERT(unit->Current1D); -      } -      else if (texObj == unit->Current2D) { -         _mesa_reference_texobj(&unit->Current2D, -                                ctx->Shared->DefaultTex[TEXTURE_2D_INDEX]); -         ASSERT(unit->Current2D); -      } -      else if (texObj == unit->Current3D) { -         _mesa_reference_texobj(&unit->Current3D, -                                ctx->Shared->DefaultTex[TEXTURE_3D_INDEX]); -         ASSERT(unit->Current3D); -      } -      else if (texObj == unit->CurrentCubeMap) { -         _mesa_reference_texobj(&unit->CurrentCubeMap, -                                ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX]); -         ASSERT(unit->CurrentCubeMap); -      } -      else if (texObj == unit->CurrentRect) { -         _mesa_reference_texobj(&unit->CurrentRect, -                                ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX]); -         ASSERT(unit->CurrentRect); -      } -      else if (texObj == unit->Current1DArray) { -         _mesa_reference_texobj(&unit->Current1DArray, -                             ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX]); -         ASSERT(unit->Current1DArray); -      } -      else if (texObj == unit->Current2DArray) { -         _mesa_reference_texobj(&unit->Current2DArray, -                             ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX]); -         ASSERT(unit->Current2DArray); +      for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +         if (texObj == unit->CurrentTex[tex]) { +            _mesa_reference_texobj(&unit->CurrentTex[tex], +                                   ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]); +            ASSERT(unit->CurrentTex[tex]); +            break; +         }        }     }  } @@ -867,6 +840,35 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *textures)  /** + * Convert a GL texture target enum such as GL_TEXTURE_2D or GL_TEXTURE_3D + * into the corresponding Mesa texture target index. + * Return -1 if target is invalid. + */ +static GLint +target_enum_to_index(GLenum target) +{ +   switch (target) { +   case GL_TEXTURE_1D: +      return TEXTURE_1D_INDEX; +   case GL_TEXTURE_2D: +      return TEXTURE_2D_INDEX; +   case GL_TEXTURE_3D: +      return TEXTURE_3D_INDEX; +   case GL_TEXTURE_CUBE_MAP_ARB: +      return TEXTURE_CUBE_INDEX; +   case GL_TEXTURE_RECTANGLE_NV: +      return TEXTURE_RECT_INDEX; +   case GL_TEXTURE_1D_ARRAY_EXT: +      return TEXTURE_1D_ARRAY_INDEX; +   case GL_TEXTURE_2D_ARRAY_EXT: +      return TEXTURE_2D_ARRAY_INDEX; +   default: +      return -1; +   } +} + + +/**   * Bind a named texture to a texturing target.   *    * \param target texture target. @@ -888,38 +890,20 @@ _mesa_BindTexture( GLenum target, GLuint texName )     const GLuint unit = ctx->Texture.CurrentUnit;     struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];     struct gl_texture_object *newTexObj = NULL, *defaultTexObj = NULL; +   GLint targetIndex;     ASSERT_OUTSIDE_BEGIN_END(ctx);     if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))        _mesa_debug(ctx, "glBindTexture %s %d\n",                    _mesa_lookup_enum_by_nr(target), (GLint) texName); -   switch (target) { -   case GL_TEXTURE_1D: -      defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]; -      break; -   case GL_TEXTURE_2D: -      defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_2D_INDEX]; -      break; -   case GL_TEXTURE_3D: -      defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_3D_INDEX]; -      break; -   case GL_TEXTURE_CUBE_MAP_ARB: -      defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX]; -      break; -   case GL_TEXTURE_RECTANGLE_NV: -      defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX]; -      break; -   case GL_TEXTURE_1D_ARRAY_EXT: -      defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX]; -      break; -   case GL_TEXTURE_2D_ARRAY_EXT: -      defaultTexObj = ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX]; -      break; -   default: +   targetIndex = target_enum_to_index(target); +   if (targetIndex < 0) {        _mesa_error(ctx, GL_INVALID_ENUM, "glBindTexture(target)");        return;     } +   assert(targetIndex < NUM_TEXTURE_TARGETS); +   defaultTexObj = ctx->Shared->DefaultTex[targetIndex];     /*      * Get pointer to new texture object (newTexObj) @@ -967,40 +951,8 @@ _mesa_BindTexture( GLenum target, GLuint texName )      * texture object will be decremented.  It'll be deleted if the      * count hits zero.      */ -   switch (target) { -      case GL_TEXTURE_1D: -         _mesa_reference_texobj(&texUnit->Current1D, newTexObj); -         ASSERT(texUnit->Current1D); -         break; -      case GL_TEXTURE_2D: -         _mesa_reference_texobj(&texUnit->Current2D, newTexObj); -         ASSERT(texUnit->Current2D); -         break; -      case GL_TEXTURE_3D: -         _mesa_reference_texobj(&texUnit->Current3D, newTexObj); -         ASSERT(texUnit->Current3D); -         break; -      case GL_TEXTURE_CUBE_MAP_ARB: -         _mesa_reference_texobj(&texUnit->CurrentCubeMap, newTexObj); -         ASSERT(texUnit->CurrentCubeMap); -         break; -      case GL_TEXTURE_RECTANGLE_NV: -         _mesa_reference_texobj(&texUnit->CurrentRect, newTexObj); -         ASSERT(texUnit->CurrentRect); -         break; -      case GL_TEXTURE_1D_ARRAY_EXT: -         _mesa_reference_texobj(&texUnit->Current1DArray, newTexObj); -         ASSERT(texUnit->Current1DArray); -         break; -      case GL_TEXTURE_2D_ARRAY_EXT: -         _mesa_reference_texobj(&texUnit->Current2DArray, newTexObj); -         ASSERT(texUnit->Current2DArray); -         break; -      default: -         /* Bad target should be caught above */ -         _mesa_problem(ctx, "bad target in BindTexture"); -         return; -   } +   _mesa_reference_texobj(&texUnit->CurrentTex[targetIndex], newTexObj); +   ASSERT(texUnit->CurrentTex[targetIndex]);     /* Pass BindTexture call to device driver */     if (ctx->Driver.BindTexture) diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index 865aae8627..50f867e1c1 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -92,29 +92,29 @@ get_texobj(GLcontext *ctx, GLenum target)     switch (target) {     case GL_TEXTURE_1D: -      return texUnit->Current1D; +      return texUnit->CurrentTex[TEXTURE_1D_INDEX];     case GL_TEXTURE_2D: -      return texUnit->Current2D; +      return texUnit->CurrentTex[TEXTURE_2D_INDEX];     case GL_TEXTURE_3D: -      return texUnit->Current3D; +      return texUnit->CurrentTex[TEXTURE_3D_INDEX];     case GL_TEXTURE_CUBE_MAP:        if (ctx->Extensions.ARB_texture_cube_map) { -         return texUnit->CurrentCubeMap; +         return texUnit->CurrentTex[TEXTURE_CUBE_INDEX];        }        break;     case GL_TEXTURE_RECTANGLE_NV:        if (ctx->Extensions.NV_texture_rectangle) { -         return texUnit->CurrentRect; +         return texUnit->CurrentTex[TEXTURE_RECT_INDEX];        }        break;     case GL_TEXTURE_1D_ARRAY_EXT:        if (ctx->Extensions.MESA_texture_array) { -         return texUnit->Current1DArray; +         return texUnit->CurrentTex[TEXTURE_1D_ARRAY_INDEX];        }        break;     case GL_TEXTURE_2D_ARRAY_EXT:        if (ctx->Extensions.MESA_texture_array) { -         return texUnit->Current2DArray; +         return texUnit->CurrentTex[TEXTURE_2D_ARRAY_INDEX];        }        break;     default: diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c index b9e1a2a687..27927d60b0 100644 --- a/src/mesa/main/texstate.c +++ b/src/mesa/main/texstate.c @@ -68,7 +68,7 @@ static const struct gl_tex_env_combine_state default_combine_state = {  void  _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst )  { -   GLuint i; +   GLuint i, tex;     ASSERT(src);     ASSERT(dst); @@ -104,20 +104,10 @@ _mesa_copy_texture_state( const GLcontext *src, GLcontext *dst )        /* copy texture object bindings, not contents of texture objects */        _mesa_lock_context_textures(dst); -      _mesa_reference_texobj(&dst->Texture.Unit[i].Current1D, -                             src->Texture.Unit[i].Current1D); -      _mesa_reference_texobj(&dst->Texture.Unit[i].Current2D, -                             src->Texture.Unit[i].Current2D); -      _mesa_reference_texobj(&dst->Texture.Unit[i].Current3D, -                             src->Texture.Unit[i].Current3D); -      _mesa_reference_texobj(&dst->Texture.Unit[i].CurrentCubeMap, -                             src->Texture.Unit[i].CurrentCubeMap); -      _mesa_reference_texobj(&dst->Texture.Unit[i].CurrentRect, -                             src->Texture.Unit[i].CurrentRect); -      _mesa_reference_texobj(&dst->Texture.Unit[i].Current1DArray, -                             src->Texture.Unit[i].Current1DArray); -      _mesa_reference_texobj(&dst->Texture.Unit[i].Current2DArray, -                             src->Texture.Unit[i].Current2DArray); +      for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +         _mesa_reference_texobj(&dst->Texture.Unit[i].CurrentTex[tex], +                                src->Texture.Unit[i].CurrentTex[tex]); +      }        _mesa_unlock_context_textures(dst);     } @@ -558,6 +548,7 @@ update_texture_state( GLcontext *ctx )     for (unit = 0; unit < ctx->Const.MaxTextureImageUnits; unit++) {        struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];        GLbitfield enableBits; +      GLuint tex;        texUnit->_Current = NULL;        texUnit->_ReallyEnabled = 0; @@ -584,32 +575,29 @@ update_texture_state( GLcontext *ctx )        if (enableBits == 0x0)           continue; -      ASSERT(texUnit->Current1D); -      ASSERT(texUnit->Current2D); -      ASSERT(texUnit->Current3D); -      ASSERT(texUnit->CurrentCubeMap); -      ASSERT(texUnit->CurrentRect); -      ASSERT(texUnit->Current1DArray); -      ASSERT(texUnit->Current2DArray); +      for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +         ASSERT(texUnit->CurrentTex[tex]); +      }        /* Look for the highest-priority texture target that's enabled and         * complete.  That's the one we'll use for texturing.  If we're using         * a fragment program we're guaranteed that bitcount(enabledBits) <= 1.         */ -      texture_override(ctx, texUnit, enableBits, -                       texUnit->Current2DArray, TEXTURE_2D_ARRAY_BIT); -      texture_override(ctx, texUnit, enableBits, -                       texUnit->Current1DArray, TEXTURE_1D_ARRAY_BIT); -      texture_override(ctx, texUnit, enableBits, -                       texUnit->CurrentCubeMap, TEXTURE_CUBE_BIT); -      texture_override(ctx, texUnit, enableBits, -                       texUnit->Current3D, TEXTURE_3D_BIT); -      texture_override(ctx, texUnit, enableBits, -                       texUnit->CurrentRect, TEXTURE_RECT_BIT); -      texture_override(ctx, texUnit, enableBits, -                       texUnit->Current2D, TEXTURE_2D_BIT); -      texture_override(ctx, texUnit, enableBits, -                       texUnit->Current1D, TEXTURE_1D_BIT); +      for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +         /* texture indexes from highest to lowest priority */ +         static const GLuint targets[NUM_TEXTURE_TARGETS] = { +            TEXTURE_2D_ARRAY_INDEX, +            TEXTURE_1D_ARRAY_INDEX, +            TEXTURE_CUBE_INDEX, +            TEXTURE_3D_INDEX, +            TEXTURE_RECT_INDEX, +            TEXTURE_2D_INDEX, +            TEXTURE_1D_INDEX +         }; +         GLuint texIndex = targets[tex]; +         texture_override(ctx, texUnit, enableBits, +                          texUnit->CurrentTex[texIndex], 1 << texIndex); +      }        if (!texUnit->_ReallyEnabled) {           continue; @@ -734,6 +722,7 @@ static void  init_texture_unit( GLcontext *ctx, GLuint unit )  {     struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit]; +   GLuint tex;     texUnit->EnvMode = GL_MODULATE;     ASSIGN_4V( texUnit->EnvColor, 0.0, 0.0, 0.0, 0.0 ); @@ -763,13 +752,10 @@ init_texture_unit( GLcontext *ctx, GLuint unit )     ASSIGN_4V( texUnit->GenQ.EyePlane, 0.0, 0.0, 0.0, 0.0 );     /* initialize current texture object ptrs to the shared default objects */ -   _mesa_reference_texobj(&texUnit->Current1D, ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]); -   _mesa_reference_texobj(&texUnit->Current2D, ctx->Shared->DefaultTex[TEXTURE_2D_INDEX]); -   _mesa_reference_texobj(&texUnit->Current3D, ctx->Shared->DefaultTex[TEXTURE_3D_INDEX]); -   _mesa_reference_texobj(&texUnit->CurrentCubeMap, ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX]); -   _mesa_reference_texobj(&texUnit->CurrentRect, ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX]); -   _mesa_reference_texobj(&texUnit->Current1DArray, ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX]); -   _mesa_reference_texobj(&texUnit->Current2DArray, ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX]); +   for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +      _mesa_reference_texobj(&texUnit->CurrentTex[tex], +                             ctx->Shared->DefaultTex[tex]); +   }  } @@ -820,13 +806,9 @@ _mesa_free_texture_data(GLcontext *ctx)     /* unreference current textures */     for (u = 0; u < MAX_TEXTURE_IMAGE_UNITS; u++) {        struct gl_texture_unit *unit = ctx->Texture.Unit + u; -      _mesa_reference_texobj(&unit->Current1D, NULL); -      _mesa_reference_texobj(&unit->Current2D, NULL); -      _mesa_reference_texobj(&unit->Current3D, NULL); -      _mesa_reference_texobj(&unit->CurrentCubeMap, NULL); -      _mesa_reference_texobj(&unit->CurrentRect, NULL); -      _mesa_reference_texobj(&unit->Current1DArray, NULL); -      _mesa_reference_texobj(&unit->Current2DArray, NULL); +      for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) { +         _mesa_reference_texobj(&unit->CurrentTex[tgt], NULL); +      }     }     /* Free proxy texture objects */ @@ -851,24 +833,13 @@ _mesa_free_texture_data(GLcontext *ctx)  void  _mesa_update_default_objects_texture(GLcontext *ctx)  { -   GLuint i; +   GLuint i, tex;     for (i = 0; i < MAX_TEXTURE_UNITS; i++) {        struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i]; - -      _mesa_reference_texobj(&texUnit->Current1D, -                             ctx->Shared->DefaultTex[TEXTURE_1D_INDEX]); -      _mesa_reference_texobj(&texUnit->Current2D, -                             ctx->Shared->DefaultTex[TEXTURE_2D_INDEX]); -      _mesa_reference_texobj(&texUnit->Current3D, -                             ctx->Shared->DefaultTex[TEXTURE_3D_INDEX]); -      _mesa_reference_texobj(&texUnit->CurrentCubeMap, -                             ctx->Shared->DefaultTex[TEXTURE_CUBE_INDEX]); -      _mesa_reference_texobj(&texUnit->CurrentRect, -                             ctx->Shared->DefaultTex[TEXTURE_RECT_INDEX]); -      _mesa_reference_texobj(&texUnit->Current1DArray, -                             ctx->Shared->DefaultTex[TEXTURE_1D_ARRAY_INDEX]); -      _mesa_reference_texobj(&texUnit->Current2DArray, -                             ctx->Shared->DefaultTex[TEXTURE_2D_ARRAY_INDEX]); +      for (tex = 0; tex < NUM_TEXTURE_TARGETS; tex++) { +         _mesa_reference_texobj(&texUnit->CurrentTex[tex], +                                ctx->Shared->DefaultTex[tex]); +      }     }  } diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c index 63a36324d4..fcf76ef82e 100644 --- a/src/mesa/state_tracker/st_texture.c +++ b/src/mesa/state_tracker/st_texture.c @@ -429,7 +429,7 @@ st_bind_teximage(struct st_framebuffer *stfb, uint surfIndex,     }     if (target == ST_TEXTURE_2D) { -      texObj = texUnit->Current2D; +      texObj = texUnit->CurrentTex[TEXTURE_2D_INDEX];        texImage = _mesa_get_tex_image(ctx, texObj, GL_TEXTURE_2D, level);        stImage = st_texture_image(texImage);     } diff --git a/src/mesa/swrast/s_triangle.c b/src/mesa/swrast/s_triangle.c index 0598052f50..ab08b7325a 100644 --- a/src/mesa/swrast/s_triangle.c +++ b/src/mesa/swrast/s_triangle.c @@ -132,7 +132,8 @@ _swrast_culltriangle( GLcontext *ctx,  #define SETUP_CODE							\     struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0];	\ -   struct gl_texture_object *obj = ctx->Texture.Unit[0].Current2D;	\ +   struct gl_texture_object *obj = 					\ +      ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];		\     const GLint b = obj->BaseLevel;					\     const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width;		\     const GLfloat theight = (GLfloat) obj->Image[0][b]->Height;		\ @@ -183,7 +184,8 @@ _swrast_culltriangle( GLcontext *ctx,  #define SETUP_CODE							\     struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[0];	\ -   struct gl_texture_object *obj = ctx->Texture.Unit[0].Current2D;	\ +   struct gl_texture_object *obj = 					\ +      ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];		\     const GLint b = obj->BaseLevel;					\     const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width;		\     const GLfloat theight = (GLfloat) obj->Image[0][b]->Height;		\ @@ -524,7 +526,8 @@ affine_span(GLcontext *ctx, SWspan *span,  #define SETUP_CODE							\     struct affine_info info;						\     struct gl_texture_unit *unit = ctx->Texture.Unit+0;			\ -   struct gl_texture_object *obj = unit->Current2D;			\ +   struct gl_texture_object *obj = 					\ +      ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];		\     const GLint b = obj->BaseLevel;					\     const GLfloat twidth = (GLfloat) obj->Image[0][b]->Width;		\     const GLfloat theight = (GLfloat) obj->Image[0][b]->Height;		\ @@ -794,7 +797,8 @@ fast_persp_span(GLcontext *ctx, SWspan *span,  #define SETUP_CODE							\     struct persp_info info;						\     const struct gl_texture_unit *unit = ctx->Texture.Unit+0;		\ -   const struct gl_texture_object *obj = unit->Current2D;		\ +   struct gl_texture_object *obj = 					\ +      ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX];		\     const GLint b = obj->BaseLevel;					\     info.texture = (const GLchan *) obj->Image[0][b]->Data;		\     info.twidth_log2 = obj->Image[0][b]->WidthLog2;			\ @@ -1050,7 +1054,8 @@ _swrast_choose_triangle( GLcontext *ctx )           const struct gl_texture_image *texImg;           GLenum minFilter, magFilter, envMode;           GLint format; -         texObj2D = ctx->Texture.Unit[0].Current2D; +         texObj2D = ctx->Texture.Unit[0].CurrentTex[TEXTURE_2D_INDEX]; +           texImg = texObj2D ? texObj2D->Image[0][texObj2D->BaseLevel] : NULL;           format = texImg ? texImg->TexFormat->MesaFormat : -1;           minFilter = texObj2D ? texObj2D->MinFilter : (GLenum) 0; | 
