gfx::Color is currently misused in many places. The DrawTargets expect
the color space to be in device space, e.g. what we are actually going
to draw using. Everything sitting above generally deals with sRGB, as
specified in CSS. Sometimes we missed the conversion from sRGB to device
space when issuing draw calls, and similarly sometimes we converted the
color to device space twice.
This patch splits the type in two. sRGBColor and DeviceColor now
represent sRGB and device color spaces respectively. DrawTarget only
accepts DeviceColor, and one can get a DeviceColor from an sRGBColor via
the ToDeviceColor helper API. The reftests now pass with color
management enabled for everything (e.g. CSS) instead of just tagged
raster images.
There will be a follow up patch to enable color management everywhere by
default on all supported platforms.
Differential Revision: https://phabricator.services.mozilla.com/D64771
--HG--
extra : moz-landing-system : lando
- Enable GL_TEXTURE_RECTANGLE_ARB only when the extension is supported
- Switch Green and Alpha colors in NV12 shader when compositing on Wayland. Is's because vaExportSurfaceHandle() exports UV plane in DRM_FORMAT_GR88 format so we have to use R and G channels and not R and A as we have now.
Differential Revision: https://phabricator.services.mozilla.com/D63349
--HG--
extra : moz-landing-system : lando
Use ANDROID_native_fence_sync to synchronize WebGL renderin. It's similar to KHR_fence_sync
but it the fence can be exported to file descriptor and shared among processes so we can create
the fence by WebGL producer and then wait in renderer.
Use glFinish() as a fallback when ANDROID_native_fence_sync is not available.
Differential Revision: https://phabricator.services.mozilla.com/D62712
--HG--
extra : moz-landing-system : lando
- Update WaylandDMABUFTextureClientOGL to work with WaylandDMABufSurfaceRGBA which is used for GL/WebRender compositor
with dmabuf texture backend.
- Update WaylandDMABUFTextureHostOGL to work with both RGBA and NV12 surface formats.
- Use GLTextureSource instead of EGLImageTextureSource as we need to store more than one texture there with NV12
and pass the textures there by CreateTextureSourceForPlane().
- Implement NV12 related function by WaylandDMABUFTextureHostOGL (color space, color range, sub-textures num).
- Add NV12 implementation to PushResourceUpdates()/PushDisplayItems() for WebRender.
Differential Revision: https://phabricator.services.mozilla.com/D62004
--HG--
extra : moz-landing-system : lando
Implement WaylandDMABUFSurfaceImage which is backed by dma buf memory on Wayland and it holds
decoded video images produced by ffmpeg va-api decoder.
Differential Revision: https://phabricator.services.mozilla.com/D61678
--HG--
extra : moz-landing-system : lando
Implement WaylandDMABUFSurfaceImage which is backed by dma buf memory on Wayland and it holds
decoded video images produced by ffmpeg va-api decoder.
Differential Revision: https://phabricator.services.mozilla.com/D61678
--HG--
extra : moz-landing-system : lando
- Create new SharedSurfaceType called EGLSurfaceDMABUF
- Implement EGLSurfaceDMABUF by SharedSurfaceDMABUF which is backed by WaylandDMABufSurface.
It can be used by Wayland/EGL WebGL backend.
- It's disabled by default, can be enabled by widget.wayland_dmabuf_webgl.enabled pref.
Differential Revision: https://phabricator.services.mozilla.com/D60114
--HG--
extra : moz-landing-system : lando
EGL_KHR_swap_buffers_with_damage (or EGL_EXT_swap_buffers_with_damage)
is an EGL extension that allows the application to inform the display
server (system compositor) which areas of the window have changed.
This commit implements support for that extension in the layers compositor.
The layers compositor always renders the whole frame, so we're only getting
the benefit of not redrawing unchanged areas *in the system compositor*,
not actually doing partial invalidation/compositing,
but that makes the implementation simpler (no need to track buffer age).
Differential Revision: https://phabricator.services.mozilla.com/D51517
--HG--
extra : moz-landing-system : lando
Done with:
./mach static-analysis check --checks="-*, modernize-concat-nested-namespaces" --fix .
and then clang-format on the files
Differential Revision: https://phabricator.services.mozilla.com/D58217
--HG--
extra : moz-landing-system : lando
Done with:
./mach static-analysis check --checks="-*, modernize-concat-nested-namespaces" --fix .
and then clang-format on the files
Differential Revision: https://phabricator.services.mozilla.com/D58217
--HG--
extra : moz-landing-system : lando
There are multiple SurfacePools: Main thread painting and the non-WebRender compositors create a new pool per window, and WebRender creates one shared pool across all windows. The non-WebRender users set the pool size limit to zero, i.e. no recycling across paints. This preserves the pre-existing behavior.
WebRender's pool size is configurable with the gfx.webrender.compositor.surface-pool-size pref.
Every window holds on to a SurfacePoolHandle. A SurfacePoolHandle has an owning reference to the pool, via a surface pool wrapper. Once all handles are gone, the surface pool goes away, too.
The SurfacePool holds on to IOSurfaces and MozFramebuffers. Both are created on demand, independently, but are associated with each other.
A given NativeLayer uses only one surface pool handle during its lifetime. The native layer no longer influences which GLContext its framebuffers are created for; the GL context is now managed by the surface pool handle.
As a result, a NativeLayer can no longer change which GLContext its framebuffers are created by.
So in the future, if we ever need to migrate a window frome one GLContext to another, we will need to recreate the NativeLayers inside it. I think that's ok.
Differential Revision: https://phabricator.services.mozilla.com/D54859
--HG--
extra : moz-landing-system : lando
This code was trying to not render things upside down when rendering to offscreen contexts.
But this code path was never used and it wasn't fully working.
I would like to make our compositor contexts go through GLContextProviderCGL::CreateHeadless,
which creates an "offscreen" GLContext, so now this broken code is kicking in. Let's remove it.
Differential Revision: https://phabricator.services.mozilla.com/D52917
--HG--
extra : moz-landing-system : lando
wl_egl_window size must exactly march GL rendering pipeline setting.
Compositor and widget can have different window sizes during window resize when widget
is resized faster than layout can render. Firefox window is rendered misplaced then
and it's "jumping" as layout size is behind toolkit size.
Differential Revision: https://phabricator.services.mozilla.com/D49136
--HG--
extra : moz-landing-system : lando
wl_egl_window size must exactly march GL rendering pipeline setting.
Compositor and widget can have different window sizes during window resize when widget
is resized faster than layout can render. Firefox window is rendered misplaced then
and it's "jumping" as layout size is behind toolkit size.
Differential Revision: https://phabricator.services.mozilla.com/D49136
--HG--
extra : moz-landing-system : lando
WaylandDMABufSurface is used as a backend for WaylandDMABUFTextureHostOGL.
Pixel data of WaylandDMABufSurface are located at GPU memory and are
binded from WaylandDMABUFTextureClientOGL.
WaylandDMABufSurface can be binded as EGLImage so EGLImageTextureSource is used.
Depends on D46836
Differential Revision: https://phabricator.services.mozilla.com/D46837
--HG--
extra : moz-landing-system : lando
WaylandDMABufSurface is used as a backend for WaylandDMABUFTextureClientOGL.
Pixel data of WaylandDMABufSurface are located at GPU memory and can be
shared by processes.
Differential Revision: https://phabricator.services.mozilla.com/D46836
--HG--
extra : moz-landing-system : lando
WaylandDMABufSurface is used as a backend for WaylandDMABUFTextureHostOGL.
Pixel data of WaylandDMABufSurface are located at GPU memory and are
binded from WaylandDMABUFTextureClientOGL.
WaylandDMABufSurface can be binded as EGLImage so EGLImageTextureSource is used.
Depends on D46836
Differential Revision: https://phabricator.services.mozilla.com/D46837
--HG--
extra : moz-landing-system : lando
WaylandDMABufSurface is used as a backend for WaylandDMABUFTextureClientOGL.
Pixel data of WaylandDMABufSurface are located at GPU memory and can be
shared by processes.
Differential Revision: https://phabricator.services.mozilla.com/D46836
--HG--
extra : moz-landing-system : lando
This makes the fill rate numbers which are displayed in the FPS overlay a lot more reasonable.
It also requires the TransformAndClipBounds fix from bug 1578045 for correct numbers.
Depends on D44337
Differential Revision: https://phabricator.services.mozilla.com/D44338
--HG--
extra : moz-landing-system : lando
CompositingRenderTargetOGL objects are no longer reused between frames. They are
recreated each frame around a reused framebuffer. This lets us remove the
SetOrigin method again, because we specify the right render target origin on
creation.
Depends on D44328
Differential Revision: https://phabricator.services.mozilla.com/D44329
--HG--
extra : moz-landing-system : lando