Module: wine Branch: master Commit: 97ee9451edae82154b289cb57b46ef13aedd58b8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=97ee9451edae82154b289cb57b...
Author: Matteo Bruni mbruni@codeweavers.com Date: Tue Oct 6 14:24:23 2015 +0200
wined3d: Initialize unwritten color varyings.
Signed-off-by: Matteo Bruni mbruni@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
---
dlls/wined3d/glsl_shader.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 5dfe0fa..042cd03 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -4927,6 +4927,7 @@ static GLuint generate_param_reorder_function(struct shader_glsl_priv *priv,
if (ps_major < 3) { + DWORD colors_written_mask[2] = {0}; DWORD texcoords_written_mask[MAX_TEXTURES] = {0};
if (!legacy_context) @@ -4949,7 +4950,7 @@ static GLuint generate_param_reorder_function(struct shader_glsl_priv *priv, write_mask = output->mask; shader_glsl_write_mask_to_str(write_mask, reg_mask);
- if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_COLOR)) + if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_COLOR) && semantic_idx < 2) { if (!semantic_idx) shader_addline(buffer, "gl_FrontColor%s = vs_out[%u]%s;\n", @@ -4957,6 +4958,8 @@ static GLuint generate_param_reorder_function(struct shader_glsl_priv *priv, else if (semantic_idx == 1) shader_addline(buffer, "gl_FrontSecondaryColor%s = vs_out[%u]%s;\n", reg_mask, output->register_idx, reg_mask); + + colors_written_mask[semantic_idx] = write_mask; } else if (shader_match_semantic(semantic_name, WINED3D_DECL_USAGE_POSITION) && !semantic_idx) { @@ -4985,6 +4988,19 @@ static GLuint generate_param_reorder_function(struct shader_glsl_priv *priv, } }
+ for (i = 0; i < 2; ++i) + { + if (colors_written_mask[i] != WINED3DSP_WRITEMASK_ALL) + { + shader_glsl_write_mask_to_str(~colors_written_mask[i] & WINED3DSP_WRITEMASK_ALL, reg_mask); + if (!i) + shader_addline(buffer, "gl_FrontColor%s = vec4(1.0)%s;\n", + reg_mask, reg_mask); + else + shader_addline(buffer, "gl_FrontSecondaryColor%s = vec4(0.0)%s;\n", + reg_mask, reg_mask); + } + } for (i = 0; i < MAX_TEXTURES; ++i) { if (ps && !(ps->reg_maps.texcoord & (1u << i)))