Mesa (master): r300/compiler: Fix dataflow analysis bug with ELSE blocks

Tom Stellard tstellar at kemper.freedesktop.org
Mon Apr 18 21:43:24 PDT 2011


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

Author: Tom Stellard <tstellar at gmail.com>
Date:   Mon Apr 18 21:16:14 2011 -0700

r300/compiler: Fix dataflow analysis bug with ELSE blocks

Writes within ELSE blocks were being ignored which prevented us from
discovering all possible writers for some register values.

Fixes piglit glsl-fs-raytrace-bug27060

---

 .../drivers/dri/r300/compiler/radeon_dataflow.c    |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
index c080d5a..d1a7eab 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
@@ -704,9 +704,16 @@ static void get_readers_for_single_write(
 					&d->BranchMasks[branch_depth];
 
 				if (masks->HasElse) {
+					/* Abort on read for components that
+					 * were written in the IF block. */
 					d->ReaderData->AbortOnRead |=
 						masks->IfWriteMask
 							& ~masks->ElseWriteMask;
+					/* Abort on read for components that
+					 * were written in the ELSE block. */
+					d->ReaderData->AbortOnRead |=
+						masks->ElseWriteMask
+							& ~d->AliveWriteMask;
 					d->AliveWriteMask = masks->IfWriteMask
 						^ ((masks->IfWriteMask ^
 							masks->ElseWriteMask)



More information about the mesa-commit mailing list