Program related validation
Added some validation for uniforms and uniform blocks.
Fixes some failures in (only 1 failure left):
dEQP-GLES3.functional.negative_api.state*
Change-Id: I507c7e8784230f85b0d312d162e5ff82bdbd15ed
Reviewed-on: https://swiftshader-review.googlesource.com/14428
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 76381e1..2d646ec 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -2382,19 +2382,21 @@
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);
}
@@ -2814,7 +2816,14 @@
if(!programObject)
{
- return error(GL_INVALID_OPERATION);
+ if(context->getShader(program))
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+ else
+ {
+ return error(GL_INVALID_VALUE);
+ }
}
if(!programObject->isLinked())
@@ -2867,7 +2876,14 @@
if(!programObject)
{
- return error(GL_INVALID_OPERATION);
+ if(context->getShader(program))
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+ else
+ {
+ return error(GL_INVALID_VALUE);
+ }
}
for(int uniformId = 0; uniformId < uniformCount; uniformId++)
@@ -2901,7 +2917,14 @@
if(!programObject)
{
- return error(GL_INVALID_OPERATION, GL_INVALID_INDEX);
+ if(context->getShader(program))
+ {
+ return error(GL_INVALID_OPERATION, GL_INVALID_INDEX);
+ }
+ else
+ {
+ return error(GL_INVALID_VALUE, GL_INVALID_INDEX);
+ }
}
return programObject->getUniformBlockIndex(uniformBlockName);