[mutter] cogl: Add XRGB_2101010 and XBGR_2101010 formats



commit dc442e7a7539030065e83e7086ad4c62d2f4667e
Author: Robert Mader <robert mader posteo de>
Date:   Fri Apr 2 11:05:40 2021 +0200

    cogl: Add XRGB_2101010 and XBGR_2101010 formats
    
    These match their alpha counterparts, apart from not setting the
    alpha bit. This allows our internal mashinery to more easily
    distinguish whether we need a slow alpha-pass during rendering or not.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1810>

 cogl/cogl/cogl-bitmap-conversion.c                  |  2 ++
 cogl/cogl/cogl-bitmap-packing.h                     |  4 ++++
 cogl/cogl/cogl-pixel-format.c                       | 14 ++++++++++++++
 cogl/cogl/cogl-pixel-format.h                       |  2 ++
 cogl/cogl/driver/gl/gl/cogl-driver-gl.c             |  2 ++
 cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c     |  2 ++
 cogl/cogl/driver/gl/gles/cogl-driver-gles.c         |  2 ++
 cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c |  2 ++
 8 files changed, 30 insertions(+)
---
diff --git a/cogl/cogl/cogl-bitmap-conversion.c b/cogl/cogl/cogl-bitmap-conversion.c
index ab8251fc53..7cae664273 100644
--- a/cogl/cogl/cogl-bitmap-conversion.c
+++ b/cogl/cogl/cogl-bitmap-conversion.c
@@ -345,7 +345,9 @@ _cogl_bitmap_needs_short_temp_buffer (CoglPixelFormat format)
 
     case COGL_PIXEL_FORMAT_RGBA_1010102:
     case COGL_PIXEL_FORMAT_BGRA_1010102:
+    case COGL_PIXEL_FORMAT_XRGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010:
+    case COGL_PIXEL_FORMAT_XBGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010:
     case COGL_PIXEL_FORMAT_RGBA_1010102_PRE:
     case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
