OSDN Git Service

Fix error code on invalid shader/program operation
authorNicolas Capens <capn@google.com>
Thu, 9 Jun 2016 14:01:58 +0000 (10:01 -0400)
committerNicolas Capens <capn@google.com>
Thu, 9 Jun 2016 17:12:33 +0000 (17:12 +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: Ia819857b533f226a90d9a9805b254b127da8c667
Reviewed-on: https://swiftshader-review.googlesource.com/5540
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 7beb616..2a14613 100644 (file)
@@ -3876,14 +3876,21 @@ void GetnUniformfvEXT(GLuint program, GLint location, GLsizei bufSize, GLfloat*
 
        if(context)
        {
-               if(program == 0)
+               es2::Program *programObject = context->getProgram(program);
+
+               if(!programObject)
                {
-                       return error(GL_INVALID_VALUE);
+                       if(context->getShader(program))
+                       {
+                               return error(GL_INVALID_OPERATION);
+                       }
+                       else
+                       {
+                               return error(GL_INVALID_VALUE);
+                       }
                }
 
-               es2::Program *programObject = context->getProgram(program);
-
-               if(!programObject || !programObject->isLinked())
+               if(!programObject->isLinked())
                {
                        return error(GL_INVALID_OPERATION);
                }
@@ -3903,14 +3910,21 @@ void GetUniformfv(GLuint program, GLint location, GLfloat* params)
 
        if(context)
        {
-               if(program == 0)
+               es2::Program *programObject = context->getProgram(program);
+
+               if(!programObject)
                {
-                       return error(GL_INVALID_VALUE);
+                       if(context->getShader(program))
+                       {
+                               return error(GL_INVALID_OPERATION);
+                       }
+                       else
+                       {
+                               return error(GL_INVALID_VALUE);
+                       }
                }
 
-               es2::Program *programObject = context->getProgram(program);
-
-               if(!programObject || !programObject->isLinked())
+               if(!programObject->isLinked())
                {
                        return error(GL_INVALID_OPERATION);
                }
@@ -3936,19 +3950,21 @@ void GetnUniformivEXT(GLuint program, GLint location, GLsizei bufSize, GLint* pa
 
        if(context)
        {
-               if(program == 0)
-               {
-                       return error(GL_INVALID_VALUE);
-               }
-
                es2::Program *programObject = context->getProgram(program);
 
-               if(!programObject || !programObject->isLinked())
+               if(!programObject)
                {
-                       return error(GL_INVALID_OPERATION);
+                       if(context->getShader(program))
+                       {
+                               return error(GL_INVALID_OPERATION);
+                       }
+                       else
+                       {
+                               return error(GL_INVALID_VALUE);
+                       }
                }
 
-               if(!programObject)
+               if(!programObject->isLinked())
                {
                        return error(GL_INVALID_OPERATION);
                }
@@ -3968,19 +3984,21 @@ void GetUniformiv(GLuint program, GLint location, GLint* params)
 
        if(context)
        {
-               if(program == 0)
-               {
-                       return error(GL_INVALID_VALUE);
-               }
-
                es2::Program *programObject = context->getProgram(program);
 
-               if(!programObject || !programObject->isLinked())
+               if(!programObject)
                {
-                       return error(GL_INVALID_OPERATION);
+                       if(context->getShader(program))
+                       {
+                               return error(GL_INVALID_OPERATION);
+                       }
+                       else
+                       {
+                               return error(GL_INVALID_VALUE);
+                       }
                }
 
-               if(!programObject)
+               if(!programObject->isLinked())
                {
                        return error(GL_INVALID_OPERATION);
                }