Mesa (18.1): mesa: fix glGetInteger/Float/etc queries for vertex arrays attribs

Dylan Baker dbaker at kemper.freedesktop.org
Fri May 11 15:41:35 UTC 2018


Module: Mesa
Branch: 18.1
Commit: 5391c4f5fd53e0b757bb9d951c8f716fb9d12f57
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5391c4f5fd53e0b757bb9d951c8f716fb9d12f57

Author: Brian Paul <brianp at vmware.com>
Date:   Wed May  9 19:46:32 2018 -0600

mesa: fix glGetInteger/Float/etc queries for vertex arrays attribs

The vertex array Size and Stride attributes are now ubyte and short,
respectively.  The glGet code needed to be updated to handle those
types, but wasn't.

Fixes the new piglit test gl-1.5-get-array-attribs test.

v2: fix inadvertant whitespace change, change COLOR_ARRAY_SIZE to UBYTE,
misc fixes suggested by Justin

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106450
Fixes: d5f42f96e16 ("mesa: shrink size of gl_array_attributes (v2)")
Cc: mesa-stable at lists.freedesktop.org
Reviewed-by: Mathias Fröhlich <mathias.froehlich at web.de>
Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>
(cherry picked from commit d07466fe18522cde1acadfc597583f80b69c15b7)

---

 src/mesa/main/get.c              | 71 ++++++++++++++++++++++++++++++++++++++++
 src/mesa/main/get_hash_params.py | 26 +++++++--------
 2 files changed, 84 insertions(+), 13 deletions(-)

diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 90ab7ca60f..9a16d079e2 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -105,6 +105,8 @@ enum value_type {
    TYPE_ENUM,
    TYPE_ENUM_2,
    TYPE_BOOLEAN,
+   TYPE_UBYTE,
+   TYPE_SHORT,
    TYPE_BIT_0,
    TYPE_BIT_1,
    TYPE_BIT_2,
@@ -188,6 +190,8 @@ union value {
    GLint value_int_4[4];
    GLint64 value_int64;
    GLenum value_enum;
+   GLubyte value_ubyte;
+   GLshort value_short;
 
    /* Sigh, see GL_COMPRESSED_TEXTURE_FORMATS_ARB handling */
    struct {
@@ -235,10 +239,13 @@ union value {
 #define CONTEXT_MATRIX(field) CONTEXT_FIELD(field, TYPE_MATRIX)
 #define CONTEXT_MATRIX_T(field) CONTEXT_FIELD(field, TYPE_MATRIX_T)
 
+/* Vertex array fields */
 #define ARRAY_INT(field) ARRAY_FIELD(field, TYPE_INT)
 #define ARRAY_ENUM(field) ARRAY_FIELD(field, TYPE_ENUM)
 #define ARRAY_ENUM16(field) ARRAY_FIELD(field, TYPE_ENUM16)
 #define ARRAY_BOOL(field) ARRAY_FIELD(field, TYPE_BOOLEAN)
+#define ARRAY_UBYTE(field) ARRAY_FIELD(field, TYPE_UBYTE)
+#define ARRAY_SHORT(field) ARRAY_FIELD(field, TYPE_SHORT)
 
 #define EXT(f)					\
    offsetof(struct gl_extensions, f)
@@ -1517,6 +1524,10 @@ get_value_size(enum value_type type, const union value *v)
       return sizeof(GLenum) * 2;
    case TYPE_BOOLEAN:
       return sizeof(GLboolean);
+   case TYPE_UBYTE:
+      return sizeof(GLubyte);
+   case TYPE_SHORT:
+      return sizeof(GLshort);
    case TYPE_BIT_0:
    case TYPE_BIT_1:
    case TYPE_BIT_2:
@@ -1628,6 +1639,14 @@ _mesa_GetBooleanv(GLenum pname, GLboolean *params)
       params[0] = ((GLboolean*) p)[0];
       break;
 
+   case TYPE_UBYTE:
+      params[0] = INT_TO_BOOLEAN(((GLubyte *) p)[0]);
+      break;
+
+   case TYPE_SHORT:
+      params[0] = INT_TO_BOOLEAN(((GLshort *) p)[0]);
+      break;
+
    case TYPE_MATRIX:
       m = *(GLmatrix **) p;
       for (i = 0; i < 16; i++)
@@ -1735,6 +1754,14 @@ _mesa_GetFloatv(GLenum pname, GLfloat *params)
       params[0] = BOOLEAN_TO_FLOAT(*(GLboolean*) p);
       break;
 
+   case TYPE_UBYTE:
+      params[0] = (GLfloat) ((GLubyte *) p)[0];
+      break;
+
+   case TYPE_SHORT:
+      params[0] = (GLfloat) ((GLshort *) p)[0];
+      break;
+
    case TYPE_MATRIX:
       m = *(GLmatrix **) p;
       for (i = 0; i < 16; i++)
@@ -1842,6 +1869,14 @@ _mesa_GetIntegerv(GLenum pname, GLint *params)
       params[0] = BOOLEAN_TO_INT(*(GLboolean*) p);
       break;
 
+   case TYPE_UBYTE:
+      params[0] = ((GLubyte *) p)[0];
+      break;
+
+   case TYPE_SHORT:
+      params[0] = ((GLshort *) p)[0];
+      break;
+
    case TYPE_MATRIX:
       m = *(GLmatrix **) p;
       for (i = 0; i < 16; i++)
@@ -2062,6 +2097,14 @@ _mesa_GetDoublev(GLenum pname, GLdouble *params)
       params[0] = *(GLboolean*) p;
       break;
 
+   case TYPE_UBYTE:
+      params[0] = ((GLubyte *) p)[0];
+      break;
+
+   case TYPE_SHORT:
+      params[0] = ((GLshort *) p)[0];
+      break;
+
    case TYPE_MATRIX:
       m = *(GLmatrix **) p;
       for (i = 0; i < 16; i++)
@@ -2141,6 +2184,8 @@ _mesa_GetUnsignedBytevEXT(GLenum pname, GLubyte *data)
    case TYPE_ENUM:
    case TYPE_ENUM_2:
    case TYPE_BOOLEAN:
+   case TYPE_UBYTE:
+   case TYPE_SHORT:
    case TYPE_FLOAT:
    case TYPE_FLOATN:
    case TYPE_FLOAT_2:
@@ -2790,6 +2835,14 @@ _mesa_GetFloati_v(GLenum pname, GLuint index, GLfloat *params)
       params[0] = BOOLEAN_TO_FLOAT(v.value_bool);
       break;
 
+   case TYPE_UBYTE:
+      params[0] = (GLfloat) v.value_ubyte;
+      break;
+
+   case TYPE_SHORT:
+      params[0] = (GLfloat) v.value_short;
+      break;
+
    case TYPE_MATRIX:
       m = *(GLmatrix **) &v;
       for (i = 0; i < 16; i++)
@@ -2873,6 +2926,14 @@ _mesa_GetDoublei_v(GLenum pname, GLuint index, GLdouble *params)
       params[0] = (GLdouble) BOOLEAN_TO_FLOAT(v.value_bool);
       break;
 
+   case TYPE_UBYTE:
+      params[0] = (GLdouble) v.value_ubyte;
+      break;
+
+   case TYPE_SHORT:
+      params[0] = (GLdouble) v.value_short;
+      break;
+
    case TYPE_MATRIX:
       m = *(GLmatrix **) &v;
       for (i = 0; i < 16; i++)
@@ -2925,6 +2986,8 @@ _mesa_GetUnsignedBytei_vEXT(GLenum target, GLuint index, GLubyte *data)
    case TYPE_ENUM:
    case TYPE_ENUM_2:
    case TYPE_BOOLEAN:
+   case TYPE_UBYTE:
+   case TYPE_SHORT:
    case TYPE_FLOAT:
    case TYPE_FLOATN:
    case TYPE_FLOAT_2:
@@ -3018,6 +3081,14 @@ _mesa_GetFixedv(GLenum pname, GLfixed *params)
       params[0] = BOOLEAN_TO_FIXED(((GLboolean*) p)[0]);
       break;
 
+   case TYPE_UBYTE:
+      params[0] = INT_TO_FIXED(((GLubyte *) p)[0]);
+      break;
+
+   case TYPE_SHORT:
+      params[0] = INT_TO_FIXED(((GLshort *) p)[0]);
+      break;
+
    case TYPE_MATRIX:
       m = *(GLmatrix **) p;
       for (i = 0; i < 16; i++)
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index f38a87df88..62245693e7 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -212,20 +212,20 @@ descriptor=[
   [ "TEXTURE_MATRIX", "LOC_CUSTOM, TYPE_MATRIX, 0, extra_valid_texture_unit" ],
   [ "TEXTURE_STACK_DEPTH", "LOC_CUSTOM, TYPE_INT, 0, extra_valid_texture_unit" ],
   [ "VERTEX_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_POS].Enabled), NO_EXTRA" ],
-  [ "VERTEX_ARRAY_SIZE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_POS].Size), NO_EXTRA" ],
+  [ "VERTEX_ARRAY_SIZE", "ARRAY_UBYTE(VertexAttrib[VERT_ATTRIB_POS].Size), NO_EXTRA" ],
   [ "VERTEX_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_POS].Type), NO_EXTRA" ],
-  [ "VERTEX_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_POS].Stride), NO_EXTRA" ],
+  [ "VERTEX_ARRAY_STRIDE", "ARRAY_SHORT(VertexAttrib[VERT_ATTRIB_POS].Stride), NO_EXTRA" ],
   [ "NORMAL_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_NORMAL].Enabled), NO_EXTRA" ],
   [ "NORMAL_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_NORMAL].Type), NO_EXTRA" ],
-  [ "NORMAL_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_NORMAL].Stride), NO_EXTRA" ],
+  [ "NORMAL_ARRAY_STRIDE", "ARRAY_SHORT(VertexAttrib[VERT_ATTRIB_NORMAL].Stride), NO_EXTRA" ],
   [ "COLOR_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR0].Enabled), NO_EXTRA" ],
-  [ "COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
+  [ "COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_UBYTE, 0, NO_EXTRA" ],
   [ "COLOR_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_COLOR0].Type), NO_EXTRA" ],
-  [ "COLOR_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR0].Stride), NO_EXTRA" ],
+  [ "COLOR_ARRAY_STRIDE", "ARRAY_SHORT(VertexAttrib[VERT_ATTRIB_COLOR0].Stride), NO_EXTRA" ],
   [ "TEXTURE_COORD_ARRAY", "LOC_CUSTOM, TYPE_BOOLEAN, offsetof(struct gl_array_attributes, Enabled), NO_EXTRA" ],
-  [ "TEXTURE_COORD_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_attributes, Size), NO_EXTRA" ],
+  [ "TEXTURE_COORD_ARRAY_SIZE", "LOC_CUSTOM, TYPE_UBYTE, offsetof(struct gl_array_attributes, Size), NO_EXTRA" ],
   [ "TEXTURE_COORD_ARRAY_TYPE", "LOC_CUSTOM, TYPE_ENUM16, offsetof(struct gl_array_attributes, Type), NO_EXTRA" ],
-  [ "TEXTURE_COORD_ARRAY_STRIDE", "LOC_CUSTOM, TYPE_INT, offsetof(struct gl_array_attributes, Stride), NO_EXTRA" ],
+  [ "TEXTURE_COORD_ARRAY_STRIDE", "LOC_CUSTOM, TYPE_SHORT, offsetof(struct gl_array_attributes, Stride), NO_EXTRA" ],
 
 # GL_ARB_multitexture
   [ "MAX_TEXTURE_UNITS", "CONTEXT_INT(Const.MaxTextureUnits), NO_EXTRA" ],
@@ -255,7 +255,7 @@ descriptor=[
 # OES_point_size_array
   [ "POINT_SIZE_ARRAY_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled, TYPE_BOOLEAN), NO_EXTRA" ],
   [ "POINT_SIZE_ARRAY_TYPE_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Type, TYPE_ENUM16), NO_EXTRA" ],
-  [ "POINT_SIZE_ARRAY_STRIDE_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Stride, TYPE_INT), NO_EXTRA" ],
+  [ "POINT_SIZE_ARRAY_STRIDE_OES", "ARRAY_FIELD(VertexAttrib[VERT_ATTRIB_POINT_SIZE].Stride, TYPE_SHORT), NO_EXTRA" ],
   [ "POINT_SIZE_ARRAY_BUFFER_BINDING_OES", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
 ]},
 
@@ -777,11 +777,11 @@ descriptor=[
   [ "COLOR_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
   [ "INDEX_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled), NO_EXTRA" ],
   [ "INDEX_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Type), NO_EXTRA" ],
-  [ "INDEX_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Stride), NO_EXTRA" ],
+  [ "INDEX_ARRAY_STRIDE", "ARRAY_SHORT(VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Stride), NO_EXTRA" ],
   [ "INDEX_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
   [ "TEXTURE_COORD_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
   [ "EDGE_FLAG_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled), NO_EXTRA" ],
-  [ "EDGE_FLAG_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_EDGEFLAG].Stride), NO_EXTRA" ],
+  [ "EDGE_FLAG_ARRAY_STRIDE", "ARRAY_SHORT(VertexAttrib[VERT_ATTRIB_EDGEFLAG].Stride), NO_EXTRA" ],
   [ "EDGE_FLAG_ARRAY_COUNT_EXT", "CONST(0), NO_EXTRA" ],
 
 # GL_ARB_texture_compression
@@ -811,14 +811,14 @@ descriptor=[
   [ "CURRENT_SECONDARY_COLOR", "CONTEXT_FIELD(Current.Attrib[VERT_ATTRIB_COLOR1][0], TYPE_FLOATN_4), extra_flush_current" ],
   [ "SECONDARY_COLOR_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_COLOR1].Enabled), NO_EXTRA" ],
   [ "SECONDARY_COLOR_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_COLOR1].Type), NO_EXTRA" ],
-  [ "SECONDARY_COLOR_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_COLOR1].Stride), NO_EXTRA" ],
-  [ "SECONDARY_COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
+  [ "SECONDARY_COLOR_ARRAY_STRIDE", "ARRAY_SHORT(VertexAttrib[VERT_ATTRIB_COLOR1].Stride), NO_EXTRA" ],
+  [ "SECONDARY_COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_UBYTE, 0, NO_EXTRA" ],
 
 # GL_EXT_fog_coord
   [ "CURRENT_FOG_COORDINATE", "CONTEXT_FLOAT(Current.Attrib[VERT_ATTRIB_FOG][0]), extra_flush_current" ],
   [ "FOG_COORDINATE_ARRAY", "ARRAY_BOOL(VertexAttrib[VERT_ATTRIB_FOG].Enabled), NO_EXTRA" ],
   [ "FOG_COORDINATE_ARRAY_TYPE", "ARRAY_ENUM16(VertexAttrib[VERT_ATTRIB_FOG].Type), NO_EXTRA" ],
-  [ "FOG_COORDINATE_ARRAY_STRIDE", "ARRAY_INT(VertexAttrib[VERT_ATTRIB_FOG].Stride), NO_EXTRA" ],
+  [ "FOG_COORDINATE_ARRAY_STRIDE", "ARRAY_SHORT(VertexAttrib[VERT_ATTRIB_FOG].Stride), NO_EXTRA" ],
   [ "FOG_COORDINATE_SOURCE", "CONTEXT_ENUM16(Fog.FogCoordinateSource), NO_EXTRA" ],
 
 # GL_NV_fog_distance




More information about the mesa-commit mailing list