diff options
| author | Brian Paul <brianp@vmware.com> | 2010-10-28 21:17:41 -0600 | 
|---|---|---|
| committer | Brian Paul <brianp@vmware.com> | 2010-10-28 21:17:41 -0600 | 
| commit | ca2618f4b632bf4b357a539a8fb7dafc99b35976 (patch) | |
| tree | 70b05392c3ca65db9a2690689b9550eca196b639 /src/mesa | |
| parent | e2b8c657238d37b76720ea5d2e8b30d748718c29 (diff) | |
mesa: implement integer-valued vertex attribute functions
The integers still get converted to floats.  That'll have to change someday.
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/main/api_loopback.c | 144 | ||||
| -rw-r--r-- | src/mesa/main/vtxfmt.c | 34 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_attrib_tmp.h | 201 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_exec_api.c | 18 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_save_api.c | 18 | 
5 files changed, 303 insertions, 112 deletions
| diff --git a/src/mesa/main/api_loopback.c b/src/mesa/main/api_loopback.c index d1789069cc..8740a1830c 100644 --- a/src/mesa/main/api_loopback.c +++ b/src/mesa/main/api_loopback.c @@ -66,16 +66,24 @@  #define MATERIALFV(a,b,c)           CALL_Materialfv(GET_DISPATCH(), (a,b,c))  #define RECTF(a,b,c,d)              CALL_Rectf(GET_DISPATCH(), (a,b,c,d)) +#define FOGCOORDF(x)                CALL_FogCoordfEXT(GET_DISPATCH(), (x)) +#define SECONDARYCOLORF(a,b,c)      CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c)) +  #define ATTRIB1NV(index,x)          CALL_VertexAttrib1fNV(GET_DISPATCH(), (index,x))  #define ATTRIB2NV(index,x,y)        CALL_VertexAttrib2fNV(GET_DISPATCH(), (index,x,y))  #define ATTRIB3NV(index,x,y,z)      CALL_VertexAttrib3fNV(GET_DISPATCH(), (index,x,y,z))  #define ATTRIB4NV(index,x,y,z,w)    CALL_VertexAttrib4fNV(GET_DISPATCH(), (index,x,y,z,w)) +  #define ATTRIB1ARB(index,x)         CALL_VertexAttrib1fARB(GET_DISPATCH(), (index,x))  #define ATTRIB2ARB(index,x,y)       CALL_VertexAttrib2fARB(GET_DISPATCH(), (index,x,y))  #define ATTRIB3ARB(index,x,y,z)     CALL_VertexAttrib3fARB(GET_DISPATCH(), (index,x,y,z))  #define ATTRIB4ARB(index,x,y,z,w)   CALL_VertexAttrib4fARB(GET_DISPATCH(), (index,x,y,z,w)) -#define FOGCOORDF(x)                CALL_FogCoordfEXT(GET_DISPATCH(), (x)) -#define SECONDARYCOLORF(a,b,c)      CALL_SecondaryColor3fEXT(GET_DISPATCH(), (a,b,c)) + +#define ATTRIBI_1I(index,x)   CALL_VertexAttribI1iEXT(GET_DISPATCH(), (index,x)) +#define ATTRIBI_1UI(index,x)   CALL_VertexAttribI1uiEXT(GET_DISPATCH(), (index,x)) +#define ATTRIBI_4I(index,x,y,z,w)   CALL_VertexAttribI4iEXT(GET_DISPATCH(), (index,x,y,z,w)) + +#define ATTRIBI_4UI(index,x,y,z,w)   CALL_VertexAttribI4uiEXT(GET_DISPATCH(), (index,x,y,z,w))  #if FEATURE_beginend @@ -1041,6 +1049,7 @@ loopback_SecondaryColor3ubvEXT_f( const GLubyte *v )  /*   * GL_NV_vertex_program:   * Always loop-back to one of the VertexAttrib[1234]f[v]NV functions. + * Note that attribute indexes DO alias conventional vertex attributes.   */  static void GLAPIENTRY @@ -1263,6 +1272,7 @@ loopback_VertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v)  /*   * GL_ARB_vertex_program   * Always loop-back to one of the VertexAttrib[1234]f[v]ARB functions. + * Note that attribute indexes do NOT alias conventional attributes.   */  static void GLAPIENTRY @@ -1443,133 +1453,47 @@ loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v) -/** GL 3.0 Integer-valued attributes **/ - -static void GLAPIENTRY -loopback_VertexAttribI1i(GLuint index, GLint x) -{ -   ATTRIB1ARB(index, (GLfloat) x); -} - -static void GLAPIENTRY -loopback_VertexAttribI2i(GLuint index, GLint x, GLint y) -{ -   ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y); -} - -static void GLAPIENTRY -loopback_VertexAttribI3i(GLuint index, GLint x, GLint y, GLint z) -{ -   ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z); -} - -static void GLAPIENTRY -loopback_VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) -{ -   ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); -} - -static void GLAPIENTRY -loopback_VertexAttribI1ui(GLuint index, GLuint x) -{ -   ATTRIB1ARB(index, (GLfloat) x); -} - -static void GLAPIENTRY -loopback_VertexAttribI2ui(GLuint index, GLuint x, GLuint y) -{ -   ATTRIB2ARB(index, (GLfloat) x, (GLfloat) y); -} - -static void GLAPIENTRY -loopback_VertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z) -{ -   ATTRIB3ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z); -} - -static void GLAPIENTRY -loopback_VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) -{ -   ATTRIB4ARB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w); -} +/** + * GL_EXT_gpu_shader / GL 3.0 signed/unsigned integer-valued attributes. + * Note that attribute indexes do NOT alias conventional attributes. + */  static void GLAPIENTRY  loopback_VertexAttribI1iv(GLuint index, const GLint *v)  { -   ATTRIB1ARB(index, (GLfloat) v[0]); -} - -static void GLAPIENTRY -loopback_VertexAttribI2iv (GLuint index, const GLint *v) -{ -   ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]); -} - -static void GLAPIENTRY -loopback_VertexAttribI3iv(GLuint index, const GLint *v) -{ -   ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); -} - -static void GLAPIENTRY -loopback_VertexAttribI4iv(GLuint index, const GLint *v) -{ -   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], -              (GLfloat) v[2], (GLfloat) v[3]); +   ATTRIBI_1I(index, v[0]);  }  static void GLAPIENTRY  loopback_VertexAttribI1uiv(GLuint index, const GLuint *v)  { -   ATTRIB1ARB(index, (GLfloat) v[0]); -} - -static void GLAPIENTRY -loopback_VertexAttribI2uiv(GLuint index, const GLuint *v) -{ -   ATTRIB2ARB(index, (GLfloat) v[0], (GLfloat) v[1]); -} - -static void GLAPIENTRY -loopback_VertexAttribI3uiv(GLuint index, const GLuint *v) -{ -   ATTRIB3ARB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2]); +   ATTRIBI_1UI(index, v[0]);  }  static void GLAPIENTRY -loopback_VertexAttribI4uiv(GLuint index, const GLuint *v) +loopback_VertexAttribI4bv(uint index, const GLbyte *v)  { -   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], -              (GLfloat) v[2], (GLfloat) v[3]); +   ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);  }  static void GLAPIENTRY -loopback_VertexAttribI4bv(GLuint index, const GLbyte *v) +loopback_VertexAttribI4sv(uint index, const GLshort *v)  { -   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], -              (GLfloat) v[2], (GLfloat) v[3]); +   ATTRIBI_4I(index, v[0], v[1], v[2], v[3]);  }  static void GLAPIENTRY -loopback_VertexAttribI4sv(GLuint index, const GLshort *v) +loopback_VertexAttribI4ubv(uint index, const GLubyte *v)  { -   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], -              (GLfloat) v[2], (GLfloat) v[3]); +   ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]);  }  static void GLAPIENTRY -loopback_VertexAttribI4ubv(GLuint index, const GLubyte *v) +loopback_VertexAttribI4usv(uint index, const GLushort *v)  { -   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], -              (GLfloat) v[2], (GLfloat) v[3]); +   ATTRIBI_4UI(index, v[0], v[1], v[2], v[3]);  } -static void GLAPIENTRY -loopback_VertexAttribI4usv(GLuint index, const GLushort *v) -{ -   ATTRIB4ARB(index, (GLfloat) v[0], (GLfloat) v[1], -              (GLfloat) v[2], (GLfloat) v[3]); -} @@ -1788,7 +1712,14 @@ _mesa_loopback_init_api_table( struct _glapi_table *dest )     SET_VertexAttrib4NusvARB(dest, loopback_VertexAttrib4NusvARB);     SET_VertexAttrib4NuivARB(dest, loopback_VertexAttrib4NuivARB); -   /* GL 3.0 */ +   /* GL_EXT_gpu_shader4, GL 3.0 */ +   SET_VertexAttribI1ivEXT(dest, loopback_VertexAttribI1iv); +   SET_VertexAttribI1uivEXT(dest, loopback_VertexAttribI1uiv); +   SET_VertexAttribI4bvEXT(dest, loopback_VertexAttribI4bv); +   SET_VertexAttribI4svEXT(dest, loopback_VertexAttribI4sv); +   SET_VertexAttribI4ubvEXT(dest, loopback_VertexAttribI4ubv); +   SET_VertexAttribI4usvEXT(dest, loopback_VertexAttribI4usv); +  #if 0     SET_VertexAttribI1i(dest, loopback_VertexAttribI1i);     SET_VertexAttribI2i(dest, loopback_VertexAttribI2i); @@ -1806,11 +1737,8 @@ _mesa_loopback_init_api_table( struct _glapi_table *dest )     SET_VertexAttribI2uiv(dest, loopback_VertexAttribI2uiv);     SET_VertexAttribI3uiv(dest, loopback_VertexAttribI3uiv);     SET_VertexAttribI4uiv(dest, loopback_VertexAttribI4uiv); -   SET_VertexAttribI4bv(dest, loopback_VertexAttribI4bv); -   SET_VertexAttribI4sv(dest, loopback_VertexAttribI4sv); -   SET_VertexAttribI4ubv(dest, loopback_VertexAttribI4ubv); -   SET_VertexAttribI4usv(dest, loopback_VertexAttribI4usv); -#else +#endif +#if 0     (void) loopback_VertexAttribI1i;     (void) loopback_VertexAttribI2i;     (void) loopback_VertexAttribI3i; diff --git a/src/mesa/main/vtxfmt.c b/src/mesa/main/vtxfmt.c index 9236bf81a2..8ec6bb3b7c 100644 --- a/src/mesa/main/vtxfmt.c +++ b/src/mesa/main/vtxfmt.c @@ -40,7 +40,7 @@  #if FEATURE_beginend  /** - * Use the per-vertex functions found in <vfmt> to initialze the given + * Use the per-vertex functions found in <vfmt> to initialoze the given   * API dispatch table.   */  static void @@ -88,7 +88,7 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )     SET_Vertex4f(tab, vfmt->Vertex4f);     SET_Vertex4fv(tab, vfmt->Vertex4fv); -   _mesa_install_dlist_vtxfmt(tab, vfmt); +   _mesa_install_dlist_vtxfmt(tab, vfmt);   /* glCallList / glCallLists */     SET_Begin(tab, vfmt->Begin);     SET_End(tab, vfmt->End); @@ -125,17 +125,43 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt )     SET_VertexAttrib4fARB(tab, vfmt->VertexAttrib4fARB);     SET_VertexAttrib4fvARB(tab, vfmt->VertexAttrib4fvARB);  #endif + +   /* GL_EXT_gpu_shader4 / OpenGL 3.0 */ +   SET_VertexAttribI1iEXT(tab, vfmt->VertexAttribI1i); +   SET_VertexAttribI2iEXT(tab, vfmt->VertexAttribI2i); +   SET_VertexAttribI3iEXT(tab, vfmt->VertexAttribI3i); +   SET_VertexAttribI4iEXT(tab, vfmt->VertexAttribI4i); +   SET_VertexAttribI2ivEXT(tab, vfmt->VertexAttribI2iv); +   SET_VertexAttribI3ivEXT(tab, vfmt->VertexAttribI3iv); +   SET_VertexAttribI4ivEXT(tab, vfmt->VertexAttribI4iv); + +   SET_VertexAttribI1uiEXT(tab, vfmt->VertexAttribI1ui); +   SET_VertexAttribI2uiEXT(tab, vfmt->VertexAttribI2ui); +   SET_VertexAttribI3uiEXT(tab, vfmt->VertexAttribI3ui); +   SET_VertexAttribI4uiEXT(tab, vfmt->VertexAttribI4ui); +   SET_VertexAttribI2uivEXT(tab, vfmt->VertexAttribI2uiv); +   SET_VertexAttribI3uivEXT(tab, vfmt->VertexAttribI3uiv); +   SET_VertexAttribI4uivEXT(tab, vfmt->VertexAttribI4uiv);  } -void _mesa_install_exec_vtxfmt( struct gl_context *ctx, const GLvertexformat *vfmt ) +/** + * Install per-vertex functions into the API dispatch table for execution. + */ +void +_mesa_install_exec_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)  {     if (ctx->API == API_OPENGL)        install_vtxfmt( ctx->Exec, vfmt );  } -void _mesa_install_save_vtxfmt( struct gl_context *ctx, const GLvertexformat *vfmt ) +/** + * Install per-vertex functions into the API dispatch table for display + * list compilation. + */ +void +_mesa_install_save_vtxfmt(struct gl_context *ctx, const GLvertexformat *vfmt)  {     if (ctx->API == API_OPENGL)        install_vtxfmt( ctx->Save, vfmt ); diff --git a/src/mesa/vbo/vbo_attrib_tmp.h b/src/mesa/vbo/vbo_attrib_tmp.h index e680631383..3c235accf3 100644 --- a/src/mesa/vbo/vbo_attrib_tmp.h +++ b/src/mesa/vbo/vbo_attrib_tmp.h @@ -25,6 +25,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.  **************************************************************************/ +/* float */  #define ATTR1FV( A, V ) ATTR( A, 1, (V)[0], 0, 0, 1 )  #define ATTR2FV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 )  #define ATTR3FV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 ) @@ -35,6 +36,27 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.  #define ATTR3F( A, X, Y, Z )    ATTR( A, 3, X, Y, Z, 1 )  #define ATTR4F( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W ) +/* int */ +#define ATTR2IV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 ) +#define ATTR3IV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 ) +#define ATTR4IV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) + +#define ATTR1I( A, X )          ATTR( A, 1, X, 0, 0, 1 ) +#define ATTR2I( A, X, Y )       ATTR( A, 2, X, Y, 0, 1 ) +#define ATTR3I( A, X, Y, Z )    ATTR( A, 3, X, Y, Z, 1 ) +#define ATTR4I( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W ) + + +/* uint */ +#define ATTR2UIV( A, V ) ATTR( A, 2, (V)[0], (V)[1], 0, 1 ) +#define ATTR3UIV( A, V ) ATTR( A, 3, (V)[0], (V)[1], (V)[2], 1 ) +#define ATTR4UIV( A, V ) ATTR( A, 4, (V)[0], (V)[1], (V)[2], (V)[3] ) + +#define ATTR1UI( A, X )          ATTR( A, 1, X, 0, 0, 1 ) +#define ATTR2UI( A, X, Y )       ATTR( A, 2, X, Y, 0, 1 ) +#define ATTR3UI( A, X, Y, Z )    ATTR( A, 3, X, Y, Z, 1 ) +#define ATTR4UI( A, X, Y, Z, W ) ATTR( A, 4, X, Y, Z, W ) +  #define MAT_ATTR( A, N, V ) ATTR( A, N, (V)[0], (V)[1], (V)[2], (V)[3] ) @@ -407,6 +429,185 @@ TAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v)  } + +/* Integer-valued generic attributes. + * XXX: the integers just get converted to floats at this time + */ +static void GLAPIENTRY +TAG(VertexAttribI1i)(GLuint index, GLint x) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR1I(0, x); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR1I(VBO_ATTRIB_GENERIC0 + index, x); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI2i)(GLuint index, GLint x, GLint y) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR2I(0, x, y); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR2I(VBO_ATTRIB_GENERIC0 + index, x, y); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR3I(0, x, y, z); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR3I(VBO_ATTRIB_GENERIC0 + index, x, y, z); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR4I(0, x, y, z, w); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR4I(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI2iv)(GLuint index, const GLint *v) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR2IV(0, v); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR2IV(VBO_ATTRIB_GENERIC0 + index, v); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI3iv)(GLuint index, const GLint *v) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR3IV(0, v); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR3IV(VBO_ATTRIB_GENERIC0 + index, v); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI4iv)(GLuint index, const GLint *v) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR4IV(0, v); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR4IV(VBO_ATTRIB_GENERIC0 + index, v); +   else +      ERROR(); +} + + + +/* Unsigned integer-valued generic attributes. + * XXX: the integers just get converted to floats at this time + */ +static void GLAPIENTRY +TAG(VertexAttribI1ui)(GLuint index, GLuint x) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR1UI(0, x); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR1UI(VBO_ATTRIB_GENERIC0 + index, x); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR2UI(0, x, y); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR2UI(VBO_ATTRIB_GENERIC0 + index, x, y); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR3UI(0, x, y, z); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR3UI(VBO_ATTRIB_GENERIC0 + index, x, y, z); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR4UI(0, x, y, z, w); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR4UI(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI2uiv)(GLuint index, const GLuint *v) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR2UIV(0, v); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR2UIV(VBO_ATTRIB_GENERIC0 + index, v); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI3uiv)(GLuint index, const GLuint *v) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR3UIV(0, v); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR3UIV(VBO_ATTRIB_GENERIC0 + index, v); +   else +      ERROR(); +} + +static void GLAPIENTRY +TAG(VertexAttribI4uiv)(GLuint index, const GLuint *v) +{ +   GET_CURRENT_CONTEXT(ctx); +   if (index == 0) +      ATTR4UIV(0, v); +   else if (index < MAX_VERTEX_GENERIC_ATTRIBS) +      ATTR4UIV(VBO_ATTRIB_GENERIC0 + index, v); +   else +      ERROR(); +} + + +  /* In addition to supporting NV_vertex_program, these entrypoints are   * used by the display list and other code specifically because of   * their property of aliasing with other attributes.  (See diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 1ef4917419..4988c51d44 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -658,6 +658,24 @@ static void vbo_exec_vtxfmt_init( struct vbo_exec_context *exec )     vfmt->VertexAttrib4fNV = vbo_VertexAttrib4fNV;     vfmt->VertexAttrib4fvNV = vbo_VertexAttrib4fvNV; +   /* integer-valued */ +   vfmt->VertexAttribI1i = vbo_VertexAttribI1i; +   vfmt->VertexAttribI2i = vbo_VertexAttribI2i; +   vfmt->VertexAttribI3i = vbo_VertexAttribI3i; +   vfmt->VertexAttribI4i = vbo_VertexAttribI4i; +   vfmt->VertexAttribI2iv = vbo_VertexAttribI2iv; +   vfmt->VertexAttribI3iv = vbo_VertexAttribI3iv; +   vfmt->VertexAttribI4iv = vbo_VertexAttribI4iv; + +   /* unsigned integer-valued */ +   vfmt->VertexAttribI1ui = vbo_VertexAttribI1ui; +   vfmt->VertexAttribI2ui = vbo_VertexAttribI2ui; +   vfmt->VertexAttribI3ui = vbo_VertexAttribI3ui; +   vfmt->VertexAttribI4ui = vbo_VertexAttribI4ui; +   vfmt->VertexAttribI2uiv = vbo_VertexAttribI2uiv; +   vfmt->VertexAttribI3uiv = vbo_VertexAttribI3uiv; +   vfmt->VertexAttribI4uiv = vbo_VertexAttribI4uiv; +     vfmt->Materialfv = vbo_Materialfv;     vfmt->EdgeFlag = vbo_EdgeFlag; diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c index 19c4b15d5f..cb0d9fc8f0 100644 --- a/src/mesa/vbo/vbo_save_api.c +++ b/src/mesa/vbo/vbo_save_api.c @@ -1065,6 +1065,24 @@ static void _save_vtxfmt_init( struct gl_context *ctx )     vfmt->VertexAttrib4fNV = _save_VertexAttrib4fNV;     vfmt->VertexAttrib4fvNV = _save_VertexAttrib4fvNV; +   /* integer-valued */ +   vfmt->VertexAttribI1i = _save_VertexAttribI1i; +   vfmt->VertexAttribI2i = _save_VertexAttribI2i; +   vfmt->VertexAttribI3i = _save_VertexAttribI3i; +   vfmt->VertexAttribI4i = _save_VertexAttribI4i; +   vfmt->VertexAttribI2iv = _save_VertexAttribI2iv; +   vfmt->VertexAttribI3iv = _save_VertexAttribI3iv; +   vfmt->VertexAttribI4iv = _save_VertexAttribI4iv; + +   /* unsigned integer-valued */ +   vfmt->VertexAttribI1ui = _save_VertexAttribI1ui; +   vfmt->VertexAttribI2ui = _save_VertexAttribI2ui; +   vfmt->VertexAttribI3ui = _save_VertexAttribI3ui; +   vfmt->VertexAttribI4ui = _save_VertexAttribI4ui; +   vfmt->VertexAttribI2uiv = _save_VertexAttribI2uiv; +   vfmt->VertexAttribI3uiv = _save_VertexAttribI3uiv; +   vfmt->VertexAttribI4uiv = _save_VertexAttribI4uiv; +     /* This will all require us to fallback to saving the list as opcodes:      */      _MESA_INIT_DLIST_VTXFMT(vfmt, _save_); /* inside begin/end */ | 
