11# About
22
3- libGPULayers provides tooling to rapidly create new Vulkan layer drivers,
4- allowing developers to quickly generate new layers that can be used for
5- ad hoc experiments during development.
3+ libGPULayers provides tooling to create new Vulkan layer drivers, allowing
4+ you to quickly generate new layers suitable for creation of new developer tools
5+ or for ad hoc experiments during development.
66
77In addition, we provide a number of pre-built layers that have been built
8- using these tools . These layers can be used as standalone tools in their
9- own right, and some can be used alongside other Arm tools such as Arm
10- Performance Studio.
8+ using this framework . These layers might be used as standalone tools in their
9+ own right, or might be used alongside other Arm tools such as
10+ [ Arm Performance Studio] [ 2 ] .
1111
1212## What are layer drivers?
1313
14- Layers drivers provide a standard mechanism to inject diagnostic functionality
14+ Layer drivers provide a standard mechanism to inject diagnostic functionality
1515between an application and the underlying graphics driver. Layer drivers
1616intercept the graphics API calls from the application, perform their diagnostic
17- function, and then make any necessary API calls into the underlying graphics
18- driver to actually perform the rendering operations . The ability to see, and
19- change, everything that the native driver sees makes layers an exceptionally
20- powerful tool for debugging functional and performance issues.
17+ function, and then call into the underlying graphics driver to actually perform
18+ the requested operation . The ability to see, and change, the calls into the
19+ native driver makes layers an exceptionally powerful tool for debugging both
20+ functional and performance issues.
2121
22- The Vulkan API defines a standard layer driver mechanism. The API uses layers
23- to implement API parameter validation and error checking, but they are also a
24- general purpose mechanism for all kinds of developer tooling.
22+ Layer drivers are designed in to the Vulkan API, and they are the mechanism
23+ for common workflows such as error checking using the Vulkan Validation Layer
24+ (VVL), but they are also a general purpose mechanism suitable for all kinds of
25+ developer tooling.
2526
2627## What is the purpose of this project?
2728
28- We support many application developers during their development cycle. We
29- rarely get access to application source code, so layer drivers provide us with
30- an invaluable mechanism to make modifications to application API usage. The
31- ` GPU Support ` layer in this project is a a tool we use during technical support
32- investigations to quickly triage developers problems.
29+ We help many application developers to investigate issues during their
30+ development cycle. We rarely get access to application source code for these
31+ investigations, and cannot change drivers on production devices. Layer drivers
32+ provide us with an invaluable mechanism to monitor and make modifications to
33+ application API usage without needing to modify the application itself. The
34+ ` GPU Support ` layer in this project is a tool we use during technical
35+ support investigations to quickly triage problems.
3336
3437We also use layer drivers as a way to develop new API-aware debug and profiling
3538capabilities. The performance layers in this repository, such as the
36- ` GPU Timeline ` layer, are often early prototypes that we want to share with
37- developers to test new ideas and gather feedback. Some are designed to be used
38- as standalone development tools, others can also be used alongside other Arm
39- tools such as the Arm Streamline profiler in [ Arm Performance Studio] [ 2 ] .
39+ ` GPU Profile ` and ` GPU Timeline ` layers, are used to profile performance,
40+ or add API-aware annotations to performance captures made using other tooling.
4041
41- As you can tell, we find layers exceptionally useful. However, creating a new
42- layer from scratch requires a lot of boilerplate code and is fiddly to get
43- right. We therefore also wanted to take this opportunity to share our layer
44- generation tools which make it trivial to create a complete bare-bones layer
45- that is ready to extend and use.
42+ As you might be able to tell, we find layers exceptionally useful, and we
43+ often want to create ad hoc layers to use for one-off experiments. Creating a
44+ new layer from scratch requires a lot of code and is fiddly to get right, with
45+ obscure errors when it doesn't work, so we wrote a tool to automate layer
46+ creation. This final part of this project is this layer generation tooling,
47+ which you use to quickly create a new layer that is ready to deploy.
4648
4749## Supported devices
4850
4951This library is currently tested on devices running Android or Linux, and using
5052Arm® Immortalis™ and Arm Mali™ GPUs. Contributions adding support for other
51- platforms is welcome.
53+ platforms are welcome.
5254
5355# License
5456
@@ -60,14 +62,17 @@ from this repository you acknowledge that you accept terms specified in the
6062
6163Common documentation
6264
63- * [ Building a new layer] ( ./docs/building.md )
65+ * [ Building a layer] ( ./docs/building.md )
66+ * [ Creating a new layer] ( ./docs/creating.md )
6467* [ Running using a layer on Android] ( ./docs/running_android.md )
6568* [ Running using a layer on Linux] ( ./docs/running_linux.md )
69+ * [ About layers design notes] ( ./docs/about_layers.md )
6670* [ Frequently asked questions] ( ./docs/faq.md )
6771
6872Layer documentation
6973
7074* [ Layer: GPU Support] ( ./layer_gpu_support/README_LAYER.md )
75+ * [ Layer: GPU Profile] ( ./layer_gpu_support/README_LAYER.md )
7176* [ Layer: GPU Timeline] ( ./layer_gpu_timeline/README_LAYER.md )
7277
7378# Support
0 commit comments