i965/vs: Clamp vertex color outputs when required by ARB_color_buffer_float.
authorEric Anholt <eric@anholt.net>
Tue, 9 Aug 2011 22:19:26 +0000 (15:19 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 16 Aug 2011 20:04:43 +0000 (13:04 -0700)
Fixes glsl-vs-vertex-color.

src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp

index 93252f732857f3646cc51939e134095bb88356fb..2a1f003b5ce97789e3c166ac0452ea0a3df09293 100644 (file)
@@ -1764,7 +1764,16 @@ vec4_visitor::emit_urb_writes()
       if (attr == VERT_RESULT_PSIZ)
         continue;
 
-      emit(BRW_OPCODE_MOV, brw_message_reg(mrf++), src_reg(output_reg[attr]));
+      vec4_instruction *inst = emit(BRW_OPCODE_MOV, brw_message_reg(mrf++),
+                                   src_reg(output_reg[attr]));
+
+      if ((attr == VERT_RESULT_COL0 ||
+          attr == VERT_RESULT_COL1 ||
+          attr == VERT_RESULT_BFC0 ||
+          attr == VERT_RESULT_BFC1) &&
+         c->key.clamp_vertex_color) {
+        inst->saturate = true;
+      }
 
       /* If this was MRF 15, we can't fit anything more into this URB
        * WRITE.  Note that base_mrf of 1 means that MRF 15 is an