gallium/format: add support for X24S8 and S8X24 formats.
these formats are needed for hw that can sample and write stencil values. Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -109,6 +109,8 @@ PIPE_FORMAT_Z32_UNORM , plain, 1, 1, un32, , , , x___,
|
||||
PIPE_FORMAT_Z32_FLOAT , plain, 1, 1, f32 , , , , x___, zs
|
||||
PIPE_FORMAT_Z24_UNORM_S8_USCALED , plain, 1, 1, un24, u8 , , , xy__, zs
|
||||
PIPE_FORMAT_S8_USCALED_Z24_UNORM , plain, 1, 1, u8 , un24, , , yx__, zs
|
||||
PIPE_FORMAT_X24S8_USCALED , plain, 1, 1, x24, u8 , , , _y__, zs
|
||||
PIPE_FORMAT_S8X24_USCALED , plain, 1, 1, u8 , x24 , , , _x__, zs
|
||||
PIPE_FORMAT_Z24X8_UNORM , plain, 1, 1, un24, x8 , , , x___, zs
|
||||
PIPE_FORMAT_X8Z24_UNORM , plain, 1, 1, x8 , un24, , , y___, zs
|
||||
PIPE_FORMAT_Z32_FLOAT_S8X24_USCALED , plain, 1, 1, f32, u8 , x24 , , xy__, zs
|
||||
|
Can't render this file because it contains an unexpected character in line 8 and column 3.
|
@@ -918,3 +918,35 @@ util_format_z32_float_s8x24_uscaled_pack_s_8uscaled(uint8_t *dst_row, unsigned d
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
util_format_x24s8_uscaled_unpack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height)
|
||||
{
|
||||
util_format_z24_unorm_s8_uscaled_unpack_s_8uscaled(dst_row, dst_stride,
|
||||
src_row, src_stride,
|
||||
width, height);
|
||||
}
|
||||
|
||||
void
|
||||
util_format_x24s8_uscaled_pack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height)
|
||||
{
|
||||
util_format_z24_unorm_s8_uscaled_pack_s_8uscaled(dst_row, dst_stride,
|
||||
src_row, src_stride,
|
||||
width, height);
|
||||
}
|
||||
|
||||
void
|
||||
util_format_s8x24_uscaled_unpack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height)
|
||||
{
|
||||
util_format_s8_uscaled_z24_unorm_unpack_s_8uscaled(dst_row, dst_stride,
|
||||
src_row, src_stride,
|
||||
width, height);
|
||||
}
|
||||
|
||||
void
|
||||
util_format_s8x24_uscaled_pack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height)
|
||||
{
|
||||
util_format_s8_uscaled_z24_unorm_pack_s_8uscaled(dst_row, dst_stride,
|
||||
src_row, src_stride,
|
||||
width, height);
|
||||
}
|
||||
|
@@ -192,5 +192,16 @@ util_format_z32_float_s8x24_uscaled_unpack_s_8uscaled(uint8_t *dst_row, unsigned
|
||||
void
|
||||
util_format_z32_float_s8x24_uscaled_pack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height);
|
||||
|
||||
void
|
||||
util_format_x24s8_uscaled_unpack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height);
|
||||
|
||||
void
|
||||
util_format_x24s8_uscaled_pack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height);
|
||||
|
||||
void
|
||||
util_format_s8x24_uscaled_unpack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height);
|
||||
|
||||
void
|
||||
util_format_s8x24_uscaled_pack_s_8uscaled(uint8_t *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height);
|
||||
|
||||
#endif /* U_FORMAT_ZS_H_ */
|
||||
|
@@ -217,6 +217,57 @@ z24s8_get_tile_rgba(const unsigned *src,
|
||||
}
|
||||
}
|
||||
|
||||
/*** PIPE_FORMAT_S8X24_USCALED ***/
|
||||
|
||||
/**
|
||||
* Return S component as four uint32_t in [0..255]. Z part ignored.
|
||||
*/
|
||||
static void
|
||||
s8x24_get_tile_rgba(const unsigned *src,
|
||||
unsigned w, unsigned h,
|
||||
float *p,
|
||||
unsigned dst_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
float *pRow = p;
|
||||
|
||||
for (j = 0; j < w; j++, pRow += 4) {
|
||||
pRow[0] =
|
||||
pRow[1] =
|
||||
pRow[2] =
|
||||
pRow[3] = (float)((*src++ >> 24) & 0xff);
|
||||
}
|
||||
|
||||
p += dst_stride;
|
||||
}
|
||||
}
|
||||
|
||||
/*** PIPE_FORMAT_X24S8_USCALED ***/
|
||||
|
||||
/**
|
||||
* Return S component as four uint32_t in [0..255]. Z part ignored.
|
||||
*/
|
||||
static void
|
||||
x24s8_get_tile_rgba(const unsigned *src,
|
||||
unsigned w, unsigned h,
|
||||
float *p,
|
||||
unsigned dst_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
float *pRow = p;
|
||||
for (j = 0; j < w; j++, pRow += 4) {
|
||||
pRow[0] =
|
||||
pRow[1] =
|
||||
pRow[2] =
|
||||
pRow[3] = (float)(*src++ & 0xff);
|
||||
}
|
||||
p += dst_stride;
|
||||
}
|
||||
}
|
||||
|
||||
/*** PIPE_FORMAT_Z32_FLOAT ***/
|
||||
|
||||
@@ -261,10 +312,16 @@ pipe_tile_raw_to_rgba(enum pipe_format format,
|
||||
case PIPE_FORMAT_Z24X8_UNORM:
|
||||
s8z24_get_tile_rgba((unsigned *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_X24S8_USCALED:
|
||||
s8x24_get_tile_rgba((unsigned *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
|
||||
case PIPE_FORMAT_X8Z24_UNORM:
|
||||
z24s8_get_tile_rgba((unsigned *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_S8X24_USCALED:
|
||||
x24s8_get_tile_rgba((unsigned *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_Z32_FLOAT:
|
||||
z32f_get_tile_rgba((float *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
|
@@ -1499,6 +1499,8 @@ well.
|
||||
| Z | XXX TBD | (z, z, z, 1) | (0, z, 0, 1) |
|
||||
| | | [#depth-tex-mode]_ | |
|
||||
+--------------------+--------------+--------------------+--------------+
|
||||
| S | (s, s, s, s) | unknown | unknown |
|
||||
+--------------------+--------------+--------------------+--------------+
|
||||
|
||||
.. [#envmap-bumpmap] http://www.opengl.org/registry/specs/ATI/envmap_bumpmap.txt
|
||||
.. [#depth-tex-mode] the default is (z, z, z, 1) but may also be (0, 0, 0, z)
|
||||
|
@@ -186,6 +186,9 @@ enum pipe_format {
|
||||
PIPE_FORMAT_R8G8B8X8_UNORM = 134,
|
||||
PIPE_FORMAT_B4G4R4X4_UNORM = 135,
|
||||
|
||||
/* some stencil samplers formats */
|
||||
PIPE_FORMAT_X24S8_USCALED = 136,
|
||||
PIPE_FORMAT_S8X24_USCALED = 137,
|
||||
PIPE_FORMAT_COUNT
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user