Mesa (master): nv50: don't segfault on OPCODE_END for empty programs

Christoph Bumiller chrisbmr at kemper.freedesktop.org
Fri Apr 30 21:03:38 UTC 2010


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

Author: Christoph Bumiller <e0425955 at student.tuwien.ac.at>
Date:   Thu Apr 29 22:48:00 2010 +0200

nv50: don't segfault on OPCODE_END for empty programs

---

 src/gallium/drivers/nv50/nv50_program.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index b8b6b12..98f6082 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -3169,15 +3169,16 @@ nv50_program_tx_insn(struct nv50_pc *pc,
 		if (pc->p->type == PIPE_SHADER_FRAGMENT)
 			nv50_fp_move_results(pc);
 
-		/* last insn must be long so it can have the exit bit set */
-		if (!is_long(pc->p->exec_tail))
-			convert_to_long(pc, pc->p->exec_tail);
-		else
-		if (is_immd(pc->p->exec_tail) ||
+		if (!pc->p->exec_tail ||
+		    is_immd(pc->p->exec_tail) ||
 		    is_join(pc->p->exec_tail) ||
 		    is_control_flow(pc->p->exec_tail))
 			emit_nop(pc);
 
+		/* last insn must be long so it can have the exit bit set */
+		if (!is_long(pc->p->exec_tail))
+			convert_to_long(pc, pc->p->exec_tail);
+
 		pc->p->exec_tail->inst[1] |= 1; /* set exit bit */
 
 		terminate_mbb(pc);




More information about the mesa-commit mailing list