Call of Duty: Warzone Mobile is a first-person action game in the popular Call of Duty franchise. The mobile realization of the hugely popular console and PC game takes advantage of mobile low-level APIs to deliver a great player experience.
From a technical perspective, the goal of the mobile implementation is to support a wide range of Android mobile devices while keeping the implementation as close as possible to the console version and ensuring the graphics pipeline and toolchain remain compatible with the current console and PC titles and content.
The Call of Duty engine implements synchronization, memory allocation, and scheduling for rendering submission management using a system called a task graph renderer, which determines the work to be executed on the GPU and specifies the required resources. More specifically, the system is a render graph with tasks, resources, and dependencies defined in a high-level script that's processed at load time to generate optimal ordering of the work to be executed on the GPU and provide the resources used at frame submission time.
Vulkan, a modern cross-platform 3D graphics API, was selected as the backend rendering interface for the task graph renderer on Android.
Benefits of the Vulkan API
To maintain the distinctive visual style of Call of Duty and better support the shared progression between Call of Duty: Warzone Mobile and its console and PC counterparts, the game uses a rendering API similar to that of existing console and PC implementations. On Android, Vulkan enables Activision to build on its existing tools, pipelines, and shaders and support the content created by artists, without having to overhaul the entire software stack.
Trying to achieve this with a completely different renderer would be prohibitively expensive, and trying to support older-generation graphics APIs for the Call of Duty pipeline would have too great an impact on the feature set. Activision determined that Vulkan was the most appropriate choice for bringing full features to Android while minimizing the impact on overall development overhead. Vulkan has gained significant support among Android device manufacturers, making the API a good choice for future development as well.
Devices lacking Vulkan-capable hardware or drivers are typically older and not powerful enough to run the game. So in addition to Vulkan being a technical fit for the engine and content pipeline, Vulkan support as a hardware requirement serves as a performance filter.
Compatibility with existing platform API
Vulkan is conceptually similar to the existing APIs used for Call of Duty: Warzone, with explicit resource management, memory aliasing, similar compute pipeline, and bindless resource access. The similarities allowed Activision to keep the renderer structurally consistent with the console and PC renderer, requiring only backend changes to interface with Vulkan.
Support for existing HLSL-based shaders with full feature sets using DXC to SPIR-V compilation allows Android to integrate into Activision's existing build pipelines. The process is not without its challenges, but is still more beneficial than a rewrite and the incurred overhead of maintaining multiple versions or languages.
Vulkan features used in Call of Duty: Warzone Mobile
- Resource aliasing and explicit
barrier control enables the rendering task graph to
significantly reduce memory requirements for render targets compared to static
allocation.
- Flexibility allows seamless use of mobile-friendly practices in render tasks.
- Render-passes as core features allows the renderer to make optimal decisions for common mobile GPU architectures. Most of these decisions also provide gains on other platforms.
- Dynamic scene resolution is supported by default by the task graph, enabling some control of performance and power consumption.
- Full GPU pipeline with extensive compute-based culling enables
substantially increased scene complexity.
- Balancing culling granularity to account for targeting tile-based deferred renderers.
- Bottleneck is complex compute workload as opposed to triangle count.
- GPU pipeline is designed with different scenarios in mind.
- Options to change culling granularity.
- Very large descriptor sets allow for full bindless rendering on compatible hardware, which in turn substantially reduces CPU draw call creation cost with the associated performance, power, and thermal benefits.
- HW configurator enables tweaks to fidelity settings based on specific
device models for the best user experience
- Users configure mode: best performance, best quality, or battery saving.
- Device-specific shader set design provides different
sets of shaders for different GPU presets (quality and fidelity settings). HW
configurator helps the game choose the best shader set for the device.
- Helps decrease the combinatorial explosion of highly configurable shaders with the requirements of creating pipeline objects.
- Includes fallback non-bindless shader sets to target older phones and drivers that don't support as many shader resources.
- Smart use of specialization constants to tackle
driver differences.
- Most of the shader compiler bugs in drivers are worked around with the use of specialization constants.
- Balances against the number of device-specific shader sets.
Profiling and debugging
Early in development Activision found many gaps in stability and functionality with Vulkan profiling and debugging tools. Since then, there have been steady improvements to vendor-specific profilers and vendor-agnostic tools such as RenderDoc. Now developers can more confidently narrow in on rendering issues and optimization opportunities.
High fidelity with Vulkan
Call of Duty: Warzone Mobile runs on a wide range of Vulkan-enabled Android devices using rendering technology shared with the console and PC titles. Vulkan reduced development overhead and friction and enabled delivery of authentic, high-fidelity Call of Duty content and gameplay to Android players.