Arm Community
Arm Community
  • Site
  • User
  • Site
  • Search
  • User
Arm Community blogs
Arm Community blogs
Mobile, Graphics, and Gaming blog Vulkan Best Practices for Mobile Developers
  • Blogs
  • Mentions
  • Sub-Groups
  • Tags
  • Jump...
  • Cancel
More blogs in Arm Community blogs
  • AI blog

  • Announcements

  • Architectures and Processors blog

  • Automotive blog

  • Embedded and Microcontrollers blog

  • Internet of Things (IoT) blog

  • Laptops and Desktops blog

  • Mobile, Graphics, and Gaming blog

  • Operating Systems blog

  • Servers and Cloud Computing blog

  • SoC Design and Simulation blog

  • Tools, Software and IDEs blog

Tell us what you think
Tags
  • mobile
  • vulkan
  • Game Developers Conference (GDC)
  • Graphics Developers
  • Arm Mobile Studio
Actions
  • RSS
  • More
  • Cancel
Related blog posts
Related forum threads

Vulkan Best Practices for Mobile Developers

Ben Walshe
Ben Walshe
March 19, 2019
2 minute read time.

Vulkan is a powerful graphics API which allows for complete control of your application, enhancing the visual fidelity and performance. However, the API can be quite complex for developers as there are many ways of doing the same thing. It can be difficult to find the best method of maximising performance on mobile - what works best for desktop applications may not be the optimal choice for mobile implementations. While there are a lot of excellent repositories and tutorials for Vulkan, there are not many which focus on mobile, and just a few that give an introduction into the API.

First hand experience

Working with a range of developers and studios to optimize content, Arm learned a plethora of Vulkan best practices that work particularly well for mobile. We have actively moved towards trying to help developers with actual samples they can download, set up and get running on their devices, along with tutorials explaining the step by step process for each sample. 

Introducing Vulkan Best Practice for Mobile Developers:

  • A suite of micro benchmarks showing bad vs good implementations of Vulkan constructs.
  • Accompanied tutorials explaining what we recommend and why.
  • Easy switch from bad to good implementations with on the fly performance graphs.
  • Expansive list of runnable samples with full source code available online.
  • Hardware counters displayed on (non-rooted) devices.
  • In-detail explanations, backed-up with data, of best-practice recommendations.
  • Guides to using profiling tools and analysing the results.
  • Multi-platform (Android, Windows, Linux & Experimental macOS).

Not a one off...

At its core, our project is meant to address the challenge of attaining maximum performance on mobile using Vulkan; by presenting investigations for each Vulkan feature and advising developers on what works best for them. At the moment there are only a few samples, but towards the end of 2019, we plan on having a plethora of samples, tutorials and downloads to help you get Vulkan working for you on mobile.

View the Best Practice Samples on GitHub

The Vulkan samples broken down into sections

  • General
    • Controls
    • Create a Sample
  • Vulkan Essentials
    • How does Vulkan compare to OpenGL ES? What should you expect when targeting Vulkan?
  • Vulkan Swapchains
    More detailed look at swapchains, and how you might want to use them
    • Appropriate use of N-buffering
    • Appropriate use of surface rotation
  • Pipelines
    • Use of pipeline caches to avoid startup latency
  • Render Passes
    • Appropriate use of load/store operations, and use of transient attachments
  • Render Subpasses
    • Benefits of subpasses over multiple render passes, use of transient attachments, and G-buffer recommended size
  • Command Buffers
    • Allocation and management of command buffers
  • AFBC
    • Appropriate use of AFBC

Each sample tests a specific Vulkan feature and gives the developer on-screen controls of the multiple ways of doing something - showing the real-time performance impact with hardware counters on the display. Each sample is accompanied with an in-depth tutorial explaining in detail what is happening under the hood.

Render Passes Load Store Example Mali-G72
Figure 1: Render Pass Sample


An open source project - Get involved!

The best practice guide will be available on GitHub in source code form, so developers can openly try it themselves as well as create more samples and contribute to the project.

One thing to note, this is not vendor specific, our hardware counters interface is on, enabling developers to add their own hardware counters to it. Naturally, all the CPU counters work seamlessly on any Arm platform. Lastly, the framework also supports glTF, so adding scenes and other models is very easy.

View the Best Practice Samples on GitHub

Anonymous

Top Comments

  • Андрей Геец
    Андрей Геец over 5 years ago +1
    Thank you ARM! I think in the present time we have the best Vulkan API support for Mali GPU.
  • Андрей Геец
    Андрей Геец over 5 years ago

    Thank you ARM! I think in the present time we have the best Vulkan API support for Mali GPU.

    • Cancel
    • Up +1 Down
    • Reply
    • More
    • Cancel
Mobile, Graphics, and Gaming blog
  • Join the Upscaling Revolution with Arm Accuracy Super Resolution (Arm ASR)

    Lisa Sheckleford
    Lisa Sheckleford
    With Arm ASR you can easily improve frames per second, enhance visual quality, and prevent thermal throttling for smoother, longer gameplay.
    • March 18, 2025
  • Generative AI in game development

    Roberto Lopez Mendez
    Roberto Lopez Mendez
    How is Generative AI (GenAI) technology impacting different areas of game development?
    • March 13, 2025
  • Physics simulation with graph neural networks targeting mobile

    Tomas Zilhao Borges
    Tomas Zilhao Borges
    In this blog post, we perform a study of the GNN architecture and the new TF-GNN API and determine whether GNNs are a viable approach for implementing physics simulations.
    • February 26, 2025