OSDN Git Service

Eliminate unnecessary inverse masks.
authorNicolas Capens <capn@google.com>
Tue, 26 May 2015 06:09:27 +0000 (02:09 -0400)
committerNicolas Capens <nicolascapens@google.com>
Wed, 9 Aug 2017 21:03:11 +0000 (21:03 +0000)
~mask[i % size] is the same as mask[~i % size] because it's just an
expansion of i, so there's no need for invMask[] to store the former.

Change-Id: I754732a2c4978281d35037941ecb74448ab78a8e
Reviewed-on: https://swiftshader-review.googlesource.com/3258
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
src/Shader/Constants.cpp
src/Shader/Constants.hpp
src/Shader/PixelRoutine.cpp

index b7b2fb9..e02ba03 100644 (file)
@@ -247,11 +247,6 @@ namespace sw
                        mask565Q[i][1] =
                        mask565Q[i][2] =
                        mask565Q[i][3] = (i & 0x1 ? 0x001F : 0) | (i & 0x2 ? 0x07E0 : 0) | (i & 0x4 ? 0xF800 : 0);
-
-                       invMask565Q[i][0] =
-                       invMask565Q[i][1] =
-                       invMask565Q[i][2] =
-                       invMask565Q[i][3] = ~mask565Q[i][0];
                }
 
                for(int i = 0; i < 4; i++)
@@ -261,20 +256,10 @@ namespace sw
                        maskW01Q[i][2] =  -(i >> 0 & 1);
                        maskW01Q[i][3] =  -(i >> 1 & 1);
 
-                       invMaskW01Q[i][0] = ~maskW01Q[i][0];
-                       invMaskW01Q[i][1] = ~maskW01Q[i][1];
-                       invMaskW01Q[i][2] = ~maskW01Q[i][2];
-                       invMaskW01Q[i][3] = ~maskW01Q[i][3];
-
                        maskD01X[i][0] =  -(i >> 0 & 1);
                        maskD01X[i][1] =  -(i >> 1 & 1);
                        maskD01X[i][2] =  -(i >> 0 & 1);
                        maskD01X[i][3] =  -(i >> 1 & 1);
-
-                       invMaskD01X[i][0] = ~maskD01X[i][0];
-                       invMaskD01X[i][1] = ~maskD01X[i][1];
-                       invMaskD01X[i][2] = ~maskD01X[i][2];
-                       invMaskD01X[i][3] = ~maskD01X[i][3];
                }
 
                for(int i = 0; i < 256; i++)
index e40ad5e..5210643 100644 (file)
@@ -64,11 +64,8 @@ namespace sw
                qword2 invMaskQ01X[16];
                qword2 invMaskQ23X[16];
                word4 maskW01Q[4];
-               word4 invMaskW01Q[4];
                dword4 maskD01X[4];
-               dword4 invMaskD01X[4];
                word4 mask565Q[8];
-               word4 invMask565Q[8];
 
                unsigned short sRGBtoLinear8_12[256];
                unsigned short sRGBtoLinear6_12[64];
index 16e4692..44fafd3 100644 (file)
@@ -1573,7 +1573,7 @@ namespace sw
                                {
                                        Int masked = value;
                                        c01 &= *Pointer<Int>(constants + OFFSET(Constants,mask565Q[bgraWriteMask & 0x7][0]));
-                                       masked &= *Pointer<Int>(constants + OFFSET(Constants,invMask565Q[bgraWriteMask & 0x7][0]));
+                                       masked &= *Pointer<Int>(constants + OFFSET(Constants,mask565Q[~bgraWriteMask & 0x7][0]));
                                        c01 |= masked;
                                }
 
@@ -1591,7 +1591,7 @@ namespace sw
                                {
                                        Int masked = value;
                                        c23 &= *Pointer<Int>(constants + OFFSET(Constants,mask565Q[bgraWriteMask & 0x7][0]));
-                                       masked &= *Pointer<Int>(constants + OFFSET(Constants,invMask565Q[bgraWriteMask & 0x7][0]));
+                                       masked &= *Pointer<Int>(constants + OFFSET(Constants,mask565Q[~bgraWriteMask & 0x7][0]));
                                        c23 |= masked;
                                }
 
@@ -1791,7 +1791,7 @@ namespace sw
                                {
                                        Short4 masked = value;
                                        current.x &= *Pointer<Short4>(constants + OFFSET(Constants,maskW01Q[rgbaWriteMask & 0x3][0]));
-                                       masked &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskW01Q[rgbaWriteMask & 0x3][0]));
+                                       masked &= *Pointer<Short4>(constants + OFFSET(Constants,maskW01Q[~rgbaWriteMask & 0x3][0]));
                                        current.x |= masked;
                                }
 
@@ -1808,7 +1808,7 @@ namespace sw
                                {
                                        Short4 masked = value;
                                        current.y &= *Pointer<Short4>(constants + OFFSET(Constants,maskW01Q[rgbaWriteMask & 0x3][0]));
-                                       masked &= *Pointer<Short4>(constants + OFFSET(Constants,invMaskW01Q[rgbaWriteMask & 0x3][0]));
+                                       masked &= *Pointer<Short4>(constants + OFFSET(Constants,maskW01Q[~rgbaWriteMask & 0x3][0]));
                                        current.y |= masked;
                                }
 
@@ -2389,7 +2389,7 @@ namespace sw
                        {
                                Float4 masked = value;
                                oC.x = As<Float4>(As<Int4>(oC.x) & *Pointer<Int4>(constants + OFFSET(Constants,maskD01X[rgbaWriteMask & 0x3][0])));
-                               masked = As<Float4>(As<Int4>(masked) & *Pointer<Int4>(constants + OFFSET(Constants,invMaskD01X[rgbaWriteMask & 0x3][0])));
+                               masked = As<Float4>(As<Int4>(masked) & *Pointer<Int4>(constants + OFFSET(Constants,maskD01X[~rgbaWriteMask & 0x3][0])));
                                oC.x = As<Float4>(As<Int4>(oC.x) | As<Int4>(masked));
                        }
 
@@ -2408,7 +2408,7 @@ namespace sw
 
                                masked = value;
                                oC.y = As<Float4>(As<Int4>(oC.y) & *Pointer<Int4>(constants + OFFSET(Constants,maskD01X[rgbaWriteMask & 0x3][0])));
-                               masked = As<Float4>(As<Int4>(masked) & *Pointer<Int4>(constants + OFFSET(Constants,invMaskD01X[rgbaWriteMask & 0x3][0])));
+                               masked = As<Float4>(As<Int4>(masked) & *Pointer<Int4>(constants + OFFSET(Constants,maskD01X[~rgbaWriteMask & 0x3][0])));
                                oC.y = As<Float4>(As<Int4>(oC.y) | As<Int4>(masked));
                        }