glamor_transfer had some hard-coded depth to format/type conversions
which may not match the format used with render. This switches to
using the same formats as the render portion of glamor.

Signed-off-by: Keith Packard <[email protected]>
---
 glamor/glamor_pixmap.c   |  2 +-
 glamor/glamor_priv.h     |  7 +++++++
 glamor/glamor_transfer.c | 27 +++++----------------------
 3 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/glamor/glamor_pixmap.c b/glamor/glamor_pixmap.c
index 54b414b..7b677ae 100644
--- a/glamor/glamor_pixmap.c
+++ b/glamor/glamor_pixmap.c
@@ -457,7 +457,7 @@ 
glamor_get_tex_format_type_from_pictformat_gles2(PictFormatShort format,
     return 0;
 }
 
-static int
+int
 glamor_get_tex_format_type_from_pixmap(PixmapPtr pixmap,
                                        GLenum *format,
                                        GLenum *type,
diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h
index a2a21fc..988f609 100644
--- a/glamor/glamor_priv.h
+++ b/glamor/glamor_priv.h
@@ -850,6 +850,13 @@ Bool glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum 
format, int flag);
  */
 enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr pixmap);
 
+int
+glamor_get_tex_format_type_from_pixmap(PixmapPtr pixmap,
+                                       GLenum *format,
+                                       GLenum *type,
+                                       int *no_alpha,
+                                       int *revert, int *swap_rb, int 
is_upload);
+
 Bool glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w,
                                          int h, int stride, void *bits,
                                          int pbo);
diff --git a/glamor/glamor_transfer.c b/glamor/glamor_transfer.c
index ad875c9..706ee01 100644
--- a/glamor/glamor_transfer.c
+++ b/glamor/glamor_transfer.c
@@ -27,28 +27,11 @@
 void
 glamor_format_for_pixmap(PixmapPtr pixmap, GLenum *format, GLenum *type)
 {
-    switch (pixmap->drawable.depth) {
-    case 24:
-    case 32:
-        *format = GL_BGRA;
-        *type = GL_UNSIGNED_INT_8_8_8_8_REV;
-        break;
-    case 16:
-        *format = GL_RGB;
-        *type = GL_UNSIGNED_SHORT_5_6_5;
-        break;
-    case 15:
-        *format = GL_BGRA;
-        *type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
-        break;
-    case 8:
-        *format = GL_ALPHA;
-        *type = GL_UNSIGNED_BYTE;
-        break;
-    default:
-        FatalError("Invalid pixmap depth %d\n", pixmap->drawable.depth);
-        break;
-    }
+    int no_alpha, revert, swap_rb;
+
+    (void) glamor_get_tex_format_type_from_pixmap(pixmap, format, type,
+                                                  &no_alpha, &revert,
+                                                  &swap_rb, 0);
 }
 
 /*
-- 
2.0.0.rc0

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to