Mesa (7.8): i965: Fix ENDLOOP to only patch up this loop's BREAK and CONT.

Eric Anholt anholt at kemper.freedesktop.org
Tue Mar 16 19:34:48 UTC 2010


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

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Mar  9 14:22:51 2010 -0800

i965: Fix ENDLOOP to only patch up this loop's BREAK and CONT.

Corresponds to d225a25e21a24508aea3b877c78beb35502e942d and fixes
piglit glsl-fs-loop-nested.  Bug #25173.
(cherry picked from commit a81836ee2fe5092d695b717addf8cec91f569777)

---

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

diff --git a/src/mesa/drivers/dri/i965/brw_wm_glsl.c b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
index e3e6f66..315b030 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_glsl.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_glsl.c
@@ -2015,11 +2015,13 @@ static void brw_wm_emit_glsl(struct brw_context *brw, struct brw_wm_compile *c)
                   /* patch all the BREAK/CONT instructions from last BGNLOOP */
                   while (inst0 > loop_inst[loop_depth]) {
                      inst0--;
-                     if (inst0->header.opcode == BRW_OPCODE_BREAK) {
+                     if (inst0->header.opcode == BRW_OPCODE_BREAK &&
+			 inst0->bits3.if_else.jump_count == 0) {
 			inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1);
 			inst0->bits3.if_else.pop_count = 0;
                      }
-                     else if (inst0->header.opcode == BRW_OPCODE_CONTINUE) {
+                     else if (inst0->header.opcode == BRW_OPCODE_CONTINUE &&
+			      inst0->bits3.if_else.jump_count == 0) {
                         inst0->bits3.if_else.jump_count = br * (inst1 - inst0);
                         inst0->bits3.if_else.pop_count = 0;
                      }




More information about the mesa-commit mailing list