RESOLVED FIXED 216982
[GPU Process] fast/canvas/canvas-composite-canvas.html and fast/canvas/canvas-composite-image.html fail
https://bugs.webkit.org/show_bug.cgi?id=216982
Summary [GPU Process] fast/canvas/canvas-composite-canvas.html and fast/canvas/canvas...
Wenson Hsieh
Reported 2020-09-25 11:00:35 PDT
SSIA
Attachments
Patch (11.20 KB, patch)
2020-09-25 14:03 PDT, Wenson Hsieh
simon.fraser: review+
ews-feeder: commit-queue-
Update ChangeLog entry to include ImageBufferCGBitmapBackend.h (11.25 KB, patch)
2020-09-25 14:48 PDT, Wenson Hsieh
no flags
Patch (12.85 KB, patch)
2020-09-25 16:10 PDT, Wenson Hsieh
no flags
Wenson Hsieh
Comment 1 2020-09-25 14:03:09 PDT
Wenson Hsieh
Comment 2 2020-09-25 14:48:04 PDT
Created attachment 409743 [details] Update ChangeLog entry to include ImageBufferCGBitmapBackend.h
Wenson Hsieh
Comment 3 2020-09-25 16:10:43 PDT
EWS
Comment 4 2020-09-25 19:44:06 PDT
Committed r267616: <https://trac.webkit.org/changeset/267616> All reviewed patches have been landed. Closing bug and clearing flags on attachment 409754 [details].
Radar WebKit Bug Importer
Comment 5 2020-09-25 19:45:42 PDT
Said Abou-Hallawa
Comment 6 2020-09-26 03:18:04 PDT
I think this patch is not the right approach. These tests are also broken when "Enable Display List Drawing" is turned on. So it is a display-list rendering issue. The LayoutTests change suggests that the display-list CPU drawing for canvas is now broken and/or the coordinates are flipped. Either way this does not seem right. I think the problem is the code in setupContext() is not recorded in the display list. If we succeed in recording them, getCTM() will return the correct CTM always and the compositing bug is fixed. To do that, I would suggest the following: 1. Remove the call to setupContext() from the constructor of ImageBufferCGBitmapBackend and ImageBufferIOSurfaceBackend. 2. Make setupContext() a virtual empty method of ImageBufferBackend and override it only in ImageBufferCGBackend. 3. Make setupContext() takes a GraphicsContext argument and use it instead of using ImageBufferBackend::context(). We need to pass ImageBuffer::context() always to setupContext(). ImageBuffer::context() can be either the backend or the display list context. So if the ImageBuffer is backed by a display list, these commands will be recorded before they are applied to the backend. 2. For CPU based ImageBuffers, make the call to setupContext() in ConcreteImageBuffer::create() after creating the ImageBuffer. 5. For GPU based ImageBuffer, the call to setupContext() should happen in the WebProcess after the backend is created (i.e. RemoteImageBuffer::createBackend()). For the GPU side (i.e. RemoteImageBufferProxy), we should never call setupContext(). Flipping the coordinates should happen while replaying back the display list. So we need to implement RemoteImageBufferProxy::create() instead of calling the ConcreteImageBuffer::create().
Note You need to log in before you can comment on or make changes to this bug.