[Glamor] [PATCH 2/3] Just use the shader to generate trapezoid if PolyMode == Imprecise

junyan.he at linux.intel.com junyan.he at linux.intel.com
Thu Jul 19 14:52:50 PDT 2012


From: Junyan He <junyan.he at linux.intel.com>

 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 at linux.intel.com>
---
 src/glamor_trapezoid.c |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/glamor_trapezoid.c b/src/glamor_trapezoid.c
index d7bba66..5c02a8c 100644
--- a/src/glamor_trapezoid.c
+++ b/src/glamor_trapezoid.c
@@ -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
 
-- 
1.7.7.6



More information about the Glamor mailing list