Mesa (master): i965: Even if no VS inputs are set, still load some amount of URB as required.

Eric Anholt anholt at kemper.freedesktop.org
Tue Aug 4 00:19:42 UTC 2009


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

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Aug  3 17:12:43 2009 -0700

i965: Even if no VS inputs are set, still load some amount of URB as required.

See comment on Vertex URB Entry Read Length for VS_STATE.

This, combined with the previous three commits, fixes #22945.

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index d27b1c8..722307c 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -129,6 +129,11 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
 	 reg++;
       }
    }
+   /* If there are no inputs, we'll still be reading one attribute's worth
+    * because it's required -- see urb_read_length setting.
+    */
+   if (c->nr_inputs == 0)
+      reg++;
 
    /* Allocate outputs.  The non-position outputs go straight into message regs.
     */
@@ -221,6 +226,12 @@ static void brw_vs_alloc_regs( struct brw_vs_compile *c )
     * vertex urb, so is half the amount:
     */
    c->prog_data.urb_read_length = (c->nr_inputs + 1) / 2;
+   /* Setting this field to 0 leads to undefined behavior according to the
+    * the VS_STATE docs.  Our VUEs will always have at least one attribute
+    * sitting in them, even if it's padding.
+    */
+   if (c->prog_data.urb_read_length == 0)
+      c->prog_data.urb_read_length = 1;
 
    /* The VS VUEs are shared by VF (outputting our inputs) and VS, so size
     * them to fit the biggest thing they need to.




More information about the mesa-commit mailing list