gallium: Add utility helper for packing combined depth/stencil values.

This commit is contained in:
Michel Dänzer
2009-04-04 16:04:59 +02:00
parent b0ce915186
commit ba14b043bc
2 changed files with 23 additions and 13 deletions

View File

@@ -440,6 +440,26 @@ util_pack_z(enum pipe_format format, double z)
return 0; return 0;
} }
} }
/**
* Note: it's assumed that z is in [0,1] and s in [0,255]
*/
static INLINE uint
util_pack_z_stencil(enum pipe_format format, double z, uint s)
{
switch (format) {
case PIPE_FORMAT_S8Z24_UNORM:
return util_pack_z(format, z) | s << 24;
case PIPE_FORMAT_Z24S8_UNORM:
return util_pack_z(format, z) | s;
default:
debug_print_format("gallium: unhandled format in util_pack_z_stencil()",
format);
assert(0);
return 0;
}
}
/** /**

View File

@@ -460,19 +460,9 @@ clear_depth_stencil_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
} }
else { else {
/* clear whole buffer w/out masking */ /* clear whole buffer w/out masking */
GLuint clearValue = util_pack_z(strb->surface->format, ctx->Depth.Clear); GLuint clearValue = util_pack_z_stencil(strb->surface->format,
ctx->Depth.Clear,
switch (strb->surface->format) { ctx->Stencil.Clear);
case PIPE_FORMAT_S8Z24_UNORM:
clearValue |= ctx->Stencil.Clear << 24;
break;
case PIPE_FORMAT_Z24S8_UNORM:
clearValue |= ctx->Stencil.Clear;
break;
default:
assert(0);
}
ctx->st->pipe->clear(ctx->st->pipe, strb->surface, clearValue); ctx->st->pipe->clear(ctx->st->pipe, strb->surface, clearValue);
} }
} }