Index: src/mesa/drivers/dri/i915/i915_context.h =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/drivers/dri/i915/i915_context.h,v retrieving revision 1.7 diff -u -r1.7 i915_context.h --- src/mesa/drivers/dri/i915/i915_context.h 18 Aug 2006 09:04:48 -0000 1.7 +++ src/mesa/drivers/dri/i915/i915_context.h 16 Sep 2006 02:07:05 -0000 @@ -170,7 +176,7 @@ /* Helpers for i915_texprog.c: */ - GLuint src_texture; /* Reg containing sampled texture color, + GLuint src_texture[8]; /* Reg containing sampled texture color, * else UREG_BAD. */ Index: src/mesa/drivers/dri/i915/i915_program.c =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/drivers/dri/i915/i915_program.c,v retrieving revision 1.6 diff -u -r1.6 i915_program.c --- src/mesa/drivers/dri/i915/i915_program.c 18 Aug 2006 09:04:48 -0000 1.6 +++ src/mesa/drivers/dri/i915/i915_program.c 16 Sep 2006 02:07:09 -0000 @@ -405,7 +422,7 @@ p->depth_written = 0; p->nr_params = 0; - p->src_texture = UREG_BAD; + for (int u = 0; u < 8; u++) p->src_texture[u] = UREG_BAD; p->src_previous = UREG(REG_TYPE_T, T_DIFFUSE); p->last_tex_stage = 0; p->VB = &tnl->vb; Index: src/mesa/drivers/dri/i915/i915_texprog.c =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/drivers/dri/i915/i915_texprog.c,v retrieving revision 1.6 diff -u -r1.6 i915_texprog.c --- src/mesa/drivers/dri/i915/i915_texprog.c 11 Apr 2006 11:41:11 -0000 1.6 +++ src/mesa/drivers/dri/i915/i915_texprog.c 16 Sep 2006 02:07:09 -0000 @@ -55,8 +55,18 @@ GLenum src, GLuint unit ) { switch (src) { + /* Crossbar: */ + case GL_TEXTURE0: + case GL_TEXTURE1: + case GL_TEXTURE2: + case GL_TEXTURE3: + case GL_TEXTURE4: + case GL_TEXTURE5: + case GL_TEXTURE6: + case GL_TEXTURE7: + unit = src - GL_TEXTURE0; case GL_TEXTURE: - if (p->src_texture == UREG_BAD) { + if (p->src_texture[unit] == UREG_BAD) { /* TODO: Use D0_CHANNEL_XY where possible. */ @@ -69,23 +79,10 @@ if (p->VB->TexCoordPtr[unit]->size == 4) op = T0_TEXLDP; - p->src_texture = i915_emit_texld( p, tmp, A0_DEST_CHANNEL_ALL, + p->src_texture[unit] = i915_emit_texld( p, 0, tmp, A0_DEST_CHANNEL_ALL, sampler, texcoord, op ); } - - return p->src_texture; - - /* Crossbar: */ - case GL_TEXTURE0: - case GL_TEXTURE1: - case GL_TEXTURE2: - case GL_TEXTURE3: - case GL_TEXTURE4: - case GL_TEXTURE5: - case GL_TEXTURE6: - case GL_TEXTURE7: { - return UREG_BAD; - } + return p->src_texture[unit]; case GL_CONSTANT: return i915_emit_const4fv( p, p->ctx->Texture.Unit[unit].EnvColor ); @@ -555,9 +552,12 @@ for (unit = 0 ; unit < ctx->Const.MaxTextureUnits; unit++) if (ctx->Texture.Unit[unit]._ReallyEnabled) { p->src_previous = emit_texenv( p, unit ); - p->src_texture = UREG_BAD; p->temp_flag = 0xffff000; p->temp_flag |= 1 << GET_UREG_NR(p->src_previous); + /* FIXME: This could be cleverer. */ + for (int u = 0; u < 8; u++) + if (p->src_texture[u] != UREG_BAD) + p->temp_flag |= 1 << GET_UREG_NR(p->src_texture[u]); } } Index: src/mesa/drivers/dri/i915/intel_context.c =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/drivers/dri/i915/intel_context.c,v retrieving revision 1.30 diff -u -r1.30 intel_context.c --- src/mesa/drivers/dri/i915/intel_context.c 1 Sep 2006 23:36:30 -0000 1.30 +++ src/mesa/drivers/dri/i915/intel_context.c 16 Sep 2006 02:07:10 -0000 @@ -158,10 +158,6 @@ /** * Extension strings exported by the intel driver. - * - * \note - * It appears that ARB_texture_env_crossbar has "disappeared" compared to the - * old i830-specific driver. */ const struct dri_extension card_extensions[] = { @@ -173,6 +169,7 @@ { "GL_ARB_texture_cube_map", NULL }, { "GL_ARB_texture_env_add", NULL }, { "GL_ARB_texture_env_combine", NULL }, + { "GL_ARB_texture_env_crossbar", NULL }, { "GL_ARB_texture_env_dot3", NULL }, { "GL_ARB_texture_mirrored_repeat", NULL }, { "GL_ARB_texture_rectangle", NULL },