http://bugs.winehq.org/show_bug.cgi?id=27967
--- Comment #3 from Stefan Dösinger stefandoesinger@gmx.at 2011-08-18 18:01:23 CDT --- Created an attachment (id=36041) --> (http://bugs.winehq.org/attachment.cgi?id=36041) wined3d: invalidate streamsrc, vdecl and indexbuffer after strided draws
Please give this patch a try, it fixes at least the disappearing objects issues for me.
Sacred is one of the few apps that uses the abomination that is IDirect3DDevice7::DrawPrimitiveStrided. This function bypasses the vertex declaration. We properly invalidate the vdecl before the draw, but not afterwards. Prior to the patch that caused the regression, the changed stream source in the next regular draw would invalidate the vdecl state and everything was OK. But since this patch we were only rebinding the stream source and not doing more fundamental things associated with the vertex declaration, like switching between regular and pretransformed vertices.
Even the past behavior was just luck. We have to invalidate those states before and after the user-data strided draw. I wish Microsoft had never invented this method.
The additionally added STATE_STREAMSRC invalidation is technically redundant, because reapplying STATE_VDECL will reapply STATE_STREAMSRC, but wined3d_device_draw_primitive_strided isn't supposed to know about this.