[Mesa-dev] [PATCH] mesa: use z32f_x24s8 struct in format pack/unpack code
Ian Romanick
idr at freedesktop.org
Tue Feb 14 17:33:24 PST 2012
On 02/13/2012 04:09 PM, Brian Paul wrote:
> As suggested by José.
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> 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;
> }
> }
> break;
> diff --git a/src/mesa/main/format_unpack.c b/src/mesa/main/format_unpack.c
> index a484979..b00e012 100644
> --- a/src/mesa/main/format_unpack.c
> +++ b/src/mesa/main/format_unpack.c
> @@ -29,6 +29,13 @@
> #include "../../gallium/auxiliary/util/u_format_r11g11b10f.h"
>
>
> +/** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */
> +struct z32f_x24s8
> +{
> + float z;
> + uint32_t x24s8;
> +};
> +
>
> /* Expand 1, 2, 3, 4, 5, 6-bit values to fill 8 bits */
>
> @@ -2825,10 +2832,10 @@ unpack_float_z_Z32F(GLuint n, const void *src, GLfloat *dst)
> static void
> unpack_float_z_Z32X24S8(GLuint n, const void *src, GLfloat *dst)
> {
> - const GLfloat *s = ((const GLfloat *) src);
> + const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src;
> GLuint i;
> for (i = 0; i< n; i++) {
> - dst[i] = s[i * 2];
> + dst[i] = s[i].z;
> }
> }
>
> @@ -2929,11 +2936,6 @@ unpack_uint_z_Z32_FLOAT(const void *src, GLuint *dst, GLuint n)
> static void
> unpack_uint_z_Z32_FLOAT_X24S8(const void *src, GLuint *dst, GLuint n)
> {
> - struct z32f_x24s8 {
> - float z;
> - uint32_t x24s8;
> - };
> -
> const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src;
> GLuint i;
>
> @@ -3015,10 +3017,10 @@ static void
> unpack_ubyte_s_Z32_FLOAT_X24S8(const void *src, GLubyte *dst, GLuint n)
> {
> GLuint i;
> - const GLuint *src32 = src;
> + const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src;
>
> for (i = 0; i< n; i++)
> - dst[i] = src32[i * 2 + 1]& 0xff;
> + dst[i] = s[i].x24s8& 0xff;
> }
>
> void
More information about the mesa-dev
mailing list