glamor: Replace some goofy enum-likes with a real enum.
This unpacks the bitfield into an int size, but my experience has been that packing bitfields doesn't matter for performance. v2: Convert more comparisons against numbers or implicit bool comparisons to comparisons against the enum names, and fix up some comments. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Markus Wick <markus@selfnet.de>
This commit is contained in:
parent
575e3e1bf0
commit
f7cd1189d0
|
@ -137,7 +137,7 @@ glamor_copy_n_to_n_textured(DrawablePtr src,
|
||||||
src_pixmap_priv = glamor_get_pixmap_private(src_pixmap);
|
src_pixmap_priv = glamor_get_pixmap_private(src_pixmap);
|
||||||
dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap);
|
dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap);
|
||||||
|
|
||||||
if (!src_pixmap_priv->base.gl_fbo) {
|
if (src_pixmap_priv->base.gl_fbo == GLAMOR_FBO_UNATTACHED) {
|
||||||
#ifndef GLAMOR_PIXMAP_DYNAMIC_UPLOAD
|
#ifndef GLAMOR_PIXMAP_DYNAMIC_UPLOAD
|
||||||
glamor_delayed_fallback(dst->pScreen, "src has no fbo.\n");
|
glamor_delayed_fallback(dst->pScreen, "src has no fbo.\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -42,7 +42,8 @@ glamor_get_drawable_location(const DrawablePtr drawable)
|
||||||
glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
|
glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
|
||||||
glamor_screen_private *glamor_priv =
|
glamor_screen_private *glamor_priv =
|
||||||
glamor_get_screen_private(drawable->pScreen);
|
glamor_get_screen_private(drawable->pScreen);
|
||||||
if (pixmap_priv == NULL || pixmap_priv->base.gl_fbo == 0)
|
if (pixmap_priv == NULL ||
|
||||||
|
pixmap_priv->base.gl_fbo == GLAMOR_FBO_UNATTACHED)
|
||||||
return 'm';
|
return 'm';
|
||||||
if (pixmap_priv->base.fbo->fb == glamor_priv->screen_fbo)
|
if (pixmap_priv->base.fbo->fb == glamor_priv->screen_fbo)
|
||||||
return 's';
|
return 's';
|
||||||
|
|
|
@ -505,7 +505,7 @@ glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo)
|
||||||
case GLAMOR_TEXTURE_LARGE:
|
case GLAMOR_TEXTURE_LARGE:
|
||||||
case GLAMOR_TEXTURE_ONLY:
|
case GLAMOR_TEXTURE_ONLY:
|
||||||
case GLAMOR_TEXTURE_DRM:
|
case GLAMOR_TEXTURE_DRM:
|
||||||
pixmap_priv->base.gl_fbo = 1;
|
pixmap_priv->base.gl_fbo = GLAMOR_FBO_NORMAL;
|
||||||
if (fbo->tex != 0)
|
if (fbo->tex != 0)
|
||||||
pixmap_priv->base.gl_tex = 1;
|
pixmap_priv->base.gl_tex = 1;
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -886,7 +886,7 @@ glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha,
|
||||||
pixmap_priv = glamor_get_pixmap_private(pixmap);
|
pixmap_priv = glamor_get_pixmap_private(pixmap);
|
||||||
glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen);
|
glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen);
|
||||||
|
|
||||||
if (pixmap_priv->base.gl_fbo)
|
if (pixmap_priv->base.gl_fbo != GLAMOR_FBO_UNATTACHED)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (pixmap_priv->base.fbo
|
if (pixmap_priv->base.fbo
|
||||||
|
|
|
@ -291,8 +291,21 @@ typedef enum glamor_access {
|
||||||
GLAMOR_ACCESS_WO,
|
GLAMOR_ACCESS_WO,
|
||||||
} glamor_access_t;
|
} glamor_access_t;
|
||||||
|
|
||||||
#define GLAMOR_FBO_NORMAL 1
|
enum glamor_fbo_state {
|
||||||
#define GLAMOR_FBO_DOWNLOADED 2
|
/** There is no storage attached to the pixmap. */
|
||||||
|
GLAMOR_FBO_UNATTACHED,
|
||||||
|
/**
|
||||||
|
* The pixmap has FBO storage attached, but devPrivate.ptr doesn't
|
||||||
|
* point at anything.
|
||||||
|
*/
|
||||||
|
GLAMOR_FBO_NORMAL,
|
||||||
|
/**
|
||||||
|
* The FBO is present and can be accessed as a linear memory
|
||||||
|
* mapping through devPrivate.ptr.
|
||||||
|
*/
|
||||||
|
GLAMOR_FBO_DOWNLOADED,
|
||||||
|
};
|
||||||
|
|
||||||
/* glamor_pixmap_fbo:
|
/* glamor_pixmap_fbo:
|
||||||
* @list: to be used to link to the cache pool list.
|
* @list: to be used to link to the cache pool list.
|
||||||
* @expire: when push to cache pool list, set a expire count.
|
* @expire: when push to cache pool list, set a expire count.
|
||||||
|
@ -324,12 +337,6 @@ typedef struct glamor_pixmap_fbo {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* glamor_pixmap_private - glamor pixmap's private structure.
|
* glamor_pixmap_private - glamor pixmap's private structure.
|
||||||
* @gl_fbo:
|
|
||||||
* 0 - The pixmap doesn't has a fbo attached to it.
|
|
||||||
* GLAMOR_FBO_NORMAL - The pixmap has a fbo and can be accessed normally.
|
|
||||||
* GLAMOR_FBO_DOWNLOADED - The pixmap has a fbo and already downloaded to
|
|
||||||
* CPU, so it can only be treated as a in-memory pixmap
|
|
||||||
* if this bit is set.
|
|
||||||
* @gl_tex: The pixmap is in a gl texture originally.
|
* @gl_tex: The pixmap is in a gl texture originally.
|
||||||
* @is_picture: The drawable is attached to a picture.
|
* @is_picture: The drawable is attached to a picture.
|
||||||
* @pict_format: the corresponding picture's format.
|
* @pict_format: the corresponding picture's format.
|
||||||
|
@ -403,7 +410,7 @@ typedef struct glamor_pixmap_clipped_regions {
|
||||||
|
|
||||||
typedef struct glamor_pixmap_private_base {
|
typedef struct glamor_pixmap_private_base {
|
||||||
glamor_pixmap_type_t type;
|
glamor_pixmap_type_t type;
|
||||||
unsigned char gl_fbo:2;
|
enum glamor_fbo_state gl_fbo;
|
||||||
unsigned char is_picture:1;
|
unsigned char is_picture:1;
|
||||||
unsigned char gl_tex:1;
|
unsigned char gl_tex:1;
|
||||||
glamor_pixmap_fbo *fbo;
|
glamor_pixmap_fbo *fbo;
|
||||||
|
@ -777,7 +784,7 @@ glamor_put_vbo_space(ScreenPtr screen);
|
||||||
* One copy of current pixmap's texture will be put into
|
* One copy of current pixmap's texture will be put into
|
||||||
* the pixmap->devPrivate.ptr. Will use pbo to map to
|
* the pixmap->devPrivate.ptr. Will use pbo to map to
|
||||||
* the pointer if possible.
|
* the pointer if possible.
|
||||||
* The pixmap must be a gl texture pixmap. gl_fbo and
|
* The pixmap must be a gl texture pixmap. gl_fbo must be GLAMOR_FBO_NORMAL and
|
||||||
* gl_tex must be 1. Used by glamor_prepare_access.
|
* gl_tex must be 1. Used by glamor_prepare_access.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -792,9 +799,8 @@ void *glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w,
|
||||||
* glamor_download_pixmap_to_cpu to its original
|
* glamor_download_pixmap_to_cpu to its original
|
||||||
* gl texture. Used by glamor_finish_access.
|
* gl texture. Used by glamor_finish_access.
|
||||||
*
|
*
|
||||||
* The pixmap must be
|
* The pixmap must originally be a texture -- gl_fbo must be
|
||||||
* in texture originally. In other word, the gl_fbo
|
* GLAMOR_FBO_NORMAL.
|
||||||
* must be 1.
|
|
||||||
**/
|
**/
|
||||||
void glamor_restore_pixmap_to_texture(PixmapPtr pixmap);
|
void glamor_restore_pixmap_to_texture(PixmapPtr pixmap);
|
||||||
|
|
||||||
|
|
|
@ -961,7 +961,7 @@ glamor_composite_choose_shader(CARD8 op,
|
||||||
* Does it need special handle? */
|
* Does it need special handle? */
|
||||||
glamor_fallback("source == dest\n");
|
glamor_fallback("source == dest\n");
|
||||||
}
|
}
|
||||||
if (source_pixmap_priv->base.gl_fbo == 0) {
|
if (source_pixmap_priv->base.gl_fbo == GLAMOR_FBO_UNATTACHED) {
|
||||||
/* XXX in Xephyr, we may have gl_fbo equal to 1 but gl_tex
|
/* XXX in Xephyr, we may have gl_fbo equal to 1 but gl_tex
|
||||||
* equal to zero when the pixmap is screen pixmap. Then we may
|
* equal to zero when the pixmap is screen pixmap. Then we may
|
||||||
* refer the tex zero directly latter in the composition.
|
* refer the tex zero directly latter in the composition.
|
||||||
|
@ -982,7 +982,7 @@ glamor_composite_choose_shader(CARD8 op,
|
||||||
glamor_fallback("mask == dest\n");
|
glamor_fallback("mask == dest\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
if (mask_pixmap_priv->base.gl_fbo == 0) {
|
if (mask_pixmap_priv->base.gl_fbo == GLAMOR_FBO_UNATTACHED) {
|
||||||
#ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD
|
#ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD
|
||||||
mask_status = GLAMOR_UPLOAD_PENDING;
|
mask_status = GLAMOR_UPLOAD_PENDING;
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue