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.haeh...@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.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to