[Mesa-dev] [PATCH] gles2: a stub implementation for GL_EXT_discard_framebuffer

Tapani Pälli tapani.palli at intel.com
Tue Feb 12 00:30:08 PST 2013


On 02/12/2013 12:38 AM, Eric Anholt wrote:
> Tapani Pälli <tapani.palli at intel.com> writes:
>
>> This patch implements a stub for GL_EXT_discard_framebuffer with
>> required checks listed by the extension specification. This extension
>> is required by GLBenchmark 2.5 when compiled with OpenGL ES 2.0
>> as the rendering backend.
> Are there piglit tests for this coming?

Sure, I will do tests.

>> ---
>>   src/mapi/glapi/gen/es_EXT.xml                 | 13 +++++++++
>>   src/mesa/drivers/dri/intel/intel_extensions.c |  1 +
>>   src/mesa/main/dd.h                            |  4 ++-
>>   src/mesa/main/extensions.c                    |  1 +
>>   src/mesa/main/fbobject.c                      | 40 +++++++++++++++++++++++++++
>>   src/mesa/main/fbobject.h                      |  4 +++
>>   src/mesa/main/mtypes.h                        |  1 +
>>   src/mesa/main/tests/dispatch_sanity.cpp       |  1 +
>>   8 files changed, 64 insertions(+), 1 deletion(-)
>> diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c
>> index bf5e2b5..a182139 100755
>> --- a/src/mesa/drivers/dri/intel/intel_extensions.c
>> +++ b/src/mesa/drivers/dri/intel/intel_extensions.c
>> @@ -65,6 +65,7 @@ intelInitExtensions(struct gl_context *ctx)
>>      ctx->Extensions.EXT_blend_equation_separate = true;
>>      ctx->Extensions.EXT_blend_func_separate = true;
>>      ctx->Extensions.EXT_blend_minmax = true;
>> +   ctx->Extensions.EXT_discard_framebuffer = true;
>>      ctx->Extensions.EXT_framebuffer_blit = true;
>>      ctx->Extensions.EXT_framebuffer_object = true;
>>      ctx->Extensions.EXT_fog_coord = true;
>> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
>> index 04435e0..f7bd6f2 100644
>> --- a/src/mesa/main/extensions.c
>> +++ b/src/mesa/main/extensions.c
>> @@ -168,6 +168,7 @@ static const struct extension extension_table[] = {
>>      { "GL_EXT_blend_color",                         o(EXT_blend_color),                         GLL,            1995 },
>>      { "GL_EXT_blend_equation_separate",             o(EXT_blend_equation_separate),             GL,             2003 },
>>      { "GL_EXT_blend_func_separate",                 o(EXT_blend_func_separate),                 GLL,            1999 },
>> +   { "GL_EXT_discard_framebuffer",                 o(EXT_discard_framebuffer),                             ES2, 2009 },
>>      { "GL_EXT_blend_minmax",                        o(EXT_blend_minmax),                        GLL | ES1 | ES2, 1995 },
>>      { "GL_EXT_blend_subtract",                      o(dummy_true),                              GLL,            1995 },
>>      { "GL_EXT_clip_volume_hint",                    o(EXT_clip_volume_hint),                    GL,             1996 },
> Is there any reason not to just expose this stub extension everywhere,
> since it requires nothing from the driver author?

I'm not aware of any other than ES2 users so this is why I enabled it 
only for ES2. I'll add ES1 too as requested by Ian and Chad.

>> +
>> +void GLAPIENTRY
>> +_mesa_DiscardFramebufferEXT(GLenum target, GLsizei numAttachments,
>> +                            const GLenum *attachments)
>> +{
>> +   struct gl_framebuffer *fb;
>> +   GLint i;
>> +
>> +   GET_CURRENT_CONTEXT(ctx);
>> +
>> +   if (target != GL_FRAMEBUFFER) {
>> +      _mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", __func__);
>> +      return;
>> +   }
>> +
>> +   if (numAttachments < 0) {
>> +      _mesa_error(ctx, GL_INVALID_VALUE,
>> +                  "%s(numAttachments < 0)", __func__);
>> +      return;
>> +   }
>> +
>> +   for(i = 0; i < numAttachments; i++) {
>> +      switch (attachments[i]) {
>> +         case GL_COLOR:
>> +         case GL_DEPTH:
>> +         case GL_STENCIL:
>> +         case GL_COLOR_ATTACHMENT0:
>> +         case GL_DEPTH_ATTACHMENT:
>> +         case GL_STENCIL_ATTACHMENT:
>> +         break;
> break should be indented, like return is.  Usually "case" statements are
> not indented from the switch though.
>
>> +         default:
>> +            _mesa_error(ctx, GL_INVALID_ENUM, "%s(attachment)", __func__);
>> +            return;
>> +      }
>> +   }
> This looks like not the right error behavior -- you're supposed to
> reject non-(COLOR/DEPTH/STENCIL) on _mesa_is_winsys_fbo() and
> non-(COLOR_ATT0/DEPTH_ATT/STENCIL_ATT) otherwise.

Will correct, thanks for the review!


// Tapani



More information about the mesa-dev mailing list