When we use canvas or video as tex upload source, we have a GPU-GPU path, so we don't have to read back to CPU mem, and upload to GPU again. The implementation only worked for a limited number of internal formats. So we depends on the internal formats to decide if we go down the GPU-GPU path or the read back path.
Unfortunately, when blink side tex state is removed, we no longer have the information of a texture's internal format on the blink side, so TexSubImage can't decide whether the GPU-GPU path is implemented.
One possible fix is that we make this work for all formats, so on blink side we can just call the copyTexture chromium extension, regardless of texture internalformat.
Recent refactoring to remove blink side tex-related validation and state caching introduced a regression for WebGL 1.
Comment 1 by kbr@chromium.org
, Jul 7 2016