diff --git a/glamor/Makefile.am b/glamor/Makefile.am index 2453566fc..3f5a2002b 100644 --- a/glamor/Makefile.am +++ b/glamor/Makefile.am @@ -19,5 +19,6 @@ libglamor_la_SOURCES = \ glamor_fill.c \ glamor_fillspans.c \ glamor_getspans.c \ + glamor_render.c \ glamor_tile.c \ glamor.h diff --git a/glamor/glamor.c b/glamor/glamor.c index 03886ad65..ff31f5dba 100644 --- a/glamor/glamor.c +++ b/glamor/glamor.c @@ -147,6 +147,9 @@ Bool glamor_init(ScreenPtr screen) { glamor_screen_private *glamor_priv; +#ifdef RENDER + PictureScreenPtr ps = GetPictureScreenIfSet(screen); +#endif glamor_priv = xcalloc(1, sizeof(*glamor_priv)); if (glamor_priv == NULL) @@ -193,6 +196,11 @@ glamor_init(ScreenPtr screen) glamor_priv->saved_get_spans = screen->GetSpans; screen->GetSpans = glamor_get_spans; +#ifdef RENDER + glamor_priv->saved_composite = ps->Composite; + ps->Composite = glamor_composite; +#endif + glamor_init_solid_shader(screen); glamor_init_tile_shader(screen); @@ -208,9 +216,15 @@ void glamor_fini(ScreenPtr screen) { glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); +#ifdef RENDER + PictureScreenPtr ps = GetPictureScreenIfSet(screen); +#endif screen->CreateGC = glamor_priv->saved_create_gc; screen->CreatePixmap = glamor_priv->saved_create_pixmap; screen->DestroyPixmap = glamor_priv->saved_destroy_pixmap; screen->GetSpans = glamor_priv->saved_get_spans; +#ifdef RENDER + ps->Composite = glamor_priv->saved_composite; +#endif } diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h index 9bae8144b..aee8e2d3e 100644 --- a/glamor/glamor_priv.h +++ b/glamor/glamor_priv.h @@ -43,6 +43,7 @@ typedef struct glamor_screen_private { CreatePixmapProcPtr saved_create_pixmap; DestroyPixmapProcPtr saved_destroy_pixmap; GetSpansProcPtr saved_get_spans; + CompositeProcPtr saved_composite; /* glamor_solid */ GLint solid_prog; @@ -135,6 +136,20 @@ glamor_get_spans(DrawablePtr drawable, int nspans, char *dst_start); +/* glamor_render.c */ +void glamor_composite(CARD8 op, + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, + INT16 yDst, + CARD16 width, + CARD16 height); + /* glamor_tile.c */ void glamor_tile(PixmapPtr pixmap, PixmapPtr tile, int x, int y, int width, int height,