Disallow glReadPixels with multi-view read framebuffers

According to the ANGLE_multiview spec, glReadPixels must generate an
INVALID_FRAMEBUFFER_OPERATION error if the active read framebuffer has
a multi-view layout.

BUG=angleproject:2062
TEST=angle_end2end_tests

Change-Id: Ia5311ff7a62c5ff732491eb80befd32de57b9d44
Reviewed-on: https://chromium-review.googlesource.com/591368
Commit-Queue: Martin Radev <mradev@nvidia.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/tests/gl_tests/FramebufferMultiviewTest.cpp b/src/tests/gl_tests/FramebufferMultiviewTest.cpp
index 4d96d5a..f6c4a90 100644
--- a/src/tests/gl_tests/FramebufferMultiviewTest.cpp
+++ b/src/tests/gl_tests/FramebufferMultiviewTest.cpp
@@ -458,4 +458,27 @@
     }
 }
 
+// Test that glReadPixels generates an invalid framebuffer operation error if the current read
+// framebuffer has a multi-view layout.
+TEST_P(FramebufferMultiviewTest, InvalidReadPixels)
+{
+    if (!requestMultiviewExtension())
+    {
+        return;
+    }
+
+    mTexture2D = CreateTexture2D(GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE);
+    ASSERT_GL_NO_ERROR();
+
+    const GLint viewportOffsets[2] = {0};
+    glFramebufferTextureMultiviewSideBySideANGLE(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, mTexture2D,
+                                                 0, 1, &viewportOffsets[0]);
+    ASSERT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_FRAMEBUFFER));
+    ASSERT_GL_NO_ERROR();
+
+    GLColor pixelColor;
+    glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixelColor.R);
+    EXPECT_GL_ERROR(GL_INVALID_FRAMEBUFFER_OPERATION);
+}
+
 ANGLE_INSTANTIATE_TEST(FramebufferMultiviewTest, ES3_OPENGL());
\ No newline at end of file