gallium/format: Add a helper to combine separate Z24 and S8 stencil.

This new function takes separate Z24 depth and S8 stencil sources,
and packs them into a single combined Z24S8 buffer.

Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Kenneth Graunke
2018-07-30 15:20:00 -07:00
parent 5849e0612c
commit c3d219837a
2 changed files with 22 additions and 0 deletions

View File

@@ -448,6 +448,26 @@ 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)
{
unsigned x, y;
for (y = 0; y < height; ++y) {
const uint32_t *z_src = z_src_row;
const uint8_t *s_src = s_src_row;
uint32_t *dst = (uint32_t *)dst_row;
for (x = 0; x < width; ++x) {
*dst++ = (*z_src++ & 0x00ffffff) | (*s_src++ << 24);
}
dst_row += dst_stride / sizeof(*dst_row);
z_src_row += z_src_stride / sizeof(*z_src_row);
s_src_row += s_src_stride / sizeof(*s_src_row);
}
}
void
util_format_s8_uint_z24_unorm_unpack_z_float(float *dst_row, unsigned dst_stride,
const uint8_t *src_row, unsigned src_stride,

View File

@@ -112,6 +112,8 @@ util_format_z24_unorm_s8_uint_unpack_s_8uint(uint8_t *dst_row, unsigned dst_stri
void
util_format_z24_unorm_s8_uint_pack_s_8uint(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_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, const 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);