8c7fcefb96
This commit exports all the rest rendering/drawing functions to the DDX drivers. And introduce some new pixmap type. For a pixmap which has a separated texture, we never fallback it to the DDX layer. This commit also adds the following new functions: glamor_composite_rects, glamor_get_image_nf which are needed by UXA framework. Just a simple wrapper function of miXXX. Will consider to optimize them next few weeks. This commit also Fixed a glyphs rendering bug pointed by Chris. Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
103 lines
2.5 KiB
C
103 lines
2.5 KiB
C
#ifdef HAVE_DIX_CONFIG_H
|
|
#include <dix-config.h>
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "glamor_priv.h"
|
|
|
|
/* Upload picture to texture. We may need to flip the y axis or
|
|
* wire alpha to 1. So we may conditional create fbo for the picture.
|
|
* */
|
|
enum glamor_pixmap_status
|
|
glamor_upload_picture_to_texture(PicturePtr picture)
|
|
{
|
|
PixmapPtr pixmap;
|
|
glamor_pixmap_private *pixmap_priv;
|
|
assert(picture->pDrawable);
|
|
pixmap = glamor_get_drawable_pixmap(picture->pDrawable);
|
|
pixmap_priv = glamor_get_pixmap_private(pixmap);
|
|
|
|
assert(GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv) == 1);
|
|
return glamor_upload_pixmap_to_texture(pixmap);
|
|
}
|
|
|
|
|
|
Bool
|
|
glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access)
|
|
{
|
|
if (!picture || !picture->pDrawable)
|
|
return TRUE;
|
|
|
|
return glamor_prepare_access(picture->pDrawable, access);
|
|
}
|
|
|
|
void
|
|
glamor_finish_access_picture(PicturePtr picture, glamor_access_t access)
|
|
{
|
|
if (!picture || !picture->pDrawable)
|
|
return;
|
|
|
|
glamor_finish_access(picture->pDrawable, access);
|
|
}
|
|
|
|
/*
|
|
* We should already have drawable attached to it, if it has one.
|
|
* Then set the attached pixmap to is_picture format, and set
|
|
* the pict format.
|
|
* */
|
|
int
|
|
glamor_create_picture(PicturePtr picture)
|
|
{
|
|
PixmapPtr pixmap;
|
|
glamor_pixmap_private *pixmap_priv;
|
|
glamor_screen_private *glamor_priv;
|
|
|
|
if (!picture || !picture->pDrawable)
|
|
return 0;
|
|
|
|
glamor_priv =
|
|
glamor_get_screen_private(picture->pDrawable->pScreen);
|
|
pixmap = glamor_get_drawable_pixmap(picture->pDrawable);
|
|
pixmap_priv = glamor_get_pixmap_private(pixmap);
|
|
|
|
if (pixmap_priv) {
|
|
pixmap_priv->is_picture = 1;
|
|
pixmap_priv->pict_format = picture->format;
|
|
/* XXX Some formats are compatible between glamor and ddx driver*/
|
|
if (pixmap_priv->type == GLAMOR_TEXTURE_DRM
|
|
/*&& pixmap_priv->pict_format != PICT_b8g8r8a8*/)
|
|
glamor_set_pixmap_type(pixmap, GLAMOR_SEPARATE_TEXTURE);
|
|
}
|
|
return glamor_priv->saved_create_picture(picture);
|
|
}
|
|
|
|
void
|
|
glamor_destroy_picture(PicturePtr picture)
|
|
{
|
|
PixmapPtr pixmap;
|
|
glamor_pixmap_private *pixmap_priv;
|
|
glamor_screen_private *glamor_priv;
|
|
|
|
if (!picture || !picture->pDrawable)
|
|
return;
|
|
|
|
glamor_priv =
|
|
glamor_get_screen_private(picture->pDrawable->pScreen);
|
|
pixmap = glamor_get_drawable_pixmap(picture->pDrawable);
|
|
pixmap_priv = glamor_get_pixmap_private(pixmap);
|
|
|
|
if (pixmap_priv) {
|
|
pixmap_priv->is_picture = 0;
|
|
pixmap_priv->pict_format = 0;
|
|
}
|
|
glamor_priv->saved_destroy_picture(picture);
|
|
}
|
|
|
|
void
|
|
glamor_picture_format_fixup(PicturePtr picture,
|
|
glamor_pixmap_private * pixmap_priv)
|
|
{
|
|
pixmap_priv->pict_format = picture->format;
|
|
}
|