[Mesa-dev] [PATCH 1/2] mesa: Treat glBindRenderbuffer and glBindRenderbufferEXT correctly
Jordan Justen
jljusten at gmail.com
Sun Jul 28 12:54:16 PDT 2013
On Fri, Jul 26, 2013 at 10:55 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> Allow user-generated names for glBindRenderbufferEXT on desktop GL.
> Disallow its use altogether for core profiles.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> src/mesa/main/fbobject.c | 32 +++++++++++++++++++++++++-------
> 1 file changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index a29f1ab..1cc0966 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -1104,11 +1104,11 @@ _mesa_IsRenderbuffer(GLuint renderbuffer)
> }
>
>
> -void GLAPIENTRY
> -_mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
> +static void
> +bind_renderbuffer(struct gl_context *ctx, GLenum target, GLuint renderbuffer,
> + bool allow_user_names)
> {
> struct gl_renderbuffer *newRb;
> - GET_CURRENT_CONTEXT(ctx);
>
> if (target != GL_RENDERBUFFER_EXT) {
> _mesa_error(ctx, GL_INVALID_ENUM, "glBindRenderbufferEXT(target)");
> @@ -1125,9 +1125,7 @@ _mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
> /* ID was reserved, but no real renderbuffer object made yet */
> newRb = NULL;
> }
> - else if (!newRb
> - && _mesa_is_desktop_gl(ctx)
> - && ctx->Extensions.ARB_framebuffer_object) {
> + else if (!newRb && !allow_user_names) {
> /* All RB IDs must be Gen'd */
> _mesa_error(ctx, GL_INVALID_OPERATION, "glBindRenderbuffer(buffer)");
> return;
> @@ -1154,11 +1152,31 @@ _mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
> _mesa_reference_renderbuffer(&ctx->CurrentRenderbuffer, newRb);
> }
>
> +void GLAPIENTRY
> +_mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
> +{
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* OpenGL ES glBindRenderbuffer and glBindRenderbufferOES use this same
> + * entry point, but they allow the use of user-generated names.
> + */
> + bind_renderbuffer(ctx, target, renderbuffer, _mesa_is_gles(ctx));
> +}
>
> void GLAPIENTRY
> _mesa_BindRenderbufferEXT(GLenum target, GLuint renderbuffer)
> {
> - _mesa_BindRenderbuffer(target, renderbuffer);
> + GET_CURRENT_CONTEXT(ctx);
> +
> + /* Disallowing the EXT function altogether prevents a loop-hole from
> + * allowing user-generated names in a core profile / OpenGL 3.1.
> + */
> + if (ctx->API == API_OPENGL_CORE) {
> + _mesa_generic_nop();
> + return;
Could we make the api_exec.c generation not bind
BindRenderbufferEXT/BindFramebufferEXT for CORE contexts?
Series Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
> + }
> +
> + bind_renderbuffer(ctx, target, renderbuffer, true);
> }
>
>
> --
> 1.8.1.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list