Check CDD required EGL extensions

Add a test that verifies that the EGL actually reports the extensions
required by the O CDD. Actually functional verification is triggered by
existence of the extensions.

Test: CtsOpenGLTestCases on dev mode on Bullhead and Marlin.
Test: Failure test with extension "foo" temporarily added.
Bug: 34163336
Change-Id: I860a39928bb7bd1fd29934c2f8a9bd8a3063d671
diff --git a/tests/tests/opengl/src/android/opengl/cts/OpenGlEsVersionTest.java b/tests/tests/opengl/src/android/opengl/cts/OpenGlEsVersionTest.java
index c290dac..4225de0 100644
--- a/tests/tests/opengl/src/android/opengl/cts/OpenGlEsVersionTest.java
+++ b/tests/tests/opengl/src/android/opengl/cts/OpenGlEsVersionTest.java
@@ -197,6 +197,41 @@
         }
     }
 
+    @Test
+    public void testRequiredEglExtensions() {
+        // See CDD section 7.1.4
+        final String requiredEglList[] = {
+            "EGL_KHR_image",
+            "EGL_KHR_image_base",
+            "EGL_ANDROID_image_native_buffer",
+            "EGL_ANDROID_get_native_client_buffer",
+            "EGL_KHR_wait_sync",
+            "EGL_KHR_get_all_proc_addresses",
+            "EGL_ANDROID_presentation_time",
+            "EGL_KHR_swap_buffers_with_damage"
+        };
+
+        EGL10 egl = (EGL10) EGLContext.getEGL();
+        EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
+
+        if (egl.eglInitialize(display, null)) {
+            try {
+                String eglExtensions = egl.eglQueryString(display, EGL10.EGL_EXTENSIONS);
+                for (int i = 0; i < requiredEglList.length; ++i) {
+                    assertTrue("EGL Extension required by CDD section 7.1.4 missing: " +
+                               requiredEglList[i], hasExtension(eglExtensions, requiredEglList[i]));
+                }
+                if (hasExtension(eglExtensions, "EGL_KHR_mutable_render_buffer")) {
+                    assertTrue("Devices exposes EGL_KHR_mutable_render_buffer but not EGL_ANDROID_front_buffer_auto_refresh", hasExtension(eglExtensions, "EGL_ANDROID_front_buffer_auto_refresh"));
+                }
+            } finally {
+                egl.eglTerminate(display);
+            }
+        } else {
+            Log.e(TAG, "Couldn't initialize EGL.");
+        }
+    }
+
     private static boolean hasExtension(String extensions, String name) {
         return OpenGlEsVersionCtsActivity.hasExtension(extensions, name);
     }