Per the SPIR-V spec "2.16.2. Validation Rules for Shader Capabilities":
Composite objects in the StorageBuffer, PhysicalStorageBuffer, Uniform, and PushConstant Storage Classes must be explicitly laid out.
Per the Vulkan spec "15.6. Shader Resource Interface":
The shader variables defined with a storage class of PushConstant that are statically used by the shader entry points for the pipeline define the push constant interface. They must be: * typed as OpTypeStruct. Variables identified with the Uniform storage class are used to access transparent buffer backed resources. Such variables must be: * typed as OpTypeStruct, or an array of this type, Variables identified with the StorageBuffer storage class are used to access transparent buffer backed resources. Such variables must be: * typed as OpTypeStruct, or an array of this type,
For other cases we don't need to wrap with a struct.