mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-01 22:40:09 +01:00
mesa: implement packing of DEPTH_STENCIL & FLOAT_32_UNSIGNED_INT_24_8_REV combo
Tested with the new piglit fbo-depthstencil test.
This commit is contained in:
parent
91a52dae97
commit
01f48a979d
4 changed files with 20 additions and 9 deletions
|
|
@ -5056,10 +5056,11 @@ _mesa_pack_depth_span( struct gl_context *ctx, GLuint n, GLvoid *dest,
|
|||
|
||||
|
||||
/**
|
||||
* Pack depth and stencil values as GL_DEPTH_STENCIL/GL_UNSIGNED_INT_24_8.
|
||||
* Pack depth and stencil values as GL_DEPTH_STENCIL (GL_UNSIGNED_INT_24_8 etc)
|
||||
*/
|
||||
void
|
||||
_mesa_pack_depth_stencil_span(struct gl_context *ctx, GLuint n, GLuint *dest,
|
||||
_mesa_pack_depth_stencil_span(struct gl_context *ctx,GLuint n,
|
||||
GLenum dstType, GLuint *dest,
|
||||
const GLfloat *depthVals,
|
||||
const GLstencil *stencilVals,
|
||||
const struct gl_pixelstore_attrib *dstPacking)
|
||||
|
|
@ -5089,9 +5090,19 @@ _mesa_pack_depth_stencil_span(struct gl_context *ctx, GLuint n, GLuint *dest,
|
|||
stencilVals = stencilCopy;
|
||||
}
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
GLuint z = (GLuint) (depthVals[i] * 0xffffff);
|
||||
dest[i] = (z << 8) | (stencilVals[i] & 0xff);
|
||||
switch (dstType) {
|
||||
case GL_UNSIGNED_INT_24_8:
|
||||
for (i = 0; i < n; i++) {
|
||||
GLuint z = (GLuint) (depthVals[i] * 0xffffff);
|
||||
dest[i] = (z << 8) | (stencilVals[i] & 0xff);
|
||||
}
|
||||
break;
|
||||
case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
|
||||
for (i = 0; i < n; i++) {
|
||||
((GLfloat*)dest)[i*2] = depthVals[i];
|
||||
dest[i*2+1] = stencilVals[i] & 0xff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (dstPacking->SwapBytes) {
|
||||
|
|
|
|||
|
|
@ -130,8 +130,8 @@ _mesa_pack_depth_span(struct gl_context *ctx, GLuint n, GLvoid *dest,
|
|||
|
||||
|
||||
extern void
|
||||
_mesa_pack_depth_stencil_span(struct gl_context *ctx,
|
||||
GLuint n, GLuint *dest,
|
||||
_mesa_pack_depth_stencil_span(struct gl_context *ctx,GLuint n,
|
||||
GLenum dstType, GLuint *dest,
|
||||
const GLfloat *depthVals,
|
||||
const GLstencil *stencilVals,
|
||||
const struct gl_pixelstore_attrib *dstPacking);
|
||||
|
|
|
|||
|
|
@ -177,7 +177,7 @@ st_read_stencil_pixels(struct gl_context *ctx, GLint x, GLint y,
|
|||
dest = _mesa_image_address2d(packing, pixels, width, height,
|
||||
format, type, j, 0);
|
||||
if (format == GL_DEPTH_STENCIL) {
|
||||
_mesa_pack_depth_stencil_span(ctx, width, dest,
|
||||
_mesa_pack_depth_stencil_span(ctx, width, type, dest,
|
||||
zValues, sValues, packing);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -446,7 +446,7 @@ read_depth_stencil_pixels(struct gl_context *ctx,
|
|||
GLfloat depthVals[MAX_WIDTH];
|
||||
_swrast_read_depth_span_float(ctx, depthRb, width, x, y + i,
|
||||
depthVals);
|
||||
_mesa_pack_depth_stencil_span(ctx, width, depthStencilDst,
|
||||
_mesa_pack_depth_stencil_span(ctx, width, type, depthStencilDst,
|
||||
depthVals, stencilVals, packing);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue