<div dir="ltr">On 2 January 2013 07:38, Anuj Phogat <span dir="ltr"><<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">gles3 conformance sgis_texture_lod_basic_getter.test expects base<br>
and max texture levels to be rounded to nearest integer. e.g. round<br>
2.3 to 2 and 2.6 to 3. OpenGL 3.0 and OpenGL ES 3.0 specifications<br>
suggest similar rounding to select level when filtering mode is<br>
GL_NEAREST.<br>
<br>
This patch makes sgis_texture_lod_basic_getter.test pass.<br></blockquote><div><br></div><div>It looks to me from reading the spec like this logic should be applied in all cases where _mesa_TexParameterf converts floats to ints, not just base and max texture level.  GL 4.3, section 8.10 ("Texture Parameters") simply says "Data conversions are performed as specified in section 2.2.1.", and section 2.2.1 ("Data Conversion For State-Setting Commands") says that "Floating-point values are rounded to the nearest integer."  There's no mention that this rule should apply only to base and max texture level.<br>
<br></div><div>So rather than create a separate case in the switch statement to handle GL_TEXTURE_BASE_LEVEL and GL_TEXTURE_MAX_LEVEL, I'd recommend just fixing the existing case to do the rounding properly.<br><br>Also, the switch statement as it exists today contains two separate blocks with identical code (one to handle GL_TEXTURE_SWIZZLE_{R,G,B,A}_EXT and one to handle all other float-to-int conversions).  That's silly--we should have just one block.<br>
<br></div><div>One other comment below:<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Signed-off-by: Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com">anuj.phogat@gmail.com</a>><br>
---<br>
 src/mesa/main/texparam.c |   24 ++++++++++++++++++++++--<br>
 1 files changed, 22 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c<br>
index ca5a21f..f3f97ca 100644<br>
--- a/src/mesa/main/texparam.c<br>
+++ b/src/mesa/main/texparam.c<br>
@@ -654,8 +654,6 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param)<br>
    case GL_TEXTURE_WRAP_S:<br>
    case GL_TEXTURE_WRAP_T:<br>
    case GL_TEXTURE_WRAP_R:<br>
-   case GL_TEXTURE_BASE_LEVEL:<br>
-   case GL_TEXTURE_MAX_LEVEL:<br>
    case GL_GENERATE_MIPMAP_SGIS:<br>
    case GL_TEXTURE_COMPARE_MODE_ARB:<br>
    case GL_TEXTURE_COMPARE_FUNC_ARB:<br>
@@ -670,6 +668,28 @@ _mesa_TexParameterf(GLenum target, GLenum pname, GLfloat param)<br>
          need_update = set_tex_parameteri(ctx, texObj, pname, p);<br>
       }<br>
       break;<br>
+   case GL_TEXTURE_BASE_LEVEL:<br>
+   case GL_TEXTURE_MAX_LEVEL:<br>
+      {<br>
+         GLint p[4];<br>
+         /* Check if param exceeds maximum value an integer can hold */<br>
+         if (param > 2147483647.0f) {<br>
+            p[0] = (GLint) 2147483647.0f;<br>
+         }<br>
+         else if (param < 0.0f) {<br>
+            p[0] = 0;<br>
+        }<br></blockquote><div><br></div><div>I'm not convinced that this amount of thoroughness is necessary.  There's no language in the spec (or test cases that I'm aware of) to indicate that out-of-range floats need to be translated to INT_MAX or 0.  I think it would be adequate to just do "p[0] = (int) round(param);" and just let the behaviour be undefined for out-of-range values.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+         else {<br>
+            /* Round float param to nearest integer. e.g round 2.3 to 2<br>
+             * and 2.8 to 3.<br>
+             */<br>
+            p[0] = (GLint) (param + 0.5);<br>
+         }<br>
+<br>
+        p[1] = p[2] = p[3] = 0;<br>
+         need_update = set_tex_parameteri(ctx, texObj, pname, p);<br>
+      }<br>
+      break;<br>
    case GL_TEXTURE_SWIZZLE_R_EXT:<br>
    case GL_TEXTURE_SWIZZLE_G_EXT:<br>
    case GL_TEXTURE_SWIZZLE_B_EXT:<br>
<span class=""><font color="#888888">--<br>
1.7.7.6<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>