https://bugs.winehq.org/show_bug.cgi?id=45468
--- Comment #9 from Andy Clayton q3aiml+wine@gmail.com --- It (In reply to Henri Verbeet from comment #8)
What does wined3d_ffp_get_vs_settings() end up setting "settings->diffuse_source" to? Is that value used correctly by shader_glsl_generate_ffp_vertex_shader()?
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.
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?