[go: up one dir, main page]

Reland "Roll third_party/glmark2/src/ ca8de51fe..2054465f6 (77 commits)"

This is a reland of commit 68b594e859f036b01974f78f8ddca8c419bc8ce3

Includes fixes to glmark2Benchmark.cpp to parse updated output.

Original change's description:
> Roll third_party/glmark2/src/ ca8de51fe..2054465f6 (77 commits)
>
> https://chromium.googlesource.com/external/github.com/glmark2/glmark2/+log/ca8de51fedb7..2054465f6f7c
>
> $ git log ca8de51fe..2054465f6 --date=short --no-merges --format='%ad %ae %s'
> 2024-04-25 alexandros.frantzis Use std::filesystem throughout the codebase
> 2024-04-25 alexandros.frantzis android: Build native code with C++17
> 2024-04-25 alexandros.frantzis Doc: Recommend meson for building win32 flavors
> 2024-04-25 alexandros.frantzis github: Build win32 flavors with msvc in CI
> 2024-04-25 alexandros.frantzis github: Build win32 flavors with mingw in CI
> 2024-04-25 alexandros.frantzis include/getopt: Always use non-const char array to avoid MSVC errors
> 2024-04-25 alexandros.frantzis libmatrix: Add utility function to get idle time
> 2024-04-25 alexandros.frantzis libmatrix: Add utility function to get process times
> 2024-04-24 alexandros.frantzis libmatrix: Add utility function to get the number of processors
> 2024-04-25 alexandros.frantzis libmatrix: Use C++ std::chrono instead of clock_gettime
> 2024-04-25 alexandros.frantzis libmatrix: Use C++17 std::filesystem instead of dirent
> 2024-04-25 alexandros.frantzis Build: Add support for win32 flavors in meson
> 2024-04-24 alexandros.frantzis libmatrix: Provide a copy of the va_list to __android_log_vprint
> 2024-04-13 kode54 NativeStateX11: Fix WM_DELETE_WINDOW handling
> 2024-02-15 alexandros.frantzis NativeStateWayland: Explicitly destroy all Wayland resources at shutdown
> 2024-02-15 alexandros.frantzis Explicitly release GL related resources at shutdown
> 2023-06-03 prlw1 src/meson.build: add x11 dependency to glx
> 2024-02-07 timchen021 Fix memory leaks using smart pointers
> 2024-01-12 daniel.levin Add missing includes in scene-collection.h
> 2023-11-01 alexandros.frantzis GLVisualConfig: By default don't care about the stencil config component
> 2023-11-01 alexandros.frantzis Options,GLStateEGL,GLStateGLX: Add option to require a good visual config
> 2023-07-26 abs GLStateEGL,GLStateGLX: Change failure to get a "good" visual config to warning
> 2023-11-01 alexandros.frantzis libmatrix: Add Log::warning() function
> 2023-05-20 prlw1 meson.build: fix build and avoid sigsegv
> 2023-05-03 ofourdan NativeStateX11: Add winsys option for position
> 2023-01-19 alexandros.frantzis Build,Doc: Update files for 2023.01 release
> 2023-01-19 alexandros.frantzis NativeStateMir: Remove Mir/mirclient support
> 2023-01-03 alexandros.frantzis ResultsFile: Support storing results in an XML file
> 2023-01-03 alexandros.frantzis ResultsFile: Support storing results in a CSV file
> 2023-01-03 alexandros.frantzis Options,ResultsFile: Add option to set the results file
> 2023-01-03 alexandros.frantzis Introduce infrastructure to support saving results to a file
> 2023-01-03 alexandros.frantzis CanvasGeneric: Store individual info elements in separate strings
> 2023-01-03 alexandros.frantzis MainLoop: Store indivitual result values in separate strings
> 2023-01-03 alexandros.frantzis Scene: Remove trailing ':' from scene info string
> 2023-01-04 alexandros.frantzis SceneTerrain: Silence unused variable warning
> 2022-12-21 pierre-yves.mordret NativeStateGBM: Lock and release the front buffer on flip
> 2022-12-21 alexandros.frantzis MainLoop,Scene: Support reporting shader compilation time
> 2022-12-20 alexandros.frantzis MainLoop,Scene: Add busy percentage in CPU time results
> 2022-12-20 alexandros.frantzis MainLoop,Scene: Support reporting CPU time results
> 2022-12-20 alexandros.frantzis Options: Introduce option to specify benchmark results to show
> 2022-12-20 alexandros.frantzis Scene: Update elapsed times when a benchmark finishes
> 2022-12-19 alexandros.frantzis Scene: Introduce struct to keep track of elapsed time
> 2022-12-15 alexandros.frantzis Scene: Introduce infrastructure for more complex scene stats
> 2022-12-15 alexandros.frantzis Scene: Move common preparation logic to Scene::prepare
> 2022-12-13 alexandros.frantzis Scene: Introduce non-virtual methods to prepare and finish a scene for benchmark
> 2022-12-08 alexandros.frantzis GLVisualConfig: Support specifying the config id in --visual-config
> 2022-12-08 alexandros.frantzis libmatrix: Support prefix dependent input conversions from string
> 2022-12-08 alexandros.frantzis GLStateEGL,GLStateGLX: Fail if no suitable config is found
> 2022-12-08 alexandros.frantzis GLStateEGL,GLStateGLX: Don't limit the configs passed to our selection mechanism
> 2022-12-08 alexandros.frantzis GLVisualConfig: Penalize configs with components smaller than requested
> 2022-11-16 alexandros.frantzis github: Build x11-gl-egl flavor in CI
> 2022-11-14 rilian-la-te build: Add x11-gl-egl flavor
> 2022-11-10 alexandros.frantzis GLStateGLX: Support multisampled configs
> 2022-11-10 l.stach GLStateEGL: Support multisampled configs
> 2022-11-10 l.stach GLVisualConfig: Add multisampling support
> 2022-09-02 120989324 Add missing newline at end of log messages
> 2022-11-10 alexandros.frantzis NativeStateDRM,NativeStateGBM: Support configuring the DRM device
> 2022-11-10 alexandros.frantzis Options: Support passing window system specific options
> 2022-04-23 nunes.erico NativeStateGBM: Add GBM offscreen backend
> 2022-07-07 wuqianhai SceneJellyfish: Fix memory leak
> 2022-07-07 wuqianhai SceneRefract: Fix texture leak
> 2022-07-07 wuqianhai SceneIdeas: Fix texture leak
> 2022-06-14 Martin.Jansa waflib: fix compatibility with python-3.11
> 2022-05-12 jeffy.chen NativeStateDRM: Honor visual configuration
> 2022-05-13 alexandros.frantzis GLStateEGL,GLStateGLX: Use SwapInterval 1 for FIFO swap mode
> 2022-04-15 alexandros.frantzis NativeStateDrm: Implement swap interval 0
> 2022-02-14 alexandros.frantzis github: Run apt-get update to get latest packages
> 2022-02-14 alexandros.frantzis CanvasGeneric,CanvasAndroid: Display surface config info
> 2022-02-14 alexandros.frantzis Options: Support --version command line argument
> 2022-02-14 alexandros.frantzis libmatrix: Add missing <utility> include
> 2022-02-10 hillma libmatrix: avoid -Wimplicit-fallthrough
> 2021-12-23 alexandros.frantzis Build,Doc: Update files for 2021.12 release
> 2021-12-23 alexandros.frantzis NativeStateDrm: Fix crash when we can't become DRM master
> 2021-09-30 jf android: Fix benchmark parameter edition
> 2021-08-30 alexandros.frantzis Use highp precision modifier only on GLES
> 2021-08-30 alexandros.frantzis GLStateEGL: Support EGL versions < 1.4
> 2021-04-11 maahiuzeon Fix model loading on big endian.
>
> Created with:
>   roll-dep third_party/glmark2/src
>
> Bug: chromium:40263312
> No-Presubmit: true
> Change-Id: Ifee506badac67ff5af57605994daff01278c6d56
> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6162277
> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>
> Auto-Submit: Takuto Ikuta <tikuta@chromium.org>
> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>

