mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
mesa: fixed computation of _EnabledCoordUnits
This field should not include vertex textures. It indicates the coord inputs for fragment / fixed-function processing.
This commit is contained in:
parent
e30f765763
commit
e68208f262
1 changed files with 18 additions and 8 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue