summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <tstellar@gmail.com>2010-09-28 23:10:09 -0700
committerTom Stellard <tstellar@gmail.com>2010-09-29 11:05:01 -0700
commitf282d7267869644f6cf5f4032b422e801a7f12a2 (patch)
tree6936933d8aac25389140448b9c1acef195a12069
parente1918fd5d59208e8d7befcbb6ce15414f8bdc863 (diff)
r300/compiler: Don't merge instructions that write output regs and ALU result
https://bugs.freedesktop.org/show_bug.cgi?id=30415 (cherry picked from commit b27a809266bd664cd101fcfdf20886cc2b7df78)
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
index 5269d659851..7ab2df3d42a 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
@@ -475,6 +475,12 @@ static int merge_instructions(struct rc_pair_instruction * rgb, struct rc_pair_i
{
struct rc_pair_instruction backup;
+ /*Instructions can't write output registers and ALU result at the
+ * same time. */
+ if ((rgb->WriteALUResult && alpha->Alpha.OutputWriteMask)
+ || (rgb->RGB.OutputWriteMask && alpha->WriteALUResult)) {
+ return 0;
+ }
memcpy(&backup, rgb, sizeof(struct rc_pair_instruction));
if (destructive_merge_instructions(rgb, alpha))