From: Roland S. <rsc...@hi...> - 2005-03-03 19:11:03
|
Ville Syrj=E4l=E4 wrote: >>> Like I said before only the RGB components are blended. You can >>> choose to write 0, 1, As, 1-As, Ad or 1-Ad to the destination >>> alpha (ALPHA_DST_SEL@ALPHA_TST_CNTL register). Currently the >>> driver seems to write 0. It would probably be a better idea to >>> write 1 instead. >>=20 >> Sorry, but I just can't see that in the driver. And there's no=20 >> ALPHA_DST_SEL bit, at least not in the mach64 reg file I have... >=20 >=20 > I was just looking at the specs :) They are named MACH64_ALPHA_DST_* > in mach64_reg.h. The driver doesn't explicitly specify any value > which means 0 gets written. >=20 > I actually just stumbled on this issue a few days ago with the mach64 > DirectFB driver. My plan for the DirectFB driver is simply to allow > ZERO + ZERO/ONE/SRCALPHASAT blend functions for destinations with > alpha. It's a rather serious limitation but I think it's better than > incorrect rendering. The issue is even worse on older Rage chips > since they can only write 0 to the destination alpha. But that is not > an issue for the DRI driver since those chips aren't supported. I think now I understand. It has alpha channel and all, but it simply won't perform the blending equation on the alpha channel, instead simply=20 writing zero, one, source alpha, 1 - minus source alpha, dst alpha, or 1=20 - dst alpha. Actually the driver does not write 0, it writes the source=20 alpha value (MACH64_ALPHA_DST_SRCALPHA) as far as I can tell. Actually, this design means it would have some very limited support for=20 blend_func_separate :-). Looks like a stupid design limitation to me (what would it cost to=20 implement that additional blend adder to the 3 you need anyway?), but ah=20 well. Maybe this wasn't required by DirectX 1.0 ;-). In practice though, this might just work quite often, the alpha-blended=20 alpha values are probably not required a lot? >=20 >> Regardless if it can actually blend alpha values or not, there >> would be some half-way useful alpha values probably in the buffer. >=20 >=20 > Either you get the correct results or the wrong results. Not sure if > there are any really useful things you can do with incorrect values. I meant that you might just get the correct alpha values sometimes=20 (depending on the blend func that should be true I guess). Roland |