nv50: fix TEXLOD sequence and use it only in FPs
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 31 Dec 2009 12:38:53 +0000 (13:38 +0100)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 31 Dec 2009 13:34:46 +0000 (14:34 +0100)
src/gallium/drivers/nv50/nv50_program.c

index cc15f45347af943749dac66d9ee7063ba504cce4..673334773522b4336fa9e514a2e38eab73e5da7f 100644 (file)
@@ -1566,7 +1566,13 @@ emit_texlod_sequence(struct nv50_pc *pc, struct nv50_reg *tlod,
                     struct nv50_reg *src, struct nv50_program_exec *tex)
 {
        struct nv50_program_exec *join_at;
-       unsigned i, target = pc->p->exec_size + 7 * 2;
+       unsigned i, target = pc->p->exec_size + 9 * 2;
+
+       if (pc->p->type != PIPE_SHADER_FRAGMENT) {
+               emit(pc, tex);
+               return;
+       }
+       pc->allow32 = FALSE;
 
        /* Subtract lod of each pixel from lod of top left pixel, jump
         * texlod insn if result is 0, then repeat for 2 other pixels.
@@ -1692,6 +1698,7 @@ emit_tex(struct nv50_pc *pc, struct nv50_reg **dst, unsigned mask,
                emit(pc, e);
        } else
        if (bias_lod < 0) {
+               assert(pc->p->type == PIPE_SHADER_FRAGMENT);
                e->inst[0] |= arg << 22;
                e->inst[1] |= 0x20000000; /* texbias */
                emit_mov(pc, t[arg], src[3]);