[Mesa-dev] [PATCH 08/38] main: Refactor get_texture_for_framebuffer.
Fredrik Höglund
fredrik at kde.org
Fri May 1 10:35:36 PDT 2015
On Wednesday 04 March 2015, Laura Ekstrand wrote:
> This moves a few blocks around so that the control flow is more obvious. If
> the texture is 0, just return true at the beginning of the function.
> Likewise, if the texObj is NULL, return true at the beginning of the funciton
> as well.
> ---
> src/mesa/main/fbobject.c | 43 +++++++++++++++++++++----------------------
> 1 file changed, 21 insertions(+), 22 deletions(-)
>
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 143c6b4..f86e1a0 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -2437,17 +2437,34 @@ get_texture_for_framebuffer(struct gl_context *ctx,
> struct gl_texture_object **texObj)
> {
> GLenum maxLevelsTarget;
> + GLboolean err = GL_TRUE;
>
> *texObj = NULL; /* This will get returned if texture = 0. */
>
> /* The textarget, level, and zoffset parameters are only validated if
> * texture is non-zero.
> */
> - if (texture) {
> - GLboolean err = GL_TRUE;
> + if (!texture)
> + return true;
> +
> + *texObj = _mesa_lookup_texture(ctx, texture);
> + if (!texObj) {
One more thing: this line is NULL-checking the wrong pointer.
It should be checking *texObj.
> + /* Can't render to a non-existant texture object.
> + *
> + * The OpenGL 4.5 core spec (02.02.2015) in Section 9.2 Binding and
> + * Managing Framebuffer Objects specifies a different error
> + * depending upon the calling function (PDF pages 325-328).
> + * *FramebufferTexture (where *layered = GL_TRUE) throws invalid
> + * value, while the other commands throw invalid operation (where
> + * *layered = GL_FALSE).
> + */
> + GLenum no_texobj_err = *layered ? GL_INVALID_VALUE :
> + GL_INVALID_OPERATION;
> + _mesa_error(ctx, no_texobj_err,
> + "%s(non-generated texture %u)", caller, texture);
> + return false;
> + }
>
> - *texObj = _mesa_lookup_texture(ctx, texture);
> - if (*texObj != NULL) {
> if (textarget == 0) {
> if (*layered) {
> /* We're being called by gl*FramebufferTexture() and textarget
> @@ -2496,23 +2513,6 @@ get_texture_for_framebuffer(struct gl_context *ctx,
> ? !_mesa_is_cube_face(textarget)
> : ((*texObj)->Target != textarget);
> }
> - }
> - else {
> - /* Can't render to a non-existant texture object.
> - *
> - * The OpenGL 4.5 core spec (02.02.2015) in Section 9.2 Binding and
> - * Managing Framebuffer Objects specifies a different error
> - * depending upon the calling function (PDF pages 325-328).
> - * *FramebufferTexture (where *layered = GL_TRUE) throws invalid
> - * value, while the other commands throw invalid operation (where
> - * *layered = GL_FALSE).
> - */
> - GLenum no_texobj_err = *layered ? GL_INVALID_VALUE :
> - GL_INVALID_OPERATION;
> - _mesa_error(ctx, no_texobj_err,
> - "%s(non-generated texture %u)", caller, texture);
> - return false;
> - }
>
> if (err) {
> _mesa_error(ctx, GL_INVALID_OPERATION,
> @@ -2546,7 +2546,6 @@ get_texture_for_framebuffer(struct gl_context *ctx,
> "%s(invalid level %d)", caller, level);
> return false;
> }
> - }
>
> return true;
> }
>
More information about the mesa-dev
mailing list