Fix ProgramParameteri validation
dEQP tests suggest that passing a value other than GL_FALSE or GL_TRUE
to ProgramParameteri generates INVALID_VALUE. The code is also
refactored so that the implementation of ProgramParameteri is in the
Context object.
BUG=angleproject:1101
TEST=dEQP-GLES3.functional.negative_api.shader.program_parameteri
Change-Id: I432d19fb574e58a7e0059189ab5b1863de029cdc
Reviewed-on: https://chromium-review.googlesource.com/336163
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/libANGLE/validationES3.cpp b/src/libANGLE/validationES3.cpp
index fe5d009..56b9450 100644
--- a/src/libANGLE/validationES3.cpp
+++ b/src/libANGLE/validationES3.cpp
@@ -1583,11 +1583,11 @@
return ValidateGetProgramBinaryBase(context, program, bufSize, length, binaryFormat, binary);
}
-bool ValidateProgramParameter(Context *context, GLuint program, GLenum pname, GLint value)
+bool ValidateProgramParameteri(Context *context, GLuint program, GLenum pname, GLint value)
{
if (context->getClientVersion() < 3)
{
- context->recordError(Error(GL_INVALID_OPERATION));
+ context->recordError(Error(GL_INVALID_OPERATION, "Context does not support GLES3."));
return false;
}
@@ -1599,6 +1599,12 @@
switch (pname)
{
case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
+ if (value != GL_FALSE && value != GL_TRUE)
+ {
+ context->recordError(Error(
+ GL_INVALID_VALUE, "Invalid value, expected GL_FALSE or GL_TRUE: %i", value));
+ return false;
+ }
break;
default: