| Index: Source/core/html/canvas/WebGLTexture.cpp
 | 
| diff --git a/Source/core/html/canvas/WebGLTexture.cpp b/Source/core/html/canvas/WebGLTexture.cpp
 | 
| index 15cb7471435e966a58880340bf897adcb940c4a4..61bce3430e361e0400fb81ee5749345e0bf461c8 100644
 | 
| --- a/Source/core/html/canvas/WebGLTexture.cpp
 | 
| +++ b/Source/core/html/canvas/WebGLTexture.cpp
 | 
| @@ -44,6 +44,7 @@ WebGLTexture::WebGLTexture(WebGLRenderingContext* ctx)
 | 
|      , m_wrapS(GraphicsContext3D::REPEAT)
 | 
|      , m_wrapT(GraphicsContext3D::REPEAT)
 | 
|      , m_isNPOT(false)
 | 
| +    , m_isCubeComplete(false)
 | 
|      , m_isComplete(false)
 | 
|      , m_needToUseBlackTexture(false)
 | 
|      , m_isFloatType(false)
 | 
| @@ -282,7 +283,8 @@ bool WebGLTexture::canGenerateMipmaps()
 | 
|          const LevelInfo& info = m_info[ii][0];
 | 
|          if (!info.valid
 | 
|              || info.width != first.width || info.height != first.height
 | 
| -            || info.internalFormat != first.internalFormat || info.type != first.type)
 | 
| +            || info.internalFormat != first.internalFormat || info.type != first.type
 | 
| +            || (m_info.size() > 1 && !m_isCubeComplete))
 | 
|              return false;
 | 
|      }
 | 
|      return true;
 | 
| @@ -318,6 +320,7 @@ void WebGLTexture::update()
 | 
|          }
 | 
|      }
 | 
|      m_isComplete = true;
 | 
| +    m_isCubeComplete = true;
 | 
|      const LevelInfo& first = m_info[0][0];
 | 
|      GC3Dint levelCount = computeLevelCount(first.width, first.height);
 | 
|      if (levelCount < 1)
 | 
| @@ -327,7 +330,10 @@ void WebGLTexture::update()
 | 
|              const LevelInfo& info0 = m_info[ii][0];
 | 
|              if (!info0.valid
 | 
|                  || info0.width != first.width || info0.height != first.height
 | 
| -                || info0.internalFormat != first.internalFormat || info0.type != first.type) {
 | 
| +                || info0.internalFormat != first.internalFormat || info0.type != first.type
 | 
| +                || (m_info.size() > 1 && info0.width != info0.height)) {
 | 
| +                if (m_info.size() > 1)
 | 
| +                    m_isCubeComplete = false;
 | 
|                  m_isComplete = false;
 | 
|                  break;
 | 
|              }
 | 
| @@ -347,34 +353,17 @@ void WebGLTexture::update()
 | 
|              }
 | 
|          }
 | 
|      }
 | 
| -    m_isFloatType = false;
 | 
| -    if (m_isComplete)
 | 
| -        m_isFloatType = m_info[0][0].type == GraphicsContext3D::FLOAT;
 | 
| -    else {
 | 
| -        for (size_t ii = 0; ii < m_info.size(); ++ii) {
 | 
| -            if (m_info[ii][0].type == GraphicsContext3D::FLOAT) {
 | 
| -                m_isFloatType = true;
 | 
| -                break;
 | 
| -            }
 | 
| -        }
 | 
| -    }
 | 
| -    m_isHalfFloatType = false;
 | 
| -    if (m_isComplete)
 | 
| -        m_isHalfFloatType = m_info[0][0].type == GraphicsContext3D::HALF_FLOAT_OES;
 | 
| -    else {
 | 
| -        for (size_t ii = 0; ii < m_info.size(); ++ii) {
 | 
| -            if (m_info[ii][0].type == GraphicsContext3D::HALF_FLOAT_OES) {
 | 
| -                m_isHalfFloatType = true;
 | 
| -                break;
 | 
| -            }
 | 
| -        }
 | 
| -    }
 | 
| +    m_isFloatType = m_info[0][0].type == GraphicsContext3D::FLOAT;
 | 
| +    m_isHalfFloatType = m_info[0][0].type == GraphicsContext3D::HALF_FLOAT_OES;
 | 
|  
 | 
|      m_needToUseBlackTexture = false;
 | 
|      // NPOT
 | 
|      if (m_isNPOT && ((m_minFilter != GraphicsContext3D::NEAREST && m_minFilter != GraphicsContext3D::LINEAR)
 | 
|                       || m_wrapS != GraphicsContext3D::CLAMP_TO_EDGE || m_wrapT != GraphicsContext3D::CLAMP_TO_EDGE))
 | 
|          m_needToUseBlackTexture = true;
 | 
| +    // If it is a Cube texture, check Cube Completeness first
 | 
| +    if (m_info.size() > 1 && !m_isCubeComplete)
 | 
| +        m_needToUseBlackTexture = true;
 | 
|      // Completeness
 | 
|      if (!m_isComplete && m_minFilter != GraphicsContext3D::NEAREST && m_minFilter != GraphicsContext3D::LINEAR)
 | 
|          m_needToUseBlackTexture = true;
 | 
| 
 |