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
