glsl: check that the fragment shader does not write both gl_FragColor and gl_FragData[]
authorBrian Paul <brianp@vmware.com>
Thu, 8 Jan 2009 01:22:56 +0000 (18:22 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 8 Jan 2009 01:22:56 +0000 (18:22 -0700)
src/mesa/shader/slang/slang_link.c

index 108d11c7df452372074ab2b3521d7f5a2403482a..26f5d61e04836e8944623a78632cea78c2c1769a 100644 (file)
@@ -645,6 +645,17 @@ _slang_link(GLcontext *ctx,
       }         
    }
 
+   /* check that gl_FragColor and gl_FragData are not both written to */
+   if (shProg->FragmentProgram) {
+      GLbitfield outputsWritten = shProg->FragmentProgram->Base.OutputsWritten;
+      if ((outputsWritten & ((1 << FRAG_RESULT_COLR))) &&
+          (outputsWritten >= (1 << FRAG_RESULT_DATA0))) {
+         link_error(shProg, "Fragment program cannot write both gl_FragColor"
+                    " and gl_FragData[].\n");
+         return;
+      }         
+   }
+
 
    if (fragProg && shProg->FragmentProgram) {
       /* Compute initial program's TexturesUsed info */