diff options
author | Eric Anholt <eric@anholt.net> | 2016-09-24 22:26:17 +0300 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2016-09-29 09:10:53 -0700 |
commit | 117d614d1ba324bdb02c50a430c2e0d22a384f03 (patch) | |
tree | 88092f432c5801e7cca538d8be9212a6090b741e /glamor | |
parent | 7a5ddf8da5ed817aa2dd6f7af1b9197a5ceec60b (diff) |
glamor: Require GL_OES_texture_border_clamp for GLES2.
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@anholt.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'glamor')
-rw-r--r-- | glamor/glamor.c | 19 | ||||
-rw-r--r-- | glamor/glamor_render.c | 22 |
2 files changed, 22 insertions, 19 deletions
diff --git a/glamor/glamor.c b/glamor/glamor.c index 7b3953660..b7718325d 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 f5651eb87..9aca75061 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); |