mesa: don't update fixed-func programs on irrelevant _NEW_POINT changes

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:
Marek Olšák 2021-02-03 13:13:51 -05:00 committed by Marge Bot
parent 9fa766adbe
commit 15580e85cc
5 changed files with 10 additions and 7 deletions

View File

@ -1049,7 +1049,7 @@ _mesa_PopAttrib(void)
}
if (ctx->Extensions.ARB_point_sprite) {
if (ctx->Point.CoordReplace != attr->Point.CoordReplace) {
ctx->NewState |= _NEW_POINT;
ctx->NewState |= _NEW_POINT | _NEW_FF_VERT_PROGRAM;
ctx->Point.CoordReplace = attr->Point.CoordReplace;
if (ctx->Driver.TexEnv) {

View File

@ -1089,7 +1089,8 @@ _mesa_set_enable(struct gl_context *ctx, GLenum cap, GLboolean state)
goto invalid_enum_error;
if (ctx->Point.PointSprite == state)
return;
FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT | GL_ENABLE_BIT);
FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM |
_NEW_FF_FRAG_PROGRAM, GL_POINT_BIT | GL_ENABLE_BIT);
ctx->Point.PointSprite = state;
break;

View File

@ -130,7 +130,7 @@ _mesa_PointParameterfv( GLenum pname, const GLfloat *params)
case GL_DISTANCE_ATTENUATION_EXT:
if (TEST_EQ_3V(ctx->Point.Params, params))
return;
FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT);
FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM, GL_POINT_BIT);
COPY_3V(ctx->Point.Params, params);
ctx->Point._Attenuated = (ctx->Point.Params[0] != 1.0F ||
ctx->Point.Params[1] != 0.0F ||

View File

@ -488,12 +488,12 @@ _mesa_update_state_locked( struct gl_context *ctx )
if (ctx->FragmentProgram._UsesTexEnvProgram) {
prog_flags |= _NEW_BUFFERS | _NEW_TEXTURE_OBJECT | _NEW_FOG |
_NEW_FF_FRAG_PROGRAM | _NEW_POINT | _NEW_RENDERMODE |
_NEW_FF_FRAG_PROGRAM | _NEW_RENDERMODE |
_NEW_COLOR | _NEW_TEXTURE_STATE;
}
if (ctx->VertexProgram._UsesTnlProgram)
prog_flags |= _NEW_FF_VERT_PROGRAM | _NEW_POINT | _NEW_FOG;
prog_flags |= _NEW_FF_VERT_PROGRAM | _NEW_FOG;
if (new_state & prog_flags) {
/* When we generate programs from fixed-function vertex/fragment state

View File

@ -490,12 +490,14 @@ _mesa_texenvfv_indexed( struct gl_context* ctx, GLuint texunit, GLenum target,
if (iparam0 == GL_TRUE) {
if (ctx->Point.CoordReplace & (1u << texunit))
return;
FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT);
FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM,
GL_POINT_BIT);
ctx->Point.CoordReplace |= (1u << texunit);
} else if (iparam0 == GL_FALSE) {
if (~(ctx->Point.CoordReplace) & (1u << texunit))
return;
FLUSH_VERTICES(ctx, _NEW_POINT, GL_POINT_BIT);
FLUSH_VERTICES(ctx, _NEW_POINT | _NEW_FF_VERT_PROGRAM,
GL_POINT_BIT);
ctx->Point.CoordReplace &= ~(1u << texunit);
} else {
_mesa_error( ctx, GL_INVALID_VALUE, "glTexEnv(param=0x%x)", iparam0);