The current driver, 545.29.06, does not enable the Vulkan 1.1 feature storageInputOutput16, which allows the use of int16 coordinates in input vertex attributes. 16 bit types are allowed in all other locations, such as uniform buffers, storage buffers, and push constants, but the vertex attributes are the one place where they would be most useful due to the sheer volume of vertex data.
Furthermore, this limitation only exists in this flag. If I do not request storageInputOutput16 when creating the device and then use int16 vertex input attributes anyway, then everything works correctly, except for the error printed by the validation layer about storageInputOutput16 not being enabled.
Both AMD and Intel drivers already support 16 bit types for all their GPUs, so isn’t it about time NVidia did as well?
+1. Even on the latest Vulkan beta driver on Windows the feature is marked as ‘false’. However, using 16-bit floating point types in vertex outputs works perfectly fine on my GPU, including interpolation.
storageInputOutput16 specifies whether objects in the Input and Output storage classes can have 16-bit integer and 16-bit floating-point members. If this feature is not enabled, 16-bit integer or 16-bit floating-point members must not be used in such objects. This also specifies whether shader modules can declare the StorageInputOutput16 capability.
I don’t see what else would need to be supported, and given that it does work for floats and integers, I wonder if the driver should be reporting ‘true’.
The NVIDIA driver not exposing support for the storageInputOutput16 feature is not a mistake because NVIDIA hardware only supports 32 bit shader input/output values. The reason you are observing it work with your test is most likely because the NVIDIA shader compiler is casting the input/output values to and from 32 bits which would defeat the purpose of exposing support for storageInputOutput16. This cast should be considered undefined behavior that can change in future driver releases so you should not rely on it. Thanks for getting in touch, and let me know if there is anything else I can clarify.