OSDN Git Service

Fix error code on invalid shader/program operation
authorNicolas Capens <capn@google.com>
Thu, 21 Apr 2016 19:59:38 +0000 (15:59 -0400)
committerNicolas Capens <capn@google.com>
Thu, 21 Apr 2016 20:36:35 +0000 (20:36 +0000)
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>
src/OpenGL/libGLESv2/libGLESv2.cpp

index 4852ca1..57414d6 100644 (file)
@@ -3144,7 +3144,14 @@ void GetProgramiv(GLuint program, GLenum pname, GLint* params)
 \r
                if(!programObject)\r
                {\r
-                       return error(GL_INVALID_VALUE);\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
                }\r
 \r
                GLint clientVersion = egl::getClientVersion();\r
@@ -3251,7 +3258,14 @@ void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, GLchar*
 \r
                if(!programObject)\r
                {\r
-                       return error(GL_INVALID_VALUE);\r
+                       if(context->getShader(program))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
                }\r
 \r
                programObject->getInfoLog(bufsize, length, infolog);\r
@@ -3371,7 +3385,14 @@ void GetShaderiv(GLuint shader, GLenum pname, GLint* params)
 \r
                if(!shaderObject)\r
                {\r
-                       return error(GL_INVALID_VALUE);\r
+                       if(context->getProgram(shader))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
                }\r
 \r
                switch(pname)\r
@@ -3415,7 +3436,14 @@ void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* i
 \r
                if(!shaderObject)\r
                {\r
-                       return error(GL_INVALID_VALUE);\r
+                       if(context->getProgram(shader))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
                }\r
 \r
                shaderObject->getInfoLog(bufsize, length, infolog);\r
@@ -3477,7 +3505,14 @@ void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* so
 \r
                if(!shaderObject)\r
                {\r
-                       return error(GL_INVALID_OPERATION);\r
+                       if(context->getProgram(shader))\r
+                       {\r
+                               return error(GL_INVALID_OPERATION);\r
+                       }\r
+                       else\r
+                       {\r
+                               return error(GL_INVALID_VALUE);\r
+                       }\r
                }\r
 \r
                shaderObject->getSource(bufsize, length, source);\r