ANGLE provides an implementation of OpenGL ES on top of other APIs (e.g. DirectX11, Vulkan). ANGLE uses (i.e. depends upon) other third-party software that comes from different repositories. ANGLE specifies its dependencies on a specific version of each of these other repositories in the ANGLE DEPS file.
Chromium relies upon ANGLE for hardware accelerated rendering and WebGL support. Chromium similarly specifies its dependency on a specific version of ANGLE in the Chromium repository's src/DEPS file.
This document describes how to update those dependencies, and, if necessary, create an ANGLE branch to correspond to a branched release of Chrome.
ANGLE‘s commit queue also runs browser-level tests which are hosted in the Chromium repository. To reduce the chance of a Chromium-side change breaking ANGLE’s CQ, the version of Chromium against which ANGLE changes is also snapshotted, and rolled forward into ANGLE with appropriate testing.
At present, autorollers manage both the ANGLE roll into Chromium, and the Chromium roll into ANGLE. There is also an autoroller for ANGLE into Android AOSP. All of the ANGLE-related autorollers are documented in the ANGLE Wrangling documentation.
As mentioned above, dependencies are encoded in DEPS
files. The process to update a given dependency is as follows:
DEPS
file that defines the dependencygit log
on the appropriate branch of the repository, or via a public repository viewerhttps://chromium.googlesource.com/angle/angle/+/<branch name>/
-- including the terminating forward slash. (e.g. https://chromium.googlesource.com/angle/angle/+/main/
)ANGLE and other Google projects (e.g. Skia, Chrome) use the open-source Vulkan Memory Allocator (VMA) library. As with with other external repositories, these projects do not directly use the upstream Vulkan Memory Allocator repository. Instead, a Google-local repository is used, which contains Google-local changes and fixes (e.g. changes to BUILD.gn
). This Google-local repository repository contains the following key branches:
upstream/master
is automatically mirrored with the contents of the upstream VMA repositorymain
is manually curated by Google, with a combination of upstream and Google-local changesANGLE's DEPS
file points to a git SHA-1 revision of the main
branch.
Manual rolls of the main
branch currently involve rebasing all of the Google-local changes on top of newer upstream changes. The current process (done in 2022) is to:
Manual rolls of which SHA-1 revision the ANGLE's DEPS
file points to is done via the process outlined above. Within an ANGLE build, you can navigate to the third_party/vulkan_memory_allocator
directory, check out the main
branch, and use git log
to select the desired Git revision. Please note that cross-project coordination may be required when rolling VMA, as some projects (e.g. Chrome) builds itself with a single VMA version across Chrome, ANGLE, and Skia.
Note: When ANGLE is AutoRolled to the Android AOSP source tree, Google-local changes to the VMA BUILD.gn
file will be converted to the ANGLE Android.bp
file.
Sometimes, individual changes to ANGLE are needed for a release of Chrome which has already been branched. If this is the case, a branch of ANGLE should be created to correspond to the Chrome release version, so that Chrome may incorporate only these changes, and not everything that has been committed since the version on which Chrome depended at branch time. Please note: Only ANGLE admins can create a new branch. To create a branch of ANGLE for a branched Chrome release:
git checkout -b mybranch 4df02c1ed5e97dd54576b06964b1da67ea30238e
git push origin mybranch:refs/heads/chrome_m34