Mesa (7.10): i965/fs: Apply source modifier workarounds to POW as well.
Ian Romanick
idr at kemper.freedesktop.org
Tue Mar 1 01:37:16 UTC 2011
Module: Mesa
Branch: 7.10
Commit: 8bf3a4f05e105384f531a06c5977c9053822fc3c
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bf3a4f05e105384f531a06c5977c9053822fc3c
Author: Kenneth Graunke <kenneth at whitecape.org>
Date: Sat Feb 19 01:03:08 2011 -0800
i965/fs: Apply source modifier workarounds to POW as well.
Single-operand math already had these workarounds, but POW (the only two
operand function) did not. It needs them too - otherwise we can hit
assertion failures in brw_eu_emit.c when code is actually generated.
NOTE: This is a candidate for the 7.10 branch.
Reviewed-by: Eric Anholt <eric at anholt.net>
(cherry picked from commit 72cd7e87d35e96fad9643f1cee706a8568fa3fa1)
---
src/mesa/drivers/dri/i965/brw_fs.cpp | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index c246709..21f8247 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -660,14 +660,18 @@ fs_visitor::emit_math(fs_opcodes opcode, fs_reg dst, fs_reg src0, fs_reg src1)
assert(opcode == FS_OPCODE_POW);
if (intel->gen >= 6) {
- /* Can't do hstride == 0 args to gen6 math, so expand it out. */
- if (src0.file == UNIFORM) {
+ /* Can't do hstride == 0 args to gen6 math, so expand it out.
+ *
+ * The hardware ignores source modifiers (negate and abs) on math
+ * instructions, so we also move to a temp to set those up.
+ */
+ if (src0.file == UNIFORM || src0.abs || src0.negate) {
fs_reg expanded = fs_reg(this, glsl_type::float_type);
emit(fs_inst(BRW_OPCODE_MOV, expanded, src0));
src0 = expanded;
}
- if (src1.file == UNIFORM) {
+ if (src1.file == UNIFORM || src1.abs || src1.negate) {
fs_reg expanded = fs_reg(this, glsl_type::float_type);
emit(fs_inst(BRW_OPCODE_MOV, expanded, src1));
src1 = expanded;
More information about the mesa-commit
mailing list