From 862d014ba91f0b959465a48005e94f530f0374a5 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 16 Apr 2010 14:08:15 -0600 Subject: [PATCH] llvmpipe: fix color masking --- src/gallium/drivers/llvmpipe/lp_state_fs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index eee4f12bc0e..6aa1e581bb3 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c +++ b/src/gallium/drivers/llvmpipe/lp_state_fs.c @@ -1117,14 +1117,16 @@ make_variant_key(struct llvmpipe_context *lp, assert(format_desc->layout == UTIL_FORMAT_COLORSPACE_RGB || format_desc->layout == UTIL_FORMAT_COLORSPACE_SRGB); + key->blend.rt[i].colormask = lp->blend->rt[i].colormask; + /* mask out color channels not present in the color buffer. * Should be simple to incorporate per-cbuf writemasks: */ for(chan = 0; chan < 4; ++chan) { enum util_format_swizzle swizzle = format_desc->swizzle[chan]; - if(swizzle <= UTIL_FORMAT_SWIZZLE_W) - key->blend.rt[0].colormask |= (1 << chan); + if(swizzle > UTIL_FORMAT_SWIZZLE_W) + key->blend.rt[i].colormask &= ~(1 << chan); } }