i965/vs: add support for emitting gl_ClipVertex
authorChris Forbes <chrisf@ijw.co.nz>
Mon, 20 May 2013 10:10:29 +0000 (22:10 +1200)
committerChris Forbes <chrisf@ijw.co.nz>
Fri, 7 Jun 2013 08:50:33 +0000 (20:50 +1200)
Removes the special-case suppression of gl_ClipVertex in the VUE map.

Also calculate vertex outcodes for user clip planes based on
gl_ClipVertex if written; otherwise gl_Position.

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
src/mesa/drivers/dri/i965/brw_vs.c

index b2f8f009db9c80de4d9c017df721970db41d9680..33c1b2483c43f2fef564be7f6a67ccaac9591f45 100644 (file)
@@ -2567,8 +2567,10 @@ vec4_visitor::emit_psiz_and_flags(struct brw_reg reg)
       current_annotation = "Clipping flags";
       for (i = 0; i < key->nr_userclip_plane_consts; i++) {
         vec4_instruction *inst;
+         gl_varying_slot slot = (prog_data->vue_map.slots_valid & VARYING_BIT_CLIP_VERTEX)
+            ? VARYING_SLOT_CLIP_VERTEX : VARYING_SLOT_POS;
 
-        inst = emit(DP4(dst_null_f(), src_reg(output_reg[VARYING_SLOT_POS]),
+        inst = emit(DP4(dst_null_f(), src_reg(output_reg[slot]),
                          src_reg(this->userplane[i])));
         inst->conditional_mod = BRW_CONDITIONAL_L;
 
index 6eb916ea4c683538688d13f16cd24b735fdebe6b..720325dec5c4ec38658a6bcc317d8bfd01dfbcd0 100644 (file)
@@ -63,12 +63,6 @@ brw_compute_vue_map(struct brw_context *brw, struct brw_vue_map *vue_map,
 {
    const struct intel_context *intel = &brw->intel;
 
-   /* Prior to Gen6, don't assign a slot for VARYING_SLOT_CLIP_VERTEX, since
-    * it is unsupported.
-    */
-   if (intel->gen < 6)
-      slots_valid &= ~VARYING_BIT_CLIP_VERTEX;
-
    vue_map->slots_valid = slots_valid;
    int i;