Add support for the transpose parameter of the glUniformMatrix family of functions in ES3.

TRAC #22839

Signed-off-by: Geoff Lang
Signed-off-by: Shanon Woods
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2139 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index bd2501a..4a912a1 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -6481,7 +6481,7 @@
 
     try
     {
-        if (count < 0 || transpose != GL_FALSE)
+        if (count < 0)
         {
             return gl::error(GL_INVALID_VALUE);
         }
@@ -6495,13 +6495,18 @@
 
         if (context)
         {
+            if (transpose != GL_FALSE && context->getClientVersion() < 3)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
             gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix2fv(location, count, value))
+            if (!programBinary->setUniformMatrix2fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -6520,7 +6525,7 @@
 
     try
     {
-        if (count < 0 || transpose != GL_FALSE)
+        if (count < 0)
         {
             return gl::error(GL_INVALID_VALUE);
         }
@@ -6534,13 +6539,18 @@
 
         if (context)
         {
+            if (transpose != GL_FALSE && context->getClientVersion() < 3)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
             gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix3fv(location, count, value))
+            if (!programBinary->setUniformMatrix3fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -6559,7 +6569,7 @@
 
     try
     {
-        if (count < 0 || transpose != GL_FALSE)
+        if (count < 0)
         {
             return gl::error(GL_INVALID_VALUE);
         }
@@ -6573,13 +6583,18 @@
 
         if (context)
         {
+            if (transpose != GL_FALSE && context->getClientVersion() < 3)
+            {
+                return gl::error(GL_INVALID_VALUE);
+            }
+
             gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
             if (!programBinary)
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix4fv(location, count, value))
+            if (!programBinary->setUniformMatrix4fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -7436,7 +7451,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix2x3fv(location, count, value))
+            if (!programBinary->setUniformMatrix2x3fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -7480,7 +7495,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix3x2fv(location, count, value))
+            if (!programBinary->setUniformMatrix3x2fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -7524,7 +7539,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix2x4fv(location, count, value))
+            if (!programBinary->setUniformMatrix2x4fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -7568,7 +7583,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix4x2fv(location, count, value))
+            if (!programBinary->setUniformMatrix4x2fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -7612,7 +7627,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix3x4fv(location, count, value))
+            if (!programBinary->setUniformMatrix3x4fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }
@@ -7656,7 +7671,7 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if (!programBinary->setUniformMatrix4x3fv(location, count, value))
+            if (!programBinary->setUniformMatrix4x3fv(location, count, transpose, value))
             {
                 return gl::error(GL_INVALID_OPERATION);
             }