Every now-and-then I take a stab at learning Vulkan. It appeals to me on a very low level as it reminds me of both Saturn and Dreamcast development with how it works. Usually I try and do something with it for about two or three weeks then stop and work on something else. I have many, many personal projects…
I started working on a new engine about six weeks ago. The goal is to create a simple, modular, idiot-proof, legacy-free, and efficient engine. Mainly I chose that because then I could call the engine SLIME as an acronym. I have a love for bespoke hardware so I get my kicks by programming for the Saturn and Dreamcast. I also really love new technology. Which is why the engine won’t support anything that has come out before when I started working on it. There are a bunch of GPUs, motherboards, hard drives, memory, CPUs, and other components that I have which are decades old. As much as I want to support all of them, it creates a dilemma of needing to use many different compilers and APIs to do so.
There won’t be support for 32-bit anything. It’s all RISC-V, Aarch64, and amd64. GPUs that don’t support Vulkan 1.2 are also out. Memory, storage, and netwworking are trickier since there’s no real way to stop someone from using a hard drive, EMMC, or Flash storage to run a game from. Not that I’d want to make that a hard reuirement, either. The same can be said for CPU core count. One person’s two-core may be more performant than another person’s sixteen-core machine.
Currently I’m working on a laptop with an Intel Core i7-3840QM and nVidia’s 650M GPU. Hardly cutting-edge and it contradicts what I’m targetting. Though it is incredibly capable so I’m sticking with it until I hit a limitation. The only reason for using a laptop instead of a desktop is that my desktop is occupied by my work machine and I don’t think it’d be worth assembling another desk to use my personal computer. Besides, I have a SFF with an nVidia 1080Ti and an AMD Ryzen 7 2700 in the background which wouldn’t be too much trouble to SSH into and run whatever I needed to. Primarily that’s just being used for background music. I digress.
Dreamcast development has not been shelved in favour of this engine or anything like that, I’m just swapping between the two projects. Which is bad, I know.
All I have is a rectangle that is being rendered with Vulkan and most of the work has been in figuring out how best to use multithreading for rendering. Even then I’m still not there with it and have decided to go with a single thread, completely eshewing one huge benefit of Vulkan, to lessen the amount of things that have to be figured out while progressing onward with rendering something useful. Breaking away from a set of static command buffers and not tying them to the swapchain image count was a surprisingly huge hurdle as I couldn’t find good information on how best to tackle the issue. It’s one of the good things about Vulkan, I suppose, it really makes you work hard. I’m 100% positive that the route I’ve taken is terrible and not at all how Vulkan rendering should be treated, but I’m going to chalk it up to a learning experience.