summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-12-27 01:23:15 -0800
committerEric Anholt <eric@anholt.net>2014-02-14 18:30:01 -0800
commitd63283860a7c04a12838dead0dfd6d04fb73a093 (patch)
tree44197b26d405a8380ddd03d9539257b13ce89977
parentf3f4fc7a65589a200a086ea7b1527f91941bc19b (diff)
glamor: Pass pixmaps around to unifdef glamor_iformat_for_depth().
v2: Just pass in the PicturePtr to glamor_pict_format_is_compatible() (suggestion by keithp) Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Keith Packard <keithp@keithp.com> Reviewed-by: Adam Jackson <ajax@redhat.com>
-rw-r--r--glamor/glamor.c4
-rw-r--r--glamor/glamor_picture.c3
-rw-r--r--glamor/glamor_pixmap.c4
-rw-r--r--glamor/glamor_utils.h32
4 files changed, 21 insertions, 22 deletions
diff --git a/glamor/glamor.c b/glamor/glamor.c
index baee4dd2f..7d8228cdd 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -95,7 +95,7 @@ glamor_set_pixmap_texture(PixmapPtr pixmap, unsigned int tex)
glamor_destroy_fbo(fbo);
}
- gl_iformat_for_depth(pixmap->drawable.depth, &format);
+ format = gl_iformat_for_pixmap(pixmap);
fbo = glamor_create_fbo_from_tex(glamor_priv, pixmap->drawable.width,
pixmap->drawable.height, format, tex, 0);
@@ -162,7 +162,7 @@ glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth,
pixmap_priv->base.pixmap = pixmap;
pixmap_priv->base.glamor_priv = glamor_priv;
- gl_iformat_for_depth(depth, &format);
+ format = gl_iformat_for_pixmap(pixmap);
pitch = (((w * pixmap->drawable.bitsPerPixel + 7) / 8) + 3) & ~3;
screen->ModifyPixmapHeader(pixmap, w, h, 0, 0, pitch, NULL);
diff --git a/glamor/glamor_picture.c b/glamor/glamor_picture.c
index f51a7e459..8bbe2e98b 100644
--- a/glamor/glamor_picture.c
+++ b/glamor/glamor_picture.c
@@ -93,8 +93,7 @@ glamor_create_picture(PicturePtr picture)
* we have to mark this pixmap as a separated texture, and don't
* fallback to DDX layer. */
if (pixmap_priv->type == GLAMOR_TEXTURE_DRM
- && !glamor_pict_format_is_compatible(picture->format,
- pixmap->drawable.depth))
+ && !glamor_pict_format_is_compatible(picture))
glamor_set_pixmap_type(pixmap, GLAMOR_SEPARATE_TEXTURE);
}
}
diff --git a/glamor/glamor_pixmap.c b/glamor/glamor_pixmap.c
index 5442c90da..30aeebe51 100644
--- a/glamor/glamor_pixmap.c
+++ b/glamor/glamor_pixmap.c
@@ -403,7 +403,7 @@ __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, unsigned int *tex,
if (*tex == 0) {
glGenTextures(1, tex);
if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP)
- gl_iformat_for_depth(pixmap->drawable.depth, &iformat);
+ iformat = gl_iformat_for_pixmap(pixmap);
else
iformat = format;
non_sub = 1;
@@ -603,7 +603,7 @@ glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha,
return 0;
if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP)
- gl_iformat_for_depth(pixmap->drawable.depth, &iformat);
+ iformat = gl_iformat_for_pixmap(pixmap);
else
iformat = format;
diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index eafd2bc06..d2774689a 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -869,19 +869,17 @@ format_for_depth(int depth)
}
}
-static inline void
-gl_iformat_for_depth(int depth, GLenum * format)
+static inline GLenum
+gl_iformat_for_pixmap(PixmapPtr pixmap)
{
- switch (depth) {
-#ifndef GLAMOR_GLES2
- case 1:
- case 8:
- *format = GL_ALPHA;
- break;
-#endif
- default:
- *format = GL_RGBA;
- break;
+ glamor_screen_private *glamor_priv =
+ glamor_get_screen_private(pixmap->drawable.pScreen);
+
+ if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP &&
+ (pixmap->drawable.depth == 1 || pixmap->drawable.depth == 8)) {
+ return GL_ALPHA;
+ } else {
+ return GL_RGBA;
}
}
@@ -1319,16 +1317,18 @@ glamor_get_rgba_from_pixel(CARD32 pixel,
}
inline static Bool
-glamor_pict_format_is_compatible(PictFormatShort pict_format, int depth)
+glamor_pict_format_is_compatible(PicturePtr picture)
{
GLenum iformat;
+ PixmapPtr pixmap = glamor_get_drawable_pixmap(picture->pDrawable);
- gl_iformat_for_depth(depth, &iformat);
+ iformat = gl_iformat_for_pixmap(pixmap);
switch (iformat) {
case GL_RGBA:
- return (pict_format == PICT_a8r8g8b8 || pict_format == PICT_x8r8g8b8);
+ return (picture->format == PICT_a8r8g8b8 ||
+ picture->format == PICT_x8r8g8b8);
case GL_ALPHA:
- return (pict_format == PICT_a8);
+ return (picture->format == PICT_a8);
default:
return FALSE;
}