On Fri, Jul 17, 2015 at 5:48 PM, Brian Paul <bri...@vmware.com> wrote: > Google Earth often calls glLoadMatrixf() with an identity matrix instead > of glLoadIdentity() to set the modelview and texture matrices. In many > cases, the matrix is already the identity so the calls are redundant. > > By being a bit smarter in _mesa_LoadMatrixf() we can avoid quite a few > matrix-related state validations. > --- > src/mesa/main/matrix.c | 23 ++++++++++++++++++++--- > 1 file changed, 20 insertions(+), 3 deletions(-) > > diff --git a/src/mesa/main/matrix.c b/src/mesa/main/matrix.c > index 5ac97f8..e6bdff8 100644 > --- a/src/mesa/main/matrix.c > +++ b/src/mesa/main/matrix.c > @@ -330,8 +330,16 @@ _mesa_LoadIdentity( void ) > void GLAPIENTRY > _mesa_LoadMatrixf( const GLfloat *m ) > { > + static const GLfloat identity[16] = { > + 1.0f, 0.0f, 0.0f, 0.0f, > + 0.0f, 1.0f, 0.0f, 0.0f, > + 0.0f, 0.0f, 1.0f, 0.0f, > + 0.0f, 0.0f, 0.0f, 1.0f }; > GET_CURRENT_CONTEXT(ctx); > - if (!m) return; > + > + if (!m) > + return; > + > if (MESA_VERBOSE & VERBOSE_API) > _mesa_debug(ctx, > "glLoadMatrix(%f %f %f %f, %f %f %f %f, %f %f %f %f, %f %f %f > %f\n", > @@ -341,8 +349,17 @@ _mesa_LoadMatrixf( const GLfloat *m ) > m[3], m[7], m[11], m[15]); > > FLUSH_VERTICES(ctx, 0); > - _math_matrix_loadf( ctx->CurrentStack->Top, m ); > - ctx->NewState |= ctx->CurrentStack->DirtyFlag; > + > + if (memcmp(m, identity, sizeof(identity)) == 0) { > + /* Setting the identity matrix */ > + if (_math_matrix_set_identity(ctx->CurrentStack->Top)) { > + ctx->NewState |= ctx->CurrentStack->DirtyFlag; > + } > + } > + else { > + _math_matrix_loadf(ctx->CurrentStack->Top, m); > + ctx->NewState |= ctx->CurrentStack->DirtyFlag; > + } > } > > > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
Series is: Reviewed-by: Anuj Phogat <anuj.pho...@gmail.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev