In Issue 878545 a bug was discovered in the upload paths from Canvases and ImageBitmaps to WebGL textures. This happened largely because of the complexity of these upload paths.
More refactoring should be done of these upload paths. In particular, the upload paths from Canvases and ImageBitmaps should be essentially the same. 2D canvases, software-accelerated uploads from WebGL canvases, and ImageBitmaps all go through Blink's Image abstraction, with the caveat that ImageBitmaps have the premultiply-alpha and flip-y operations baked in and so do not consult the associated pixel unpack parameters. Aside from that, the ImageBitmap and Canvas upload paths should share their code, and the manual readback path from ImageBitmap should be removed.