[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