Module: Mesa
Branch: master
Commit: 0967c362bf378b7415c30ca6d9523d3b2a3a7f5d
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0967c362bf378b7415c30ca6d9523d3b2a3a7f5d

Author: Eric Anholt <[email protected]>
Date:   Fri Mar 29 00:26:07 2013 -0700

i965: Fix an inconsistency inb the VUE map with gl_ClipVertex on gen4/5.

We are intentionally not allocating a slot for gl_ClipVertex.  But by
leaving the bit set in the slots_valid, the fragment shader's computation
of where varyings are in urb entry coming out of the SF would be off by
one.  Fixes rendering in Freespace 2 SCP, and improves rendering in TF2.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=62830
Tested-by: Joaquín Ignacio Aramendía <[email protected]>
NOTE: This is a candidate for the 9.1 branch.
Reviewed-and-tested-by: Kenneth Graunke <[email protected]>
Reviewed-by: Paul Berry <[email protected]>

---

 src/mesa/drivers/dri/i965/brw_vs.c |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs.c 
b/src/mesa/drivers/dri/i965/brw_vs.c
index e093dd1..6d2c0fd 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -63,6 +63,13 @@ brw_compute_vue_map(struct brw_context *brw, struct 
brw_vs_compile *c,
 {
    const struct intel_context *intel = &brw->intel;
    struct brw_vue_map *vue_map = &c->prog_data.vue_map;
+
+   /* 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;
 
@@ -152,15 +159,12 @@ brw_compute_vue_map(struct brw_context *brw, struct 
brw_vs_compile *c,
     * assign them contiguously.  Don't reassign outputs that already have a
     * slot.
     *
-    * Also, prior to Gen6, don't assign a slot for VARYING_SLOT_CLIP_VERTEX,
-    * since it is unsupported.  In Gen6 and above, VARYING_SLOT_CLIP_VERTEX may
-    * be needed for transform feedback; since we don't want to have to
-    * recompute the VUE map (and everything that depends on it) when transform
-    * feedback is enabled or disabled, just go ahead and assign a slot for it.
+    * We generally don't need to assign a slot for VARYING_SLOT_CLIP_VERTEX,
+    * since it's encoded as the clip distances by emit_clip_distances().
+    * However, it may be output by transform feedback, and we'd rather not
+    * recompute state when TF changes, so we just always include it.
     */
    for (int i = 0; i < VARYING_SLOT_MAX; ++i) {
-      if (intel->gen < 6 && i == VARYING_SLOT_CLIP_VERTEX)
-         continue;
       if ((slots_valid & BITFIELD64_BIT(i)) &&
           vue_map->varying_to_slot[i] == -1) {
          assign_vue_slot(vue_map, i);

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to