nvfx: fix nv30 vertex program scalar opcodes
authorLuca Barbieri <luca@luca-barbieri.com>
Thu, 5 Aug 2010 22:58:48 +0000 (00:58 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Thu, 5 Aug 2010 23:28:14 +0000 (01:28 +0200)
Apparently they have always been broken, even before unification.

Fixes a lot of stuff, starting from morph3d and lighting in teapot
with textures disabled.

src/gallium/drivers/nvfx/nvfx_vertprog.c

index 80b98b62d3477c3c49b9221f098b9ba537f539a4..24d9846310e001413d4519b98add36f7aaccf9dc 100644 (file)
@@ -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));