[Mesa-dev] [PATCH 4/6] mesa: optimize _math_matrix_set_identity() and return a bool result

Ian Romanick idr at freedesktop.org
Mon Jul 20 11:33:20 PDT 2015


On 07/17/2015 05:48 PM, Brian Paul wrote:
> Skip memcpy() calls, etc. if the matrix is already the identity.  Return
> true/false to indicate if we're really changing the matrix or not.
> ---
>  src/mesa/math/m_matrix.c | 23 +++++++++++++++--------
>  src/mesa/math/m_matrix.h |  2 +-
>  2 files changed, 16 insertions(+), 9 deletions(-)
> 
> diff --git a/src/mesa/math/m_matrix.c b/src/mesa/math/m_matrix.c
> index ecf564c..37c7612 100644
> --- a/src/mesa/math/m_matrix.c
> +++ b/src/mesa/math/m_matrix.c
> @@ -1132,17 +1132,24 @@ _math_matrix_viewport(GLmatrix *m, const double scale[3],
>   *
>   * Copies ::Identity into \p GLmatrix::m, and into GLmatrix::inv if not NULL.
>   * Sets the matrix type to identity, and clear the dirty flags.
> + * \return true if prev matrix wasn't identity, false otherwise
>   */
> -void
> -_math_matrix_set_identity( GLmatrix *mat )
> +bool
> +_math_matrix_set_identity(GLmatrix *mat)
>  {
> -   memcpy( mat->m, Identity, 16*sizeof(GLfloat) );
> -   memcpy( mat->inv, Identity, 16*sizeof(GLfloat) );
> +   if (mat->type != MATRIX_IDENTITY || mat->flags) {
> +      memcpy(mat->m, Identity, 16 * sizeof(GLfloat));
> +      memcpy(mat->inv, Identity, 16 * sizeof(GLfloat));
> +
> +      mat->type = MATRIX_IDENTITY;
> +      mat->flags = 0;
>  
> -   mat->type = MATRIX_IDENTITY;
> -   mat->flags &= ~(MAT_DIRTY_FLAGS|
> -		   MAT_DIRTY_TYPE|
> -		   MAT_DIRTY_INVERSE);
> +      return true;
> +   }
> +   else {

Most places use

   } else {

these days.

> +      /* no change */
> +      return false;
> +   }
>  }
>  
>  /*@}*/
> diff --git a/src/mesa/math/m_matrix.h b/src/mesa/math/m_matrix.h
> index 778d716..0bb63c8 100644
> --- a/src/mesa/math/m_matrix.h
> +++ b/src/mesa/math/m_matrix.h
> @@ -125,7 +125,7 @@ extern void
>  _math_matrix_viewport( GLmatrix *m, const double scale[3],
>                         const double translate[3], double depthMax );
>  
> -extern void
> +extern bool
>  _math_matrix_set_identity( GLmatrix *dest );
>  
>  extern void
> 



More information about the mesa-dev mailing list