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/Context.cpp b/src/libANGLE/Context.cpp
index 6dad59f..d0a1bdb 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -1961,6 +1961,15 @@
     // clang-format on
 }
 
+void Context::programParameteri(GLuint program, GLenum pname, GLint value)
+{
+    gl::Program *programObject = getProgram(program);
+    ASSERT(programObject != nullptr);
+
+    ASSERT(pname == GL_PROGRAM_BINARY_RETRIEVABLE_HINT);
+    programObject->setBinaryRetrievableHint(value != GL_FALSE);
+}
+
 void Context::initRendererString()
 {
     std::ostringstream rendererString;