res = lp_build_select(bld, front_facing, res, back_res);
}
- /* XXX what about the back-face writemask? */
- if (stencil[0].writemask != 0xff) {
+ if (stencil[0].writemask != 0xff ||
+ (stencil[1].enabled && front_facing != NULL && stencil[1].writemask != 0xff)) {
/* mask &= stencil[0].writemask */
LLVMValueRef writemask = lp_build_const_int_vec(bld->gallivm, bld->type,
stencil[0].writemask);
+ if (stencil[1].enabled && stencil[1].writemask != stencil[0].writemask && front_facing != NULL) {
+ LLVMValueRef back_writemask = lp_build_const_int_vec(bld->gallivm, bld->type,
+ stencil[1].writemask);
+ writemask = lp_build_select(bld, front_facing, writemask, back_writemask);
+ }
+
mask = LLVMBuildAnd(builder, mask, writemask, "");
/* res = (res & mask) | (stencilVals & ~mask) */
res = lp_build_select_bitwise(bld, mask, res, stencilVals);