https://bugs.winehq.org/show_bug.cgi?id=47229
Paul Gofman pgofman@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |pgofman@codeweavers.com
--- Comment #12 from Paul Gofman pgofman@codeweavers.com --- Created attachment 69095 --> https://bugs.winehq.org/attachment.cgi?id=69095 PoC patch
I've tested the game.
This is the first game I see which depends on d3d9 shader validator interface actually validating the shaders, just returning 'ok' from IDirect3DShaderValidator9_Instruction is not enough.
The game currently needs native d3dx9_36 override (due to Bug #48528; also it compiles a lot of shaders and that would currently need d3dcompiler_47 override if builtin d3dx9_36 is used).
The game disassembles and assembles back some shaders (I have no idea why). Some shaders fail to assemble back due to: 'dcl_texcoord10_pp v10' (only 10 inputs are supported in ps_3_0 and this is eleventh) which result in the crash as the game doesn't cosnider D3DXAssembleShader() failures. I didn't debug how exactly the game gets those shaders (loads them in binary form, compiles somehow or does something else), but the binary of the shader is passed through d3d9 shader validator and if it is rejected (by returning failure from IDirect3DShaderValidator9_Instruction for the incorrect declaration) the game is fine.
I am going to prepare some more or less sensible patch for that soon, the attached patch is very ugly proof of concept which fixes the crashes I could reproduce.