summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-04-01 20:54:15 -0700
committerKeith Packard <keithp@keithp.com>2014-04-03 13:07:50 -0700
commit8d88b90953471ead3b480b6ae9d7280b8bd6b216 (patch)
treedb5ce2c694b860115c31e55104ce2ce3421e2583
parentd5dd1d6371021c2aad94e33c5837ccd4bf9bf0f4 (diff)
glamor: glamor_poly_point_nf cannot fail for non-DDX pixmaps
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>
-rw-r--r--glamor/glamor_points.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/glamor/glamor_points.c b/glamor/glamor_points.c
index 5399f96e8..0d58e555f 100644
--- a/glamor/glamor_points.c
+++ b/glamor/glamor_points.c
@@ -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;
+}
+