mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
mesa: remove the fixed-func vert prog dependency on all texture states
Just flag _NEW_FF_VERT_PROGRAM where needed. There are only a few places that must do it. Also do the same with _NEW_FF_FRAG_PROGRAM, but this is not sufficient for the ff frag prog to ignore texture states. Reviewed-by: Zoltán Böszörményi <zboszor@gmail.com> Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8850>
This commit is contained in:
parent
06a8f852f7
commit
8dd4adc1e5
8 changed files with 29 additions and 12 deletions
|
|
@ -1206,7 +1206,8 @@ _mesa_PopAttrib(void)
|
|||
|
||||
if (mask & GL_TEXTURE_BIT) {
|
||||
pop_texture_group(ctx, &attr->Texture);
|
||||
ctx->NewState |= _NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE;
|
||||
ctx->NewState |= _NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE |
|
||||
_NEW_FF_VERT_PROGRAM | _NEW_FF_FRAG_PROGRAM;
|
||||
}
|
||||
|
||||
if (mask & GL_VIEWPORT_BIT) {
|
||||
|
|
|
|||
|
|
@ -936,7 +936,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
|
|||
newenabled |= coordBit;
|
||||
if (texUnit->TexGenEnabled == newenabled)
|
||||
return;
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE,
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE | _NEW_FF_VERT_PROGRAM |
|
||||
_NEW_FF_FRAG_PROGRAM,
|
||||
GL_TEXTURE_BIT | GL_ENABLE_BIT);
|
||||
texUnit->TexGenEnabled = newenabled;
|
||||
}
|
||||
|
|
@ -958,7 +959,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
|
|||
newenabled |= STR_BITS;
|
||||
if (texUnit->TexGenEnabled == newenabled)
|
||||
return;
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE, 0);
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE | _NEW_FF_VERT_PROGRAM |
|
||||
_NEW_FF_FRAG_PROGRAM, 0);
|
||||
texUnit->TexGenEnabled = newenabled;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -192,7 +192,6 @@ static GLbitfield filter_fp_input_mask( GLbitfield fp_inputs,
|
|||
possible_inputs = VARYING_BITS_TEX_ANY;
|
||||
}
|
||||
else {
|
||||
/* _NEW_TEXTURE_STATE */
|
||||
const GLbitfield possible_tex_inputs =
|
||||
ctx->Texture._TexGenEnabled |
|
||||
ctx->Texture._TexMatEnabled |
|
||||
|
|
|
|||
|
|
@ -4672,7 +4672,8 @@ struct gl_matrix_stack
|
|||
_NEW_FF_VERT_PROGRAM | \
|
||||
_NEW_FF_FRAG_PROGRAM)
|
||||
|
||||
#define _NEW_TEXTURE (_NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE)
|
||||
#define _NEW_TEXTURE (_NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE | \
|
||||
_NEW_FF_VERT_PROGRAM | _NEW_FF_FRAG_PROGRAM)
|
||||
|
||||
#define _MESA_NEW_NEED_EYE_COORDS (_NEW_FF_VERT_PROGRAM | \
|
||||
_NEW_FF_FRAG_PROGRAM | \
|
||||
|
|
|
|||
|
|
@ -460,7 +460,7 @@ _mesa_update_state_locked( struct gl_context *ctx )
|
|||
_mesa_update_texture_matrices(ctx);
|
||||
|
||||
if (new_state & (_NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE | _NEW_PROGRAM))
|
||||
_mesa_update_texture_state(ctx);
|
||||
new_state |= _mesa_update_texture_state(ctx);
|
||||
|
||||
if (new_state & _NEW_LIGHT_CONSTANTS)
|
||||
_mesa_update_lighting(ctx);
|
||||
|
|
@ -496,9 +496,8 @@ _mesa_update_state_locked( struct gl_context *ctx )
|
|||
}
|
||||
|
||||
if (ctx->VertexProgram._UsesTnlProgram) {
|
||||
prog_flags |= _NEW_FF_VERT_PROGRAM | _NEW_TEXTURE_OBJECT |
|
||||
_NEW_TEXTURE_MATRIX | _NEW_TRANSFORM | _NEW_POINT |
|
||||
_NEW_FOG | _NEW_TEXTURE_STATE;
|
||||
prog_flags |= _NEW_FF_VERT_PROGRAM | _NEW_TEXTURE_MATRIX |
|
||||
_NEW_TRANSFORM | _NEW_POINT | _NEW_FOG;
|
||||
}
|
||||
|
||||
if (new_state & prog_flags) {
|
||||
|
|
|
|||
|
|
@ -129,7 +129,8 @@ texgenfv( GLuint texunitIndex, GLenum coord, GLenum pname,
|
|||
return;
|
||||
}
|
||||
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE, GL_TEXTURE_BIT);
|
||||
FLUSH_VERTICES(ctx, _NEW_TEXTURE_STATE | _NEW_FF_VERT_PROGRAM,
|
||||
GL_TEXTURE_BIT);
|
||||
texgen->Mode = mode;
|
||||
texgen->_ModeBit = bit;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -879,7 +879,7 @@ fix_missing_textures_for_atifs(struct gl_context *ctx,
|
|||
*
|
||||
* \param ctx GL context.
|
||||
*/
|
||||
void
|
||||
GLbitfield
|
||||
_mesa_update_texture_state(struct gl_context *ctx)
|
||||
{
|
||||
struct gl_program *prog[MESA_SHADER_STAGES];
|
||||
|
|
@ -897,6 +897,10 @@ _mesa_update_texture_state(struct gl_context *ctx)
|
|||
/* TODO: only set this if there are actual changes */
|
||||
ctx->NewState |= _NEW_TEXTURE_OBJECT | _NEW_TEXTURE_STATE;
|
||||
|
||||
GLbitfield old_enabled_coord_units = ctx->Texture._EnabledCoordUnits;
|
||||
GLbitfield old_texgen_enabled = ctx->Texture._TexGenEnabled;
|
||||
GLbitfield old_texmat_enabled = ctx->Texture._TexMatEnabled;
|
||||
|
||||
ctx->Texture._GenFlags = 0x0;
|
||||
ctx->Texture._TexMatEnabled = 0x0;
|
||||
ctx->Texture._TexGenEnabled = 0x0;
|
||||
|
|
@ -935,6 +939,16 @@ _mesa_update_texture_state(struct gl_context *ctx)
|
|||
|
||||
if (!prog[MESA_SHADER_FRAGMENT] || !prog[MESA_SHADER_VERTEX])
|
||||
update_texgen(ctx);
|
||||
|
||||
GLbitfield new_state = 0;
|
||||
|
||||
if (old_enabled_coord_units != ctx->Texture._EnabledCoordUnits ||
|
||||
old_texgen_enabled != ctx->Texture._TexGenEnabled ||
|
||||
old_texmat_enabled != ctx->Texture._TexMatEnabled) {
|
||||
new_state |= _NEW_FF_VERT_PROGRAM | _NEW_FF_FRAG_PROGRAM;
|
||||
}
|
||||
|
||||
return new_state;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ _mesa_ClientActiveTexture( GLenum target );
|
|||
extern void
|
||||
_mesa_update_texture_matrices(struct gl_context *ctx);
|
||||
|
||||
extern void
|
||||
extern GLbitfield
|
||||
_mesa_update_texture_state(struct gl_context *ctx);
|
||||
|
||||
extern GLboolean
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue