Handle ANGLE_multiview state queries
The patch extends glGetIntegerv and glGetFramebufferAttachmentParameteriv
logic to handle the new tokens from the ANGLE_multiview extension.
BUG=angleproject:2062
TEST=angle_end2end_tests
Change-Id: Ide145279cd7b58cd03502458d7d3a1a0f5e9e86d
Reviewed-on: https://chromium-review.googlesource.com/573780
Reviewed-by: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 5b2dc8e..eb6bfd2 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -3954,12 +3954,6 @@
GLenum pname,
GLsizei *numParams)
{
- // Only one parameter is returned from glGetFramebufferAttachmentParameteriv
- if (numParams)
- {
- *numParams = 1;
- }
-
if (!ValidFramebufferTarget(target))
{
context->handleError(InvalidEnum());
@@ -3976,6 +3970,17 @@
case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:
break;
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_ANGLE:
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_MULTIVIEW_LAYOUT_ANGLE:
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_ANGLE:
+ case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_VIEWPORT_OFFSETS_ANGLE:
+ if (clientVersion < 3 || !context->getExtensions().multiview)
+ {
+ ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
+ return false;
+ }
+ break;
+
case GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:
if (clientVersion < 3 && !context->getExtensions().sRGB)
{
@@ -4178,6 +4183,22 @@
}
}
+ if (numParams)
+ {
+ if (pname == GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_VIEWPORT_OFFSETS_ANGLE)
+ {
+ // Only when the viewport offsets are queried we can have a varying number of output
+ // parameters.
+ const int numViews = attachmentObject ? attachmentObject->getNumViews() : 1;
+ *numParams = numViews * 2;
+ }
+ else
+ {
+ // For all other queries we can have only one output parameter.
+ *numParams = 1;
+ }
+ }
+
return true;
}