[Mesa-dev] [PATCH v2 1/4] mesa: Implement ext_framebuffer_multisample_blit_scaled extension
Paul Berry
stereotype441 at gmail.com
Fri May 24 11:14:20 PDT 2013
On 16 May 2013 11:44, Anuj Phogat <anuj.phogat at gmail.com> wrote:
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> Reviewed-by: Paul Berry <stereotype441 at gmail.com>
> Reviewed-by: Brian Paul <brianp at vmware.com>
> ---
> src/mesa/main/extensions.c | 1 +
> src/mesa/main/fbobject.c | 30 +++++++++++++++++++++++++++---
> src/mesa/main/mtypes.h | 1 +
> 3 files changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index db5a5ed..39aaad4 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -184,6 +184,7 @@ static const struct extension extension_table[] = {
> { "GL_EXT_fog_coord", o(EXT_fog_coord),
> GLL, 1999 },
> { "GL_EXT_framebuffer_blit",
> o(EXT_framebuffer_blit), GL, 2005 },
> { "GL_EXT_framebuffer_multisample",
> o(EXT_framebuffer_multisample), GL, 2005 },
> + { "GL_EXT_framebuffer_multisample_blit_scaled",
> o(EXT_framebuffer_multisample_blit_scaled), GL, 2011 },
> { "GL_EXT_framebuffer_object",
> o(EXT_framebuffer_object), GL, 2000 },
> { "GL_EXT_framebuffer_sRGB",
> o(EXT_framebuffer_sRGB), GL, 1998 },
> { "GL_EXT_gpu_program_parameters",
> o(EXT_gpu_program_parameters), GLL, 2006 },
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 80485f7..e7300f6 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -2974,6 +2974,20 @@ compatible_resolve_formats(const struct
> gl_renderbuffer *readRb,
> return GL_FALSE;
> }
>
> +static GLboolean
> +is_valid_blit_filter(const struct gl_context *ctx, GLenum filter)
> +{
> + switch (filter) {
> + case GL_NEAREST:
> + case GL_LINEAR:
> + return true;
> + case GL_SCALED_RESOLVE_FASTEST_EXT:
> + case GL_SCALED_RESOLVE_NICEST_EXT:
> + return ctx->Extensions.EXT_framebuffer_multisample_blit_scaled;
> + default:
> + return false;
> + }
> +}
>
> /**
> * Blit rectangular region, optionally from one framebuffer to another.
> @@ -3023,8 +3037,17 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0,
> GLint srcX1, GLint srcY1,
> return;
> }
>
> - if (filter != GL_NEAREST && filter != GL_LINEAR) {
> - _mesa_error(ctx, GL_INVALID_ENUM, "glBlitFramebufferEXT(filter)");
> + if (!is_valid_blit_filter(ctx, filter)) {
> + _mesa_error(ctx, GL_INVALID_ENUM, "glBlitFramebufferEXT(%s)",
> + _mesa_lookup_enum_by_nr(filter));
> + return;
> + }
> +
> + if ((filter == GL_SCALED_RESOLVE_FASTEST_EXT ||
> + filter == GL_SCALED_RESOLVE_NICEST_EXT) &&
> + (readFb->Visual.samples == 0 || drawFb->Visual.samples > 0)) {
> + _mesa_error(ctx, GL_INVALID_OPERATION, "glBlitFramebufferEXT(%s)",
> + _mesa_lookup_enum_by_nr(filter));
> return;
> }
>
> @@ -3257,7 +3280,8 @@ _mesa_BlitFramebuffer(GLint srcX0, GLint srcY0,
> GLint srcX1, GLint srcY1,
> }
>
> /* extra checks for multisample copies... */
> - if (readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) {
> + if ((readFb->Visual.samples > 0 || drawFb->Visual.samples > 0) &&
> + (filter == GL_NEAREST || filter == GL_LINEAR)) {
> /* src and dest region sizes must be the same */
> if (abs(srcX1 - srcX0) != abs(dstX1 - dstX0) ||
> abs(srcY1 - srcY0) != abs(dstY1 - dstY0)) {
>
Later in this function, the following error check appears:
if (filter == GL_LINEAR) {
/* 3.1 spec, page 199:
* "Calling BlitFramebuffer will result in an INVALID_OPERATION
error
* if filter is LINEAR and read buffer contains integer data."
*/
GLenum type = _mesa_get_format_datatype(colorReadRb->Format);
if (type == GL_INT || type == GL_UNSIGNED_INT) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glBlitFramebufferEXT(integer color type)");
return;
}
}
This needs to be changed to "if (filter != GL_NEAREST)" in accordance with
the following text from the extension:
"Calling BlitFramebuffer will result in an INVALID_OPERATION error if
filter is not NEAREST and read buffer contains integer data."
With that fixed, this patch is:
Reviewed-by: Paul Berry <stereotype441 at gmail.com>
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index b68853b..8af6dc6 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -3023,6 +3023,7 @@ struct gl_extensions
> GLboolean EXT_fog_coord;
> GLboolean EXT_framebuffer_blit;
> GLboolean EXT_framebuffer_multisample;
> + GLboolean EXT_framebuffer_multisample_blit_scaled;
> GLboolean EXT_framebuffer_object;
> GLboolean EXT_framebuffer_sRGB;
> GLboolean EXT_gpu_program_parameters;
> --
> 1.8.1.4
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130524/7ab87242/attachment-0001.html>
More information about the mesa-dev
mailing list