Test: angle_perftests --gtest_filter="*GLMark2Benchmark*"
Bug: chromium:40263312
Change-Id: I54d8982cb37e488f80b7511ad0111d1ff111f004
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6174747
Reviewed-by: Roman Lavrov <romanl@google.com>
Commit-Queue: Cody Northrop <cnorthrop@google.com>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
4 files changed
tree: 3669427ec7b068a7571a26d44ced848b325d8f21
  1. android/
  2. build_overrides/
  3. doc/
  4. extensions/
  5. gni/
  6. include/
  7. infra/
  8. samples/
  9. scripts/
  10. src/
  11. third_party/
  12. tools/
  13. util/
  14. .clang-format
  15. .git-blame-ignore-revs
  16. .gitattributes
  17. .gitignore
  18. .gitmodules
  19. .gn
  20. .style.yapf
  21. .vpython
  22. .vpython3
  23. .yapfignore
  24. additional_readme_paths.json
  25. Android.mk
  26. AUTHORS
  27. BUILD.gn
  28. codereview.settings
  29. CONTRIBUTORS
  30. DEPS
  31. DIR_METADATA
  32. dotfile_settings.gni
  33. LICENSE
  34. OWNERS
  35. PRESUBMIT.py
  36. README.chromium
  37. README.md
  38. WATCHLISTS
