Mesa (7.11): i965/gen4: Fix GPU hangs since the program streaming change.

Eric Anholt anholt at kemper.freedesktop.org
Sat Jul 9 14:53:27 UTC 2011


Module: Mesa
Branch: 7.11
Commit: 804995807dfea9cbdbd676e52b95d42715101913
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=804995807dfea9cbdbd676e52b95d42715101913

Author: Eric Anholt <eric at anholt.net>
Date:   Fri Jul  8 15:30:48 2011 -0700

i965/gen4: Fix GPU hangs since the program streaming change.

This was tricky.  We were doing a use-before-initialize of
grf_reg_count, but the value usually got overwritten anyway -- when we
didn't have to do a relocation (typical), or on gen5 when we didn't
have relocations at all.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=38771
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
(cherry picked from commit d03fdc4cdefdfdc5b59547945704c6037a5061c7)

---

 src/mesa/drivers/dri/i965/brw_vs_state.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vs_state.c b/src/mesa/drivers/dri/i965/brw_vs_state.c
index d5010a2..179ca19 100644
--- a/src/mesa/drivers/dri/i965/brw_vs_state.c
+++ b/src/mesa/drivers/dri/i965/brw_vs_state.c
@@ -47,6 +47,7 @@ brw_prepare_vs_unit(struct brw_context *brw)
    memset(vs, 0, sizeof(*vs));
 
    /* BRW_NEW_PROGRAM_CACHE | CACHE_NEW_VS_PROG */
+   vs->thread0.grf_reg_count = ALIGN(brw->vs.prog_data->total_grf, 16) / 16 - 1;
    vs->thread0.kernel_start_pointer =
       brw_program_reloc(brw,
 			brw->vs.state_offset +
@@ -54,7 +55,6 @@ brw_prepare_vs_unit(struct brw_context *brw)
 			brw->vs.prog_offset +
 			(vs->thread0.grf_reg_count << 1)) >> 6;
 
-   vs->thread0.grf_reg_count = ALIGN(brw->vs.prog_data->total_grf, 16) / 16 - 1;
    vs->thread1.floating_point_mode = BRW_FLOATING_POINT_NON_IEEE_754;
    /* Choosing multiple program flow means that we may get 2-vertex threads,
     * which will have the channel mask for dwords 4-7 enabled in the thread,




More information about the mesa-commit mailing list