Mesa (master): mesa: fixed computation of _EnabledCoordUnits
Brian Paul
brianp at kemper.freedesktop.org
Mon Mar 2 18:03:02 UTC 2009
Module: Mesa
Branch: master
Commit: e68208f26260e5c964bc1c8674c722d0d60db3ee
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e68208f26260e5c964bc1c8674c722d0d60db3ee
Author: Brian Paul <brianp at vmware.com>
Date: Mon Mar 2 10:58:51 2009 -0700
mesa: fixed computation of _EnabledCoordUnits
This field should not include vertex textures. It indicates the coord
inputs for fragment / fixed-function processing.
---
src/mesa/main/texstate.c | 26 ++++++++++++++++++--------
1 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 5ac8579..5d53e35 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -492,6 +492,7 @@ update_texture_state( GLcontext *ctx )
GLuint unit;
struct gl_fragment_program *fprog = NULL;
struct gl_vertex_program *vprog = NULL;
+ GLbitfield enabledFragUnits = 0x0;
if (ctx->Shader.CurrentProgram &&
ctx->Shader.CurrentProgram->LinkStatus) {
@@ -523,7 +524,9 @@ update_texture_state( GLcontext *ctx )
*/
for (unit = 0; unit < ctx->Const.MaxTextureImageUnits; unit++) {
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
- GLbitfield enableBits;
+ GLbitfield enabledVertTargets = 0x0;
+ GLbitfield enabledFragTargets = 0x0;
+ GLbitfield enabledTargets = 0x0;
GLuint texIndex;
/* Get the bitmask of texture target enables.
@@ -532,20 +535,24 @@ update_texture_state( GLcontext *ctx )
* by a fragment shader/program. When multiple flags are set, we'll
* settle on the one with highest priority (see below).
*/
- enableBits = 0x0;
if (vprog) {
- enableBits |= vprog->Base.TexturesUsed[unit];
+ enabledVertTargets |= vprog->Base.TexturesUsed[unit];
}
+
if (fprog) {
- enableBits |= fprog->Base.TexturesUsed[unit];
+ enabledFragTargets |= fprog->Base.TexturesUsed[unit];
}
else {
/* fixed-function fragment program */
- enableBits |= texUnit->Enabled;
+ enabledFragTargets |= texUnit->Enabled;
}
- if (enableBits == 0x0)
+ enabledTargets = enabledVertTargets | enabledFragTargets;
+
+ if (enabledTargets == 0x0) {
+ /* neither vertex nor fragment processing uses this unit */
continue;
+ }
texUnit->_Current = NULL;
texUnit->_ReallyEnabled = 0x0;
@@ -557,7 +564,7 @@ update_texture_state( GLcontext *ctx )
* Note that the TEXTURE_x_INDEX values are in high to low priority.
*/
for (texIndex = 0; texIndex < NUM_TEXTURE_TARGETS; texIndex++) {
- if (enableBits & (1 << texIndex)) {
+ if (enabledTargets & (1 << texIndex)) {
struct gl_texture_object *texObj = texUnit->CurrentTex[texIndex];
if (!texObj->_Complete) {
_mesa_test_texobj_completeness(ctx, texObj);
@@ -581,6 +588,9 @@ update_texture_state( GLcontext *ctx )
ctx->Texture._EnabledUnits |= (1 << unit);
+ if (enabledFragTargets)
+ enabledFragUnits |= (1 << unit);
+
update_tex_combine(ctx, texUnit);
}
@@ -592,7 +602,7 @@ update_texture_state( GLcontext *ctx )
= (fprog->Base.InputsRead >> FRAG_ATTRIB_TEX0) & coordMask;
}
else {
- ctx->Texture._EnabledCoordUnits = ctx->Texture._EnabledUnits;
+ ctx->Texture._EnabledCoordUnits = enabledFragUnits;
}
/* Setup texgen for those texture coordinate sets that are in use */
More information about the mesa-commit
mailing list