[Mesa-dev] [PATCH] mesa: Use immutable level count in FramebufferTexture error check.

Nicolai Hähnle nhaehnle at gmail.com
Sat Oct 7 08:51:03 UTC 2017


On 07.10.2017 09:05, Kenneth Graunke wrote:
> This offers a more accurate bound.

.. and it's what the spec mandates :)

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>


> 
> Fixes KHR-GL45.geometry_shader.layered_fbo.fb_texture_invalid_level_number.
> ---
>   src/mesa/main/fbobject.c | 14 ++++++++------
>   1 file changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 0867ff70fa7..e11feda5f3c 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -3223,11 +3223,13 @@ check_layer(struct gl_context *ctx, GLenum target, GLint layer,
>    * \return true if no errors, false if errors
>    */
>   static bool
> -check_level(struct gl_context *ctx, GLenum target, GLint level,
> -            const char *caller)
> +check_level(struct gl_context *ctx, struct gl_texture_object *texObj,
> +            GLenum target, GLint level, const char *caller)
>   {
> -   if ((level < 0) ||
> -       (level >= _mesa_max_texture_levels(ctx, target))) {
> +   const int max_levels = texObj->Immutable ? texObj->ImmutableLevels :
> +                          _mesa_max_texture_levels(ctx, target);
> +
> +   if (level < 0 || level >= max_levels) {
>         _mesa_error(ctx, GL_INVALID_VALUE,
>                     "%s(invalid level %d)", caller, level);
>         return false;
> @@ -3393,7 +3395,7 @@ framebuffer_texture_with_dims(int dims, GLenum target,
>         if ((dims == 3) && !check_layer(ctx, texObj->Target, layer, caller))
>            return;
>   
> -      if (!check_level(ctx, textarget, level, caller))
> +      if (!check_level(ctx, texObj, textarget, level, caller))
>            return;
>      }
>   
> @@ -3539,7 +3541,7 @@ frame_buffer_texture(GLuint framebuffer, GLenum target,
>                  return;
>            }
>   
> -         if (!check_level(ctx, texObj->Target, level, func))
> +         if (!check_level(ctx, texObj, texObj->Target, level, func))
>               return;
>         }
>   
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list