It's not even a software problem. There were brand new SoCs this year with Mali-4xx. You think those will be able to run Vulkan?
I think it would be fine if the phones/tablets carrying these bottom-of-the-barrel SoCs were prevented from upgrading to e.g. Android 7, and from playing high-end games from 2016/17. And AFACT, for 2015 SoCs we're only talking about Hisilicon's Kirin 620 which is only present in a handful of low-end Huawei smartphones. All the others have been putting Midgard GPUs in their lowest-end for some time.
In this blog post we will go into further details of one of the most common state changes in scene rendering: binding shader resources such as uniform- or storage-buffers, images or samplers.
To avoid performance pitfalls of traditional individual bindings Vulkan organizes bindings in groups, which are called DescriptorSets. Each group can itself provide multiple bindings and there can be multiple such groups in parallel using a different set number. The number of available sets is hardware-dependent, however there is a required minimum.
By making proper use of the parallel DescriptorSet bindings and PipelineLayouts the software developers can now represent this in Vulkan (increasing set number as we descend). In principle you can do this in previous APIs as well, however, Vulkan tells the driver up front that in this example the “view” bindings, would be common to all shaders at the same binding slot. A traditional API would have to inspect all the software bindings when the shaders are changed with less apriori knowledge about which are being overwritten and which are important to keep.
https://developer.nvidia.com/vulkan-shader-resource-binding
Was that because it has to support a wide variety of hardware?Yes, it's actually quite different than Mantle despite similar naming - probably one of the API areas that was modified the most (the other being the render pass stuff).
Mostly, yes - both in terms of efficiently supporting a broader range of hardware but also in terms of exposing functionality on other architectures such as push constants. There were other considerations as well (future expand-ability to bindless, DX design, etc).Was that because it has to support a wide variety of hardware?
Have you worked with Vulkan yet? If so I was wondering if you like it and if you think they're taking it in a good direction as far as future proofing goes?Mostly, yes - both in terms of efficiently supporting a broader range of hardware but also in terms of exposing functionality on other architectures such as push constants. There were other considerations as well (future expand-ability to bindless, DX design, etc).
A little bit but mostly just in the spec phase a while ago - I haven't done my hands-on with it yet on real drivers.Have you worked with Vulkan yet? If so I was wondering if you like it and if you think they're taking it in a good direction as far as future proofing goes?
Earlier you said that future expandability to bindless was a factor, do you consider DX12 resource binding tier 3 as bindless? If not will you like vulkan more in the future when they go bindless?Direction is reasonable overall. I like the binding model stuff in DX12 slightly more but it makes sense why they couldn't go quite as far in Vulkan and what's there is certainly just fine.
Even Tier 2 in DX's binding model is "bindless". If you can index a sufficiently large number of resources (in this case, ~1 million) on the fly in the shader and support non-uniform indexing, it's bindless.Earlier you said that future expandability to bindless was a factor, do you consider DX12 resource binding tier 3 as bindless? If not will you like vulkan more in the future when they go bindless?