Just use the shader to generate trapezoid if PolyMode == Imprecise
authorJunyan He <junyan.he@linux.intel.com>
Thu, 19 Jul 2012 21:52:50 +0000 (05:52 +0800)
committerEric Anholt <eric@anholt.net>
Wed, 18 Dec 2013 19:23:53 +0000 (11:23 -0800)
 The precise mode of trapezoid rendering need to sample the trapezoid on
 the centre points of an (2*n+1)x(2*n-1) subpixel grid. It is computationally
 expensive in shader, and we use inside area ratio to replace it.
 The result has some difference, and we just use it if the polymode == Imprecise.

Signed-off-by: Junyan He <junyan.he@linux.intel.com>
glamor/glamor_trapezoid.c

index d7bba66..5c02a8c 100644 (file)
@@ -1664,15 +1664,20 @@ _glamor_trapezoids(CARD8 op,
                if(ret)
                        return TRUE;
        } else {
-               picture = glamor_create_mask_picture(screen, dst, mask_format,
-                         width, height, 1);
-               if (!picture)
-                       return TRUE;
-
-               ret = _glamor_generate_trapezoid_with_shader(screen, picture, traps, ntrap, &bounds);
-
-               if (!ret)
-                       FreePicture(picture, 0);
+               /*  The precise mode is that we sample the trapezoid on the centre points of
+                   an (2*n+1)x(2*n-1) subpixel grid. It is computationally expensive in shader
+                   and we use inside area ratio to replace it if the polymode == Imprecise. */
+               if(dst->polyMode == PolyModeImprecise) {
+                       picture = glamor_create_mask_picture(screen, dst, mask_format,
+                                 width, height, 1);
+                       if (!picture)
+                               return TRUE;
+
+                       ret = _glamor_generate_trapezoid_with_shader(screen, picture, traps, ntrap, &bounds);
+
+                       if (!ret)
+                               FreePicture(picture, 0);
+               }
        }
 #endif