Commit c8c95817 by Jamie Madill Committed by Commit Bot

Refactor uniform matrix entry points.

This should also slightly speed up some of the validation. BUG=angleproject:747 BUG=angleproject:1390 Change-Id: I60735e2773788aef3f535bf7d3d8cd27bc4df5b1 Reviewed-on: https://chromium-review.googlesource.com/637123Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent f0e0449e
......@@ -4956,4 +4956,58 @@ GLboolean Context::isQuery(GLuint id)
return (getQuery(id, false, GL_NONE) != nullptr) ? GL_TRUE : GL_FALSE;
}
void Context::uniformMatrix2x3fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
Program *program = mGLState.getProgram();
program->setUniformMatrix2x3fv(location, count, transpose, value);
}
void Context::uniformMatrix3x2fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
Program *program = mGLState.getProgram();
program->setUniformMatrix3x2fv(location, count, transpose, value);
}
void Context::uniformMatrix2x4fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
Program *program = mGLState.getProgram();
program->setUniformMatrix2x4fv(location, count, transpose, value);
}
void Context::uniformMatrix4x2fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
Program *program = mGLState.getProgram();
program->setUniformMatrix4x2fv(location, count, transpose, value);
}
void Context::uniformMatrix3x4fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
Program *program = mGLState.getProgram();
program->setUniformMatrix3x4fv(location, count, transpose, value);
}
void Context::uniformMatrix4x3fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
Program *program = mGLState.getProgram();
program->setUniformMatrix4x3fv(location, count, transpose, value);
}
} // namespace gl
......@@ -789,6 +789,31 @@ class Context final : public ValidationContext
void uniform3uiv(GLint location, GLsizei count, const GLuint *value);
void uniform4uiv(GLint location, GLsizei count, const GLuint *value);
void uniformMatrix2x3fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
void uniformMatrix3x2fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
void uniformMatrix2x4fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
void uniformMatrix4x2fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
void uniformMatrix3x4fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
void uniformMatrix4x3fv(GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
void getProgramBinary(GLuint program,
GLsizei bufSize,
GLsizei *length,
......
......@@ -2450,15 +2450,6 @@ bool ValidateUniformMatrix(ValidationContext *context,
GLsizei count,
GLboolean transpose)
{
// Check for ES3 uniform entry points
int rows = VariableRowCount(valueType);
int cols = VariableColumnCount(valueType);
if (rows != cols && context->getClientMajorVersion() < 3)
{
context->handleError(InvalidOperation());
return false;
}
if (transpose != GL_FALSE && context->getClientMajorVersion() < 3)
{
context->handleError(InvalidValue());
......
......@@ -93,6 +93,22 @@ bool ValidateUniformES3(Context *context, GLenum uniformType, GLint location, GL
return ValidateUniform(context, uniformType, location, count);
}
bool ValidateUniformMatrixES3(Context *context,
GLenum valueType,
GLint location,
GLsizei count,
GLboolean transpose)
{
// Check for ES3 uniform entry points
if (context->getClientMajorVersion() < 3)
{
ANGLE_VALIDATION_ERR(context, InvalidOperation(), ES3Required);
return false;
}
return ValidateUniformMatrix(context, valueType, location, count, transpose);
}
} // anonymous namespace
static bool ValidateTexImageFormatCombination(gl::Context *context,
......@@ -2844,4 +2860,58 @@ bool ValidateIsQuery(Context *context, GLuint id)
return true;
}
bool ValidateUniformMatrix2x3fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateUniformMatrixES3(context, GL_FLOAT_MAT2x3, location, count, transpose);
}
bool ValidateUniformMatrix3x2fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateUniformMatrixES3(context, GL_FLOAT_MAT3x2, location, count, transpose);
}
bool ValidateUniformMatrix2x4fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateUniformMatrixES3(context, GL_FLOAT_MAT2x4, location, count, transpose);
}
bool ValidateUniformMatrix4x2fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateUniformMatrixES3(context, GL_FLOAT_MAT4x2, location, count, transpose);
}
bool ValidateUniformMatrix3x4fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateUniformMatrixES3(context, GL_FLOAT_MAT3x4, location, count, transpose);
}
bool ValidateUniformMatrix4x3fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateUniformMatrixES3(context, GL_FLOAT_MAT4x3, location, count, transpose);
}
} // namespace gl
......@@ -460,6 +460,37 @@ bool ValidateUniform2uiv(Context *context, GLint location, GLsizei count, const
bool ValidateUniform3uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniform4uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniformMatrix2x3fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateUniformMatrix3x2fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateUniformMatrix2x4fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateUniformMatrix4x2fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateUniformMatrix3x4fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateUniformMatrix4x3fv(Context *context,
GLint location,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
} // namespace gl
#endif // LIBANGLE_VALIDATION_ES3_H_
......@@ -411,13 +411,13 @@ void GL_APIENTRY UniformMatrix2x3fv(GLint location,
Context *context = GetValidGlobalContext();
if (context)
{
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x3, location, count, transpose))
if (!context->skipValidation() &&
!ValidateUniformMatrix2x3fv(context, location, count, transpose, value))
{
return;
}
Program *program = context->getGLState().getProgram();
program->setUniformMatrix2x3fv(location, count, transpose, value);
context->uniformMatrix2x3fv(location, count, transpose, value);
}
}
......@@ -434,13 +434,13 @@ void GL_APIENTRY UniformMatrix3x2fv(GLint location,
Context *context = GetValidGlobalContext();
if (context)
{
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x2, location, count, transpose))
if (!context->skipValidation() &&
!ValidateUniformMatrix3x2fv(context, location, count, transpose, value))
{
return;
}
Program *program = context->getGLState().getProgram();
program->setUniformMatrix3x2fv(location, count, transpose, value);
context->uniformMatrix3x2fv(location, count, transpose, value);
}
}
......@@ -457,13 +457,13 @@ void GL_APIENTRY UniformMatrix2x4fv(GLint location,
Context *context = GetValidGlobalContext();
if (context)
{
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x4, location, count, transpose))
if (!context->skipValidation() &&
!ValidateUniformMatrix2x4fv(context, location, count, transpose, value))
{
return;
}
Program *program = context->getGLState().getProgram();
program->setUniformMatrix2x4fv(location, count, transpose, value);
context->uniformMatrix2x4fv(location, count, transpose, value);
}
}
......@@ -480,13 +480,13 @@ void GL_APIENTRY UniformMatrix4x2fv(GLint location,
Context *context = GetValidGlobalContext();
if (context)
{
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x2, location, count, transpose))
if (!context->skipValidation() &&
!ValidateUniformMatrix4x2fv(context, location, count, transpose, value))
{
return;
}
Program *program = context->getGLState().getProgram();
program->setUniformMatrix4x2fv(location, count, transpose, value);
context->uniformMatrix4x2fv(location, count, transpose, value);
}
}
......@@ -503,13 +503,13 @@ void GL_APIENTRY UniformMatrix3x4fv(GLint location,
Context *context = GetValidGlobalContext();
if (context)
{
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x4, location, count, transpose))
if (!context->skipValidation() &&
!ValidateUniformMatrix3x4fv(context, location, count, transpose, value))
{
return;
}
Program *program = context->getGLState().getProgram();
program->setUniformMatrix3x4fv(location, count, transpose, value);
context->uniformMatrix3x4fv(location, count, transpose, value);
}
}
......@@ -526,13 +526,13 @@ void GL_APIENTRY UniformMatrix4x3fv(GLint location,
Context *context = GetValidGlobalContext();
if (context)
{
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x3, location, count, transpose))
if (!context->skipValidation() &&
!ValidateUniformMatrix4x3fv(context, location, count, transpose, value))
{
return;
}
Program *program = context->getGLState().getProgram();
program->setUniformMatrix4x3fv(location, count, transpose, value);
context->uniformMatrix4x3fv(location, count, transpose, value);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment