Snap for 7364021 from c2515aaf47893aceb4e08c7719c6dbe146f50b28 to sc-release

Change-Id: I4d8d976a5fa2f87ed3b03cfa6952aa9633749202
diff --git a/stream-servers/glestranslator/GLES_CM/GLEScmImp.cpp b/stream-servers/glestranslator/GLES_CM/GLEScmImp.cpp
index 2479750..fb00d41 100644
--- a/stream-servers/glestranslator/GLES_CM/GLEScmImp.cpp
+++ b/stream-servers/glestranslator/GLES_CM/GLEScmImp.cpp
@@ -1064,14 +1064,14 @@
         }
         break;
     case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
-        *params = (GLboolean)getCompressedFormats(NULL);
+        *params = (GLboolean)getCompressedFormats(1, NULL);
         break;
     case GL_COMPRESSED_TEXTURE_FORMATS:
         {
-            int nparams = getCompressedFormats(NULL);
+            int nparams = getCompressedFormats(1, NULL);
             if (nparams>0) {
                 int * iparams = new int[nparams];
-                getCompressedFormats(iparams);
+                getCompressedFormats(1, iparams);
                 for (int i=0; i<nparams; i++) params[i] = (GLboolean)iparams[i];
                 delete [] iparams;
             }
@@ -1162,15 +1162,15 @@
         glGetFloatv(pname,&fParams[0]);
         break;
     case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
-        *params = I2X(getCompressedFormats(NULL));
+        *params = I2X(getCompressedFormats(1, NULL));
         return;
         break;
     case GL_COMPRESSED_TEXTURE_FORMATS:
         {
-            int nparams = getCompressedFormats(NULL);
+            int nparams = getCompressedFormats(1, NULL);
             if (nparams>0) {
                 int * iparams = new int[nparams];
-                getCompressedFormats(iparams);
+                getCompressedFormats(1, iparams);
                 for (int i=0; i<nparams; i++) params[i] = I2X(iparams[i]);
                 delete [] iparams;
             }
@@ -1208,14 +1208,14 @@
         *params = (GLfloat)i;
         break;
     case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
-        *params = (GLfloat)getCompressedFormats(NULL);
+        *params = (GLfloat)getCompressedFormats(1, NULL);
         break;
     case GL_COMPRESSED_TEXTURE_FORMATS:
         {
-            int nparams = getCompressedFormats(NULL);
+            int nparams = getCompressedFormats(1, NULL);
             if (nparams>0) {
                 int * iparams = new int[nparams];
-                getCompressedFormats(iparams);
+                getCompressedFormats(1, iparams);
                 for (int i=0; i<nparams; i++) params[i] = (GLfloat)iparams[i];
                 delete [] iparams;
             }
@@ -1266,10 +1266,10 @@
         }
         break;
     case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
-        *params = getCompressedFormats(NULL);
+        *params = getCompressedFormats(1, NULL);
         break;
     case GL_COMPRESSED_TEXTURE_FORMATS:
-        getCompressedFormats(params);
+        getCompressedFormats(1, params);
         break;
     case GL_MAX_CLIP_PLANES:
         ctx->dispatcher().glGetIntegerv(pname,params);
diff --git a/stream-servers/glestranslator/GLES_V2/GLESv2Imp.cpp b/stream-servers/glestranslator/GLES_V2/GLESv2Imp.cpp
index e438183..b31fa34 100644
--- a/stream-servers/glestranslator/GLES_V2/GLESv2Imp.cpp
+++ b/stream-servers/glestranslator/GLES_V2/GLESv2Imp.cpp
@@ -2086,14 +2086,14 @@
         break;
 
     case GL_NUM_COMPRESSED_TEXTURE_FORMATS:
-        *params = (T)getCompressedFormats(NULL);
+        *params = (T)getCompressedFormats(2, NULL);
         break;
     case GL_COMPRESSED_TEXTURE_FORMATS:
         {
-            int nparams = getCompressedFormats(NULL);
+            int nparams = getCompressedFormats(2, NULL);
             if (nparams > 0) {
                 int* iparams = new int[nparams];
-                getCompressedFormats(iparams);
+                getCompressedFormats(2, iparams);
                 for (int i = 0; i < nparams; i++) {
                     params[i] = (T)iparams[i];
                 }
@@ -3481,7 +3481,7 @@
                 !((format == GL_DEPTH_COMPONENT && internalformat == GL_DEPTH_COMPONENT)
                 || (format == GL_LUMINANCE && internalformat == GL_LUMINANCE)), GL_INVALID_OPERATION);
 
-        VALIDATE(!GLESv2Validate::pixelOp(format,type) && internalformat == ((GLint)format),GL_INVALID_OPERATION);
+        VALIDATE(!GLESv2Validate::pixelOp(format,type),GL_INVALID_OPERATION);
         VALIDATE(!GLESv2Validate::pixelSizedFrmt(ctx, internalformat, format, type), GL_INVALID_OPERATION);
     }
 
diff --git a/stream-servers/glestranslator/GLcommon/TextureUtils.cpp b/stream-servers/glestranslator/GLcommon/TextureUtils.cpp
index 6e61e64..f47d6cd 100644
--- a/stream-servers/glestranslator/GLcommon/TextureUtils.cpp
+++ b/stream-servers/glestranslator/GLcommon/TextureUtils.cpp
@@ -64,26 +64,30 @@
     EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, astc_codec::FootprintType::k12x10, true) \
     EXPAND_MACRO(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, astc_codec::FootprintType::k12x12, true) \
 
-int getCompressedFormats(int* formats) {
+int getCompressedFormats(int majorVersion, int* formats) {
     static constexpr size_t kCount = MAX_SUPPORTED_PALETTE + MAX_ETC_SUPPORTED + kASTCFormatsCount;
+    int res = kCount;
+
+    if (majorVersion > 1) {
+        res -= MAX_SUPPORTED_PALETTE;
+    }
 
     if (formats) {
         size_t i = 0;
 
-        // Palette
-        formats[i++] = GL_PALETTE4_RGBA8_OES;
-        formats[i++] = GL_PALETTE4_RGBA4_OES;
-        formats[i++] = GL_PALETTE8_RGBA8_OES;
-        formats[i++] = GL_PALETTE8_RGBA4_OES;
-        formats[i++] = GL_PALETTE4_RGB8_OES;
-        formats[i++] = GL_PALETTE8_RGB8_OES;
-        formats[i++] = GL_PALETTE4_RGB5_A1_OES;
-        formats[i++] = GL_PALETTE8_RGB5_A1_OES;
-        formats[i++] = GL_PALETTE4_R5_G6_B5_OES;
-        formats[i++] = GL_PALETTE8_R5_G6_B5_OES;
-
-        assert(i == MAX_SUPPORTED_PALETTE &&
-               "getCompressedFormats size mismatch");
+        if (1 == majorVersion) {
+            // Palette
+            formats[i++] = GL_PALETTE4_RGBA8_OES;
+            formats[i++] = GL_PALETTE4_RGBA4_OES;
+            formats[i++] = GL_PALETTE8_RGBA8_OES;
+            formats[i++] = GL_PALETTE8_RGBA4_OES;
+            formats[i++] = GL_PALETTE4_RGB8_OES;
+            formats[i++] = GL_PALETTE8_RGB8_OES;
+            formats[i++] = GL_PALETTE4_RGB5_A1_OES;
+            formats[i++] = GL_PALETTE8_RGB5_A1_OES;
+            formats[i++] = GL_PALETTE4_R5_G6_B5_OES;
+            formats[i++] = GL_PALETTE8_R5_G6_B5_OES;
+        }
 
         // ETC
         formats[i++] = GL_ETC1_RGB8_OES;
@@ -99,9 +103,6 @@
         formats[i++] = GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC;
         formats[i++] = GL_COMPRESSED_R11_EAC;
 
-        assert(i == MAX_SUPPORTED_PALETTE + MAX_ETC_SUPPORTED &&
-               "getCompressedFormats size mismatch");
-
         // ASTC
 #define ASTC_FORMAT(typeName, footprintType, srgbValue) \
         formats[i++] = typeName;
@@ -109,10 +110,9 @@
         ASTC_FORMATS_LIST(ASTC_FORMAT)
 #undef ASTC_FORMAT
 
-        assert(i == kCount && "getCompressedFormats size mismatch");
     }
 
-    return kCount;
+    return res;
 }
 
 ETC2ImageFormat getEtcFormat(GLenum internalformat) {
diff --git a/stream-servers/glestranslator/include/GLcommon/TextureUtils.h b/stream-servers/glestranslator/include/GLcommon/TextureUtils.h
index 641011e..b5034d0 100644
--- a/stream-servers/glestranslator/include/GLcommon/TextureUtils.h
+++ b/stream-servers/glestranslator/include/GLcommon/TextureUtils.h
@@ -37,7 +37,7 @@
 bool isBptcFormat(GLenum internalformat);
 bool isS3tcFormat(GLenum internalformat);
 bool isPaletteFormat(GLenum internalformat);
-int getCompressedFormats(int* formats);
+int getCompressedFormats(int majorVersion, int* formats);
 void doCompressedTexImage2D(GLEScontext* ctx, GLenum target, GLint level,
                             GLenum internalformat, GLsizei width,
                             GLsizei height, GLint border, GLsizei imageSize,