glamor: glamor_poly_point_nf cannot fail for non-DDX pixmaps
authorKeith Packard <keithp@keithp.com>
Wed, 2 Apr 2014 03:54:15 +0000 (20:54 -0700)
committerKeith Packard <keithp@keithp.com>
Thu, 3 Apr 2014 20:07:50 +0000 (13:07 -0700)
All of the glamor _nf functions must check to see if the DDX can
access the pixmap directly before returning failure back to the
driver; this restructures the point code to split out the _nf checking
from the _gl code.

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Eric Anholt <eric@anholt.net>
glamor/glamor_points.c

index 5399f96..0d58e55 100644 (file)
@@ -35,8 +35,8 @@ static const glamor_facet glamor_facet_point = {
     .vs_exec = GLAMOR_POS(gl_Position, primitive),
 };
 
-Bool
-glamor_poly_point_nf(DrawablePtr drawable, GCPtr gc, int mode, int npt, DDXPointPtr ppt)
+static Bool
+glamor_poly_point_gl(DrawablePtr drawable, GCPtr gc, int mode, int npt, DDXPointPtr ppt)
 {
     ScreenPtr screen = drawable->pScreen;
     glamor_screen_private *glamor_priv = glamor_get_screen_private(screen);
@@ -123,7 +123,22 @@ void
 glamor_poly_point(DrawablePtr drawable, GCPtr gc, int mode, int npt,
                   DDXPointPtr ppt)
 {
-    if (glamor_poly_point_nf(drawable, gc, mode, npt, ppt))
+    if (glamor_poly_point_gl(drawable, gc, mode, npt, ppt))
         return;
     miPolyPoint(drawable, gc, mode, npt, ppt);
 }
+
+Bool
+glamor_poly_point_nf(DrawablePtr drawable, GCPtr gc, int mode, int npt,
+                     DDXPointPtr ppt)
+{
+    if (glamor_poly_point_gl(drawable, gc, mode, npt, ppt))
+        return TRUE;
+
+    if (glamor_ddx_fallback_check_pixmap(drawable) && glamor_ddx_fallback_check_gc(gc))
+        return FALSE;
+
+    miPolyPoint(drawable, gc, mode, npt, ppt);
+    return TRUE;
+}
+