Refactor UniformMatrix validation.
Move the shared validation logic to validationES.cpp.
BUG=angle:571
Change-Id: I2fb06a012703c647de2176914238b48665145c6f
Reviewed-on: https://chromium-review.googlesource.com/200073
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/validationES.cpp b/src/libGLESv2/validationES.cpp
index 34c56ec..3b649d4 100644
--- a/src/libGLESv2/validationES.cpp
+++ b/src/libGLESv2/validationES.cpp
@@ -946,4 +946,40 @@
return true;
}
+bool ValidateUniformMatrix(gl::Context *context, GLenum matrixType, GLint location, GLsizei count,
+ GLboolean transpose)
+{
+ if (count < 0)
+ {
+ return gl::error(GL_INVALID_VALUE, false);
+ }
+
+ // Check for ES3 uniform entry points
+ int rows = VariableRowCount(matrixType);
+ int cols = VariableColumnCount(matrixType);
+ if (rows != cols && context->getClientVersion() < 3)
+ {
+ return gl::error(GL_INVALID_OPERATION, false);
+ }
+
+ if (transpose != GL_FALSE && context->getClientVersion() < 3)
+ {
+ return gl::error(GL_INVALID_VALUE, false);
+ }
+
+ gl::ProgramBinary *programBinary = context->getCurrentProgramBinary();
+ if (!programBinary)
+ {
+ return gl::error(GL_INVALID_OPERATION, false);
+ }
+
+ if (location == -1)
+ {
+ // Silently ignore the uniform command
+ return false;
+ }
+
+ return true;
+}
+
}