Reland "EGL: Move initialization of EGL inside a DisplayEGL class"

This is a reland of commit 9fba7ea8e943cb9396c356c4becb6842ef0710d5

Two fixes were needed for this CL:

 - Do not call eglTerminate in Dawn as EGL may return the same display
   multiple times with eglGetDisplay, such that terminating the display
   in Dawn could terminate the display used by someone else as well.
   (This is a known design bug in EGL unfortunately).
 - Explicitly pass in the EGLDisplay in Chromium during GPU info
   collection. Previously Dawn tried to get a display using
   eglGetCurrentDisplay() but this seems brittle compared to passing the
   display explicitly.

Original change's description:
> EGL: Move initialization of EGL inside a DisplayEGL class
>
> The moves initialization and checks of EGLDisplays to be in its own
> class instead of split across opengl::Backend and
> opengl::PhysicalDevice. That class also contains data that's per EGL
> connection such as the EGLDisplay and the procs. This removes the need
> for opengl::Backend to return a single PhysicalDevice ever.
>
> The ContextEGL class now only deals with creating context and doing
> MakeCurrent, with some of its validation checks moved to classes using
> it. This will make it easier to dynamically handle EGL extension being
> present (e.g. to support webgpu.h when EGL_KHR_image_base is not present).
>
> Finally the encapsulation in these classes is step towards supporting
> more embedder APIs in the future (like GLX).
>
> Bug: 344814083
> Bug: 42241384
> Change-Id: I34d7c24c518a791da920a640a5764458073f976e
> Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/193160
> Commit-Queue: Corentin Wallez <cwallez@chromium.org>
> Reviewed-by: Austin Eng <enga@chromium.org>
> Reviewed-by: Stephen White <senorblanco@chromium.org>

Bug: 344814083
Bug: 42241384
Change-Id: I76f904be88696a6a90b21e2c55637f3451054c00
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/194780
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
11 files changed
tree: ec51b9161e360c12fd277fede33fcf35a38df980
  1. .github/
  2. .vscode/
  3. build_overrides/
  4. docs/
  5. generator/
  6. include/
  7. infra/
  8. scripts/
  9. src/
  10. test/
  11. third_party/
  12. tools/
  13. webgpu-cts/
  14. .bazelrc
  15. .clang-format
  16. .clang-tidy
  17. .gitattributes
  18. .gitignore
  19. .gitmodules
  20. .gn
  21. AUTHORS
  22. BUILD.bazel
  23. BUILD.gn
  24. CMakeLists.txt
  25. CMakeSettings.json
  26. CODE_OF_CONDUCT.md
  27. codereview.settings
  28. CONTRIBUTING.md
  29. CPPLINT.cfg
  30. DEPS
  31. DIR_METADATA
  32. go.mod
  33. go.sum
  34. go_presubmit_support.py
  35. LICENSE
  36. OWNERS
  37. PRESUBMIT.py
  38. README.chromium
  39. README.md
  40. WORKSPACE.bazel
README.md

Build Status Matrix Space

Dawn, a WebGPU implementation

Dawn is an open-source and cross-platform implementation of the WebGPU standard. More precisely it implements webgpu.h that is a one-to-one mapping with the WebGPU IDL. Dawn is meant to be integrated as part of a larger system and is the underlying implementation of WebGPU in Chromium.

Dawn provides several WebGPU building blocks:

  • WebGPU C/C++ headers that applications and other building blocks use.
    • The webgpu.h version that Dawn implements.
    • A C++ wrapper for the webgpu.h.
  • A “native” implementation of WebGPU using platforms' GPU APIs: D3D12, Metal, Vulkan and OpenGL. See per API support for more details.
  • A client-server implementation of WebGPU for applications that are in a sandbox without access to native drivers
  • Tint is a compiler for the WebGPU Shader Language (WGSL) that can be used in standalone to convert shaders from and to WGSL.

Helpful links:

Documentation table of content

Developer documentation:

User documentation: (TODO, figure out what overlaps with the webgpu.h docs)

License

BSD 3-Clause License, please see LICENSE.

Disclaimer

This is not an officially supported Google product.