diff options
author | Luca Barbieri <[email protected]> | 2010-08-06 00:58:48 +0200 |
---|---|---|
committer | Luca Barbieri <[email protected]> | 2010-08-06 01:28:14 +0200 |
commit | bf5ee5aa4f065b6e17a4cc9cd2e539c4290ff98c (patch) | |
tree | a1a075f94d479876df0effe194de8605a0e39044 | |
parent | 3e231361f3291307bfaa27f1bbea13fecc3b2072 (diff) |
nvfx: fix nv30 vertex program scalar opcodes
Apparently they have always been broken, even before unification.
Fixes a lot of stuff, starting from morph3d and lighting in teapot
with textures disabled.
-rw-r--r-- | src/gallium/drivers/nvfx/nvfx_vertprog.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/gallium/drivers/nvfx/nvfx_vertprog.c b/src/gallium/drivers/nvfx/nvfx_vertprog.c index 80b98b62d34..24d9846310e 100644 --- a/src/gallium/drivers/nvfx/nvfx_vertprog.c +++ b/src/gallium/drivers/nvfx/nvfx_vertprog.c @@ -299,7 +299,13 @@ nvfx_vp_arith(struct nvfx_context* nvfx, struct nvfx_vpc *vpc, int slot, int op, (3 << NVFX_VP(INST_COND_SWZ_W_SHIFT))); if(!nvfx->is_nv4x) { - hw[1] |= (op << NV30_VP_INST_VEC_OPCODE_SHIFT); + if(slot == 0) + hw[1] |= (op << NV30_VP_INST_VEC_OPCODE_SHIFT); + else + { + hw[0] |= ((op >> 4) << NV30_VP_INST_SCA_OPCODEH_SHIFT); + hw[1] |= ((op & 0xf) << NV30_VP_INST_SCA_OPCODEL_SHIFT); + } // hw[3] |= NVFX_VP(INST_SCA_DEST_TEMP_MASK); // hw[3] |= (mask << NVFX_VP(INST_VEC_WRITEMASK_SHIFT)); |