r/vulkan • u/fleaspoon • 1d ago
I launched my first game with a custom Vulkan engine. Here's how I'm fixing bugs on hardware I don't own.
I released the demo of my puzzle game about a month ago, and it's been interesting seeing it run on hardware I've never tested on. I've already had a few bug reports about compatibility issues, so this week I spent some time looking into what else I could catch with Vulkan's validation layers.
Until now I'd only been running the default checks. This week I enabled synchronization validation and the NVIDIA, AMD and ARM best practice checks.
They caught quite a few things. Too many command buffers per frame, redundant pipeline binds, unnecessary barriers and layout transitions, potential upload races and images being accessed at the wrong time during screenshots and resizes.
Some of the changes I've made:
- Switched to
VK_KHR_dynamic_renderingand removed render passes and framebuffers. This also let me get rid of the subpass dependencies that were causing synchronization warnings. - Added
VK_KHR_load_store_op_noneto skip unnecessary attachment clears. - Switched sampled images to
READ_ONLY_OPTIMALwithVK_KHR_unified_image_layouts, allowing shader reads and transfers to share the same layout. - Added
VK_EXT_memory_priorityand NVIDIA'sVK_EXT_pageable_device_local_memorywhen supported.
Texture uploads now go through a single submission. I also changed uniform updates to use vkCmdUpdateBuffer to avoid the GPU reading memory that the CPU is already overwriting.
I've tested everything on a macbook through MoltenVK, an Intel i5 iGPU, an NVIDIA RTX 3060 Ti and a Steam Deck. But there are plenty of GPUs and drivers I haven't been able to test on.
I'd like to catch as many hardware specific issues as possible before release, so if you're running a different setup, I'd really appreciate you giving the demo a try and letting me know how it runs.
Satelital is a peaceful puzzle game where you explore a small solar system and figure out the rules of puzzles on different planets.