diff --git a/glamor/Makefile.am b/glamor/Makefile.am index e823234ae..8f6292020 100644 --- a/glamor/Makefile.am +++ b/glamor/Makefile.am @@ -30,6 +30,7 @@ libglamor_la_SOURCES = \ glamor_setspans.c \ glamor_render.c \ glamor_tile.c \ + glamor_triangles.c\ glamor.h libglamor_la_LIBADD = \ glu3/libglu3.la diff --git a/glamor/glamor.c b/glamor/glamor.c index be5999a0c..7eebba39a 100644 --- a/glamor/glamor.c +++ b/glamor/glamor.c @@ -279,6 +279,8 @@ glamor_init(ScreenPtr screen, unsigned int flags) ps->Trapezoids = glamor_trapezoids; glamor_priv->saved_glyphs = ps->Glyphs; ps->Glyphs = glamor_glyphs; + glamor_priv->saved_triangles = ps->Triangles; + ps->Triangles = glamor_triangles; glamor_init_composite_shaders(screen); #endif glamor_init_solid_shader(screen); @@ -317,6 +319,7 @@ glamor_close_screen(int idx, ScreenPtr screen) ps->Composite = glamor_priv->saved_composite; ps->Trapezoids = glamor_priv->saved_trapezoids; ps->Glyphs = glamor_priv->saved_glyphs; + ps->Triangles = glamor_priv->saved_triangles; } #endif free(glamor_priv); diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h index 8c9ff857c..9f1679269 100644 --- a/glamor/glamor_priv.h +++ b/glamor/glamor_priv.h @@ -148,6 +148,7 @@ typedef struct glamor_screen_private { ChangeWindowAttributesProcPtr saved_change_window_attributes; CopyWindowProcPtr saved_copy_window; BitmapToRegionProcPtr saved_bitmap_to_region; + TrianglesProcPtr saved_triangles; char *delayed_fallback_string; int yInverted; @@ -232,8 +233,8 @@ glamor_fallback(char *format, ...) va_list ap; va_start(ap, format); - LogMessageVerb(X_INFO, 3, "fallback: "); - LogMessageVerb(X_NONE, 3, format, ap); + //LogMessageVerb(X_INFO, 3, "fallback: "); + //LogMessageVerb(X_NONE, 3, format, ap); va_end(ap); } @@ -266,8 +267,8 @@ glamor_report_delayed_fallbacks(ScreenPtr screen) glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); if (glamor_priv->delayed_fallback_string) { - LogMessageVerb(X_INFO, 3, "fallback: %s", - glamor_priv->delayed_fallback_string); + //LogMessageVerb(X_INFO, 3, "fallback: %s", + // glamor_priv->delayed_fallback_string); glamor_clear_delayed_fallbacks(screen); } } @@ -461,4 +462,15 @@ void glamor_tile(PixmapPtr pixmap, PixmapPtr tile, int tile_x, int tile_y); void glamor_init_tile_shader(ScreenPtr screen); +/* glamor_triangles */ +void +glamor_triangles (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntris, + xTriangle *tris); + #endif /* GLAMOR_PRIV_H */ diff --git a/glamor/glamor_triangles.c b/glamor/glamor_triangles.c new file mode 100644 index 000000000..168d485f0 --- /dev/null +++ b/glamor/glamor_triangles.c @@ -0,0 +1,61 @@ +/* + * Copyright © 2009 Intel Corporation + * Copyright © 1998 Keith Packard + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Authors: + * Zhigang Gong + * + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include "glamor_priv.h" + +void +glamor_triangles (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntris, + xTriangle *tris) +{ + + if (glamor_prepare_access(pDst->pDrawable, GLAMOR_ACCESS_RW)) { + if (pSrc->pDrawable == NULL || + glamor_prepare_access(pSrc->pDrawable, GLAMOR_ACCESS_RO)) + { + + fbTriangles(op, + pSrc, pDst, maskFormat, xSrc, ySrc, ntris, tris); + } + if (pSrc->pDrawable != NULL) + glamor_finish_access(pSrc->pDrawable); + + glamor_finish_access(pDst->pDrawable); + } +} + +