Fix error code on invalid shader/program operation

The spec states that GL_INVALID_OPERATION is generated when a shader or
program function is called on the wrong object type. GL_INVALID_VALUE is
generated when there's no shader nor program object by that name.

Change-Id: Id9d922b390ca5d2db233eb60b6a44992105cb933
Reviewed-on: https://swiftshader-review.googlesource.com/5176
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index 4852ca1..57414d6 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -3144,7 +3144,14 @@
 

 		if(!programObject)

 		{

-			return error(GL_INVALID_VALUE);

+			if(context->getShader(program))

+			{

+				return error(GL_INVALID_OPERATION);

+			}

+			else

+			{

+				return error(GL_INVALID_VALUE);

+			}

 		}

 

 		GLint clientVersion = egl::getClientVersion();

@@ -3251,7 +3258,14 @@
 

 		if(!programObject)

 		{

-			return error(GL_INVALID_VALUE);

+			if(context->getShader(program))

+			{

+				return error(GL_INVALID_OPERATION);

+			}

+			else

+			{

+				return error(GL_INVALID_VALUE);

+			}

 		}

 

 		programObject->getInfoLog(bufsize, length, infolog);

@@ -3371,7 +3385,14 @@
 

 		if(!shaderObject)

 		{

-			return error(GL_INVALID_VALUE);

+			if(context->getProgram(shader))

+			{

+				return error(GL_INVALID_OPERATION);

+			}

+			else

+			{

+				return error(GL_INVALID_VALUE);

+			}

 		}

 

 		switch(pname)

@@ -3415,7 +3436,14 @@
 

 		if(!shaderObject)

 		{

-			return error(GL_INVALID_VALUE);

+			if(context->getProgram(shader))

+			{

+				return error(GL_INVALID_OPERATION);

+			}

+			else

+			{

+				return error(GL_INVALID_VALUE);

+			}

 		}

 

 		shaderObject->getInfoLog(bufsize, length, infolog);

@@ -3477,7 +3505,14 @@
 

 		if(!shaderObject)

 		{

-			return error(GL_INVALID_OPERATION);

+			if(context->getProgram(shader))

+			{

+				return error(GL_INVALID_OPERATION);

+			}

+			else

+			{

+				return error(GL_INVALID_VALUE);

+			}

 		}

 

 		shaderObject->getSource(bufsize, length, source);