For some hardware, GL_RGBA is the safest option for textures to bind to an FBO for depth 8 as GL_ALPHA might be unsupported.
This allows using glamor-xv on hardware that don't support GL_ALPHA textures attaching to an FBO, such as nouveau on nv30. Newer hardware use GL_RED and texture swizzle anyway, so this change is of limited impact. Signed-off-by: Olivier Fourdan <ofour...@redhat.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100710 --- glamor/glamor.c | 2 ++ glamor/glamor_priv.h | 1 + glamor/glamor_utils.h | 11 ++++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/glamor/glamor.c b/glamor/glamor.c index 2467443..f5fbed1 100644 --- a/glamor/glamor.c +++ b/glamor/glamor.c @@ -659,9 +659,11 @@ glamor_init(ScreenPtr screen, unsigned int flags) (glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP && gl_version >= 30)); glamor_priv->one_channel_format = GL_ALPHA; + glamor_priv->eight_bit_channel_format = GL_RGBA; if (epoxy_has_gl_extension("GL_ARB_texture_rg") && glamor_priv->has_texture_swizzle) { glamor_priv->one_channel_format = GL_RED; + glamor_priv->eight_bit_channel_format = GL_RED; } glamor_set_debug_level(&glamor_debug_level); diff --git a/glamor/glamor_priv.h b/glamor/glamor_priv.h index 66a870f..28166ea 100644 --- a/glamor/glamor_priv.h +++ b/glamor/glamor_priv.h @@ -205,6 +205,7 @@ typedef struct glamor_screen_private { int max_fbo_size; GLuint one_channel_format; + GLuint eight_bit_channel_format; /* glamor point shader */ glamor_program point_prog; diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h index 6b88527..1b84499 100644 --- a/glamor/glamor_utils.h +++ b/glamor/glamor_utils.h @@ -620,12 +620,13 @@ gl_iformat_for_pixmap(PixmapPtr pixmap) 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 glamor_priv->one_channel_format; - } else { - return GL_RGBA; + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + if ((pixmap)->drawable.depth == 1) + return glamor_priv->one_channel_format; + if ((pixmap)->drawable.depth == 8) + return glamor_priv->eight_bit_channel_format; } + return GL_RGBA; } static inline CARD32 -- 2.9.3 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel