The 2GIS engineering team addressed performance bottlenecks in their Zenith Engine, specifically related to GPU resource allocation. Previously, the rendering thread was responsible for both drawing and creating GPU resources, which caused significant delays during the initial frame rendering.

On a typical scene, the engine had to process 532 textures and 2,713 buffers before the first frame could be drawn. This process required 45 MB of RAM for textures and 20 MB for buffers, forcing the render thread to pause operations while waiting for these resources to be created via Metal, Vulkan, or Direct3D 12.

To optimize the workflow, the team moved the creation of buffers and textures to dedicated loading threads. The article details the specific implementation challenges encountered when working with Metal and Vulkan, highlighting the technical limitations and architectural requirements of these graphics APIs.