https://bugs.winehq.org/show_bug.cgi?id=45468
--- Comment #10 from Henri Verbeet hverbeet@gmail.com --- (In reply to Andy Clayton from comment #9)
It looks like it does not get that far. set_glsl_shader_program() reuses "ctx_data->glsl_program->vs" because the vertex shader hasn't been invalidated in "shader_update_mask". And the prior draw happened to have a vertex declaration without color/diffuse data, so the shader that carries over is based on the wined3d_ffp_get_vs_settings() of a use_map without WINED3D_FFP_DIFFUSE.
Ah, that makes sense.
Throwing "context->shader_update_mask |= 1u << WINED3D_SHADER_TYPE_VERTEX;" in glsl_vertex_pipe_vdecl() is enough for the tails to display. Would storing and comparing "use_map" similar to "swizzle_map" make any sense?
I think so.