Implement remaining eglQuerySurface and eglSurfaceAttrib enums.

BUG=angleproject:2075

Change-Id: I3b500fe80512e7a3e3a9ae9a9724015952c9cbc8
Reviewed-on: https://chromium-review.googlesource.com/587299
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/queryutils.cpp b/src/libANGLE/queryutils.cpp
index 985faa9..2d325e3 100644
--- a/src/libANGLE/queryutils.cpp
+++ b/src/libANGLE/queryutils.cpp
@@ -1251,13 +1251,13 @@
     switch (attribute)
     {
         case EGL_GL_COLORSPACE:
-            UNIMPLEMENTED();  // FIXME
+            *value = surface->getGLColorspace();
             break;
         case EGL_VG_ALPHA_FORMAT:
-            UNIMPLEMENTED();  // FIXME
+            *value = surface->getVGAlphaFormat();
             break;
         case EGL_VG_COLORSPACE:
-            UNIMPLEMENTED();  // FIXME
+            *value = surface->getVGColorspace();
             break;
         case EGL_CONFIG_ID:
             *value = surface->getConfig()->configID;
@@ -1266,19 +1266,31 @@
             *value = surface->getHeight();
             break;
         case EGL_HORIZONTAL_RESOLUTION:
-            UNIMPLEMENTED();  // FIXME
+            *value = surface->getHorizontalResolution();
             break;
         case EGL_LARGEST_PBUFFER:
-            UNIMPLEMENTED();  // FIXME
+            // The EGL spec states that value is not written if the surface is not a pbuffer
+            if (surface->getType() == EGL_PBUFFER_BIT)
+            {
+                *value = surface->getLargestPbuffer();
+            }
             break;
         case EGL_MIPMAP_TEXTURE:
-            UNIMPLEMENTED();  // FIXME
+            // The EGL spec states that value is not written if the surface is not a pbuffer
+            if (surface->getType() == EGL_PBUFFER_BIT)
+            {
+                *value = surface->getMipmapTexture();
+            }
             break;
         case EGL_MIPMAP_LEVEL:
-            UNIMPLEMENTED();  // FIXME
+            // The EGL spec states that value is not written if the surface is not a pbuffer
+            if (surface->getType() == EGL_PBUFFER_BIT)
+            {
+                *value = surface->getMipmapLevel();
+            }
             break;
         case EGL_MULTISAMPLE_RESOLVE:
-            UNIMPLEMENTED();  // FIXME
+            *value = surface->getMultisampleResolve();
             break;
         case EGL_PIXEL_ASPECT_RATIO:
             *value = surface->getPixelAspectRatio();
@@ -1290,13 +1302,21 @@
             *value = surface->getSwapBehavior();
             break;
         case EGL_TEXTURE_FORMAT:
-            *value = surface->getTextureFormat();
+            // The EGL spec states that value is not written if the surface is not a pbuffer
+            if (surface->getType() == EGL_PBUFFER_BIT)
+            {
+                *value = surface->getTextureFormat();
+            }
             break;
         case EGL_TEXTURE_TARGET:
-            *value = surface->getTextureTarget();
+            // The EGL spec states that value is not written if the surface is not a pbuffer
+            if (surface->getType() == EGL_PBUFFER_BIT)
+            {
+                *value = surface->getTextureTarget();
+            }
             break;
         case EGL_VERTICAL_RESOLUTION:
-            UNIMPLEMENTED();  // FIXME
+            *value = surface->getVerticalResolution();
             break;
         case EGL_WIDTH:
             *value = surface->getWidth();
@@ -1327,13 +1347,13 @@
     switch (attribute)
     {
         case EGL_MIPMAP_LEVEL:
-            UNIMPLEMENTED();  // FIXME
+            surface->setMipmapLevel(value);
             break;
         case EGL_MULTISAMPLE_RESOLVE:
-            UNIMPLEMENTED();  // FIXME
+            surface->setMultisampleResolve(value);
             break;
         case EGL_SWAP_BEHAVIOR:
-            UNIMPLEMENTED();  // FIXME
+            surface->setSwapBehavior(value);
             break;
         default:
             UNREACHABLE();