Skip to main content

Getting Faster and Leaner on Mobile: Optimizing Roblox with Vulkan

June

10, 2020

by zeuxcg


Product & Tech

Roblox runs on millions of Android devices, and it’s important for us to be able to achieve good performance where possible. Rendering performance in particular is challenging — we target many different hardware architectures, many different types of devices on the power/performance curve, and of course many versions of wildly different drivers.

In 2018, we’ve launched our Vulkan renderer and since then it has been steadily growing in market share compared to our OpenGL renderer, with ~40% of our Android userbase using Vulkan today.

After the initial launch, with the growing popularity of the Vulkan backend we had to invest a lot of time in analyzing performance and improving it. Doing this required a lot of investigation and experimentation — with minimal performance-focused optimization or code available at the time, we had to try different approaches to each particular problem and find what works best for us.

At Reboot Develop Red 2019, we gave a combined talk with ARM to cover the performance optimization challenge from two different angles:

  • There’s now a growing collection of performance-focused sample Vulkan code that was developed by ARM and donated to Khronos, which you can read about here: https://www.khronos.org/blog/vulkan-releases-unified-samples-repository. Joe Rozek from ARM talked about the general structure of the samples and the framework used.
  • To help other developers optimize Vulkan code and give some insights into the problems and solutions we encountered at Roblox, I talked about several concrete problems we encountered while optimizing our renderer, tradeoffs we had to examine and solutions we implemented.

The video for the talk is posted on YouTube (https://www.youtube.com/watch?v=hPW5ckkqiqA), and you can download the slides here (https://zeux.io/data/reboot2019.pdf).


Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.

This blog post was originally published on the Roblox Tech Blog.