[Mesa-dev] [PATCH] mesa: use z32f_x24s8 struct in format pack/unpack code

Jose Fonseca jfonseca at vmware.com
Tue Feb 14 06:43:45 PST 2012


Looks a nice cleanup. Thanks. Just one suggestion inline.

----- Original Message -----
> As suggested by José.
> ---
>  src/mesa/main/format_pack.c   |   31 +++++++++++++++++++------------
>  src/mesa/main/format_unpack.c |   20 +++++++++++---------
>  2 files changed, 30 insertions(+), 21 deletions(-)
> 
> diff --git a/src/mesa/main/format_pack.c
> b/src/mesa/main/format_pack.c
> index e20e361..f8c0fae 100644
> --- a/src/mesa/main/format_pack.c
> +++ b/src/mesa/main/format_pack.c
> @@ -42,6 +42,14 @@
>  #include "../../gallium/auxiliary/util/u_format_r11g11b10f.h"
>  
>  
> +/** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */
> +struct z32f_x24s8
> +{
> +   float z;
> +   uint32_t x24s8;
> +};
> +
> +
>  typedef void (*pack_ubyte_rgba_row_func)(GLuint n,
>                                           const GLubyte src[][4],
>                                           void *dst);
>  
> @@ -2372,10 +2380,10 @@ _mesa_pack_float_z_row(gl_format format,
> GLuint n,
>        break;
>     case MESA_FORMAT_Z32_FLOAT_X24S8:
>        {
> -         GLfloat *d = ((GLfloat *) dst);
> +         struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
>           GLuint i;
>           for (i = 0; i < n; i++) {
> -            d[i * 2] = src[i];
> +            d[i].z = src[i];
>           }
>        }
>        break;
> @@ -2445,13 +2453,13 @@ _mesa_pack_uint_z_row(gl_format format,
> GLuint n,
>        break;
>     case MESA_FORMAT_Z32_FLOAT_X24S8:
>        {
> -         GLfloat *d = ((GLfloat *) dst);
> +         struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
>           const GLdouble scale = 1.0 / (GLdouble) 0xffffffff;
>           GLuint i;
>           for (i = 0; i < n; i++) {
> -            d[i * 2] = src[i] * scale;
> -            assert(d[i * 2] >= 0.0f);
> -            assert(d[i * 2] <= 1.0f);
> +            d[i].z = src[i] * scale;
> +            assert(d[i].z >= 0.0f);
> +            assert(d[i].z <= 1.0f);
>           }
>        }
>        break;
> @@ -2495,10 +2503,10 @@ _mesa_pack_ubyte_stencil_row(gl_format
> format, GLuint n,
>        break;
>     case MESA_FORMAT_Z32_FLOAT_X24S8:
>        {
> -         GLuint *d = dst;
> +         struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
>           GLuint i;
>           for (i = 0; i < n; i++) {
> -            d[i * 2 + 1] = src[i];
> +            d[i].x24s8 = src[i];
>           }
>        }
>        break;
> @@ -2533,13 +2541,12 @@
> _mesa_pack_uint_24_8_depth_stencil_row(gl_format format, GLuint n,
>     case MESA_FORMAT_Z32_FLOAT_X24S8:
>        {
>           const GLdouble scale = 1.0 / (GLdouble) 0xffffff;
> -         GLuint *destu = (GLuint *) dst;
> -         GLfloat *destf = (GLfloat *) dst;
> +         struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
>           GLint i;
>           for (i = 0; i < n; i++) {
>              GLfloat z = (src[i] >> 8) * scale;
> -            destf[i * 2 + 0] = z;
> -            destu[i * 2 + 1] = src[i] & 0xff;
> +            d[i].z = z;
> +            d[i].x24s8 = src[i] & 0xff;

"& 0xff" is unnecessary here when writing to x24s8. (All readers must assume the upper bits are undefined.)

Jose


More information about the mesa-dev mailing list