Update ANGLE_multiview validation.

Multiview transform feedback now passes if the transform feedback is
paused. Also updates the relevant validation. This aligns the
ANGLE_multiview validation with OVR_multivew and with the WebGL
extension spec.

This change allow us to combine multiple draw call validation updates
into one update function.

Bug: angleproject:3012
Change-Id: I2ce04edc386039134198afa1792201e03cc20490
Reviewed-on: https://chromium-review.googlesource.com/c/1357148
Commit-Queue: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
diff --git a/src/tests/gl_tests/MultiviewDrawTest.cpp b/src/tests/gl_tests/MultiviewDrawTest.cpp
index c753e68..d297e94 100644
--- a/src/tests/gl_tests/MultiviewDrawTest.cpp
+++ b/src/tests/gl_tests/MultiviewDrawTest.cpp
@@ -524,10 +524,7 @@
 // 2) does not generate any error if the draw framebuffer has exactly 1 view.
 TEST_P(MultiviewDrawValidationTest, IndirectDraw)
 {
-    if (!requestMultiviewExtension())
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension());
 
     const GLint viewportOffsets[4] = {0, 0, 2, 0};
 
@@ -604,10 +601,7 @@
 // 2) does not generate any error if the number of views is the same.
 TEST_P(MultiviewDrawValidationTest, NumViewsMismatch)
 {
-    if (!requestMultiviewExtension())
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension());
 
     const GLint viewportOffsets[4] = {0, 0, 2, 0};
 
@@ -710,14 +704,11 @@
 
 // The test verifies that glDraw*:
 // 1) generates an INVALID_OPERATION error if the number of views in the active draw framebuffer is
-// greater than 1 and there is an active transform feedback object.
+// greater than 1 and there is an active not paused transform feedback object.
 // 2) does not generate any error if the number of views in the draw framebuffer is 1.
 TEST_P(MultiviewDrawValidationTest, ActiveTransformFeedback)
 {
-    if (!requestMultiviewExtension())
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension());
 
     const GLint viewportOffsets[4] = {0, 0, 2, 0};
 
@@ -784,23 +775,23 @@
         EXPECT_GL_NO_ERROR();
     }
 
-    // A paused transform feedback should still trigger an error.
+    // A paused transform feedback should not trigger an error.
     glBeginTransformFeedback(GL_TRIANGLES);
     glPauseTransformFeedback();
     ASSERT_GL_NO_ERROR();
 
     glDrawArrays(GL_TRIANGLES, 0, 3);
-    EXPECT_GL_ERROR(GL_INVALID_OPERATION);
+    ASSERT_GL_NO_ERROR();
 
     // Unbind transform feedback - should succeed.
     glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, 0);
     glDrawArrays(GL_TRIANGLES, 0, 3);
     ASSERT_GL_NO_ERROR();
 
-    // Rebind paused transform feedback - should fail.
+    // Rebind paused transform feedback - should succeed.
     glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, transformFeedback);
     glDrawArrays(GL_TRIANGLES, 0, 3);
-    EXPECT_GL_ERROR(GL_INVALID_OPERATION);
+    ASSERT_GL_NO_ERROR();
 
     glResumeTransformFeedback();
     glEndTransformFeedback();
@@ -828,13 +819,7 @@
 TEST_P(MultiviewDrawValidationTest, ActiveTimeElapsedQuery)
 {
     ANGLE_SKIP_TEST_IF(!requestMultiviewExtension());
-
-    if (extensionRequestable("GL_EXT_disjoint_timer_query"))
-    {
-        glRequestExtensionANGLE("GL_EXT_disjoint_timer_query");
-    }
-
-    ANGLE_SKIP_TEST_IF(!extensionEnabled("GL_EXT_disjoint_timer_query"));
+    ANGLE_SKIP_TEST_IF(!ensureExtensionEnabled("GL_EXT_disjoint_timer_query"));
 
     ANGLE_GL_PROGRAM(dualViewProgram, kDualViewVSSource, kDualViewFSSource);
 
@@ -918,10 +903,8 @@
 // The test checks that glDrawArrays can be used to render into two views.
 TEST_P(MultiviewRenderDualViewTest, DrawArrays)
 {
-    if (!requestMultiviewExtension(isMultisampled()))
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension(isMultisampled()));
+
     drawQuad(mProgram, "vPosition", 0.0f, 1.0f, true);
     ASSERT_GL_NO_ERROR();
 
@@ -931,10 +914,8 @@
 // The test checks that glDrawElements can be used to render into two views.
 TEST_P(MultiviewRenderDualViewTest, DrawElements)
 {
-    if (!requestMultiviewExtension(isMultisampled()))
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension(isMultisampled()));
+
     drawIndexedQuad(mProgram, "vPosition", 0.0f, 1.0f, true);
     ASSERT_GL_NO_ERROR();
 
@@ -944,10 +925,8 @@
 // The test checks that glDrawRangeElements can be used to render into two views.
 TEST_P(MultiviewRenderDualViewTest, DrawRangeElements)
 {
-    if (!requestMultiviewExtension(isMultisampled()))
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension(isMultisampled()));
+
     drawIndexedQuad(mProgram, "vPosition", 0.0f, 1.0f, true, true);
     ASSERT_GL_NO_ERROR();
 
@@ -957,10 +936,7 @@
 // The test checks that glDrawArrays can be used to render into four views.
 TEST_P(MultiviewRenderTest, DrawArraysFourViews)
 {
-    if (!requestMultiviewExtension(isMultisampled()))
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension(isMultisampled()));
 
     constexpr char kVS[] =
         "#version 300 es\n"
@@ -1018,10 +994,7 @@
 // The test checks that glDrawArraysInstanced can be used to render into two views.
 TEST_P(MultiviewRenderTest, DrawArraysInstanced)
 {
-    if (!requestMultiviewExtension(isMultisampled()))
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension(isMultisampled()));
 
     constexpr char kVS[] =
         "#version 300 es\n"
@@ -1087,10 +1060,7 @@
 // not by 3.
 TEST_P(MultiviewRenderTest, AttribDivisor)
 {
-    if (!requestMultiviewExtension(isMultisampled()))
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension(isMultisampled()));
 
     // Looks like an incorrect D3D debug layer message is generated on Windows AMD and NVIDIA.
     // May be specific to Windows 7 / Windows Server 2008. http://anglebug.com/2778
@@ -1174,10 +1144,7 @@
 // multi-view context propagate the correct divisor to the driver.
 TEST_P(MultiviewRenderTest, DivisorOrderOfOperation)
 {
-    if (!requestMultiviewExtension(isMultisampled()))
-    {
-        return;
-    }
+    ANGLE_SKIP_TEST_IF(!requestMultiviewExtension(isMultisampled()));
 
     updateFBOs(1, 1, 2);