Mesa (master): mesa: Refactor error checking for GL_TEXTURE_BASE_LEVEL vs texture targets

Ian Romanick idr at kemper.freedesktop.org
Thu Jun 29 00:06:31 UTC 2017


Module: Mesa
Branch: master
Commit: e0acd625364528f80b35e80dbb4678a202566f6c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e0acd625364528f80b35e80dbb4678a202566f6c

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Tue Jan 12 17:09:50 2016 -0800

mesa: Refactor error checking for GL_TEXTURE_BASE_LEVEL vs texture targets

Add a big spec quotation justifying the error generated, which has
changed over the GL versions.

v2: Compact the spec quote based on a Khronos bug and discussion with Jason.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>

---

 src/mesa/main/texparam.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c
index 1059a4cb5e..d8bbabf8f2 100644
--- a/src/mesa/main/texparam.c
+++ b/src/mesa/main/texparam.c
@@ -376,8 +376,26 @@ set_tex_parameteri(struct gl_context *ctx,
       if (texObj->BaseLevel == params[0])
          return GL_FALSE;
 
+      /* Section 8.10 (Texture Parameters) of the OpenGL 4.5 Core Profile spec
+       * says:
+       *
+       *    An INVALID_OPERATION error is generated if the effective target is
+       *    TEXTURE_2D_MULTISAMPLE, TEXTURE_2D_MULTISAMPLE_ARRAY, or
+       *    TEXTURE_RECTANGLE, and pname TEXTURE_BASE_LEVEL is set to a value
+       *    other than zero.
+       *
+       * Note that section 3.8.8 (Texture Parameters) of the OpenGL 3.3 Core
+       * Profile spec said:
+       *
+       *    The error INVALID_VALUE is generated if TEXTURE_BASE_LEVEL is set
+       *    to any value other than zero.
+       *
+       * We take the 4.5 language as a correction to 3.3, and we implement
+       * that on all GL versions.
+       */
       if ((texObj->Target == GL_TEXTURE_2D_MULTISAMPLE ||
-           texObj->Target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY) && params[0] != 0)
+           texObj->Target == GL_TEXTURE_2D_MULTISAMPLE_ARRAY ||
+           texObj->Target == GL_TEXTURE_RECTANGLE) && params[0] != 0)
          goto invalid_operation;
 
       if (params[0] < 0) {
@@ -385,12 +403,6 @@ set_tex_parameteri(struct gl_context *ctx,
                      "glTex%sParameter(param=%d)", suffix, params[0]);
          return GL_FALSE;
       }
-      if (texObj->Target == GL_TEXTURE_RECTANGLE_ARB && params[0] != 0) {
-         _mesa_error(ctx, GL_INVALID_OPERATION,
-                     "glTex%sParameter(target=%s, param=%d)", suffix,
-                     _mesa_enum_to_string(texObj->Target), params[0]);
-         return GL_FALSE;
-      }
       incomplete(ctx, texObj);
 
       /** See note about ARB_texture_storage below */




More information about the mesa-commit mailing list