swrast: handle additional Z24 formats in read_depth_pixels()

This commit is contained in:
Brian Paul 2009-11-11 19:37:53 -07:00
parent 7dfea5c072
commit 0a39620d6d

View file

@ -120,8 +120,12 @@ read_depth_pixels( GLcontext *ctx,
&& !biasOrScale && !packing->SwapBytes) {
/* Special case: directly read 24-bit unsigned depth values. */
GLint j;
ASSERT(rb->Format == MESA_FORMAT_X8_Z24);
ASSERT(rb->DataType == GL_UNSIGNED_INT);
ASSERT(rb->Format == MESA_FORMAT_X8_Z24 ||
rb->Format == MESA_FORMAT_S8_Z24 ||
rb->Format == MESA_FORMAT_Z24_X8 ||
rb->Format == MESA_FORMAT_Z24_S8);
ASSERT(rb->DataType == GL_UNSIGNED_INT ||
rb->DataType == GL_UNSIGNED_INT_24_8);
for (j = 0; j < height; j++, y++) {
GLuint *dest = (GLuint *)
_mesa_image_address2d(packing, pixels, width, height,
@ -129,9 +133,18 @@ read_depth_pixels( GLcontext *ctx,
GLint k;
rb->GetRow(ctx, rb, width, x, y, dest);
/* convert range from 24-bit to 32-bit */
for (k = 0; k < width; k++) {
/* Note: put MSByte of 24-bit value into LSByte */
dest[k] = (dest[k] << 8) | ((dest[k] >> 16) & 0xff);
if (rb->Format == MESA_FORMAT_X8_Z24 ||
rb->Format == MESA_FORMAT_S8_Z24) {
for (k = 0; k < width; k++) {
/* Note: put MSByte of 24-bit value into LSByte */
dest[k] = (dest[k] << 8) | ((dest[k] >> 16) & 0xff);
}
}
else {
for (k = 0; k < width; k++) {
/* Note: fill in LSByte by replication */
dest[k] = dest[k] | ((dest[k] >> 8) & 0xff);
}
}
}
}