Index: trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt
===================================================================
--- trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt	(revision 27243)
+++ trunk/src/VBox/GuestHost/OpenGL/glapi_parser/APIspec.txt	(revision 27244)
@@ -10231,4 +10231,59 @@
 chromium    extpack
 
+# OpenGL 2.1
+name        UniformMatrix2x3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix3x2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix2x4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix4x2fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix4x3fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
+name        UniformMatrix3x4fv
+return      void
+param       location    GLint
+param       count       GLsizei
+param       transpose   GLboolean
+param       value       const GLfloat *
+category    2.1
+chromium    extpack
+
 # end of file sentinel
 
Index: trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h
===================================================================
--- trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h	(revision 27243)
+++ trunk/src/VBox/GuestHost/OpenGL/include/cr_protocol.h	(revision 27244)
@@ -16,5 +16,5 @@
 /*For now guest is allowed to connect host opengl service if protocol version matches exactly*/
 /*Note: that after any change to this file, or glapi_parser\apispec.txt version should be changed*/
-#define CR_PROTOCOL_VERSION_MAJOR 6
+#define CR_PROTOCOL_VERSION_MAJOR 7
 #define CR_PROTOCOL_VERSION_MINOR 1
 
Index: trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c
===================================================================
--- trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c	(revision 27243)
+++ trunk/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c	(revision 27244)
@@ -258,4 +258,106 @@
 }
 
+void PACK_APIENTRY crPackUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 2*3*count*sizeof(*value);
+
+    GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX2X3FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 2*3*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+}
+
+void PACK_APIENTRY crPackUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 3*2*count*sizeof(*value);
+
+    GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX3X2FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 3*2*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+}
+
+void PACK_APIENTRY crPackUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 2*4*count*sizeof(*value);
+
+    GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX2X4FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 2*4*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+}
+
+void PACK_APIENTRY crPackUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 4*2*count*sizeof(*value);
+
+    GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX4X2FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 4*2*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+}
+
+void PACK_APIENTRY crPackUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 3*4*count*sizeof(*value);
+
+    GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX3X4FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 3*4*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+}
+
+void PACK_APIENTRY crPackUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    unsigned char *data_ptr;
+    int packet_length = sizeof(int)+sizeof(GLenum)+sizeof(location)+sizeof(count)+sizeof(transpose)
+                        + 4*3*count*sizeof(*value);
+
+    GET_BUFFERED_POINTER(pc, packet_length);
+    WRITE_DATA_AI(int, packet_length);
+    WRITE_DATA_AI(GLenum, CR_UNIFORMMATRIX4X3FV_EXTEND_OPCODE);
+    WRITE_DATA_AI(GLint, location);
+    WRITE_DATA_AI(GLsizei, count);
+    WRITE_DATA_AI(GLboolean, transpose);
+    crMemcpy(data_ptr, value, 4*3*count*sizeof(*value));
+    WRITE_OPCODE(pc, CR_EXTEND_OPCODE);
+}
+
 void PACK_APIENTRY crPackDrawBuffers(GLsizei n, const GLenum *bufs)
 {
@@ -594,4 +696,70 @@
 }
 
