diff options
author | Zhigang Gong <zhigang.gong@linux.intel.com> | 2011-11-16 15:04:37 +0800 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-11-17 01:10:21 +0000 |
commit | eb6148a36a318eb0b4aad865c34b50fedf4b709e (patch) | |
tree | 28bf2cb49ab9601fad4aef4ff0576cf1abf551a6 /uxa/uxa-accel.c | |
parent | fbabe60f48006ee664c983082498a863e8beec71 (diff) |
uxa/glamor: Turn on glamor for fill spans and rects
This commit only enables two glamor functions for
uxa_fill_spans and uxa_poly_fill_rects.
Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'uxa/uxa-accel.c')
-rw-r--r-- | uxa/uxa-accel.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/uxa/uxa-accel.c b/uxa/uxa-accel.c index f471ff46..21957a3d 100644 --- a/uxa/uxa-accel.c +++ b/uxa/uxa-accel.c @@ -32,6 +32,7 @@ #include <dix-config.h> #endif #include "uxa-priv.h" +#include "uxa-glamor.h" #include <X11/fonts/fontstruct.h> #include "dixfontstr.h" #include "uxa.h" @@ -50,6 +51,17 @@ uxa_fill_spans(DrawablePtr pDrawable, GCPtr pGC, int n, int x1, x2, y; int off_x, off_y; + if (uxa_screen->info->flags & UXA_USE_GLAMOR) { + uxa_prepare_access(pDrawable, UXA_GLAMOR_ACCESS_RW); + if (glamor_fill_spans_nf(pDrawable, + pGC, n, ppt, pwidth, fSorted)) { + uxa_finish_access(pDrawable, UXA_GLAMOR_ACCESS_RW); + return; + } + uxa_finish_access(pDrawable, UXA_GLAMOR_ACCESS_RO); + goto fallback; + } + if (uxa_screen->swappedOut || uxa_screen->force_fallback) goto fallback; @@ -673,6 +685,17 @@ uxa_poly_fill_rect(DrawablePtr pDrawable, int n; RegionPtr pReg = RECTS_TO_REGION(pScreen, nrect, prect, CT_UNSORTED); + if (uxa_screen->info->flags & UXA_USE_GLAMOR) { + uxa_prepare_access(pDrawable, UXA_GLAMOR_ACCESS_RW); + if (glamor_poly_fill_rect_nf(pDrawable, + pGC, nrect, prect)) { + uxa_finish_access(pDrawable, UXA_GLAMOR_ACCESS_RW); + return; + } + uxa_finish_access(pDrawable, UXA_GLAMOR_ACCESS_RO); + goto fallback; + } + /* Compute intersection of rects and clip region */ REGION_TRANSLATE(pScreen, pReg, pDrawable->x, pDrawable->y); REGION_INTERSECT(pScreen, pReg, pClip, pReg); |