ES31: Support program parameter queries on geometry shader
This patch implements all the program queries on the geometry
shader stage of a program by glGetProgramiv(), including the
queries on geometry shader input/output primitives, invocations
and maximum output vertices
BUG=angleproject:1941
TEST=dEQP-GLES31.functional.geometry_shading.query.geometry_linked_*
dEQP-GLES31.functional.geometry_shading.query.geometry_shader_invocations
dEQP-GLES31.functional.state_query.program.geometry_shader_state_get_programiv
Change-Id: Ibfa630c64dba5baf52ff84ce7e0bf4c567eef8c4
Reviewed-on: https://chromium-review.googlesource.com/961397
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jiajia Qin <jiajia.qin@intel.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 43ca249..b3122b2 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -4237,6 +4237,33 @@
}
break;
+ case GL_GEOMETRY_LINKED_INPUT_TYPE_EXT:
+ case GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT:
+ case GL_GEOMETRY_LINKED_VERTICES_OUT_EXT:
+ case GL_GEOMETRY_SHADER_INVOCATIONS_EXT:
+ if (!context->getExtensions().geometryShader)
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), GeometryShaderExtensionNotEnabled);
+ return false;
+ }
+
+ // [EXT_geometry_shader] Chapter 7.12
+ // An INVALID_OPERATION error is generated if GEOMETRY_LINKED_VERTICES_OUT_EXT,
+ // GEOMETRY_LINKED_INPUT_TYPE_EXT, GEOMETRY_LINKED_OUTPUT_TYPE_EXT, or
+ // GEOMETRY_SHADER_INVOCATIONS_EXT are queried for a program which has not been linked
+ // successfully, or which does not contain objects to form a geometry shader.
+ if (!programObject->isLinked())
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidOperation(), ProgramNotLinked);
+ return false;
+ }
+ if (!programObject->hasLinkedGeometryShader())
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidOperation(), NoActiveGeometryShaderStage);
+ return false;
+ }
+ break;
+
default:
ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
return false;