README.md

ANGLE - Almost Native Graphics Layer Engine

The goal of ANGLE is to allow users of multiple operating systems to seamlessly run WebGL and other OpenGL ES content by translating OpenGL ES API calls to one of the hardware-supported APIs available for that platform. ANGLE currently provides translation from OpenGL ES 2.0, 3.0 and 3.1 to Vulkan, desktop OpenGL, OpenGL ES, Direct3D 9, and Direct3D 11. Future plans include ES 3.2, translation to Metal and MacOS, Chrome OS, and Fuchsia support.

Level of OpenGL ES support via backing renderers

Direct3D 9Direct3D 11Desktop GLGL ESVulkanMetal
OpenGL ES 2.0completecompletecompletecompletecompletecomplete
OpenGL ES 3.0completecompletecompletecompletecomplete
OpenGL ES 3.1incompletecompletecompletecomplete
OpenGL ES 3.2in progressin progresscomplete

Additionally, OpenGL ES 1.1 is implemented in the front-end using OpenGL ES 3.0 features. This version of the specification is thus supported on all platforms specified above that support OpenGL ES 3.0 with known issues.

Platform support via backing renderers

Direct3D 9Direct3D 11Desktop GLGL ESVulkanMetal
Windowscompletecompletecompletecompletecomplete
Linuxcompletecomplete
Mac OS Xcompletecomplete [1]
iOScomplete [2]
Chrome OScompleteplanned
Androidcompletecomplete
GGP (Stadia)complete
Fuchsiacomplete

[1] Metal is supported on macOS 10.14+

[2] Metal is supported on iOS 12+

ANGLE v1.0.772 was certified compliant by passing the OpenGL ES 2.0.3 conformance tests in October 2011.

ANGLE has received the following certifications with the Vulkan backend:

  • OpenGL ES 2.0: ANGLE 2.1.0.d46e2fb1e341 (Nov, 2019)
  • OpenGL ES 3.0: ANGLE 2.1.0.f18ff947360d (Feb, 2020)
  • OpenGL ES 3.1: ANGLE 2.1.0.f5dace0f1e57 (Jul, 2020)
  • OpenGL ES 3.2: ANGLE 2.1.2.21688.59f158c1695f (Sept, 2023)

ANGLE also provides an implementation of the EGL 1.5 specification.

ANGLE is used as the default WebGL backend for both Google Chrome and Mozilla Firefox on Windows platforms. Chrome uses ANGLE for all graphics rendering on Windows, including the accelerated Canvas2D implementation and the Native Client sandbox environment.

Portions of the ANGLE shader compiler are used as a shader validator and translator by WebGL implementations across multiple platforms. It is used on Mac OS X, Linux, and in mobile variants of the browsers. Having one shader validator helps to ensure that a consistent set of GLSL ES shaders are accepted across browsers and platforms. The shader translator can be used to translate shaders to other shading languages, and to optionally apply shader modifications to work around bugs or quirks in the native graphics drivers. The translator targets Desktop GLSL, Vulkan GLSL, Direct3D HLSL, and even ESSL for native GLES2 platforms.

OpenCL Implementation

In addition to OpenGL ES, ANGLE also provides an optional OpenCL runtime built into the same output GLES lib.

This work/effort is currently work-in-progress/experimental.

This work provides the same benefits as the OpenGL implementation, having OpenCL APIs be translated to other HW-supported APIs available on that platform.

Level of OpenCL support via backing renderers

VulkanOpenCL
OpenCL 1.0in progressin progress
OpenCL 1.1in progressin progress
OpenCL 1.2in progressin progress
OpenCL 3.0in progressin progress

Each supported backing renderer above ends up being an OpenCL Platform for the user to choose from.

The OpenCL backend is a “passthrough” implementation which does not perform any API translation at all, instead forwarding API calls to other OpenCL driver(s)/implementation(s).

OpenCL also has an online compiler component to it that is used to compile OpenCL C source code at runtime (similarly to GLES and GLSL). Depending on the chosen backend(s), compiler implementations may vary. Below is a list of renderers and what OpenCL C compiler implementation is used for each:

  • Vulkan : clspv
  • OpenCL : Compiler is part of the native driver

Sources

ANGLE repository is hosted by Chromium project and can be browsed online or cloned with

git clone https://chromium.googlesource.com/angle/angle

Building

View the Dev setup instructions.

Contributing