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);