Make Texture2D format and compression checks be explicit about the level they are checking

Issue=306
Signed-off-by: Nicolas Capens

git-svn-id: http://angleproject.googlecode.com/svn/trunk@1081 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index ed3dbac..fd96ef2 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -109,12 +109,12 @@
 
 GLenum RenderbufferTexture2D::getInternalFormat() const
 {
-    return mTexture2D->getInternalFormat();
+    return mTexture2D->getInternalFormat(0);
 }
 
 D3DFORMAT RenderbufferTexture2D::getD3DFormat() const
 {
-    return mTexture2D->getD3DFormat();
+    return mTexture2D->getD3DFormat(0);
 }
 
 GLsizei RenderbufferTexture2D::getSamples() const
diff --git a/src/libGLESv2/Texture.cpp b/src/libGLESv2/Texture.cpp
index f478427..55e3ae3 100644
--- a/src/libGLESv2/Texture.cpp
+++ b/src/libGLESv2/Texture.cpp
@@ -1802,14 +1802,20 @@
         return 0;
 }
 
-GLenum Texture2D::getInternalFormat() const
+GLenum Texture2D::getInternalFormat(GLint level) const
 {
-    return mImageArray[0].getFormat();
+    if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
+        return mImageArray[level].getFormat();
+    else
+        return GL_NONE;
 }
 
-D3DFORMAT Texture2D::getD3DFormat() const
+D3DFORMAT Texture2D::getD3DFormat(GLint level) const
 {
-    return mImageArray[0].getD3DFormat();
+    if (level < IMPLEMENTATION_MAX_TEXTURE_LEVELS)
+        return mImageArray[level].getD3DFormat();
+    else
+        return D3DFMT_UNKNOWN;
 }
 
 void Texture2D::redefineImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLenum type)
@@ -2093,8 +2099,8 @@
       default: UNREACHABLE();
     }
 
-    if ((getInternalFormat() == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
-        (getInternalFormat() == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
+    if ((getInternalFormat(0) == GL_FLOAT && !getContext()->supportsFloat32LinearFilter()) ||
+        (getInternalFormat(0) == GL_HALF_FLOAT_OES && !getContext()->supportsFloat16LinearFilter()))
     {
         if (mMagFilter != GL_NEAREST || (mMinFilter != GL_NEAREST && mMinFilter != GL_NEAREST_MIPMAP_NEAREST))
         {
@@ -2176,9 +2182,9 @@
     return true;
 }
 
-bool Texture2D::isCompressed() const
+bool Texture2D::isCompressed(GLint level) const
 {
-    return IsCompressed(getInternalFormat());
+    return IsCompressed(getInternalFormat(level));
 }
 
 IDirect3DBaseTexture9 *Texture2D::getBaseTexture() const
diff --git a/src/libGLESv2/Texture.h b/src/libGLESv2/Texture.h
index 0edc317..b3c1383 100644
--- a/src/libGLESv2/Texture.h
+++ b/src/libGLESv2/Texture.h
@@ -281,9 +281,9 @@
 
     GLsizei getWidth(GLint level) const;
     GLsizei getHeight(GLint level) const;
-    GLenum getInternalFormat() const;
-    D3DFORMAT getD3DFormat() const;
-    bool isCompressed() const;
+    GLenum getInternalFormat(GLint level) const;
+    D3DFORMAT getD3DFormat(GLint level) const;
+    bool isCompressed(GLint level) const;
 
     void setImage(GLint level, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint unpackAlignment, const void *pixels);
     void setCompressedImage(GLint level, GLenum format, GLsizei width, GLsizei height, GLsizei imageSize, const void *pixels);
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index a8b3de6..f5ea60e 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -63,12 +63,12 @@
         return error(GL_INVALID_OPERATION, false);
     }
 
-    if (compressed != texture->isCompressed())
+    if (compressed != texture->isCompressed(level))
     {
         return error(GL_INVALID_OPERATION, false);
     }
 
-    if (format != GL_NONE && format != texture->getInternalFormat())
+    if (format != GL_NONE && format != texture->getInternalFormat(level))
     {
         return error(GL_INVALID_OPERATION, false);
     }
@@ -1404,7 +1404,7 @@
                 {
                     return; // error already registered by validateSubImageParams
                 }
-                textureFormat = tex2d->getInternalFormat();
+                textureFormat = tex2d->getInternalFormat(level);
                 texture = tex2d;
             }
             else if (gl::IsCubemapTextureTarget(target))
@@ -2362,7 +2362,7 @@
                             return error(GL_INVALID_OPERATION);
                         }
                         gl::Texture2D *tex2d = static_cast<gl::Texture2D *>(tex);
-                        if (tex2d->isCompressed())
+                        if (tex2d->isCompressed(0))
                         {
                             return error(GL_INVALID_OPERATION);
                         }
@@ -2502,7 +2502,7 @@
                 {
                     gl::Texture2D *tex2d = context->getTexture2D();
 
-                    if (tex2d->isCompressed())
+                    if (tex2d->isCompressed(0))
                     {
                         return error(GL_INVALID_OPERATION);
                     }