Wargaming.net collaborated with Intel to develop concurrent rendering support that allows the World of Tanks engine to render data simultaneously on all available CPU cores, permitting data to be sent to the GPU faster. By doing so, WoT players are experiencing up to a 41% increase in average FPS for a better gameplay experience at a reduced rate of power consumption.
Bronislav Sviglo, World of Tanks rendering team lead has posted a whitepaper discussing the concurrency optimizations they made across their engine.
It includes a hefty section on Concurrent Rendering with DX12 and Vulkan as seen in this excerpt:
QuoteOne of the most important performance issues on the CPU side is the limitation of engine performance on the main thread (which does main game logic, prepares work for the rendering thread, or issues rendering calls itself). The result is that even when CPU has multiple cores, and the game is able to create multiple threads for various subsystems or jobs, the main bottleneck is the single core frequency where the most work happens.
That’s why modern rendering APIs such as DirectX* 12 and Vulkan* were architected with multi-core nature in mind. That allows 3D applications to prepare and issue rendering calls from multiple threads, effectively distributing the work across available CPU cores, minimizing the bottleneck on the main thread. As World of Tanks currently uses DirectX* 11 API, however, the engineering team came up with a creative approach that allowed them to accomplish this with the existing API.
The initial version of World of Tanks used the BigWorld engine, and it’s rendering pipeline—which was a single-thread DirectX 3D* 9 application:
Figure 11. Initial rendering pipeline, c.2010.The first step was to de-couple rendering from the rest of the game and introduce threading. The team came up with abstract rendering interface (ARI) methodology, and separated all API-specific rendering code into a separate rendering thread. Patch 0.9.15 and Core Engine 3.0 (August 2016):
Figure 12. Rendering pipeline v0.9.15, August 2016.Around the time this work was underway, new rendering APIs—such as Mantle, DirectX 12, and Vulkan—started to appear, and the team initially architected ARI with the same metaphor. Basically, ARI gathers the render commands into the software command buffers. Then, those gathered command buffers were submitted to a render thread, which in turn was in charge of processing them and making direct calls to an appropriate graphics API (at that moment it was either DirectX* 9 or DirectX 11).
The important part of ARI is the Wgfx intermediate compiler—a faster, multicore aware alternative to DirectX 3D effect framework, with lots of under-the-hood optimizations, and a customized API. Despite the engine now having a separate render thread for processing software command buffers, ARI render commands were only issuing in the main thread, however. But even that gave up to a 30% boost in performance.
You can also learn more from recent updates at the WoT blog: https://worldoftanks.com/en/news/general-news/update-1-4-concurrency/