diff --git a/cogl/cogl/cogl-bitmap-packing.h b/cogl/cogl/cogl-bitmap-packing.h
index f668b0bea3..713e90d17b 100644
--- a/cogl/cogl/cogl-bitmap-packing.h
+++ b/cogl/cogl/cogl-bitmap-packing.h
@@ -396,10 +396,12 @@ G_PASTE (_cogl_unpack_, component_size) (CoglPixelFormat format,
     case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
       G_PASTE (_cogl_unpack_bgra_1010102_, component_size) (src, dst, width);
       break;
+    case COGL_PIXEL_FORMAT_XRGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
       G_PASTE (_cogl_unpack_argb_2101010_, component_size) (src, dst, width);
       break;
+    case COGL_PIXEL_FORMAT_XBGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
       G_PASTE (_cogl_unpack_abgr_2101010_, component_size) (src, dst, width);
@@ -775,10 +777,12 @@ G_PASTE (_cogl_pack_, component_size) (CoglPixelFormat format,
     case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
       G_PASTE (_cogl_pack_bgra_1010102_, component_size) (src, dst, width);
       break;
+    case COGL_PIXEL_FORMAT_XRGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
       G_PASTE (_cogl_pack_argb_2101010_, component_size) (src, dst, width);
       break;
+    case COGL_PIXEL_FORMAT_XBGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
       G_PASTE (_cogl_pack_abgr_2101010_, component_size) (src, dst, width);
diff --git a/cogl/cogl/cogl-pixel-format.c b/cogl/cogl/cogl-pixel-format.c
index 05169b9559..06fe79cade 100644
--- a/cogl/cogl/cogl-pixel-format.c
+++ b/cogl/cogl/cogl-pixel-format.c
@@ -161,6 +161,13 @@ static const CoglPixelFormatInfo format_info_table[] = {
     .aligned = 0,
     .bpp = { 4 },
   },
+  {
+    .cogl_format = COGL_PIXEL_FORMAT_XRGB_2101010,
+    .format_str = "XRGB_2101010",
+    .n_planes = 1,
+    .aligned = 0,
+    .bpp = { 4 },
+  },
   {
     .cogl_format = COGL_PIXEL_FORMAT_ARGB_2101010,
     .format_str = "ARGB_2101010",
@@ -168,6 +175,13 @@ static const CoglPixelFormatInfo format_info_table[] = {
     .aligned = 0,
     .bpp = { 4 },
   },
+  {
+    .cogl_format = COGL_PIXEL_FORMAT_XBGR_2101010,
+    .format_str = "XBGR_2101010",
+    .n_planes = 1,
+    .aligned = 0,
+    .bpp = { 4 },
+  },
   {
     .cogl_format = COGL_PIXEL_FORMAT_ABGR_2101010,
     .format_str = "ABGR_2101010",
diff --git a/cogl/cogl/cogl-pixel-format.h b/cogl/cogl/cogl-pixel-format.h
index 7ef03d3fda..771e4715c4 100644
--- a/cogl/cogl/cogl-pixel-format.h
+++ b/cogl/cogl/cogl-pixel-format.h
@@ -221,7 +221,9 @@ typedef enum /*< prefix=COGL_PIXEL_FORMAT >*/
 
   COGL_PIXEL_FORMAT_RGBA_1010102  = (13 | COGL_A_BIT),
   COGL_PIXEL_FORMAT_BGRA_1010102  = (13 | COGL_A_BIT | COGL_BGR_BIT),
+  COGL_PIXEL_FORMAT_XRGB_2101010  = (13 | COGL_AFIRST_BIT),
   COGL_PIXEL_FORMAT_ARGB_2101010  = (13 | COGL_A_BIT | COGL_AFIRST_BIT),
+  COGL_PIXEL_FORMAT_XBGR_2101010  = (13 | COGL_BGR_BIT | COGL_AFIRST_BIT),
   COGL_PIXEL_FORMAT_ABGR_2101010  = (13 | COGL_A_BIT | COGL_BGR_BIT | COGL_AFIRST_BIT),
 
   COGL_PIXEL_FORMAT_RGBA_FP_16161616 = (11 | COGL_A_BIT),
diff --git a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c
index ef4a61a09a..b3270734cf 100644
--- a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c
+++ b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c
@@ -253,6 +253,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext     *context,
       gltype = GL_UNSIGNED_INT_10_10_10_2;
       break;
 
+    case COGL_PIXEL_FORMAT_XBGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
       glintformat = GL_RGBA;
@@ -260,6 +261,7 @@ _cogl_driver_pixel_format_to_gl (CoglContext     *context,
       gltype = GL_UNSIGNED_INT_2_10_10_10_REV;
       break;
 
+    case COGL_PIXEL_FORMAT_XRGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
       glintformat = GL_RGBA;
diff --git a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
index 5e95d05a74..d411c58323 100644
--- a/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
+++ b/cogl/cogl/driver/gl/gl/cogl-texture-driver-gl.c
@@ -413,8 +413,10 @@ _cogl_texture_driver_upload_supported (CoglContext *ctx,
     case COGL_PIXEL_FORMAT_RGBA_1010102_PRE:
     case COGL_PIXEL_FORMAT_BGRA_1010102:
     case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
+    case COGL_PIXEL_FORMAT_XBGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
+    case COGL_PIXEL_FORMAT_XRGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
     case COGL_PIXEL_FORMAT_RGBA_8888:
diff --git a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
index 633e2c4157..9ea3b55fd6 100644
--- a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
+++ b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c
@@ -158,8 +158,10 @@ _cogl_driver_pixel_format_to_gl (CoglContext     *context,
 #endif
     case COGL_PIXEL_FORMAT_BGRA_1010102:
     case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
+    case COGL_PIXEL_FORMAT_XBGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
+    case COGL_PIXEL_FORMAT_XRGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN
diff --git a/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c 
b/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
index 904d39d345..b9f396c9b7 100644
--- a/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
+++ b/cogl/cogl/driver/gl/gles/cogl-texture-driver-gles.c
@@ -457,8 +457,10 @@ _cogl_texture_driver_upload_supported (CoglContext *ctx,
     case COGL_PIXEL_FORMAT_RGBA_1010102_PRE:
     case COGL_PIXEL_FORMAT_BGRA_1010102:
     case COGL_PIXEL_FORMAT_BGRA_1010102_PRE:
+    case COGL_PIXEL_FORMAT_XBGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010:
     case COGL_PIXEL_FORMAT_ABGR_2101010_PRE:
+    case COGL_PIXEL_FORMAT_XRGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010:
     case COGL_PIXEL_FORMAT_ARGB_2101010_PRE:
 #if G_BYTE_ORDER == G_LITTLE_ENDIAN


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]