mesa: Support Z24S8 wherever S8Z24 is supported.
This commit is contained in:
@@ -686,6 +686,17 @@ draw_stencil_pixels(GLcontext *ctx, GLint x, GLint y,
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z24S8_UNORM:
|
||||
{
|
||||
uint *dest = (uint *) (stmap + spanY * pt->stride + spanX*4);
|
||||
GLint k;
|
||||
for (k = 0; k < spanWidth; k++) {
|
||||
uint p = dest[k];
|
||||
p = (p & 0xffffff00) | (values[k] & 0xff);
|
||||
dest[k] = p;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
}
|
||||
@@ -821,6 +832,16 @@ copy_stencil_pixels(GLcontext *ctx, GLint srcx, GLint srcy,
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z24S8_UNORM:
|
||||
{
|
||||
uint *dst4 = (uint *) dst;
|
||||
int j;
|
||||
for (j = 0; j < width; j++) {
|
||||
*dst4 = (*dst4 & 0xffffff00) | (src[j] & 0xff);
|
||||
dst4++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_S8_UNORM:
|
||||
memcpy(dst, src, width);
|
||||
break;
|
||||
|
||||
@@ -420,6 +420,33 @@ st_readpixels(GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height,
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (trans->format == PIPE_FORMAT_Z24S8_UNORM ||
|
||||
trans->format == PIPE_FORMAT_Z24X8_UNORM) {
|
||||
if (format == GL_DEPTH_COMPONENT) {
|
||||
for (i = 0; i < height; i++) {
|
||||
GLuint ztemp[MAX_WIDTH];
|
||||
GLfloat zfloat[MAX_WIDTH];
|
||||
const double scale = 1.0 / ((1 << 24) - 1);
|
||||
pipe_get_tile_raw(trans, 0, y, width, 1, ztemp, 0);
|
||||
y += yStep;
|
||||
for (j = 0; j < width; j++) {
|
||||
zfloat[j] = (float) (scale * ((ztemp[j] >> 8) & 0xffffff));
|
||||
}
|
||||
_mesa_pack_depth_span(ctx, width, dst, type,
|
||||
zfloat, &clippedPacking);
|
||||
dst += dstStride;
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* untested, but simple: */
|
||||
assert(format == GL_DEPTH_STENCIL_EXT);
|
||||
for (i = 0; i < height; i++) {
|
||||
pipe_get_tile_raw(trans, 0, y, width, 1, dst, 0);
|
||||
y += yStep;
|
||||
dst += dstStride;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (trans->format == PIPE_FORMAT_Z16_UNORM) {
|
||||
for (i = 0; i < height; i++) {
|
||||
GLushort ztemp[MAX_WIDTH];
|
||||
|
||||
Reference in New Issue
Block a user