Refactor ANGLE Extensions Validation
Refactors ANGLE Extensions Validation functions into a common format for
future autogeneration. Any writes to output parameters that occurred
within the ANGLE entry point have been moved into the corresponding
validation function.
Bug:angleproject:2263
Change-Id: I7a678310ad481c1379596a493fcb0b0383fcf3b8
Reviewed-on: https://chromium-review.googlesource.com/985244
Commit-Queue: Brandon1 Jones <brandon1.jones@intel.com>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 1d7e091..a8d2fe3 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -523,6 +523,14 @@
} // anonymous namespace
+void SetRobustLengthParam(GLsizei *length, GLsizei value)
+{
+ if (length)
+ {
+ *length = value;
+ }
+}
+
bool IsETC2EACFormat(const GLenum format)
{
// ES 3.1, Table 8.19
@@ -1482,17 +1490,25 @@
return false;
}
- if (!ValidateReadPixelsBase(context, x, y, width, height, format, type, bufSize, length,
- columns, rows, pixels))
+ GLsizei writeLength = 0;
+ GLsizei writeColumns = 0;
+ GLsizei writeRows = 0;
+
+ if (!ValidateReadPixelsBase(context, x, y, width, height, format, type, bufSize, &writeLength,
+ &writeColumns, &writeRows, pixels))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
+ SetRobustLengthParam(columns, writeColumns);
+ SetRobustLengthParam(rows, writeRows);
+
return true;
}
@@ -1529,22 +1545,30 @@
GLsizei *rows,
void *data)
{
+ GLsizei writeLength = 0;
+ GLsizei writeColumns = 0;
+ GLsizei writeRows = 0;
+
if (!ValidateRobustEntryPoint(context, bufSize))
{
return false;
}
- if (!ValidateReadPixelsBase(context, x, y, width, height, format, type, bufSize, length,
- columns, rows, data))
+ if (!ValidateReadPixelsBase(context, x, y, width, height, format, type, bufSize, &writeLength,
+ &writeColumns, &writeRows, data))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
+ SetRobustLengthParam(columns, writeColumns);
+ SetRobustLengthParam(rows, writeRows);
+
return true;
}
@@ -1780,16 +1804,20 @@
return false;
}
- if (!ValidateGetQueryivBase(context, target, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetQueryivBase(context, target, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -1861,16 +1889,20 @@
return false;
}
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetQueryObjectValueBase(context, id, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -1904,16 +1936,20 @@
return false;
}
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetQueryObjectValueBase(context, id, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -1945,16 +1981,20 @@
return false;
}
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetQueryObjectValueBase(context, id, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -1986,16 +2026,20 @@
return false;
}
- if (!ValidateGetQueryObjectValueBase(context, id, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetQueryObjectValueBase(context, id, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -2242,6 +2286,87 @@
return true;
}
+bool ValidateGetBooleanvRobustANGLE(Context *context,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLboolean *params)
+{
+ GLenum nativeType;
+ unsigned int numParams = 0;
+
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return false;
+ }
+
+ SetRobustLengthParam(length, numParams);
+
+ return true;
+}
+
+bool ValidateGetFloatvRobustANGLE(Context *context,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLfloat *params)
+{
+ GLenum nativeType;
+ unsigned int numParams = 0;
+
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return false;
+ }
+
+ SetRobustLengthParam(length, numParams);
+
+ return true;
+}
+
+bool ValidateGetIntegervRobustANGLE(Context *context,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint *data)
+{
+ GLenum nativeType;
+ unsigned int numParams = 0;
+
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return false;
+ }
+
+ SetRobustLengthParam(length, numParams);
+
+ return true;
+}
+
+bool ValidateGetInteger64vRobustANGLE(Context *context,
+ GLenum pname,
+ GLsizei bufSize,
+ GLsizei *length,
+ GLint64 *data)
+{
+ GLenum nativeType;
+ unsigned int numParams = 0;
+
+ if (!ValidateRobustStateQuery(context, pname, bufSize, &nativeType, &numParams))
+ {
+ return false;
+ }
+
+ if (nativeType == GL_INT_64_ANGLEX)
+ {
+ CastStateValues(context, nativeType, pname, numParams, data);
+ return false;
+ }
+
+ SetRobustLengthParam(length, numParams);
+ return true;
+}
+
bool ValidateRobustStateQuery(Context *context,
GLenum pname,
GLsizei bufSize,
@@ -3158,8 +3283,17 @@
return false;
}
+ GLsizei writeLength = 0;
+
// bufSize is validated in ValidateSizedGetUniform
- return ValidateSizedGetUniform(context, program, location, bufSize, length);
+ if (!ValidateSizedGetUniform(context, program, location, bufSize, &writeLength))
+ {
+ return false;
+ }
+
+ SetRobustLengthParam(length, writeLength);
+
+ return true;
}
bool ValidateGetUniformivRobustANGLE(Context *context,
@@ -3174,8 +3308,17 @@
return false;
}
+ GLsizei writeLength = 0;
+
// bufSize is validated in ValidateSizedGetUniform
- return ValidateSizedGetUniform(context, program, location, bufSize, length);
+ if (!ValidateSizedGetUniform(context, program, location, bufSize, &writeLength))
+ {
+ return false;
+ }
+
+ SetRobustLengthParam(length, writeLength);
+
+ return true;
}
bool ValidateGetUniformuivRobustANGLE(Context *context,
@@ -3196,8 +3339,17 @@
return false;
}
+ GLsizei writeLength = 0;
+
// bufSize is validated in ValidateSizedGetUniform
- return ValidateSizedGetUniform(context, program, location, bufSize, length);
+ if (!ValidateSizedGetUniform(context, program, location, bufSize, &writeLength))
+ {
+ return false;
+ }
+
+ SetRobustLengthParam(length, writeLength);
+
+ return true;
}
bool ValidateDiscardFramebufferBase(Context *context,
@@ -4090,24 +4242,28 @@
GLenum attachment,
GLenum pname,
GLsizei bufSize,
- GLsizei *numParams)
+ GLsizei *length,
+ GLint *params)
{
if (!ValidateRobustEntryPoint(context, bufSize))
{
return false;
}
+ GLsizei numParams = 0;
if (!ValidateGetFramebufferAttachmentParameterivBase(context, target, attachment, pname,
- numParams))
+ &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *numParams))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -4123,16 +4279,19 @@
return false;
}
- if (!ValidateGetBufferParameterBase(context, target, pname, false, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetBufferParameterBase(context, target, pname, false, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
return true;
}
@@ -4143,21 +4302,25 @@
GLsizei *length,
GLint64 *params)
{
+ GLsizei numParams = 0;
+
if (!ValidateRobustEntryPoint(context, bufSize))
{
return false;
}
- if (!ValidateGetBufferParameterBase(context, target, pname, false, length))
+ if (!ValidateGetBufferParameterBase(context, target, pname, false, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -4282,23 +4445,28 @@
GLuint program,
GLenum pname,
GLsizei bufSize,
- GLsizei *numParams)
+ GLsizei *length,
+ GLint *params)
{
if (!ValidateRobustEntryPoint(context, bufSize))
{
return false;
}
- if (!ValidateGetProgramivBase(context, program, pname, numParams))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetProgramivBase(context, program, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *numParams))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -4314,16 +4482,20 @@
return false;
}
- if (!ValidateGetRenderbufferParameterivBase(context, target, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetRenderbufferParameterivBase(context, target, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -4339,16 +4511,20 @@
return false;
}
- if (!ValidateGetShaderivBase(context, shader, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetShaderivBase(context, shader, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -4364,16 +4540,20 @@
return false;
}
- if (!ValidateGetTexParameterBase(context, target, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetTexParameterBase(context, target, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}
@@ -4384,21 +4564,23 @@
GLsizei *length,
GLint *params)
{
+
if (!ValidateRobustEntryPoint(context, bufSize))
{
return false;
}
-
- if (!ValidateGetTexParameterBase(context, target, pname, length))
+ GLsizei numParams = 0;
+ if (!ValidateGetTexParameterBase(context, target, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
return true;
}
@@ -4442,23 +4624,26 @@
return false;
}
- if (!ValidateGetSamplerParameterBase(context, sampler, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetSamplerParameterBase(context, sampler, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
return true;
}
bool ValidateGetSamplerParameterivRobustANGLE(Context *context,
GLuint sampler,
GLenum pname,
- GLuint bufSize,
+ GLsizei bufSize,
GLsizei *length,
GLint *params)
{
@@ -4467,16 +4652,19 @@
return false;
}
- if (!ValidateGetSamplerParameterBase(context, sampler, pname, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetSamplerParameterBase(context, sampler, pname, &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
return true;
}
@@ -4520,16 +4708,19 @@
return false;
}
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, false))
+ GLsizei writeLength = 0;
+
+ if (!ValidateGetVertexAttribBase(context, index, pname, &writeLength, false, false))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
return true;
}
@@ -4545,16 +4736,20 @@
return false;
}
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, false))
+ GLsizei writeLength = 0;
+
+ if (!ValidateGetVertexAttribBase(context, index, pname, &writeLength, false, false))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
+
return true;
}
@@ -4570,16 +4765,20 @@
return false;
}
- if (!ValidateGetVertexAttribBase(context, index, pname, length, true, false))
+ GLsizei writeLength = 0;
+
+ if (!ValidateGetVertexAttribBase(context, index, pname, &writeLength, true, false))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
+
return true;
}
@@ -4595,16 +4794,20 @@
return false;
}
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, true))
+ GLsizei writeLength = 0;
+
+ if (!ValidateGetVertexAttribBase(context, index, pname, &writeLength, false, true))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
+
return true;
}
@@ -4620,16 +4823,20 @@
return false;
}
- if (!ValidateGetVertexAttribBase(context, index, pname, length, false, true))
+ GLsizei writeLength = 0;
+
+ if (!ValidateGetVertexAttribBase(context, index, pname, &writeLength, false, true))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
+
return true;
}
@@ -4646,16 +4853,21 @@
return false;
}
- if (!ValidateGetActiveUniformBlockivBase(context, program, uniformBlockIndex, pname, length))
+ GLsizei writeLength = 0;
+
+ if (!ValidateGetActiveUniformBlockivBase(context, program, uniformBlockIndex, pname,
+ &writeLength))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, writeLength))
{
return false;
}
+ SetRobustLengthParam(length, writeLength);
+
return true;
}
@@ -4672,16 +4884,21 @@
return false;
}
- if (!ValidateGetInternalFormativBase(context, target, internalformat, pname, bufSize, length))
+ GLsizei numParams = 0;
+
+ if (!ValidateGetInternalFormativBase(context, target, internalformat, pname, bufSize,
+ &numParams))
{
return false;
}
- if (!ValidateRobustBufferSize(context, bufSize, *length))
+ if (!ValidateRobustBufferSize(context, bufSize, numParams))
{
return false;
}
+ SetRobustLengthParam(length, numParams);
+
return true;
}