By way of introduction, I invite you to read Markus’ excellent post on this blog about CoreAnimation integration yielding substantial improvements in power usage if you haven’t already.

Next steps in this OS compositor integration saga include taking advantage CoreAnimation with WebRender’s picture caching infrastructure (rendering tiles directly into CoreAnimation surfaces), as well as rendering using a similar mechanism on Windows via DirectComposition surfaces. Markus, Glenn and Sotaro are making good progress on all of these fronts.

What’s new in gfx

WebGPU

Kvark landed WebGPU’s infrastructure and initial implementation on Nightly. It can be enabled via the pref “dom.webgpu.enable” in about:config . The functionality is limited to device creation at the moment, with support for Vulkan, D3D12, and Metal.

WebGPU Is a work-in-progress specification for the successor to WebGL 2, exposing a modern API to perform rendering and computation on the GPU.

Various bug fixes and improvements

Botond fixed a bug that caused WebExtension popups to render empty with desktop zooming.

Botond fixed a WebRender scrolling regression that affected some workflows in Tile Tabs and similar extensions.

Botond fixed some Android UX issues related to gesture handling (bug 1570559, bug 1586496).

Botond fixed some Android scrolling webcompat issues (bug 1592435, bug 1592902).

Botond fixed some more prerequisites for enabling a hiding URL bar in Firefox Preview (bug 1552608, bug 1590582).

Markus shared the GL contexts between open windows on Mac.

Bob Owen improved the recycling of shared textures.

Jonathan Kew fixed a sub-pixel anti-aliasing issue when the text color has some transparency and an emoji is present.

Sotaro fixed an issue with DWM, partial present and high-contrast mode on Windows.

Andrew allowed image decoders to choose RGBA and BGRA at compile time.

Nical Fixed a shutdown crash.

Sotaro fixed an issue with partial present and the snapshot mechanism used for reftests.

Jonathan Kew enabled a better default fallback font for Mongolian on macOS.

Jonathan fixed a whole lot of other font rendering issues.

Lee updated Skia to version m79.

Jamie avoided using glTexImage3D on android emulator.

What’s new in WebRender

WebRender is a GPU based 2D rendering engine for web written in Rust, currently powering Firefox‘s rendering engine as well as the research web browser servo.

To enable WebRender in Firefox, in the about:config , enable the pref gfx.webrender.all and restart the browser.

WebRender is available as a standalone crate on crates.io (documentation) for use in your own rust projects.

Kvark made WebRender use the rounded rectangle fast path more aggressively, improving performance on some sites.

Glenn improved the performance of the Direct Composition integration of picture caching by only rebuilding the Direct Composition visual tree if different from last frame and using EGLImage instead of pbuffer for GL to Direct Composition interop.

Andrew fixed an issue with pixel snapping and backdrop filters.

Bert fixed the capture debugging tool on Windows.

Glenn added some debugging infrastructure for picture caching invalidation.

Lee fixed an issue with sub-pixel anti-aliasing and ClearType level settings.

Nical documented How the data that are passed to the shaders is organized out in GPU memory.

Lee improved the performance of text rendering with large sizes and during async zoom.

Sotaro made partial updates work with the OS compositor integration on Windows.

Jamie disabled picture caching during async zoom when the entire screen is invalidated every frame.

Glenn reduced the amount of surface allocations with picture caching.

Andrew fixed some pixel snapping issues.

Nical reorganized the data that is passed to the vertex shaders to be more consistent and enable better code generation with the multi-brush shader.

Nical refactored brush shaders and added the possibility to generate “multi-brush” shaders that support multiple types of primitives in preparation for a more flexible batching infrastructure.

Glenn added support for the built-in profiler debug overlays with the OS compositor mode.

Markus fixed vibrancy with the OS compositor mode on Mac.

Miko refactored display item building so that building function knows the item index beforehand.

Glenn fixed a picture caching bug with special pages such as about:support.

Glenn implemented CPU-side occlusion culling of picture cache slices to reduce memory usage and overdraw.

Jeff added a debugging tool to show when glyphs are re-rasterized.

Glenn reduced the work done when a picture cache tile is inside the display port but not currently visible on screen.

Nical improved the built-in profiler overlay to show more relevant information in some of the counters and highlight counters outside of their expected ranges.

Jamie ensured shader sources are null-terminated even when the source size is provided to work around a shader compiler bug.

Martin Stransky implemented dmabuf texture sharing for WebRender.

Kris made the screenshot infrastructure used in GeckoView work with WebRender.

Nical fixed a gradient rendering bug.

Nical improved WebRender’s API documentation.