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) ...@@ -4956,4 +4956,58 @@ GLboolean Context::isQuery(GLuint id)
return (getQuery(id, false, GL_NONE) != nullptr) ? GL_TRUE : GL_FALSE; 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 } // namespace gl
...@@ -789,6 +789,31 @@ class Context final : public ValidationContext ...@@ -789,6 +789,31 @@ class Context final : public ValidationContext
void uniform3uiv(GLint location, GLsizei count, const GLuint *value); void uniform3uiv(GLint location, GLsizei count, const GLuint *value);
void uniform4uiv(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, void getProgramBinary(GLuint program,
GLsizei bufSize, GLsizei bufSize,
GLsizei *length, GLsizei *length,
......
...@@ -2450,15 +2450,6 @@ bool ValidateUniformMatrix(ValidationContext *context, ...@@ -2450,15 +2450,6 @@ bool ValidateUniformMatrix(ValidationContext *context,
GLsizei count, GLsizei count,
GLboolean transpose) 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) if (transpose != GL_FALSE && context->getClientMajorVersion() < 3)
{ {
context->handleError(InvalidValue()); context->handleError(InvalidValue());
......
...@@ -93,6 +93,22 @@ bool ValidateUniformES3(Context *context, GLenum uniformType, GLint location, GL ...@@ -93,6 +93,22 @@ bool ValidateUniformES3(Context *context, GLenum uniformType, GLint location, GL
return ValidateUniform(context, uniformType, location, count); 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 } // anonymous namespace
static bool ValidateTexImageFormatCombination(gl::Context *context, static bool ValidateTexImageFormatCombination(gl::Context *context,
...@@ -2844,4 +2860,58 @@ bool ValidateIsQuery(Context *context, GLuint id) ...@@ -2844,4 +2860,58 @@ bool ValidateIsQuery(Context *context, GLuint id)
return true; 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 } // namespace gl
...@@ -460,6 +460,37 @@ bool ValidateUniform2uiv(Context *context, GLint location, GLsizei count, const ...@@ -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 ValidateUniform3uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniform4uiv(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 } // namespace gl
#endif // LIBANGLE_VALIDATION_ES3_H_ #endif // LIBANGLE_VALIDATION_ES3_H_
...@@ -411,13 +411,13 @@ void GL_APIENTRY UniformMatrix2x3fv(GLint location, ...@@ -411,13 +411,13 @@ void GL_APIENTRY UniformMatrix2x3fv(GLint location,
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x3, location, count, transpose)) if (!context->skipValidation() &&
!ValidateUniformMatrix2x3fv(context, location, count, transpose, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniformMatrix2x3fv(location, count, transpose, value);
program->setUniformMatrix2x3fv(location, count, transpose, value);
} }
} }
...@@ -434,13 +434,13 @@ void GL_APIENTRY UniformMatrix3x2fv(GLint location, ...@@ -434,13 +434,13 @@ void GL_APIENTRY UniformMatrix3x2fv(GLint location,
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x2, location, count, transpose)) if (!context->skipValidation() &&
!ValidateUniformMatrix3x2fv(context, location, count, transpose, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniformMatrix3x2fv(location, count, transpose, value);
program->setUniformMatrix3x2fv(location, count, transpose, value);
} }
} }
...@@ -457,13 +457,13 @@ void GL_APIENTRY UniformMatrix2x4fv(GLint location, ...@@ -457,13 +457,13 @@ void GL_APIENTRY UniformMatrix2x4fv(GLint location,
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT2x4, location, count, transpose)) if (!context->skipValidation() &&
!ValidateUniformMatrix2x4fv(context, location, count, transpose, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniformMatrix2x4fv(location, count, transpose, value);
program->setUniformMatrix2x4fv(location, count, transpose, value);
} }
} }
...@@ -480,13 +480,13 @@ void GL_APIENTRY UniformMatrix4x2fv(GLint location, ...@@ -480,13 +480,13 @@ void GL_APIENTRY UniformMatrix4x2fv(GLint location,
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x2, location, count, transpose)) if (!context->skipValidation() &&
!ValidateUniformMatrix4x2fv(context, location, count, transpose, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniformMatrix4x2fv(location, count, transpose, value);
program->setUniformMatrix4x2fv(location, count, transpose, value);
} }
} }
...@@ -503,13 +503,13 @@ void GL_APIENTRY UniformMatrix3x4fv(GLint location, ...@@ -503,13 +503,13 @@ void GL_APIENTRY UniformMatrix3x4fv(GLint location,
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT3x4, location, count, transpose)) if (!context->skipValidation() &&
!ValidateUniformMatrix3x4fv(context, location, count, transpose, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniformMatrix3x4fv(location, count, transpose, value);
program->setUniformMatrix3x4fv(location, count, transpose, value);
} }
} }
...@@ -526,13 +526,13 @@ void GL_APIENTRY UniformMatrix4x3fv(GLint location, ...@@ -526,13 +526,13 @@ void GL_APIENTRY UniformMatrix4x3fv(GLint location,
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniformMatrix(context, GL_FLOAT_MAT4x3, location, count, transpose)) if (!context->skipValidation() &&
!ValidateUniformMatrix4x3fv(context, location, count, transpose, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniformMatrix4x3fv(location, count, transpose, value);
program->setUniformMatrix4x3fv(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