libGPULayers provides tooling for creating a skeleton implementation of a graphics API layer driver. Over time, we plan to add a set of useful ready-to-use diagnostic layers that have been built using the tooling.
Layers drivers provide a standard mechanism to inject diagnostic functionality between an application and the underlying graphics driver. Layer drivers intercept the graphics API calls from the application, perform their diagnostic function, and then make any necessary API calls into the underlying graphics driver to actually perform the rendering operations. The ability to see, and change, everything that the native driver sees makes layers an exceptionally powerful tool for debugging functional and performance issues.
The Vulkan API defines a standard layer driver mechanism. The API uses layers to implement API parameter validation and error checking, but they are a general purpose mechanism for all kinds of developer tooling.
The OpenGL ES API does not have layer drivers as a standard feature. However, since Android 10, the Android OpenGL ES loader has implemented support for OpenGL ES layers, so we can access the same methodology benefits as Vulkan.
We support many application developers during their development cycle. We rarely get access to application source code, so layer drivers provide us a convenient way for us to make modifications to API behavior. We use this capability to triage bugs and to test the impact of application API usage fixes and optimizations, and wanted to share the capability with our wider developer ecosystem.
This project has two main goals:
- Firstly, it provides developers with access to the same easy-to-use layer generation tooling that we use internally, allowing them to perform their own experiments using layers.
- Secondly, we will use this layer generation to provide a number of pre-built layers than can be used during development to debug and optimize application rendering.
This library is currently tested on devices running Android and using Arm® Immortalis™ and Arm Mali™ GPUs. Contributions adding support for other platforms is welcome.
This project is licensed under the MIT license. By downloading any component from this repository you acknowledge that you accept terms specified in the LICENSE.txt file.
- Building a new layer
- Running using a layer on Android
- Running using a layer on Linux
- Frequently asked questions
If you have issues with the layer framework, or the prebuilt layers, please raise them in the project's GitHub issue tracker.
If you have any questions about Arm GPUs, application development for Arm GPUs, or general mobile graphics development or technology please submit them on the Arm Community graphics forums.
Copyright © 2024, Arm Limited and contributors.