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.
Signed-off-by: Tapani Pälli <tapani.pa...@intel.com> --- 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/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml index 0f6746d..4aa7b03 100644 --- a/src/mapi/glapi/gen/es_EXT.xml +++ b/src/mapi/glapi/gen/es_EXT.xml @@ -663,6 +663,19 @@ <enum name="MAX_TEXTURE_LOD_BIAS_EXT" value="0x84FD"/> </category> +<!-- 64. GL_EXT_discard_framebuffer --> + +<category name="GL_EXT_discard_framebuffer" number="64"> + <function name="DiscardFramebufferEXT" es2="2.0" offset="assign" desktop="false"> + <param name="target" type="GLenum"/> + <param name="numAttachments" type="GLsizei"/> + <param name="attachments" type="const GLenum *" count="numAttachments"/> + </function> + <enum name="COLOR_EXT" value="0x1800"/> + <enum name="DEPTH_EXT" value="0x1801"/> + <enum name="STENCIL_EXT" value="0x1802"/> +</category> + <!-- 65. GL_EXT_blend_minmax --> <category name="GL_EXT_read_format_bgra" number="66"> 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/dd.h b/src/mesa/main/dd.h index 9a75fd9..9c818cc 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -604,7 +604,7 @@ struct dd_function_table { /*@}*/ /** - * \name Functions for GL_EXT_framebuffer_{object,blit}. + * \name Functions for GL_EXT_framebuffer_{object,blit,discard}. */ /*@{*/ struct gl_framebuffer * (*NewFramebuffer)(struct gl_context *ctx, GLuint name); @@ -628,6 +628,8 @@ struct dd_function_table { GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + void (*DiscardFramebuffer)(struct gl_context *ctx, + GLenum target, GLsizei numAttachments, const GLenum *attachments); /** * \name Query objects 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 }, diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 257f839..9467bd0 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -3310,3 +3310,43 @@ _mesa_InvalidateFramebuffer(GLenum target, GLsizei numAttachments, 0, 0, MAX_VIEWPORT_WIDTH, MAX_VIEWPORT_HEIGHT, "glInvalidateFramebuffer"); } + +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; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "%s(attachment)", __func__); + return; + } + } + + if (ctx->Driver.DiscardFramebuffer) + ctx->Driver.DiscardFramebuffer(ctx, target, numAttachments, attachments); + +} diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h index 9207f59..ec8b0af 100644 --- a/src/mesa/main/fbobject.h +++ b/src/mesa/main/fbobject.h @@ -214,4 +214,8 @@ extern void GLAPIENTRY _mesa_InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments); +extern void GLAPIENTRY +_mesa_DiscardFramebufferEXT(GLenum target, GLsizei numAttachments, + const GLenum *attachments); + #endif /* FBOBJECT_H */ diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index b92f98e..a3f5ead 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3104,6 +3104,7 @@ struct gl_extensions GLboolean EXT_blend_color; GLboolean EXT_blend_equation_separate; GLboolean EXT_blend_func_separate; + GLboolean EXT_discard_framebuffer; GLboolean EXT_blend_minmax; GLboolean EXT_clip_volume_hint; GLboolean EXT_depth_bounds_test; diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 519f6a9..adbd4ed 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -1145,6 +1145,7 @@ const struct function gles2_functions_possible[] = { { "glDepthRangef", 20, -1 }, { "glDetachShader", 20, -1 }, { "glDisable", 20, _gloffset_Disable }, + { "glDiscardFramebufferEXT", 20, -1 }, { "glDisableVertexAttribArray", 20, -1 }, { "glDrawArrays", 20, _gloffset_DrawArrays }, { "glDrawBuffersNV", 20, -1 }, -- 1.8.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev