Skip to content

Draft: winemac: Use IOSurface to update native window layers instead of CGImage.

Marc-Aurel Zent requested to merge mzent/wine:iosurface into master

This consolidates the two separate CGImages (colorImage and shapeImage) previously used in WineContentView into a single IOSurface that also holds the window mask information in its alpha channel now.

The alpha channel is now being updated in macdrv_surface_flush, whenever the shape changes (and stores that change for the next update, to also keep the front buffer in sync).

This reduces the delay from setting a CGImage to a layer from 50ms to about 1.5ms in the IOSurface case (also accounting for vImageSelectChannels_ARGB8888 operation).

Based on a patch by @bshanks.

I am already putting it out for feedback, but I will so some more testing to see how the performance impact of this is and do more exhaustive testing with shaped windows.

Ideally the double buffer solution can be avoided as well... Also the HBITMAP for the windows is currently backed by a CGDataProviderRef and could also become an IOSurface I believe.

Merge request reports

Loading