On 12 June 2013 00:17, Matteo Bruni matteo.mystral@gmail.com wrote:
I think you should be a bit more careful in skipping non-opcode DWORDs, otherwise you could e.g. potentially match with constants from DEF instructions - very unlikely to happen in practice, sure, but since it can be easily avoided, why not? Take a look at shader_skip_opcode() from wined3d/shader_sm1.c. You can probably get away without having to write a table with the parameters count for each SM1 opcode by just skipping DWORDs with the most significant bit set (see shader_skip_unrecognized() from the same file). Of course you still have to special case DEF but that should be it.
Ideally we'd have some more test shaders in dlls/d3dx9_36/tests/shader.c that would trigger these, and also run the various other shader processing functions against those.