From 9f78e22fa62d8f1a08d6a0688e2eafba35206a3b Mon Sep 17 00:00:00 2001 From: Junyan He Date: Fri, 20 Jul 2012 05:52:50 +0800 Subject: [PATCH] Just use the shader to generate trapezoid if PolyMode == Imprecise 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 --- glamor/glamor_trapezoid.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/glamor/glamor_trapezoid.c b/glamor/glamor_trapezoid.c index d7bba667b..5c02a8ce0 100644 --- a/glamor/glamor_trapezoid.c +++ b/glamor/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; + /* 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); + ret = _glamor_generate_trapezoid_with_shader(screen, picture, traps, ntrap, &bounds); - if (!ret) - FreePicture(picture, 0); + if (!ret) + FreePicture(picture, 0); + } } #endif