From 5a9eba4acd0b202967d312851a3cc143275fb653 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Fri, 19 Jun 2020 16:44:09 +1000 Subject: [PATCH] util/format: add some ZS helpers for vallium The vallium layer has a requirement to insert and extra the 24-bit unorm value as a unorm value (not as a float etc). Add helpers to facilitate that. Reviewed-by: Roland Scheidegger Part-of: --- src/util/format/u_format_zs.c | 40 +++++++++++++++++++++++++++++++++++ src/util/format/u_format_zs.h | 6 ++++++ 2 files changed, 46 insertions(+) diff --git a/src/util/format/u_format_zs.c b/src/util/format/u_format_zs.c index bbd7e02e563..197e881dbc0 100644 --- a/src/util/format/u_format_zs.c +++ b/src/util/format/u_format_zs.c @@ -419,6 +419,46 @@ util_format_z24_unorm_s8_uint_pack_z_float(uint8_t *dst_row, unsigned dst_stride } } + +void +util_format_z24_unorm_s8_uint_unpack_z24(uint8_t *dst_row, unsigned dst_stride, + const uint8_t *src_row, unsigned src_stride, + unsigned width, unsigned height) +{ + unsigned x, y; + for(y = 0; y < height; ++y) { + uint32_t *dst = (uint32_t *)dst_row; + const uint32_t *src = (const uint32_t *)src_row; + for(x = 0; x < width; ++x) { + uint32_t value = util_cpu_to_le32(*src++); + *dst++ = (value & 0xffffff); + } + src_row += src_stride/sizeof(*src_row); + dst_row += dst_stride/sizeof(*dst_row); + } +} + +void +util_format_z24_unorm_s8_uint_pack_z24(uint8_t *dst_row, unsigned dst_stride, + const uint8_t *src_row, unsigned src_stride, + unsigned width, unsigned height) +{ + unsigned x, y; + for(y = 0; y < height; ++y) { + const uint32_t *src = (const uint32_t *)src_row; + uint32_t *dst = (uint32_t *)dst_row; + for(x = 0; x < width; ++x) { + uint32_t value = util_le32_to_cpu(*dst); + value &= 0xff000000; + value |= *src & 0xffffff; + src++; + *dst++ = util_cpu_to_le32(value); + } + dst_row += dst_stride/sizeof(*dst_row); + src_row += src_stride/sizeof(*src_row); + } +} + void util_format_z24_unorm_s8_uint_unpack_z_32unorm(uint32_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, diff --git a/src/util/format/u_format_zs.h b/src/util/format/u_format_zs.h index 61fb960f9c1..87df7a4ff58 100644 --- a/src/util/format/u_format_zs.h +++ b/src/util/format/u_format_zs.h @@ -115,6 +115,12 @@ util_format_z24_unorm_s8_uint_pack_s_8uint(uint8_t *dst_row, unsigned dst_stride void util_format_z24_unorm_s8_uint_pack_separate(uint8_t *dst_row, unsigned dst_stride, const uint32_t *z_src_row, unsigned z_src_stride, const uint8_t *s_src_row, unsigned s_src_stride, unsigned width, unsigned height); +void +util_format_z24_unorm_s8_uint_unpack_z24(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height); + +void +util_format_z24_unorm_s8_uint_pack_z24(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height); + void util_format_s8_uint_z24_unorm_unpack_z_float(float *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height); -- 2.30.2