glsl: Don't consider unused FS out variables as being statically assigned.
authorEric Anholt <eric@anholt.net>
Mon, 23 Apr 2012 23:10:12 +0000 (16:10 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 4 May 2012 21:00:32 +0000 (14:00 -0700)
I only considered var->assigned for FragColor and FragData, but
ignored when it was false for out vars.  Fixes piglit
write-gl_FragColor-and-not-user-output.frag

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49068

src/glsl/ast_to_hir.cpp

index e24914b832a67e4399213aa0436933beb268c29b..86bb8741bcc2ccdec10f53c871912c426c08f727 100644 (file)
@@ -4039,13 +4039,13 @@ detect_conflicting_assignments(struct _mesa_glsl_parse_state *state,
    foreach_list(node, instructions) {
       ir_variable *var = ((ir_instruction *)node)->as_variable();
 
-      if (!var)
+      if (!var || !var->assigned)
         continue;
 
       if (strcmp(var->name, "gl_FragColor") == 0)
-        gl_FragColor_assigned = var->assigned;
+        gl_FragColor_assigned = true;
       else if (strcmp(var->name, "gl_FragData") == 0)
-        gl_FragData_assigned = var->assigned;
+        gl_FragData_assigned = true;
       else if (strncmp(var->name, "gl_", 3) != 0) {
         if (state->target == fragment_shader &&
             (var->mode == ir_var_out || var->mode == ir_var_inout)) {