## A.2. Capabilities

Implementations must support the following capability operands declared by `OpCapability`:

- `Matrix`
- `Shader`
- `InputAttachment`
- `Sampled1D`
- `Image1D`
- `SampledBuffer`
- `ImageBuffer`
- `ImageQuery`
- `DerivativeControl`

Implementations may support features that are not required by the Specification, as described in the Features chapter. If such a feature is supported, then any capability operand(s) corresponding to that feature must also be supported.

Table A.1. SPIR-V Capabilities which are not required, and corresponding feature names

SPIR-V OpCapability | Vulkan feature name
--- | ---
`Geometry` | geometryShader
`Tessellation` | tessellationShader
`Float64` | shaderFloat64
`Int64` | shaderInt64
`Int16` | shaderInt16
`TessellationPointSize` | shaderTessellationAndGeometryPointSize
`GeometryPointSize` | shaderTessellationAndGeometryPointSize
`ImageGatherExtended` | shaderImageGatherExtended
`StorageImageMultisample` | shaderStorageImageMultisample
`UniformBufferArrayDynamicIndexing` | shaderUniformBufferArrayDynamicIndexing
`SampledImageArrayDynamicIndexing` | shaderSampledImageArrayDynamicIndexing
`StorageBufferArrayDynamicIndexing` | shaderStorageBufferArrayDynamicIndexing
`StorageImageArrayDynamicIndexing` | shaderStorageImageArrayDynamicIndexing
`ClipDistance` | shaderClipDistance
`CullDistance` | shaderCullDistance
`ImageCubeArray` | imageCubeArray
`SampleRateShading` | sampleRateShading
`SparseResidency` | shaderResourceResidency
`MinLod` | shaderResourceMinLod
`SampledCubeArray` | imageCubeArray
`ImageMSArray` | shaderStorageImageMultisample
`StorageImageExtendedFormats` | shaderStorageImageExtendedFormats
`InterpolationFunction` | sampleRateShading
`StorageImageReadWithoutFormat` | shaderStorageImageReadWithoutFormat
`StorageImageWriteWithoutFormat` | shaderStorageImageWriteWithoutFormat
`MultiViewport` | multiViewport

The application must not pass a SPIR-V module containing any of the following to `vkCreateShaderModule`:

- any OpCapability not listed above,
- an unsupported capability, or
- a capability which corresponds to a Vulkan feature which has not been enabled.