Commit ff325f1b by Jamie Madill Committed by Commit Bot

Refactor ES3 uniform entry points.

This should improve validation speed slightly because it allows us to move the ES3-only check into the ES3-only code, and make it a bit simpler. BUG=angleproject:747 BUG=angleproject:1390 Change-Id: I41f9ffef1c6a552fde924e62e481831f07b1503a Reviewed-on: https://chromium-review.googlesource.com/636061Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent ef661517
...@@ -4902,4 +4902,54 @@ void Context::programBinary(GLuint program, GLenum binaryFormat, const void *bin ...@@ -4902,4 +4902,54 @@ void Context::programBinary(GLuint program, GLenum binaryFormat, const void *bin
handleError(programObject->loadBinary(this, binaryFormat, binary, length)); handleError(programObject->loadBinary(this, binaryFormat, binary, length));
} }
void Context::uniform1ui(GLint location, GLuint v0)
{
Program *program = mGLState.getProgram();
program->setUniform1uiv(location, 1, &v0);
}
void Context::uniform2ui(GLint location, GLuint v0, GLuint v1)
{
Program *program = mGLState.getProgram();
const GLuint xy[] = {v0, v1};
program->setUniform2uiv(location, 1, xy);
}
void Context::uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
{
Program *program = mGLState.getProgram();
const GLuint xyz[] = {v0, v1, v2};
program->setUniform3uiv(location, 1, xyz);
}
void Context::uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
{
Program *program = mGLState.getProgram();
const GLuint xyzw[] = {v0, v1, v2, v3};
program->setUniform4uiv(location, 1, xyzw);
}
void Context::uniform1uiv(GLint location, GLsizei count, const GLuint *value)
{
Program *program = mGLState.getProgram();
program->setUniform1uiv(location, count, value);
}
void Context::uniform2uiv(GLint location, GLsizei count, const GLuint *value)
{
Program *program = mGLState.getProgram();
program->setUniform2uiv(location, count, value);
}
void Context::uniform3uiv(GLint location, GLsizei count, const GLuint *value)
{
Program *program = mGLState.getProgram();
program->setUniform3uiv(location, count, value);
}
void Context::uniform4uiv(GLint location, GLsizei count, const GLuint *value)
{
Program *program = mGLState.getProgram();
program->setUniform4uiv(location, count, value);
}
} // namespace gl } // namespace gl
...@@ -780,6 +780,15 @@ class Context final : public ValidationContext ...@@ -780,6 +780,15 @@ class Context final : public ValidationContext
void uniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); void uniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void validateProgram(GLuint program); void validateProgram(GLuint program);
void uniform1ui(GLint location, GLuint v0);
void uniform2ui(GLint location, GLuint v0, GLuint v1);
void uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2);
void uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
void uniform1uiv(GLint location, GLsizei count, const GLuint *value);
void uniform2uiv(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 getProgramBinary(GLuint program, void getProgramBinary(GLuint program,
GLsizei bufSize, GLsizei bufSize,
GLsizei *length, GLsizei *length,
......
...@@ -2415,13 +2415,6 @@ bool ValidateProgramUniformMatrix(gl::Context *context, ...@@ -2415,13 +2415,6 @@ bool ValidateProgramUniformMatrix(gl::Context *context,
bool ValidateUniform(ValidationContext *context, GLenum valueType, GLint location, GLsizei count) bool ValidateUniform(ValidationContext *context, GLenum valueType, GLint location, GLsizei count)
{ {
// Check for ES3 uniform entry points
if (VariableComponentType(valueType) == GL_UNSIGNED_INT && context->getClientMajorVersion() < 3)
{
context->handleError(InvalidOperation());
return false;
}
const LinkedUniform *uniform = nullptr; const LinkedUniform *uniform = nullptr;
gl::Program *programObject = context->getGLState().getProgram(); gl::Program *programObject = context->getGLState().getProgram();
return ValidateUniformCommonBase(context, programObject, location, count, &uniform) && return ValidateUniformCommonBase(context, programObject, location, count, &uniform) &&
......
...@@ -82,7 +82,18 @@ bool ValidateFramebufferTextureMultiviewLevelAndFormat(Context *context, ...@@ -82,7 +82,18 @@ bool ValidateFramebufferTextureMultiviewLevelAndFormat(Context *context,
return true; return true;
} }
} // namespace bool ValidateUniformES3(Context *context, GLenum uniformType, GLint location, GLint count)
{
if (context->getClientMajorVersion() < 3)
{
ANGLE_VALIDATION_ERR(context, InvalidOperation(), ES3Required);
return false;
}
return ValidateUniform(context, uniformType, location, count);
}
} // anonymous namespace
static bool ValidateTexImageFormatCombination(gl::Context *context, static bool ValidateTexImageFormatCombination(gl::Context *context,
GLenum target, GLenum target,
...@@ -2777,4 +2788,49 @@ bool ValidateFramebufferTextureMultiviewSideBySideANGLE(Context *context, ...@@ -2777,4 +2788,49 @@ bool ValidateFramebufferTextureMultiviewSideBySideANGLE(Context *context,
return true; return true;
} }
bool ValidateUniform1ui(Context *context, GLint location, GLuint v0)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT, location, 1);
}
bool ValidateUniform2ui(Context *context, GLint location, GLuint v0, GLuint v1)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT_VEC2, location, 1);
}
bool ValidateUniform3ui(Context *context, GLint location, GLuint v0, GLuint v1, GLuint v2)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT_VEC3, location, 1);
}
bool ValidateUniform4ui(Context *context,
GLint location,
GLuint v0,
GLuint v1,
GLuint v2,
GLuint v3)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT_VEC4, location, 1);
}
bool ValidateUniform1uiv(Context *context, GLint location, GLsizei count, const GLuint *value)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT, location, count);
}
bool ValidateUniform2uiv(Context *context, GLint location, GLsizei count, const GLuint *value)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT_VEC2, location, count);
}
bool ValidateUniform3uiv(Context *context, GLint location, GLsizei count, const GLuint *value)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT_VEC3, location, count);
}
bool ValidateUniform4uiv(Context *context, GLint location, GLsizei count, const GLuint *value)
{
return ValidateUniformES3(context, GL_UNSIGNED_INT_VEC4, location, count);
}
} // namespace gl } // namespace gl
...@@ -443,6 +443,21 @@ bool ValidateFramebufferTextureMultiviewSideBySideANGLE(Context *context, ...@@ -443,6 +443,21 @@ bool ValidateFramebufferTextureMultiviewSideBySideANGLE(Context *context,
GLsizei numViews, GLsizei numViews,
const GLint *viewportOffsets); const GLint *viewportOffsets);
bool ValidateUniform1ui(Context *context, GLint location, GLuint v0);
bool ValidateUniform2ui(Context *context, GLint location, GLuint v0, GLuint v1);
bool ValidateUniform3ui(Context *context, GLint location, GLuint v0, GLuint v1, GLuint v2);
bool ValidateUniform4ui(Context *context,
GLint location,
GLuint v0,
GLuint v1,
GLuint v2,
GLuint v3);
bool ValidateUniform1uiv(Context *context, GLint location, GLsizei count, const GLuint *value);
bool ValidateUniform2uiv(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);
} // namespace gl } // namespace gl
#endif // LIBANGLE_VALIDATION_ES3_H_ #endif // LIBANGLE_VALIDATION_ES3_H_
...@@ -1151,25 +1151,68 @@ GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name) ...@@ -1151,25 +1151,68 @@ GLint GL_APIENTRY GetFragDataLocation(GLuint program, const GLchar *name)
void GL_APIENTRY Uniform1ui(GLint location, GLuint v0) void GL_APIENTRY Uniform1ui(GLint location, GLuint v0)
{ {
Uniform1uiv(location, 1, &v0); EVENT("(GLint location = %d, GLuint v0 = %u)", location, v0);
Context *context = GetValidGlobalContext();
if (context)
{
if (!context->skipValidation() && !ValidateUniform1ui(context, location, v0))
{
return;
}
context->uniform1ui(location, v0);
}
} }
void GL_APIENTRY Uniform2ui(GLint location, GLuint v0, GLuint v1) void GL_APIENTRY Uniform2ui(GLint location, GLuint v0, GLuint v1)
{ {
const GLuint xy[] = {v0, v1}; EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u)", location, v0, v1);
Uniform2uiv(location, 1, xy);
Context *context = GetValidGlobalContext();
if (context)
{
if (!context->skipValidation() && !ValidateUniform2ui(context, location, v0, v1))
{
return;
}
context->uniform2ui(location, v0, v1);
}
} }
void GL_APIENTRY Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) void GL_APIENTRY Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2)
{ {
const GLuint xyz[] = {v0, v1, v2}; EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = %u)", location, v0, v1,
Uniform3uiv(location, 1, xyz); v2);
Context *context = GetValidGlobalContext();
if (context)
{
if (!context->skipValidation() && !ValidateUniform3ui(context, location, v0, v1, v2))
{
return;
}
context->uniform3ui(location, v0, v1, v2);
}
} }
void GL_APIENTRY Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) void GL_APIENTRY Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
{ {
const GLuint xyzw[] = {v0, v1, v2, v3}; EVENT("(GLint location = %d, GLuint v0 = %u, GLuint v1 = %u, GLuint v2 = %u, GLuint v3 = %u)",
Uniform4uiv(location, 1, xyzw); location, v0, v1, v2, v3);
Context *context = GetValidGlobalContext();
if (context)
{
if (!context->skipValidation() && !ValidateUniform4ui(context, location, v0, v1, v2, v3))
{
return;
}
context->uniform4ui(location, v0, v1, v2, v3);
}
} }
void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value) void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
...@@ -1180,13 +1223,12 @@ void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value) ...@@ -1180,13 +1223,12 @@ void GL_APIENTRY Uniform1uiv(GLint location, GLsizei count, const GLuint *value)
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniform(context, GL_UNSIGNED_INT, location, count)) if (!context->skipValidation() && !ValidateUniform1uiv(context, location, count, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniform1uiv(location, count, value);
program->setUniform1uiv(location, count, value);
} }
} }
...@@ -1198,13 +1240,12 @@ void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint *value) ...@@ -1198,13 +1240,12 @@ void GL_APIENTRY Uniform2uiv(GLint location, GLsizei count, const GLuint *value)
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC2, location, count)) if (!context->skipValidation() && !ValidateUniform2uiv(context, location, count, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniform2uiv(location, count, value);
program->setUniform2uiv(location, count, value);
} }
} }
...@@ -1215,13 +1256,12 @@ void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint *value) ...@@ -1215,13 +1256,12 @@ void GL_APIENTRY Uniform3uiv(GLint location, GLsizei count, const GLuint *value)
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC3, location, count)) if (!context->skipValidation() && !ValidateUniform3uiv(context, location, count, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniform3uiv(location, count, value);
program->setUniform3uiv(location, count, value);
} }
} }
...@@ -1233,13 +1273,12 @@ void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint *value) ...@@ -1233,13 +1273,12 @@ void GL_APIENTRY Uniform4uiv(GLint location, GLsizei count, const GLuint *value)
Context *context = GetValidGlobalContext(); Context *context = GetValidGlobalContext();
if (context) if (context)
{ {
if (!ValidateUniform(context, GL_UNSIGNED_INT_VEC4, location, count)) if (!context->skipValidation() && !ValidateUniform4uiv(context, location, count, value))
{ {
return; return;
} }
Program *program = context->getGLState().getProgram(); context->uniform4uiv(location, count, value);
program->setUniform4uiv(location, count, 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