+void PACK_APIENTRY crPackUniformMatrix2x3fvSWAP(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    (void)location;
+    (void)count;
+    (void)transpose;
+    (void)value;
+    crError ("No swap version");
+    (void) pc;
+}
+
+void PACK_APIENTRY crPackUniformMatrix3x2fvSWAP(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    (void)location;
+    (void)count;
+    (void)transpose;
+    (void)value;
+    crError ("No swap version");
+    (void) pc;
+}
+
+void PACK_APIENTRY crPackUniformMatrix2x4fvSWAP(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    (void)location;
+    (void)count;
+    (void)transpose;
+    (void)value;
+    crError ("No swap version");
+    (void) pc;
+}
+
+void PACK_APIENTRY crPackUniformMatrix4x2fvSWAP(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    (void)location;
+    (void)count;
+    (void)transpose;
+    (void)value;
+    crError ("No swap version");
+    (void) pc;
+}
+
+void PACK_APIENTRY crPackUniformMatrix3x4fvSWAP(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    (void)location;
+    (void)count;
+    (void)transpose;
+    (void)value;
+    crError ("No swap version");
+    (void) pc;
+}
+
+void PACK_APIENTRY crPackUniformMatrix4x3fvSWAP(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
+{
+    GET_PACKER_CONTEXT(pc);
+    (void)location;
+    (void)count;
+    (void)transpose;
+    (void)value;
+    crError ("No swap version");
+    (void) pc;
+}
+
 void PACK_APIENTRY crPackDrawBuffersSWAP(GLsizei n, const GLenum *bufs)
 {
Index: trunk/src/VBox/GuestHost/OpenGL/packer/packer_special
===================================================================
--- trunk/src/VBox/GuestHost/OpenGL/packer/packer_special	(revision 27243)
+++ trunk/src/VBox/GuestHost/OpenGL/packer/packer_special	(revision 27244)
@@ -171,2 +171,8 @@
 LockArraysEXT
 GetUniformsLocations
+UniformMatrix2x3fv
+UniformMatrix3x2fv
+UniformMatrix2x4fv
+UniformMatrix4x2fv
+UniformMatrix3x4fv
+UniformMatrix4x3fv
Index: trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c
===================================================================
--- trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c	(revision 27243)
+++ trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c	(revision 27244)
@@ -162,4 +162,58 @@
 }
 
+void crUnpackExtendUniformMatrix2x3fv(void)
+{
+    GLint location = READ_DATA(8, GLint);
+    GLsizei count = READ_DATA(12, GLsizei);
+    GLboolean transpose = READ_DATA(16, GLboolean);
+    const GLfloat *value = DATA_POINTER(16+sizeof(GLboolean), const GLfloat);
+    cr_unpackDispatch.UniformMatrix2x3fv(location, count, transpose, value);
+}
+
+void crUnpackExtendUniformMatrix3x2fv(void)
+{
+    GLint location = READ_DATA(8, GLint);
+    GLsizei count = READ_DATA(12, GLsizei);
+    GLboolean transpose = READ_DATA(16, GLboolean);
+    const GLfloat *value = DATA_POINTER(16+sizeof(GLboolean), const GLfloat);
+    cr_unpackDispatch.UniformMatrix3x2fv(location, count, transpose, value);
+}
+
+void crUnpackExtendUniformMatrix2x4fv(void)
+{
+    GLint location = READ_DATA(8, GLint);
+    GLsizei count = READ_DATA(12, GLsizei);
+    GLboolean transpose = READ_DATA(16, GLboolean);
+    const GLfloat *value = DATA_POINTER(16+sizeof(GLboolean), const GLfloat);
+    cr_unpackDispatch.UniformMatrix2x4fv(location, count, transpose, value);
+}
+
+void crUnpackExtendUniformMatrix4x2fv(void)
+{
+    GLint location = READ_DATA(8, GLint);
+    GLsizei count = READ_DATA(12, GLsizei);
+    GLboolean transpose = READ_DATA(16, GLboolean);
+    const GLfloat *value = DATA_POINTER(16+sizeof(GLboolean), const GLfloat);
+    cr_unpackDispatch.UniformMatrix4x2fv(location, count, transpose, value);
+}
+
+void crUnpackExtendUniformMatrix3x4fv(void)
+{
+    GLint location = READ_DATA(8, GLint);
+    GLsizei count = READ_DATA(12, GLsizei);
+    GLboolean transpose = READ_DATA(16, GLboolean);
+    const GLfloat *value = DATA_POINTER(16+sizeof(GLboolean), const GLfloat);
+    cr_unpackDispatch.UniformMatrix3x4fv(location, count, transpose, value);
+}
+
+void crUnpackExtendUniformMatrix4x3fv(void)
+{
+    GLint location = READ_DATA(8, GLint);
+    GLsizei count = READ_DATA(12, GLsizei);
+    GLboolean transpose = READ_DATA(16, GLboolean);
+    const GLfloat *value = DATA_POINTER(16+sizeof(GLboolean), const GLfloat);
+    cr_unpackDispatch.UniformMatrix4x3fv(location, count, transpose, value);
+}
+
 void crUnpackExtendDrawBuffers(void)
 {
Index: trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpacker_special
===================================================================
--- trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpacker_special	(revision 27243)
+++ trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpacker_special	(revision 27244)
@@ -175,2 +175,8 @@
 GetPixelMapuiv
 GetPixelMapusv
+UniformMatrix2x3fv
+UniformMatrix3x2fv
+UniformMatrix2x4fv
+UniformMatrix4x2fv
+UniformMatrix3x4fv
+UniformMatrix4x3fv
