[PATCH xserver 1/4] glamor: Require GL_OES_texture_border_clamp for GLES2.

Eric Anholt eric at anholt.net
Wed Sep 28 20:55:14 UTC 2016


The extension came out in 2000, and all Mesa-supported hardware that
can do glamor supports it.  We were already relying on the ARB version
being present on desktop.

Signed-off-by: Eric Anholt <eric at anholt.net>
---
 glamor/glamor.c        | 19 +++++++++++++++----
 glamor/glamor_render.c | 22 +++++++---------------
 2 files changed, 22 insertions(+), 19 deletions(-)

diff --git a/glamor/glamor.c b/glamor/glamor.c
index 7b395366016a..b7718325d52e 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -515,6 +515,10 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 
     gl_version = epoxy_gl_version();
 
+    /* assume a core profile if we are GL 3.1 and don't have ARB_compatibility */
+    glamor_priv->is_core_profile =
+        gl_version >= 31 && !epoxy_has_gl_extension("GL_ARB_compatibility");
+
     shading_version_string = (char *) glGetString(GL_SHADING_LANGUAGE_VERSION);
 
     if (!shading_version_string) {
@@ -569,6 +573,12 @@ glamor_init(ScreenPtr screen, unsigned int flags)
             goto fail;
         }
 
+        if (!glamor_priv->is_core_profile &&
+            !epoxy_has_gl_extension("GL_ARB_texture_border_clamp")) {
+            ErrorF("GL_ARB_texture_border_clamp required\n");
+            goto fail;
+        }
+
         if (!glamor_check_instruction_count(gl_version))
             goto fail;
     } else {
@@ -581,6 +591,11 @@ glamor_init(ScreenPtr screen, unsigned int flags)
             ErrorF("GL_EXT_texture_format_BGRA8888 required\n");
             goto fail;
         }
+
+        if (!epoxy_has_gl_extension("GL_OES_texture_border_clamp")) {
+            ErrorF("GL_OES_texture_border_clamp required\n");
+            goto fail;
+        }
     }
 
     glamor_priv->has_rw_pbo = FALSE;
@@ -612,10 +627,6 @@ glamor_init(ScreenPtr screen, unsigned int flags)
     glamor_priv->has_dual_blend =
         epoxy_has_gl_extension("GL_ARB_blend_func_extended");
 
-    /* assume a core profile if we are GL 3.1 and don't have ARB_compatibility */
-    glamor_priv->is_core_profile =
-        gl_version >= 31 && !epoxy_has_gl_extension("GL_ARB_compatibility");
-
     glamor_priv->can_copyplane = (gl_version >= 30);
 
     glamor_setup_debug_output(screen);
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index f5651eb87e54..9aca75061639 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -533,16 +533,8 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
     repeat_type = picture->repeatType;
     switch (picture->repeatType) {
     case RepeatNone:
-        if (glamor_priv->gl_flavor != GLAMOR_GL_ES2) {
-            /* XXX  GLES2 doesn't support GL_CLAMP_TO_BORDER. */
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
-                            GL_CLAMP_TO_BORDER);
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
-                            GL_CLAMP_TO_BORDER);
-        } else {
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-        }
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
+        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
         break;
     case RepeatNormal:
         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
@@ -573,12 +565,12 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
         break;
     }
 
-    /*
-     *  GLES2 doesn't support RepeatNone. We need to fix it anyway.
-     *
-     **/
+    /* Handle RepeatNone in the shader when the source is missing the
+     * alpha channel, as GL will return an alpha for 1 if the texture
+     * is RGB (no alpha), which we use for 16bpp textures.
+     */
     if (glamor_pixmap_priv_is_large(pixmap_priv) ||
-        ((!PICT_FORMAT_A(picture->format) || glamor_priv->gl_flavor == GLAMOR_GL_ES2) &&
+        (!PICT_FORMAT_A(picture->format) &&
          repeat_type == RepeatNone && picture->transform)) {
         glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap, pixmap_priv);
         glUniform4fv(wh_location, 1, wh);
-- 
2.9.3



More information about the xorg-devel mailing list