wined3d: print real unhandled D3DCMPFUNC value

Chris Robinson chris.kcat at gmail.com
Sun Aug 20 21:00:51 CDT 2006


On Sunday 20 August 2006 18:36, you wrote:
> (I forgot if I verified this, but) I think that when a state is
> beeing set This->stateBlock->renderState[State] has the previous
> value and only Value has the one to be set. From a quick glance
> it seems the code for this renderstate (and maybe more
> renderstates) wrongly assumes the contrary.

The top of the function has:
This->updateStateBlock->renderState[State] = Value;
before entering the main switch.

The problem with relying on Value is, that code block can be entered when 
State is WINED3DRS_ALPHATESTENABLE, WINED3DRS_ALPHAFUNC, WINED3DRS_ALPHAREF, 
or WINED3DRS_COLORKEYENABLE. And if it's not WINED3DRS_ALPHAFUNC, then Value 
isn't the same as This->stateBlock->renderState[WINED3DRS_ALPHAFUNC]. which 
would cause the wrong value to be reported.

Without this patch, Morrowind reports that 1 and 8 are unrecognized D3DCMPFUNC 
values, which is odd since they are recognized and handled properly. It turns 
out that 1 and 8 are being set for D3DRS_ALPHATESTENABLE and D3DRS_ALPHAREF 
respectively, and the unrecognized D3DCMPFUNC value is actually 0 (this was 
verified via trace+d3d). With the patch, Wine properly reports that 0 is the 
unrecognized D3DCMPFUNC value (which the game seems to set temporarilly for 
some reason).



More information about the wine-devel mailing list