--- a/src/nv10_exa.c +++ b/src/nv10_exa.c @@ -626,21 +626,6 @@ int src_factor = nv10_op->src; int dst_factor = nv10_op->dst; - if (src_factor == SF(ONE_MINUS_DST_ALPHA) && - !PICT_FORMAT_A(pNv->pdpict->format)) - /* ONE_MINUS_DST_ALPHA doesn't always do the right thing for - * framebuffers without alpha channel. But it's the same as - * ZERO in that case. - */ - src_factor = SF(ZERO); - - if (effective_component_alpha(pNv->pmpict)) { - if (dst_factor == DF(SRC_ALPHA)) - dst_factor = DF(SRC_COLOR); - else if (dst_factor == DF(ONE_MINUS_SRC_ALPHA)) - dst_factor = DF(ONE_MINUS_SRC_COLOR); - } - BEGIN_RING(chan, celsius, NV10TCL_BLEND_FUNC_SRC, 2); OUT_RING (chan, src_factor); OUT_RING (chan, dst_factor); @@ -672,8 +657,34 @@ WAIT_RING(chan, 128); + if (NV10Check_A8plusA8_Feasability(pSrcPicture,pMaskPicture,pDstPicture,op)) + { + state.have_mask = FALSE; + state.is_a8_plus_a8 = TRUE; + NV10SetBuffer(pNv,pDstPicture,pDst); + NV10SetPictOp(pNv, op); + NV10SetTexture(pNv, 0, pSrcPicture, pSrc); + NV10SetTexture(pNv, 1, pSrcPicture, pSrc); + return TRUE; + } + state.is_a8_plus_a8 = FALSE; - state.have_mask=(pMaskPicture!=NULL); + + /* Set dst format */ + NV10SetBuffer(pNv,pDstPicture,pDst); + + /* Set src format */ + NV10SetTexture(pNv,0,pSrcPicture,pSrc); + + /* Set mask format */ + if (pMaskPicture) + NV10SetTexture(pNv,1,pMaskPicture,pMask); + + NV10SetRegCombs(pNv, pSrcPicture, pMaskPicture); + + /* Set PictOp */ + NV10SetPictOp(pNv, op); + pNv->alu = op; pNv->pspict = pSrcPicture; @@ -683,30 +694,7 @@ pNv->pmpix = pMask; pNv->pdpix = pDst; chan->flush_notify = NV10StateCompositeReemit; - - if (NV10Check_A8plusA8_Feasability(pSrcPicture,pMaskPicture,pDstPicture,op)) { - state.is_a8_plus_a8 = TRUE; - NV10SetBuffer(pNv,pDstPicture,pDst); - NV10SetPictOp(pNv, op); - NV10SetTexture(pNv, 0, pSrcPicture, pSrc); - NV10SetTexture(pNv, 1, pSrcPicture, pSrc); - return TRUE; - } - - /* Set dst format */ - NV10SetBuffer(pNv,pDstPicture,pDst); - - /* Set src format */ - NV10SetTexture(pNv,0,pSrcPicture,pSrc); - - /* Set mask format */ - if (pMaskPicture) - NV10SetTexture(pNv,1,pMaskPicture,pMask); - - NV10SetRegCombs(pNv, pSrcPicture, pMaskPicture); - - /* Set PictOp */ - NV10SetPictOp(pNv, op); + state.have_mask=(pMaskPicture!=NULL); return TRUE; }