[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