<param name="texture" type="GLuint" />
    </function>
 
+  <function name="EnableClientStateIndexedEXT" alias="EnableClientStateiEXT">
+      <param name="array" type="GLenum" />
+      <param name="index" type="GLuint" />
+   </function>
+
+  <function name="DisableClientStateIndexedEXT" alias="DisableClientStateiEXT">
+      <param name="array" type="GLenum" />
+      <param name="index" type="GLuint" />
+   </function>
+
    <!-- OpenGL 1.3 -->
 
    <function name="MatrixLoadTransposefEXT" offset="assign">
       <param name="pname" type="GLenum" />
       <param name="params" type="GLint *" />
    </function>
+
+   <function name="EnableClientStateiEXT">
+      <param name="array" type="GLenum" />
+      <param name="index" type="GLuint" />
+   </function>
+
+   <function name="DisableClientStateiEXT">
+      <param name="array" type="GLenum" />
+      <param name="index" type="GLuint" />
+   </function>
 </category>
 </OpenGLAPI>
 
     "NamedFramebufferTexture3DEXT": 1478,
     "NamedFramebufferRenderbufferEXT": 1479,
     "GetNamedFramebufferAttachmentParameterivEXT": 1480,
+    "EnableClientStateiEXT": 1481,
+    "DisableClientStateiEXT": 1482,
 
 }
 
 
 }
 
 
+/* Helper for GL_EXT_direct_state_access following functions:
+ *   - EnableClientStateIndexedEXT
+ *   - EnableClientStateiEXT
+ *   - DisableClientStateIndexedEXT
+ *   - DisableClientStateiEXT
+ */
+static void
+client_state_i(struct gl_context *ctx, GLenum cap, GLuint index, GLboolean state)
+{
+   int saved_active;
+
+   if (cap != GL_TEXTURE_COORD_ARRAY) {
+      _mesa_error(ctx, GL_INVALID_ENUM, "gl%sClientStateiEXT(cap=%s)",
+         state ? "Enable" : "Disable",
+         _mesa_enum_to_string(cap));
+      return;
+   }
+
+   if (index >= ctx->Const.MaxTextureCoordUnits) {
+      _mesa_error(ctx, GL_INVALID_VALUE, "gl%sClientStateiEXT(index=%d)",
+         state ? "Enable" : "Disable",
+         index);
+      return;
+   }
+
+   saved_active = ctx->Array.ActiveTexture;
+   _mesa_ClientActiveTexture(GL_TEXTURE0 + index);
+   client_state(ctx, cap, state);
+   _mesa_ClientActiveTexture(GL_TEXTURE0 + saved_active);
+}
+
+
 /**
  * Enable GL capability.
  * \param cap  state to enable/disable.
 }
 
 
+void GLAPIENTRY
+_mesa_EnableClientStateiEXT( GLenum cap, GLuint index )
+{
+   GET_CURRENT_CONTEXT(ctx);
+   client_state_i(ctx, cap, index, GL_TRUE);
+}
+
+
 /**
  * Disable GL capability.
  * \param cap  state to enable/disable.
    client_state( ctx, cap, GL_FALSE );
 }
 
+void GLAPIENTRY
+_mesa_DisableClientStateiEXT( GLenum cap, GLuint index )
+{
+   GET_CURRENT_CONTEXT(ctx);
+   client_state_i(ctx, cap, index, GL_FALSE);
+}
 
 #define CHECK_EXTENSION(EXTNAME)                                       \
    if (!ctx->Extensions.EXTNAME) {                                     \
 
 extern void GLAPIENTRY
 _mesa_EnableClientState( GLenum cap );
 
+extern void GLAPIENTRY
+_mesa_EnableClientStateiEXT( GLenum cap, GLuint index );
+
 extern void GLAPIENTRY
 _mesa_DisableClientState( GLenum cap );
 
+extern void GLAPIENTRY
+_mesa_DisableClientStateiEXT( GLenum cap, GLuint index );
+
 extern void
 _mesa_set_multisample(struct gl_context *ctx, GLboolean state);
 
 
    //{ "glMultiTexImage3DEXT", 12, -1 },
    //{ "glMultiTexSubImage3DEXT", 12, -1 },
    //{ "glCopyMultiTexSubImage3DEXT", 12, -1 },
-   //{ "glEnableClientStateIndexedEXT", 12, -1 },
-   //{ "glDisableClientStateIndexedEXT", 12, -1 },
+   { "glEnableClientStateIndexedEXT", 12, -1 },
+   { "glDisableClientStateIndexedEXT", 12, -1 },
    //{ "glGetPointerIndexedvEXT", 12, -1 },
    /* GL_EXT_direct_state_access - ARB_vertex_program */
    //{ "glNamedProgramStringEXT", 10, -1 },