This commit adds support to SPIR-V's composite specialization constants.
These are specialization constants which are composed of other spec
constants (whehter scalar or composite), regular constatns, or undef
values.
This commit adds support for parsing, printing, verification, and
(De)serialization.
A few TODOs are still in order:
- Supporting more types of constituents; currently, only scalar spec constatns are supported.
- Extending spv._reference_of to support composite spec constatns.
OpSpecConstantComposite is different than OpConstantComposite. I don't think composite spec constant for cooperative matrix is well spec'd: https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_cooperative_matrix.asciidoc#3327-constant-creation-instructions. Let's just emit error if the result type is a cooperative matrix util the spec is clarified.