diff options
author | marha <marha@users.sourceforge.net> | 2011-09-26 17:08:48 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-09-26 17:08:48 +0200 |
commit | 95acf9816e008fa46a6c2fa2f35500deb358bb69 (patch) | |
tree | ad86feed38d780515cf9da608c5ea21eed04e17d /mesalib/src/gallium/auxiliary/util/u_format.c | |
parent | 4f67039e9191d5251c39069bd791a05c5cf22022 (diff) | |
parent | 873965b49f283ad028dd4e0e5b7e93a758c84993 (diff) | |
download | vcxsrv-95acf9816e008fa46a6c2fa2f35500deb358bb69.tar.gz vcxsrv-95acf9816e008fa46a6c2fa2f35500deb358bb69.tar.bz2 vcxsrv-95acf9816e008fa46a6c2fa2f35500deb358bb69.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
libXmu/src/CmapAlloc.c
Diffstat (limited to 'mesalib/src/gallium/auxiliary/util/u_format.c')
-rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_format.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/mesalib/src/gallium/auxiliary/util/u_format.c b/mesalib/src/gallium/auxiliary/util/u_format.c index 700382a0f..9bf42583e 100644 --- a/mesalib/src/gallium/auxiliary/util/u_format.c +++ b/mesalib/src/gallium/auxiliary/util/u_format.c @@ -432,6 +432,50 @@ util_format_translate(enum pipe_format dst_format, * TODO: Add a special case for formats that are mere swizzles of each other */ + if (src_format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS || + dst_format_desc->colorspace == UTIL_FORMAT_COLORSPACE_ZS) { + float *tmp_z = NULL; + uint8_t *tmp_s = NULL; + + assert(x_step == 1); + assert(y_step == 1); + + if (src_format_desc->unpack_z_float && + dst_format_desc->pack_z_float) { + tmp_z = MALLOC(width * sizeof *tmp_z); + } + + if (src_format_desc->unpack_s_8uscaled && + dst_format_desc->pack_s_8uscaled) { + tmp_s = MALLOC(width * sizeof *tmp_s); + } + + while (height--) { + if (tmp_z) { + src_format_desc->unpack_z_float(tmp_z, 0, src_row, src_stride, width, 1); + dst_format_desc->pack_z_float(dst_row, dst_stride, tmp_z, 0, width, 1); + } + + if (tmp_s) { + src_format_desc->unpack_s_8uscaled(tmp_s, 0, src_row, src_stride, width, 1); + dst_format_desc->pack_s_8uscaled(dst_row, dst_stride, tmp_s, 0, width, 1); + } + + dst_row += dst_step; + src_row += src_step; + } + + if (tmp_s) { + FREE(tmp_s); + } + + if (tmp_z) { + FREE(tmp_z); + } + + return; + } + if (util_format_fits_8unorm(src_format_desc) || util_format_fits_8unorm(dst_format_desc)) { unsigned tmp_stride; |