Mesa (master): i965: Fix loads of non-relative-addr constants after a reladdr load.

Eric Anholt anholt at kemper.freedesktop.org
Mon Jan 18 21:53:11 UTC 2010


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

Author: Eric Anholt <eric at anholt.net>
Date:   Sat Jan  9 02:03:13 2010 -0800

i965: Fix loads of non-relative-addr constants after a reladdr load.

Fixes piglit vp-arl-constant-array-huge-overwritten.

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_vs_emit.c b/src/mesa/drivers/dri/i965/brw_vs_emit.c
index 1b84dd5..59334c9 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_emit.c
@@ -771,7 +771,13 @@ get_constant(struct brw_vs_compile *c,
    if (c->current_const[argIndex].index != src->Index || relAddr) {
       struct brw_reg addrReg = c->regs[PROGRAM_ADDRESS][0];
 
-      c->current_const[argIndex].index = src->Index;
+      /* If using a non-relative-addressed constant, then keep track of it for
+       * later use without reloading.
+       */
+      if (relAddr)
+	 c->current_const[argIndex].index = -1;
+      else
+	 c->current_const[argIndex].index = src->Index;
 
 #if 0
       printf("  fetch const[%d] for arg %d into reg %d\n",




More information about the mesa-commit mailing list