Support for DMA-BUF zero-copy compositing under X11 (EGLStream) for Firefox WebRender Compositor

Hello,

I’m using **Firefox 141 on Linux Mint mate 21.3 (X11), kernel 6.8.0-64-lowlatency #67.1~22.04.1-Ubuntu ** with an NVIDIA GT 1030 GPU and the proprietary NVIDIA driver v550.
I’ve configured nvidia-vaapi-driver and successfully enabled hardware video decoding via VAAPI (confirmed by about:support and actual performance), but WebRender Compositor remains blocked.

This is consistent with Mozilla’s Bugzilla Bug 1638709, which describes how Mozilla intentionally disables WebRender Compositor for NVIDIA + EGLStream (X11) due to the lack of DMA-BUF zero-copy support and unstable behavior.


🔧 What I tried:

user.js configuration:

user_pref("gfx.webrender.compositor", true);
user_pref("gfx.webrender.compositor.force-enabled", true);
user_pref("gfx.webrender.all", true);
user_pref("layers.acceleration.force-enabled", true);

Environment variables:

MOZ_WEBRENDER=1
MOZ_WEBRENDER_COMPOSITOR=1
MOZ_GFX_BLOCKLIST_ALL=1

Firefox output (about:support):

WEBRENDER_COMPOSITOR:
  default: disabled (Disabled by default)
  user: available (Enabled via gfx.webrender.compositor)
  env: blocklisted (Blocked by gfxInfo – FEATURE_FAILURE_WEBRENDER_COMPOSITOR_DISABLED)

Even with the above force-enabled settings and environment variables, the WebRender Compositor stays disabled — blocked by Firefox’s internal gfxInfo.


🧪 Diagnostic Log (DMA-BUF)

I launched Firefox with the following debug logging:

MOZ_LOG="Dmabuf:5" MOZ_WEBRENDER=1 MOZ_WEBRENDER_COMPOSITOR=1 MOZ_GFX_BLOCKLIST_ALL=1 MOZ_LOG_FILE=/dev/stdout firefox -P test 2>&1

Output:

[Parent 523342: Main Thread]: D/Dmabuf DMABufDeviceLock::DMABufDeviceLock() [7ffc525f2900]
[Parent 523342: Main Thread]: D/Dmabuf DMABufDevice::Init()
[Parent 523342: Main Thread]: D/Dmabuf Loading DMABuf system library libgbm.so.1 ...
[Parent 523342: Main Thread]: D/Dmabuf Using DRM device /dev/dri/renderD128
[Parent 523342: Main Thread]: D/Dmabuf DMABuf is enabled
[Parent 523342: Main Thread]: D/Dmabuf EnsureDMABufDevice(): created DMABufDevice
[Parent 523342: Main Thread]: D/Dmabuf DMABufDevice::GetDevice() [7fd91d114d30]
[Parent 523342: Main Thread]: D/Dmabuf DMABufFormats::EnsureBasicFormats(): GBM_FORMAT_XRGB8888 is missing, adding.
[Parent 523342: Main Thread]: D/Dmabuf DMABufFormats::EnsureBasicFormats(): GBM_FORMAT_ARGB8888 is missing, adding.
[Parent 523342: Main Thread]: D/Dmabuf DMABufDeviceLock::~DMABufDeviceLock() [7ffc525f2900]

This confirms that:

  • Firefox detects and tries to enable DMA-BUF,
  • libgbm.so.1 is loaded,
  • /dev/dri/renderD128 is used,
  • DMA-BUF support is marked as enabled internally.

Yet WebRender Compositor is still blocked by gfxInfo, because EGLStream does not support zero-copy buffer sharing between the decoder and compositor, and GBM is not used on NVIDIA under X11.


❓ Questions for NVIDIA:

  1. Does the current NVIDIA proprietary driver support DMA-BUF zero-copy compositing under X11 with EGLStream?
  2. If not, is there any roadmap or plan to implement this so that Firefox (and other clients) can use WebRender Compositor under X11 with NVIDIA GPUs?
  3. Is it NVIDIA’s recommendation to use Wayland + GBM for zero-copy rendering instead?

Thank you in advance for any clarification regarding DMA-BUF and compositing support for Firefox on X11 with NVIDIA GPUs.

Best regards,
Krzysztof Szwaba