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

Author: Christoph Bumiller <[email protected]>
Date:   Thu Nov 26 17:03:00 2009 +0100

nv50: don't permanently negate src in emit_ddy

---

 src/gallium/drivers/nv50/nv50_program.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_program.c 
b/src/gallium/drivers/nv50/nv50_program.c
index 855079f..f93c864 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -1440,19 +1440,25 @@ emit_ddx(struct nv50_pc *pc, struct nv50_reg *dst, 
struct nv50_reg *src)
 static void
 emit_ddy(struct nv50_pc *pc, struct nv50_reg *dst, struct nv50_reg *src)
 {
+       struct nv50_reg *r = src;
        struct nv50_program_exec *e = exec(pc);
 
        assert(src->type == P_TEMP);
 
-       if (!(src->mod & NV50_MOD_NEG)) /* ! double negation */
-               emit_neg(pc, src, src);
+       if (!(src->mod & NV50_MOD_NEG)) { /* ! double negation */
+               r = alloc_temp(pc, NULL);
+               emit_neg(pc, r, src);
+       }
 
        e->inst[0] = 0xc0150000;
        e->inst[1] = 0x8a400000;
        set_long(pc, e);
        set_dst(pc, dst, e);
-       set_src_0(pc, src, e);
-       set_src_2(pc, src, e);
+       set_src_0(pc, r, e);
+       set_src_2(pc, r, e);
+
+       if (r != src)
+               free_temp(pc, r);
 
        emit(pc, e);
 }

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to