[PATCH 06/15] glamor: Pass pixmaps around to unifdef glamor_iformat_for_depth().

Eric Anholt eric at anholt.net
Mon Feb 3 11:03:31 PST 2014


Signed-off-by: Eric Anholt <eric at anholt.net>
---
 glamor/glamor.c         |  6 +++---
 glamor/glamor_picture.c |  3 +--
 glamor/glamor_pixmap.c  |  4 ++--
 glamor/glamor_utils.h   | 26 ++++++++++++--------------
 4 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/glamor/glamor.c b/glamor/glamor.c
index a91c3ff..616ad5b 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);
 
@@ -123,7 +123,7 @@ glamor_set_screen_pixmap(PixmapPtr screen_pixmap, PixmapPtr *back_pixmap)
         GLenum format;
         glamor_pixmap_fbo *fbo;
 
-        gl_iformat_for_depth(screen_pixmap->drawable.depth, &format);
+        format = gl_iformat_for_pixmap(screen_pixmap);
         glamor_set_pixmap_type(screen_pixmap, GLAMOR_TEXTURE_ONLY);
         fbo = glamor_create_fbo(glamor_priv,
                                 screen_pixmap->drawable.width,
@@ -190,7 +190,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 f51a7e4..0d8f697 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->format, pixmap))
                 glamor_set_pixmap_type(pixmap, GLAMOR_SEPARATE_TEXTURE);
         }
     }
diff --git a/glamor/glamor_pixmap.c b/glamor/glamor_pixmap.c
index 5442c90..30aeebe 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 eafd2bc..29f1586 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,11 +1317,11 @@ 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(PictFormatShort pict_format, PixmapPtr pixmap)
 {
     GLenum iformat;
 
-    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);
-- 
1.9.rc1



More information about the xorg-devel mailing list