summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--glamor/glamor_egl.c7
-rw-r--r--glamor/glamor_fbo.c5
-rw-r--r--glamor/glamor_transfer.c4
-rw-r--r--glamor/glamor_utils.h3
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;
}