| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc | 
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc | 
| index b34e6909a82681ff189bf3e9dd063074748a2a8b..ac144223ed65c027ec552f1245444e989cb06d3e 100644 | 
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc | 
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc | 
| @@ -14355,6 +14355,32 @@ void GLES2DecoderImpl::DoCopyTexImage2D( | 
| const gfx::Rect dst(0, 0, size.width(), size.height()); | 
| src.Intersect(dst); | 
|  | 
| +  GLenum final_internal_format = TextureManager::AdjustTexInternalFormat( | 
| +      feature_info_.get(), internal_format); | 
| +  if (workarounds().force_int_or_srgb_cube_texture_complete && | 
| +      texture->target() == GL_TEXTURE_CUBE_MAP && | 
| +      (GLES2Util::IsIntegerFormat(final_internal_format) || | 
| +       GLES2Util::GetColorEncodingFromInternalFormat(final_internal_format) == | 
| +           GL_SRGB)) { | 
| +    TextureManager::DoTexImageArguments args = { | 
| +        target, | 
| +        level, | 
| +        final_internal_format, | 
| +        width, | 
| +        height, | 
| +        1, | 
| +        border, | 
| +        format, | 
| +        type, | 
| +        nullptr, | 
| +        pixels_size, | 
| +        0, | 
| +        TextureManager::DoTexImageArguments::kTexImage2D}; | 
| +    texture_manager()->WorkaroundCopyTexImageCubeMap( | 
| +        &texture_state_, &state_, &framebuffer_state_, texture_ref, func_name, | 
| +        args); | 
| +  } | 
| + | 
| if (src.x() != x || src.y() != y || | 
| src.width() != width || src.height() != height) { | 
| { | 
| @@ -14364,9 +14390,8 @@ void GLES2DecoderImpl::DoCopyTexImage2D( | 
|  | 
| std::unique_ptr<char[]> zero(new char[pixels_size]); | 
| memset(zero.get(), 0, pixels_size); | 
| -      glTexImage2D(target, level, TextureManager::AdjustTexInternalFormat( | 
| -        feature_info_.get(), internal_format), | 
| -        width, height, border, format, type, zero.get()); | 
| +      glTexImage2D(target, level, final_internal_format, width, height, border, | 
| +                   format, type, zero.get()); | 
| } | 
|  | 
| if (!src.IsEmpty()) { | 
| @@ -14385,8 +14410,6 @@ void GLES2DecoderImpl::DoCopyTexImage2D( | 
| } | 
| } | 
| } else { | 
| -    GLenum final_internal_format = TextureManager::AdjustTexInternalFormat( | 
| -        feature_info_.get(), internal_format); | 
| if (workarounds().init_two_cube_map_levels_before_copyteximage && | 
| texture->target() == GL_TEXTURE_CUBE_MAP && | 
| target != GL_TEXTURE_CUBE_MAP_POSITIVE_X) { | 
|  |