Mesa (master): r300/compiler: Fix dataflow analysis bug with ELSE blocks
Tom Stellard
tstellar at kemper.freedesktop.org
Tue Apr 19 04:43:24 UTC 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