ES31: Add missing checks for querying GL_COMPUTE_WORK_GROUP_SIZE
This patch adds missing checks for querying GL_COMPUTE_WORK_GROUP_SIZE
by glGetProgramiv.
When querying GL_COMPUTE_WORK_GROUP_SIZE, an INVALID_OPERATION error
should be generated when this program hasn't been linked successfully
or it doesn't contain any objects to form a compute shader.
BUG=angleproject:2324
TEST=angle_end2end_tests
dEQP-GLES31.functional.debug.negative_coverage.get_error.compute.invalid_program_query
Change-Id: I13dcebef8a0abede5c18a038d4cf915ee4164e2e
Reviewed-on: https://chromium-review.googlesource.com/933627
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index fd00b7b..90a65de 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -4168,7 +4168,6 @@
break;
case GL_PROGRAM_SEPARABLE:
- case GL_COMPUTE_WORK_GROUP_SIZE:
case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS:
if (context->getClientVersion() < Version(3, 1))
{
@@ -4177,6 +4176,29 @@
}
break;
+ case GL_COMPUTE_WORK_GROUP_SIZE:
+ if (context->getClientVersion() < Version(3, 1))
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), ES31Required);
+ return false;
+ }
+
+ // [OpenGL ES 3.1] Chapter 7.12 Page 122
+ // An INVALID_OPERATION error is generated if COMPUTE_WORK_GROUP_SIZE is queried for a
+ // program which has not been linked successfully, or which does not contain objects to
+ // form a compute shader.
+ if (!programObject->isLinked())
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidOperation(), ProgramNotLinked);
+ return false;
+ }
+ if (!programObject->hasLinkedComputeShader())
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidOperation(), NoActiveComputeShaderStage);
+ return false;
+ }
+ break;
+
default:
ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
return false;