Mesa (main): mesa: add an extension MESA_bgra

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 7 16:59:17 UTC 2021


Module: Mesa
Branch: main
Commit: f94f2e1223ada056663c4c54c8098504eb091f55
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f94f2e1223ada056663c4c54c8098504eb091f55

Author: Gert Wollny <gert.wollny at collabora.com>
Date:   Tue May  4 10:59:31 2021 +0200

mesa: add an extension MESA_bgra

This GLES extension allows to combine the formats BGR and BGRA
as host-side formatsto be combined with the  internal formats
RGB8/SRGB8 and RGBA8/SRGB8_ALPHA8 respectively.

This extension is of interest to support a subset of OpenGL in
virtualized environments where the host only supports GLES.

Initial mesa/glformat.c patch: rohan.garg at collabora.com

v2: - Correct names for ClearTexture calls
    - Add BGR(A)_EXT tokens
    - Add format check for BGR_EXT
      (All Adam Jackson)

v3: Fix ordering in extension table (Marge)

Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
Reviewed-by: Adam Jackson <ajax at redhat.com> (v2)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10613>

---

 docs/_extra/specs/MESA_bgra.txt  | 106 +++++++++++++++++++++++++++++++++++++++
 src/mesa/main/extensions_table.h |   1 +
 src/mesa/main/glformats.c        |  12 ++++-
 3 files changed, 118 insertions(+), 1 deletion(-)

diff --git a/docs/_extra/specs/MESA_bgra.txt b/docs/_extra/specs/MESA_bgra.txt
new file mode 100644
index 00000000000..05de73593a0
--- /dev/null
+++ b/docs/_extra/specs/MESA_bgra.txt
@@ -0,0 +1,106 @@
+Name
+
+    MESA_bgra
+
+Name Strings
+
+    GL_MESA_bgra
+
+Contact
+
+    Gert Wollny (gert.wollny 'at' collabora.com)
+
+Notice
+
+    Copyright (c) 2021 Collabora LTD 
+    Copyright (c) 2009-2013 The Khronos Group Inc. Copyright terms at
+        http://www.khronos.org/registry/speccopyright.html
+
+Version
+
+    Version 1, 2021/04/30.
+    Based on EXT_bgra version 1, modified 1997/05/19.
+
+Number
+
+    TBD
+
+Dependencies
+
+    OpenGL ES 2.0 is required.
+    Written based on the wording of the OpenGL ES 3.2 specification.
+    There are interactions with the extensions EXT_clear_texture.
+
+Overview
+
+    MESA_bgra extends the list of combinations host-memory color formats
+    with internal formats to include BGRA and BGR as acceptable formats
+    with RGB8/SRGB8 and RGBA/sRGB8_ALPHA8 as internal formats respectively.
+    This feature is of interest in virtualized environments, where the host
+    supports OpenGL ES only, and the virtualized guest is supposed to support
+    a subset of OpenGL including textures created with the format BGRA.
+
+IP Status
+
+    Open-source; freely implementable.
+
+Issues
+
+    None.
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+   Accepted by the <format> parameter of TexImage2D and TexSubImage2D:
+
+       GL_BGR_EXT                                      0x80E0
+       GL_BGRA_EXT                                     0x80E1
+
+Additions to Chapter 8 of the GLES 3.2 Specification (Textures and Samplers)
+
+    Add to table 8.2 (Pixels data formats, valid combinations of format,
+    type, and unsized internalformat).
+
+      Format     Type            External          Internal Format 
+                                  Bytes
+                                per Pixel
+      -------------------------------------------------------------
+      BGRA      UNSIGNED_BYTE        4                   RGBA
+      BGR       UNSIGNED_BYTE        3                   RGB
+
+
+
+    Add to table 8.5 (Pixels data formats).
+
+      Format Name   Elements Meaning and Order    Target Buffer
+      -------------------------------------------------------------
+      BGR_EXT                 B, G, R                Color
+      BGRA_EXT               B, G, R, A              Color
+
+
+    Add to table 8.9 (Effective internal format correspondig to
+    external format).
+
+      Format        Type                          Effective
+                                                Internal format
+      -------------------------------------------------------------
+      BGRA_EXT       UNSIGNED_BYTE                  RGBA8
+      BGR_EXT        UNSIGNED_BYTE                  RGB8
+
+Interactions with EXT_clear_texture
+
+    When EXT_clear_texture is supported the accepted formats for
+    ClearTextureEXT and ClearSubTextureEXT are extended to include
+    the entries added above. 
+
+
+Revision History
+
+    Original draft, revision 1.0, May 4, 2021 (Gert Wollny)
+       rewrite EXT_bgra against OpenGL ES 3.2 instead of OpenGL 1,0.
+
+    Revision 1.1 (May 5. 2021): Add the new tokens, and fix
+       Clear*Texture function names.
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 0afa5d365b3..37f1febd4f2 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -367,6 +367,7 @@ EXT(KHR_texture_compression_astc_hdr        , KHR_texture_compression_astc_hdr
 EXT(KHR_texture_compression_astc_ldr        , KHR_texture_compression_astc_ldr       , GLL, GLC,  x , ES2, 2012)
 EXT(KHR_texture_compression_astc_sliced_3d  , KHR_texture_compression_astc_sliced_3d , GLL, GLC,  x , ES2, 2015)
 
+EXT(MESA_bgra                               , dummy_true                             ,  x ,  x ,  x , ES2, 2021)
 EXT(MESA_framebuffer_flip_y                 , MESA_framebuffer_flip_y                ,  43,  43,  x ,  30, 2018)
 EXT(MESA_pack_invert                        , dummy_true                             , GLL, GLC,  x ,  x , 2002)
 EXT(MESA_shader_integer_functions           , MESA_shader_integer_functions          , GLL, GLC,  x ,  30, 2016)
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index 3d34a226fbd..641b103a914 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -2859,7 +2859,17 @@ _mesa_gles_error_check_format_and_type(const struct gl_context *ctx,
 
    switch (format) {
    case GL_BGRA_EXT:
-      if (type != GL_UNSIGNED_BYTE || internalFormat != GL_BGRA)
+      if (type != GL_UNSIGNED_BYTE ||
+              (internalFormat != GL_BGRA &&
+               internalFormat != GL_RGBA8 &&
+               internalFormat != GL_SRGB8_ALPHA8))
+         return GL_INVALID_OPERATION;
+      break;
+
+   case GL_BGR_EXT:
+      if (type != GL_UNSIGNED_BYTE ||
+              (internalFormat != GL_RGB8 &&
+               internalFormat != GL_SRGB8))
          return GL_INVALID_OPERATION;
       break;
 



More information about the mesa-commit mailing list