llvmpipe: Some notes about PSHUF.
authorJosé Fonseca <jfonseca@vmware.com>
Tue, 4 Aug 2009 11:32:24 +0000 (12:32 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 29 Aug 2009 08:21:23 +0000 (09:21 +0100)
src/gallium/drivers/llvmpipe/lp_bld_swizzle.c

index 0205d17ff17df9286a4511a5753733d7458e87c7..8cda4a48ba35b3e7c49651fa9c7c5f4a3721fde0 100644 (file)
@@ -45,6 +45,9 @@ lp_build_broadcast_aos(struct lp_build_context *bld,
    if(a == bld->undef || a == bld->zero || a == bld->one)
       return a;
 
+   /* XXX: SSE3 has PSHUFB which should be better than bitmasks, but forcing
+    * using shuffles here actually causes worst results. More investigation is
+    * needed. */
    if (n <= 4) {
       /*
        * Shuffle.
@@ -62,10 +65,10 @@ lp_build_broadcast_aos(struct lp_build_context *bld,
       /*
        * Bit mask and recursive shifts
        *
-       *   XYZW XYZW .... XYZW
-       *   _Y__ _Y__ .... _Y__
-       *   YY_  YY__ .... YY__
-       *   YYYY YYYY .... YYYY
+       *   XYZW XYZW .... XYZW  <= input
+       *   0Y00 0Y00 .... 0Y00
+       *   YY00 YY00 .... YY00
+       *   YYYY YYYY .... YYYY  <= output
        */
       union lp_type type4 = type;
       const char shifts[4][2] = {