I know what the rationale was, and I also know that in particular for NVidia it crippled their hardware because these items are all hardware flags. I think AMD's first GCN generation was the main culprit for this design choice because it implemented too much state as shader instructions but from what I read AMD backpedaled from this design by now for the precise reason that it turned out to be the wrong way of doing things due to the explosion in shader code that needs to be created. If you ask me it's a typical case of micro-optimization gone wrong and missing the forest for the trees, i.e. seeing a minuscule performance improvement and hunting for it while totally neglecting the overhead this induced elsewhere.dpJudas wrote: ↑Mon Dec 19, 2022 3:10 amSorry, forgot to reply on this on specifically (why not use VK_EXT_extended_dynamic_state). In this particular case that would mean VKRenderState would have to issue different commands depending on what render path is active. Doable, sure, but also what exactly are the performance implications of using the extended dynamic state?Graf Zahl wrote:I mostly agree, that's why I pointed to the 3 dynamic_state extensions. At least the first one seems to be core in 1.3
Part of the rationale behind creating these huge pipeline state objects in vulkan was that the old model for DX11/OpenGL left too much performance on the floor. It got so bad the drivers begun to create worker threads building pipelines behind the back of the application and a bunch of heuristics deciding when it was worth it and when it wasn't. The more the pipeline is set into "DX11 mode", the further you go back to that world. One really wonderful thing about Vulkan is how changing the pipeline is super fast, easy and predictable compared to OpenGL. I'd personally therefore much prefer an alternative approach, if possible. Especially since most of the state there isn't something GZDoom really does a lot of it - most of it is used for the portal stuff in a limited set of fixed configurations.
Long story short: Since this was made core I think we can assume that the cost of switching (and maintaining) pipelines is far higher than any perceived boost in shader performance.
NVidia has always been the first with releasing drivers with new extensions, so nothing new here. AMD has always taken their time with these things, even in OpenGL land.dpJudas wrote: ↑Mon Dec 19, 2022 3:10 amThat's also one of the reasons I was surprised that Nvidia was the only vendor with a driver supporting the extensions (added back in the spring). Maybe the others are just being slow, I don't know.Graf Zahl wrote:As for VK_EXT_graphics_pipeline_library, look at the list of contributors. It's not just NVidia, but also AMD, ARM and many game developers. It is clear this is a high-in-demand feature that will get more widespread support because the relevant people need it. Of course the docs cannot give an estimate how hard it will be to implement.![]()