https://bugs.winehq.org/show_bug.cgi?id=37313
Bug ID: 37313 Summary: Incorrect processing of post-transform vertex data Product: Wine Version: 1.7.27 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-d3d Assignee: wine-bugs@winehq.org Reporter: iamalannoble@hotmail.com
When using post-transformed vertex data (using D3DDECLUSAGE_POSITIONT or D3DFVF_XYZRHW) and a pixel shader, WINE incorrectly applies transforms to the non-position components of the vertex data. e.g. texgen and texture matrix is incorrectly applied to texture coordinates.
The specification of post-transformed data is scattered across several pages, but here's a quote:
D3DDECLUSAGE_POSITIONT ... When a declaration containing this is set, the pipeline does not perform vertex processing.
D3DFVF_XYZRHW implies the same thing, as this is the output format of IDirect3DDevice9::ProcessVertices.
At http://source.winehq.org/git/wine.git/blob/7f29fc7e91aa7eb88cdb3220ebcbb7a49... wined3d generates a vertex program to match the fragment program, but only the position is handled differently when settings->transformed is true.
The specification for post-transformed data indicates that lighting is not evaluated at all and texture coordinates are just copied. The WINED3DTSS_TCI_PASSTHRU case is not sufficient, as that still applies the texture matrix.
This function and any related functions should be updated to handle settings->transformed correctly.