glamor: Add render triangles support.

By default, fallback to frame buffer currently. This commit
makes us pass the rendercheck's triangles testing.

Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
This commit is contained in:
Zhigang Gong 2011-06-10 14:07:54 +08:00
parent ac0589c916
commit 229240e565
4 changed files with 81 additions and 4 deletions

View File

@ -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

View File

@ -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);

View File

@ -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 */

61
glamor/glamor_triangles.c Normal file
View File

@ -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 <zhigang.gong@gmail.com>
*
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#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);
}
}