Matteo Bruni : wined3d: Initialize unwritten color varyings.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Oct 7 10:00:49 CDT 2015


Module: wine
Branch: master
Commit: 97ee9451edae82154b289cb57b46ef13aedd58b8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=97ee9451edae82154b289cb57b46ef13aedd58b8

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Tue Oct  6 14:24:23 2015 +0200

wined3d: Initialize unwritten color varyings.

Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at 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)))




More information about the wine-cvs mailing list