[go: up one dir, main page]

blob: 50e45a54a10771db3adca8634097d5fb84fb2417 [file] [log] [blame] [view]
anatoly techtonik093a4c32016-05-29 09:00:061# ANGLE - Almost Native Graphics Layer Engine
2
Jamie Madill950ee3c2016-08-10 19:46:073The goal of ANGLE is to allow users of multiple operating systems to seamlessly run WebGL and other
4OpenGL ES content by translating OpenGL ES API calls to one of the hardware-supported APIs available
Shahbaz Youssefi475c5272020-02-20 03:06:425for that platform. ANGLE currently provides translation from OpenGL ES 2.0, 3.0 and 3.1 to Vulkan,
6desktop OpenGL, OpenGL ES, Direct3D 9, and Direct3D 11. Future plans include ES 3.2, translation to
7Metal and MacOS, Chrome OS, and Fuchsia support.
Geoff Langa59b8ba2014-08-27 15:47:148
Jamie Madill950ee3c2016-08-10 19:46:079### Level of OpenGL ES support via backing renderers
Shannon Woodsfe80aba2015-11-06 03:11:4310
Yuxin Huf3af2552023-10-24 17:21:2911| | Direct3D 9 | Direct3D 11 | Desktop GL | GL ES | Vulkan | Metal |
12|----------------|:-------------:|:----------------:|:--------------:|:-------------:|:--------:|:-------------:|
13| OpenGL ES 2.0 | complete | complete | complete | complete | complete | complete |
14| OpenGL ES 3.0 | | complete | complete | complete | complete | complete |
15| OpenGL ES 3.1 | | [incomplete][ES31OnD3D] | complete | complete | complete | |
16| OpenGL ES 3.2 | | | in progress | in progress | complete | |
Shannon Woods4ed53a52015-11-30 20:53:5217
Shahbaz Youssefia59430b2023-01-11 19:49:1418Additionally, OpenGL ES 1.1 is implemented in the front-end using OpenGL ES 3.0 features. This
19version of the specification is thus supported on all platforms specified above that support OpenGL
20ES 3.0 with [known issues][ES1].
21
22[ES31OnD3D]: doc/ES31StatusOnD3D11.md
23[ES1]: doc/ES1Status.md
24
Jamie Madill950ee3c2016-08-10 19:46:0725### Platform support via backing renderers
Shannon Woodsfe80aba2015-11-06 03:11:4326
Geoff Lang9aadc7a2023-07-13 15:44:5127| | Direct3D 9 | Direct3D 11 | Desktop GL | GL ES | Vulkan | Metal |
28|-------------:|:--------------:|:--------------:|:-------------:|:-----------:|:-----------:|:--------------------:|
29| Windows | complete | complete | complete | complete | complete | |
30| Linux | | | complete | | complete | |
31| Mac OS X | | | complete | | | complete [1] |
32| iOS | | | | | | complete [2] |
33| Chrome OS | | | | complete | planned | |
34| Android | | | | complete | complete | |
Geoff Lang9aadc7a2023-07-13 15:44:5135| Fuchsia | | | | | complete | |
36
37[1] Metal is supported on macOS 10.14+
38
39[2] Metal is supported on iOS 12+
Geoff Langa59b8ba2014-08-27 15:47:1440
Tim Van Patten97d54a02020-07-09 20:33:2641ANGLE v1.0.772 was certified compliant by passing the OpenGL ES 2.0.3 conformance tests in October 2011.
42
43ANGLE has received the following certifications with the Vulkan backend:
44* OpenGL ES 2.0: ANGLE 2.1.0.d46e2fb1e341 (Nov, 2019)
45* OpenGL ES 3.0: ANGLE 2.1.0.f18ff947360d (Feb, 2020)
46* OpenGL ES 3.1: ANGLE 2.1.0.f5dace0f1e57 (Jul, 2020)
Yuxin Huf3af2552023-10-24 17:21:2947* OpenGL ES 3.2: ANGLE 2.1.2.21688.59f158c1695f (Sept, 2023)
Tim Van Patten97d54a02020-07-09 20:33:2648
Mohan Maiyad867ddb2022-03-16 16:25:0349ANGLE also provides an implementation of the EGL 1.5 specification.
Geoff Langa59b8ba2014-08-27 15:47:1450
Jamie Madill950ee3c2016-08-10 19:46:0751ANGLE is used as the default WebGL backend for both Google Chrome and Mozilla Firefox on Windows
52platforms. Chrome uses ANGLE for all graphics rendering on Windows, including the accelerated
53Canvas2D implementation and the Native Client sandbox environment.
54
55Portions of the ANGLE shader compiler are used as a shader validator and translator by WebGL
56implementations across multiple platforms. It is used on Mac OS X, Linux, and in mobile variants of
57the browsers. Having one shader validator helps to ensure that a consistent set of GLSL ES shaders
58are accepted across browsers and platforms. The shader translator can be used to translate shaders
59to other shading languages, and to optionally apply shader modifications to work around bugs or
Shahbaz Youssefi475c5272020-02-20 03:06:4260quirks in the native graphics drivers. The translator targets Desktop GLSL, Vulkan GLSL, Direct3D
61HLSL, and even ESSL for native GLES2 platforms.
Geoff Langa59b8ba2014-08-27 15:47:1462
Austin Annestrand975e9412024-06-13 22:22:1163### OpenCL Implementation
64
65In addition to OpenGL ES, ANGLE also provides an optional `OpenCL` runtime built into the same
66output GLES lib.
67
68This work/effort is currently **work-in-progress/experimental**.
69
70This work provides the same benefits as the OpenGL implementation, having OpenCL APIs be
71translated to other HW-supported APIs available on that platform.
72
73### Level of OpenCL support via backing renderers
74
75| | Vulkan | OpenCL |
76|-------------|:-----------:|:-----------:|
77| OpenCL 1.0 | in progress | in progress |
78| OpenCL 1.1 | in progress | in progress |
79| OpenCL 1.2 | in progress | in progress |
80| OpenCL 3.0 | in progress | in progress |
81
82Each supported backing renderer above ends up being an OpenCL `Platform` for the user to choose from.
83
84The `OpenCL` backend is a "passthrough" implementation which does not perform any API translation
85at all, instead forwarding API calls to other OpenCL driver(s)/implementation(s).
86
87OpenCL also has an online compiler component to it that is used to compile `OpenCL C` source code at runtime
88(similarly to GLES and GLSL). Depending on the chosen backend(s), compiler implementations may vary. Below is
89a list of renderers and what OpenCL C compiler implementation is used for each:
90
91- `Vulkan` : [clspv](https://github.com/google/clspv/tree/main)
92- `OpenCL` : Compiler is part of the native driver
93
anatoly techtonik093a4c32016-05-29 09:00:0694## Sources
Shannon Woods4ed53a52015-11-30 20:53:5295
anatoly techtonik093a4c32016-05-29 09:00:0696ANGLE repository is hosted by Chromium project and can be
97[browsed online](https://chromium.googlesource.com/angle/angle) or cloned with
98
99 git clone https://chromium.googlesource.com/angle/angle
100
101
102## Building
103
Frank Henigmana7f97a22018-08-21 04:04:05104View the [Dev setup instructions](doc/DevSetup.md).
Geoff Langa59b8ba2014-08-27 15:47:14105
anatoly techtonik093a4c32016-05-29 09:00:06106## Contributing
107
Geoff Langa59b8ba2014-08-27 15:47:14108* Join our [Google group](https://groups.google.com/group/angleproject) to keep up to date.
YuxinHubf744752021-10-04 23:57:15109* Join us on [Slack](https://chromium.slack.com) in the #angle channel. You can
Ash Burnac9b2702021-12-09 23:19:33110 follow the instructions on the [Chromium developer page](https://www.chromium.org/developers/slack)
YuxinHubf744752021-10-04 23:57:15111 for the steps to join the Slack channel. For Googlers, please follow the
112 instructions on this [document](https://docs.google.com/document/d/1wWmRm-heDDBIkNJnureDiRO7kqcRouY2lSXlO6N2z6M/edit?usp=sharing)
113 to use your google or chromium email to join the Slack channel.
Jamie Madillcff54d62018-05-18 12:39:34114* [File bugs](http://anglebug.com/new) in the [issue tracker](https://bugs.chromium.org/p/angleproject/issues/list) (preferably with an isolated test-case).
anatoly techtonik093a4c32016-05-29 09:00:06115* [Choose an ANGLE branch](doc/ChoosingANGLEBranch.md) to track in your own project.
116
anatoly techtonikc3c14092016-06-03 06:49:02117
118* Read ANGLE development [documentation](doc).
Frank Henigmanc6777952017-11-27 05:15:54119* Look at [pending](https://chromium-review.googlesource.com/q/project:angle/angle+status:open)
120 and [merged](https://chromium-review.googlesource.com/q/project:angle/angle+status:merged) changes.
anatoly techtonikc3c14092016-06-03 06:49:02121* Become a [code contributor](doc/ContributingCode.md).
122* Use ANGLE's [coding standard](doc/CodingStandard.md).
123* Learn how to [build ANGLE for Chromium development](doc/BuildingAngleForChromiumDevelopment.md).
124* Get help on [debugging ANGLE](doc/DebuggingTips.md).
Shahbaz Youssefib7b46ee2024-08-05 14:22:48125* Go through [ANGLE's orientation](doc/Orientation.md) and sift through [issues](https://issues.angleproject.org/). If you decide to take on any task, write a comment so you can get in touch with us, and more importantly, set yourself as the "owner" of the bug. This avoids having multiple people accidentally working on the same issue.
anatoly techtonikc3c14092016-06-03 06:49:02126
127
Geoff Langa59b8ba2014-08-27 15:47:14128* Read about WebGL on the [Khronos WebGL Wiki](http://khronos.org/webgl/wiki/Main_Page).
Shahbaz Youssefib7b46ee2024-08-05 14:22:48129* Learn about the internals of ANGLE:
130 * [Overview](https://docs.google.com/presentation/d/1qal4GgddwlUw-TPaXRYeTWLXUoaemgggBuTfg6_rwjU) with a focus on the Vulkan backend (2022)
131 * A [short presentation](https://youtu.be/QrIKdjmpmaA) on the Vulkan back-end (2018).
132 * Historical [presentation](https://docs.google.com/presentation/d/1CucIsdGVDmdTWRUbg68IxLE5jXwCb2y1E9YVhQo0thg/pub?start=false&loop=false) on the evolution of ANGLE and its use in Chromium
133 * Historical [presentation](https://drive.google.com/file/d/0Bw29oYeC09QbbHoxNE5EUFh0RGs/view?usp=sharing&resourcekey=0-CNvGnQGgFSvbXgX--Y_Iyg) with a focus on D3D
134 * The details of the initial implementation of ANGLE in the [OpenGL Insights chapter on ANGLE](http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-ANGLE.pdf) (these details are severely out-of-date, and this reference is listed here for historical reference only)
Jamie Madill2682b5a2019-10-07 19:13:23135* Read design docs on the [Vulkan back-end](src/libANGLE/renderer/vulkan/README.md)
Jamie Madill457588e2020-03-16 18:11:33136* Read about ANGLE's [testing infrastructure](infra/README.md)
Jamie Madill35708f92021-09-30 15:54:34137* View information on ANGLE's [supported extensions](doc/ExtensionSupport.md)
Shannon Woodsfe80aba2015-11-06 03:11:43138* If you use ANGLE in your own project, we'd love to hear about it!