diff options
-rw-r--r-- | glamor/glamor_egl.c | 7 | ||||
-rw-r--r-- | glamor/glamor_fbo.c | 5 | ||||
-rw-r--r-- | glamor/glamor_transfer.c | 4 | ||||
-rw-r--r-- | glamor/glamor_utils.h | 3 |
4 files changed, 16 insertions, 3 deletions
diff --git a/glamor/glamor_egl.c b/glamor/glamor_egl.c index 53a74b8da..202b83efd 100644 --- a/glamor/glamor_egl.c +++ b/glamor/glamor_egl.c @@ -376,14 +376,17 @@ glamor_back_pixmap_from_fd(PixmapPtr pixmap, glamor_egl = glamor_egl_get_screen_private(scrn); - if (bpp != 32 || !(depth == 24 || depth == 32) || width == 0 || height == 0) + if (bpp != 32 || !(depth == 24 || depth == 32 || depth == 30) || width == 0 || height == 0) return FALSE; import_data.fd = fd; import_data.width = width; import_data.height = height; import_data.stride = stride; - import_data.format = GBM_FORMAT_ARGB8888; + if (depth == 30) + import_data.format = GBM_FORMAT_ARGB2101010; + else + import_data.format = GBM_FORMAT_ARGB8888; bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_FD, &import_data, 0); if (!bo) return FALSE; diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c index 9f1288c60..e8c4330b3 100644 --- a/glamor/glamor_fbo.c +++ b/glamor/glamor_fbo.c @@ -123,7 +123,10 @@ _glamor_create_tex(glamor_screen_private *glamor_priv, int w, int h, GLenum format) { unsigned int tex; + GLenum iformat = format; + if (format == GL_RGB10_A2) + format = GL_RGBA; glamor_make_current(glamor_priv); glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); @@ -132,7 +135,7 @@ _glamor_create_tex(glamor_screen_private *glamor_priv, if (format == glamor_priv->one_channel_format && format == GL_RED) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED); glamor_priv->suppress_gl_out_of_memory_logging = true; - glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, + glTexImage2D(GL_TEXTURE_2D, 0, iformat, w, h, 0, format, GL_UNSIGNED_BYTE, NULL); glamor_priv->suppress_gl_out_of_memory_logging = false; diff --git a/glamor/glamor_transfer.c b/glamor/glamor_transfer.c index d788d06f4..ebb5101d1 100644 --- a/glamor/glamor_transfer.c +++ b/glamor/glamor_transfer.c @@ -33,6 +33,10 @@ glamor_format_for_pixmap(PixmapPtr pixmap, GLenum *format, GLenum *type) *format = GL_BGRA; *type = GL_UNSIGNED_INT_8_8_8_8_REV; break; + case 30: + *format = GL_BGRA; + *type = GL_UNSIGNED_INT_2_10_10_10_REV; + break; case 16: *format = GL_RGB; *type = GL_UNSIGNED_SHORT_5_6_5; diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h index 090b0e18a..7597b92dc 100644 --- a/glamor/glamor_utils.h +++ b/glamor/glamor_utils.h @@ -619,6 +619,9 @@ gl_iformat_for_pixmap(PixmapPtr pixmap) if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && ((pixmap)->drawable.depth == 1 || (pixmap)->drawable.depth == 8)) { return glamor_priv->one_channel_format; + } else if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && + (pixmap)->drawable.depth == 30) { + return GL_RGB10_A2; } else { return GL_RGBA; } |