[Webkit-unassigned] [Bug 235002] New: readPixels directly to ArrayBuffer has very high CPU usage

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Sat Jan 8 00:42:05 PST 2022


            Bug ID: 235002
           Summary: readPixels directly to ArrayBuffer has very high CPU
           Product: WebKit
           Version: Safari 15
          Hardware: All
                OS: iOS 15
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: ANGLE
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: simontaylor1 at ntlworld.com
                CC: dino at apple.com, kbr at google.com, kkinnunen at apple.com

WebGL1's readPixels only supports reading directly into an ArrayBuffer, and blocks until the GPU work is completed.

WebGL2 added the ability to target a PIXEL_PACK_BUFFER with readPixels, and then copy the pixels back into an ArrayBuffer with getBufferSubData. The usual recommendation is to insert a fence after the readPixels, and wait until it is signalled before calling getBufferSubData which will prevent the main thread blocking on GPU completion.

My expectation was that there would be no performance benefit to using a PIXEL_PACK_BUFFER with immediate readback, where getBufferSubData will also block until GPU completion.

i.e. I expected the webgl2-only:

gl.bindBuffer(gl.PIXEL_PACK_BUFFER, pixelBuffer);
gl.readPixels(0, 0, 640, 360, gl.RGBA, gl.UNSIGNED_BYTE, 0);
gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, pixels);

to have no major performance advantage over the equivalent direct route:

gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null);
gl.readPixels(0, 0, 640, 360, gl.RGBA, gl.UNSIGNED_BYTE, pixels);

However on both iOS (tested on 15.2) and macOS (12.1, Safari 15.2) the direct option is many times slower, and looking at a System Trace in Instruments involves way more CPU activity long after the GPU has finished.

Test case coming up next, along with some System Trace findings from Instruments.

You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20220108/77193ae9/attachment-0001.htm>

More information about the webkit-unassigned mailing list