st/nine: Implement special DOTPRODUCT3 behaviour
authorAxel Davy <axel.davy@ens.fr>
Sat, 16 May 2015 22:22:33 +0000 (00:22 +0200)
committerAxel Davy <axel.davy@ens.fr>
Fri, 21 Aug 2015 20:21:48 +0000 (22:21 +0200)
Taken from wine tests

Signed-off-by: Axel Davy <axel.davy@ens.fr>
src/gallium/state_trackers/nine/nine_ff.c

index 6740274de25fd6a856d098f7bb2f30725af85ef9..59ea2cb1113eaba9551ba0d8a6ec194d780d651d 100644 (file)
@@ -1366,6 +1366,10 @@ nine_ff_build_ps(struct NineDevice9 *device, struct nine_ff_ps_key *key)
             colorarg[2] != alphaarg[2])
             dst.WriteMask = TGSI_WRITEMASK_XYZ;
 
+        /* Special DOTPRODUCT behaviour (see wine tests) */
+        if (key->ts[s].colorop == D3DTOP_DOTPRODUCT3)
+            dst.WriteMask = TGSI_WRITEMASK_XYZW;
+
         if (used_c & 0x1) arg[0] = ps_get_ts_arg(&ps, colorarg[0]);
         if (used_c & 0x2) arg[1] = ps_get_ts_arg(&ps, colorarg[1]);
         if (used_c & 0x4) arg[2] = ps_get_ts_arg(&ps, colorarg[2]);