[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