Support GL_(NUM_)COMPRESSED_TEXTURE_FORMATS get.

Change-Id: I6adb541649ec83f50f520e27a26814a47359b827
diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp
index e4afd54..6c38f25 100644
--- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp
+++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp
@@ -658,15 +658,23 @@
 
 GL_API void GL_APIENTRY  glGetBooleanv( GLenum pname, GLboolean *params) {
     GET_CTX()
+
+    GLint i;
+
     switch(pname)
     {
     case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
     case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
-        GLint i;
+    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
         glGetIntegerv(pname, &i);
         *params = (i != 0) ? GL_TRUE : GL_FALSE;
         break;
 
+    case GL_COMPRESSED_TEXTURE_FORMATS:
+        glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &i);
+        *params = (i != 0) ? GL_TRUE : GL_FALSE;
+        break;
+
     case GL_TEXTURE_GEN_STR_OES:
         {
             GLboolean state_s = GL_FALSE;
@@ -725,17 +733,33 @@
 
     size_t nParams = glParamSize(pname);
     GLfloat fParams[16];
+    GLint i;
 
     switch(pname)
     {
     case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
     case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
-        GLint i;
+    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
         glGetIntegerv(pname, &i);
         *params = I2X(i);
         nParams = 0;
         break;
 
+    case GL_COMPRESSED_TEXTURE_FORMATS:
+        glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &i);
+        if(i > 0)
+        {
+            GLint* iParams = new GLint[i];
+            glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS, iParams);
+            while(i >= 0)
+            {
+                params[i] = I2X(iParams[i]);
+                i--;
+            }
+            delete [] iParams;
+        }
+        break;
+
     case GL_TEXTURE_GEN_STR_OES:
         ctx->dispatcher().glGetFloatv(GL_TEXTURE_GEN_S,&fParams[0]);
         break;
@@ -754,15 +778,33 @@
 
 GL_API void GL_APIENTRY  glGetFloatv( GLenum pname, GLfloat *params) {
     GET_CTX()
+
+    GLint i;
+
     switch(pname)
     {
     case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES:
     case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES:
-        GLint i;
+    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
         glGetIntegerv(pname, &i);
         *params = (GLfloat)i;
         break;
 
+    case GL_COMPRESSED_TEXTURE_FORMATS:
+        glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &i);
+        if(i > 0)
+        {
+            GLint* iParams = new GLint[i];
+            glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS, iParams);
+            while(i >= 0)
+            {
+                params[i] = (GLfloat)iParams[i];
+                i--;
+            }
+            delete [] iParams;
+        }
+        break;
+
     case GL_TEXTURE_GEN_STR_OES:
         ctx->dispatcher().glGetFloatv(GL_TEXTURE_GEN_S,&params[0]);
         break;
@@ -788,6 +830,14 @@
         ctx->dispatcher().glGetIntegerv(GL_TEXTURE_GEN_S,&params[0]);
         break;
 
+    case GL_COMPRESSED_TEXTURE_FORMATS:
+        getCompressedFormats(params);
+        break;
+
+    case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
+        *params = getCompressedFormats(NULL);
+        break;
+
     default:
         ctx->dispatcher().glGetIntegerv(pname,params);
     }
diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp
index b26b504..1ff40d9 100644
--- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp
+++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp
@@ -16,6 +16,8 @@
 #include "TextureUtils.h"
 #include <stdio.h>
 
+#define MAX_SUPPORTED_PALLETE 10
+
 
 struct Color
 {
@@ -164,3 +166,19 @@
     }
     return pixelsOut;
 }
+
+int getCompressedFormats(int* formats){
+    if(formats){
+        formats[0] = GL_PALETTE4_RGBA8_OES;
+        formats[1] = GL_PALETTE4_RGBA4_OES;
+        formats[2] = GL_PALETTE8_RGBA8_OES;
+        formats[3] = GL_PALETTE8_RGBA4_OES;
+        formats[4] = GL_PALETTE4_RGB8_OES;
+        formats[5] = GL_PALETTE8_RGB8_OES;
+        formats[6] = GL_PALETTE4_RGB5_A1_OES;
+        formats[7] = GL_PALETTE8_RGB5_A1_OES;
+        formats[8] = GL_PALETTE4_R5_G6_B5_OES;
+        formats[9] = GL_PALETTE8_R5_G6_B5_OES;
+    }
+    return MAX_SUPPORTED_PALLETE;
+}
diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h
index 21094af..0dc3286 100644
--- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h
+++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h
@@ -18,6 +18,8 @@
 
 #include <GLES/gl.h>
 
+
 unsigned char* uncompressTexture(GLenum internalformat,GLenum& formatOut,GLsizei width,GLsizei height,GLsizei imageSize, const GLvoid* data,GLint level);
+int getCompressedFormats(int* formats);
 
 #endif