[Mesa-dev] [PATCH] intel: Disable ARB_framebuffer_object in ES contexts

Ian Romanick idr at freedesktop.org
Sat May 5 09:07:47 PDT 2012


On 05/03/2012 04:47 PM, Chad Versace wrote:
> This patch removes ARB_framebuffer_object from the GLES1 and GLES2
> extension lists in intel_extensions_es.c.
>
> Fixes a crash in the Android browser on Ice Cream Sandwich.
>
> The Android browser crashed because it did the following, which is legal
> in GLES2 but not in ARB_framebuffer_object.
>      glGenFramebuffers(1,&fb);
>      glBindFramebuffer(GL_FRAMEBUFFER, fb);
>      // render render render...
>      glDeleteFramebuffers(1,&fb);
>      // go do other stuff...
>      glBindFramebuffer(GL_FRAMEBUFFER, fb);
>      // This bind unexpectedly failed, and the app panics.
>
> The semantics of glBindFramebuffer specified by ARB_framebuffer_object (a
> desktop GL extension) and GLES2 specs are incompatible. The ideal solution
> to fix this is to create separate API entry points for glBindFramebuffer,
> one for GL and the other for GLES2. But, until that work is complete,
> disabling ARB_framebuffer_object in GLES2 contexts safely fixes the problem.
>
> Likewise, the semantics of glBindFramebuffer in ARB_framebuffer_object and
> of glBindFramebufferOES in OES_framebuffer_object (a GLES1 extension) are
> incompatible. Even though the functions have different names, the semantic
> difference still results in a bug because both API calls are implemented
> by a single function, _mesa_BindFramebufferEXT, which handles the semantic
> difference incorrectly. Again, disabling ARB_framebuffer_object in GLES1
> contexts safely fixes this problem.
>
> According to the ARB_framebuffer_object spec, the extension is an
> amalgamation of
>      EXT_framebuffer_object
>      EXT_framebuffer_blit
>      EXT_packed_depth_stencil
>      EXT_framebuffer_multisample
> By disabling this extension, however, no functionality is removed from
> GLES1 and GLES2 contexts because 1) the first three extensions are
> explicitly enabled in Intel's ES extension lists and 2) no functionality
> of the last extension is exposed in an ES context.
>
> See-also: http://www.mail-archive.com/mesa-dev@lists.freedesktop.org/msg21006.html
> CC: Ian Romanick<idr at freedesktop.org>

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> CC: Charles Johnson<charles.f.johnson at intel.com>
> Signed-off-by: Chad Versace<chad.versace at linux.intel.com>
> ---
>   src/mesa/drivers/dri/intel/intel_extensions_es.c |    2 --
>   1 file changed, 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_extensions_es.c b/src/mesa/drivers/dri/intel/intel_extensions_es.c
> index 29eb8ea..b42907c 100644
> --- a/src/mesa/drivers/dri/intel/intel_extensions_es.c
> +++ b/src/mesa/drivers/dri/intel/intel_extensions_es.c
> @@ -66,7 +66,6 @@ static const char *es1_extensions[] = {
>      "GL_EXT_blend_func_separate",
>      "GL_EXT_blend_subtract",
>      "GL_OES_draw_texture",
> -   "GL_ARB_framebuffer_object",
>      "GL_EXT_framebuffer_object",
>      "GL_ARB_point_sprite",
>      "GL_EXT_stencil_wrap",
> @@ -92,7 +91,6 @@ static const char *es2_extensions[] = {
>      "GL_NV_blend_square",
>
>      /* Optional GLES2 */
> -   "GL_ARB_framebuffer_object",
>      "GL_ARB_depth_texture",
>      "GL_EXT_framebuffer_object",
>



More information about the mesa-dev mailing list