Adding new extension GL_OVR_multiview

GL_OVR_multiview functions exactly the same as GL_OVR_multiview2.
All GL_OVR_multiview2 tests now also repeat the same test using GL_OVR_multiview

Bug: angleproject:3341
Change-Id: I7e5294fb6bbf7692535174a15da6a42e1b5fc4e2
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1575904
Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/tests/test_utils/MultiviewTest.h b/src/tests/test_utils/MultiviewTest.h
index ef83da6..13cf727 100644
--- a/src/tests/test_utils/MultiviewTest.h
+++ b/src/tests/test_utils/MultiviewTest.h
@@ -14,10 +14,15 @@
 
 namespace angle
 {
+enum ExtensionName
+{
+    multiview,
+    multiview2
+};
 
 // Creates a simple program that passes through two-dimensional vertices and renders green
 // fragments.
-GLuint CreateSimplePassthroughProgram(int numViews);
+GLuint CreateSimplePassthroughProgram(int numViews, ExtensionName multiviewExtension);
 
 // Create a 2D texture array to use for multiview rendering. Texture ids should be
 // created beforehand. If depthTexture or stencilTexture is 0, it will not be initialized.
@@ -60,17 +65,26 @@
     MultiviewImplementationParams(GLint majorVersion,
                                   GLint minorVersion,
                                   bool forceUseGeometryShaderOnD3D,
-                                  const EGLPlatformParameters &eglPlatformParameters)
+                                  const EGLPlatformParameters &eglPlatformParameters,
+                                  ExtensionName multiviewExtension)
         : PlatformParameters(majorVersion, minorVersion, eglPlatformParameters),
-          mForceUseGeometryShaderOnD3D(forceUseGeometryShaderOnD3D)
+          mForceUseGeometryShaderOnD3D(forceUseGeometryShaderOnD3D),
+          mMultiviewExtension(multiviewExtension)
     {}
     bool mForceUseGeometryShaderOnD3D;
+    ExtensionName mMultiviewExtension;
 };
 std::ostream &operator<<(std::ostream &os, const MultiviewImplementationParams &params);
 
-MultiviewImplementationParams VertexShaderOpenGL(GLint majorVersion, GLint minorVersion);
-MultiviewImplementationParams VertexShaderD3D11(GLint majorVersion, GLint minorVersion);
-MultiviewImplementationParams GeomShaderD3D11(GLint majorVersion, GLint minorVersion);
+MultiviewImplementationParams VertexShaderOpenGL(GLint majorVersion,
+                                                 GLint minorVersion,
+                                                 ExtensionName multiviewExtension);
+MultiviewImplementationParams VertexShaderD3D11(GLint majorVersion,
+                                                GLint minorVersion,
+                                                ExtensionName multiviewExtension);
+MultiviewImplementationParams GeomShaderD3D11(GLint majorVersion,
+                                              GLint minorVersion,
+                                              ExtensionName multiviewExtension);
 
 class MultiviewTestBase : public ANGLETestBase
 {
@@ -93,43 +107,6 @@
 
     void MultiviewTestBaseTearDown() { ANGLETestBase::ANGLETestTearDown(); }
 
-    // Requests the OVR_multiview2 extension and returns true if the operation succeeds.
-    bool requestMultiviewExtension(bool requireMultiviewMultisample)
-    {
-        if (IsGLExtensionRequestable("GL_OVR_multiview2"))
-        {
-            glRequestExtensionANGLE("GL_OVR_multiview2");
-        }
-
-        if (!IsGLExtensionEnabled("GL_OVR_multiview2"))
-        {
-            std::cout << "Test skipped due to missing GL_OVR_multiview2." << std::endl;
-            return false;
-        }
-
-        if (requireMultiviewMultisample)
-        {
-            if (IsGLExtensionRequestable("GL_OES_texture_storage_multisample_2d_array"))
-            {
-                glRequestExtensionANGLE("GL_OES_texture_storage_multisample_2d_array");
-            }
-            if (IsGLExtensionRequestable("GL_ANGLE_multiview_multisample"))
-            {
-                glRequestExtensionANGLE("GL_ANGLE_multiview_multisample");
-            }
-
-            if (!IsGLExtensionEnabled("GL_ANGLE_multiview_multisample"))
-            {
-                std::cout << "Test skipped due to missing GL_ANGLE_multiview_multisample."
-                          << std::endl;
-                return false;
-            }
-        }
-        return true;
-    }
-
-    bool requestMultiviewExtension() { return requestMultiviewExtension(false); }
-
     PFNGLREQUESTEXTENSIONANGLEPROC glRequestExtensionANGLE = nullptr;
 };
 
@@ -145,6 +122,50 @@
     virtual void testSetUp() {}
     virtual void testTearDown() {}
 
+    // Requests the OVR_multiview(2) extension and returns true if the operation succeeds.
+    bool requestMultiviewExtension(bool requireMultiviewMultisample)
+    {
+        if (!EnsureGLExtensionEnabled(extensionName()))
+        {
+            std::cout << "Test skipped due to missing " << extensionName() << "." << std::endl;
+            return false;
+        }
+
+        if (requireMultiviewMultisample)
+        {
+            if (!EnsureGLExtensionEnabled("GL_OES_texture_storage_multisample_2d_array"))
+            {
+                std::cout << "Test skipped due to missing GL_ANGLE_multiview_multisample."
+                          << std::endl;
+                return false;
+            }
+
+            if (!EnsureGLExtensionEnabled("GL_ANGLE_multiview_multisample"))
+            {
+                std::cout << "Test skipped due to missing GL_ANGLE_multiview_multisample."
+                          << std::endl;
+                return false;
+            }
+        }
+        return true;
+    }
+
+    bool requestMultiviewExtension() { return requestMultiviewExtension(false); }
+
+    std::string extensionName()
+    {
+        switch (GetParam().mMultiviewExtension)
+        {
+            case multiview:
+                return "GL_OVR_multiview";
+            case multiview2:
+                return "GL_OVR_multiview2";
+            default:
+                // Ignore unknown.
+                return "";
+        }
+    }
+
   private:
     void SetUp() override
     {
@@ -160,4 +181,4 @@
 
 }  // namespace angle
 
-#endif  // ANGLE_TESTS_TESTUTILS_MULTIVIEWTEST_H_
+#endif  // ANGLE_TESTS_TESTUTILS_MULTIVIEWTEST_H_
\ No newline at end of file