Mesa (main): mesa: clamp UINT values greater than INT_MAX for glGetInteger
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Jun 7 05:19:49 UTC 2022
Module: Mesa
Branch: main
Commit: c1381daab8465730f7792bfeadfe2bcbd5805111
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c1381daab8465730f7792bfeadfe2bcbd5805111
Author: Marek Olšák <marek.olsak at amd.com>
Date: Sun Jun 5 18:30:13 2022 -0400
mesa: clamp UINT values greater than INT_MAX for glGetInteger
so that values greater than INT_MAX report INT_MAX with glGetInteger and
the full value with glGetInteger64. This allows exposing compute grid sizes
and max buffer sizes greater than INT_MAX.
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16881>
---
src/mesa/main/get.c | 47 ++++++++++++++++++++++++++++++++++++-----------
1 file changed, 36 insertions(+), 11 deletions(-)
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 1efab608967..1f44de2350f 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -2042,24 +2042,33 @@ _mesa_GetIntegerv(GLenum pname, GLint *params)
break;
case TYPE_INT_4:
- case TYPE_UINT_4:
params[3] = ((GLint *) p)[3];
FALLTHROUGH;
case TYPE_INT_3:
- case TYPE_UINT_3:
params[2] = ((GLint *) p)[2];
FALLTHROUGH;
case TYPE_INT_2:
- case TYPE_UINT_2:
case TYPE_ENUM_2:
params[1] = ((GLint *) p)[1];
FALLTHROUGH;
case TYPE_INT:
- case TYPE_UINT:
case TYPE_ENUM:
params[0] = ((GLint *) p)[0];
break;
+ case TYPE_UINT_4:
+ params[3] = MIN2(((GLuint *) p)[3], INT_MAX);
+ FALLTHROUGH;
+ case TYPE_UINT_3:
+ params[2] = MIN2(((GLuint *) p)[2], INT_MAX);
+ FALLTHROUGH;
+ case TYPE_UINT_2:
+ params[1] = MIN2(((GLuint *) p)[1], INT_MAX);
+ FALLTHROUGH;
+ case TYPE_UINT:
+ params[0] = MIN2(((GLuint *) p)[0], INT_MAX);
+ break;
+
case TYPE_ENUM16:
params[0] = ((GLenum16 *) p)[0];
break;
@@ -3032,16 +3041,23 @@ _mesa_GetIntegeri_v( GLenum pname, GLuint index, GLint *params )
break;
case TYPE_INT:
- case TYPE_UINT:
params[0] = v.value_int;
break;
+ case TYPE_UINT:
+ params[0] = MIN2(v.value_uint, INT_MAX);
+ break;
case TYPE_INT_4:
- case TYPE_UINT_4:
params[0] = v.value_int_4[0];
params[1] = v.value_int_4[1];
params[2] = v.value_int_4[2];
params[3] = v.value_int_4[3];
break;
+ case TYPE_UINT_4:
+ params[0] = MIN2((GLuint)v.value_int_4[0], INT_MAX);
+ params[1] = MIN2((GLuint)v.value_int_4[1], INT_MAX);
+ params[2] = MIN2((GLuint)v.value_int_4[2], INT_MAX);
+ params[3] = MIN2((GLuint)v.value_int_4[3], INT_MAX);
+ break;
case TYPE_INT64:
params[0] = INT64_TO_INT(v.value_int64);
break;
@@ -3068,7 +3084,7 @@ _mesa_GetInteger64i_v( GLenum pname, GLuint index, GLint64 *params )
params[3] = v.value_int_4[3];
break;
case TYPE_UINT:
- params[0] = (GLuint) v.value_int;
+ params[0] = v.value_uint;
break;
case TYPE_UINT_4:
params[0] = (GLuint) v.value_int_4[0];
@@ -3385,24 +3401,33 @@ _mesa_GetFixedv(GLenum pname, GLfixed *params)
break;
case TYPE_INT_4:
- case TYPE_UINT_4:
params[3] = INT_TO_FIXED(((GLint *) p)[3]);
FALLTHROUGH;
case TYPE_INT_3:
- case TYPE_UINT_3:
params[2] = INT_TO_FIXED(((GLint *) p)[2]);
FALLTHROUGH;
case TYPE_INT_2:
- case TYPE_UINT_2:
case TYPE_ENUM_2:
params[1] = INT_TO_FIXED(((GLint *) p)[1]);
FALLTHROUGH;
case TYPE_INT:
- case TYPE_UINT:
case TYPE_ENUM:
params[0] = INT_TO_FIXED(((GLint *) p)[0]);
break;
+ case TYPE_UINT_4:
+ params[3] = INT_TO_FIXED(((GLuint *) p)[3]);
+ FALLTHROUGH;
+ case TYPE_UINT_3:
+ params[2] = INT_TO_FIXED(((GLuint *) p)[2]);
+ FALLTHROUGH;
+ case TYPE_UINT_2:
+ params[1] = INT_TO_FIXED(((GLuint *) p)[1]);
+ FALLTHROUGH;
+ case TYPE_UINT:
+ params[0] = INT_TO_FIXED(((GLuint *) p)[0]);
+ break;
+
case TYPE_ENUM16:
params[0] = INT_TO_FIXED((GLint)(((GLenum16 *) p)[0]));
break;
More information about the mesa-commit
mailing list