Descriptors Are Hard
jlekstrand.net
jlekstrand.net
This explains a lot of the difficulties the Vulkan designers had to deal with in order to cover all popular GPU architectures. It also means that Vulkan isn't actually as low level and explicit as initially thought, it still has to abstract over very different hardware (I guess the dream that GPUs will eventually converge to a unified 'modern' architecture is dead?).
Vulkan sits in an awkward place sandwiched between slightly less explicit but more straightforward and convenient APIs like Metal, and GPU-specific (but also more straightforward and convenient) APIs on the game consoles.
I hope that the current wave of constructive criticism of the Vulkan API can lead to a Vulkan 2 which addresses those concerns (there are some interesting extensions in the pipeline like VK_KHR_dynamic_rendering which make parts of the API more flexible and convenient to use, however at the cost of not supporting all GPU vendors - e.g. there's a desktop/mobile split).
Anyway, interesting times :)
The make your own adventure SDK isn't as bad as on OpenGL heyday, because at least this time we have LunarG on board, trying to make it less painful.
Still it isn't the same as having Metal Kit, DirectXTK, PhyreEngine,... in the box with "File new template" for newcomers.
The big failure was constant uploading IMO, turns out you really want to use the buffer versioning hardware unit on devices, but that's such an awkward fit for descriptor sets. A lot of frameworks (including sokol, and my own) buffer UBO data into a giant single buffer, upload once at the start of the frame, and use dynamic UBOs to offset per draw. That's great on AMD, but could be better on other devices. A way to use that buffer unit would be better. Push constants ain't it. All drivers have heuristics now, but they aren't perfect.
[1] https://stackoverflow.com/questions/36625892/descriptor-conc...
There was a lot of unusual things back then; now I think memory is flat so your stack address 1234 is the same as your code and data address 1234 (the exception being thread-local variables).
Adding a UI that presents the tags in the Algolia search might be the difficult-to-get-right part.