Mesa (7.10): r300/compiler: Fix vertex shader MAD instructions with constant swizzles
Tom Stellard
tstellar at kemper.freedesktop.org
Tue Apr 5 16:27:02 UTC 2011
Module: Mesa
Branch: 7.10
Commit: 62b75d889ceadfcfac97e486b2f41f676174135f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=62b75d889ceadfcfac97e486b2f41f676174135f
Author: Tom Stellard <tstellar at gmail.com>
Date: Tue Apr 5 00:04:45 2011 -0700
r300/compiler: Fix vertex shader MAD instructions with constant swizzles
(cherry picked from commit d8361400b76dde6fb63df6c363b7dd59c5946e09)
---
src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c b/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
index 472029f..e1e4a01 100644
--- a/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
+++ b/src/mesa/drivers/dri/r300/compiler/r3xx_vertprog.c
@@ -273,6 +273,7 @@ static void ei_mad(struct r300_vertex_program_code *vp,
struct rc_sub_instruction *vpi,
unsigned int * inst)
{
+ unsigned int i;
/* Remarks about hardware limitations of MAD
* (please preserve this comment, as this information is _NOT_
* in the documentation provided by AMD).
@@ -318,6 +319,23 @@ static void ei_mad(struct r300_vertex_program_code *vp,
t_dst_index(vp, &vpi->DstReg),
t_dst_mask(vpi->DstReg.WriteMask),
t_dst_class(vpi->DstReg.File));
+
+ /* Arguments with constant swizzles still count as a unique
+ * temporary, so we should make sure these arguments share a
+ * register index with one of the other arguments. */
+ for (i = 0; i < 3; i++) {
+ unsigned int j;
+ if (vpi->SrcReg[i].File != RC_FILE_NONE)
+ continue;
+
+ for (j = 0; j < 3; j++) {
+ if (i != j) {
+ vpi->SrcReg[i].Index =
+ vpi->SrcReg[j].Index;
+ break;
+ }
+ }
+ }
}
inst[1] = t_src(vp, &vpi->SrcReg[0]);
inst[2] = t_src(vp, &vpi->SrcReg[1]);
More information about the mesa-commit
mailing list