A SPIR-V module passed to vkCreateShaderModule must conform to the
following rules:
Scope for execution must be limited to:
Scope for memory must be limited to:
OriginLowerLeft execution mode must not be used; fragment entry
points must declare OriginUpperLeft.
PixelCenterInteger execution mode must not be used. Pixels are
always centered at half-integer coordinates.
Images
OpTypeImage must declare a scalar 32-bit float or 32-bit integer
type for the “Sampled Type”. (RelaxedPrecision can be applied
to a sampling instruction and to the variable holding the result of a
sampling instruction.)
OpSampledImage must only consume an “Image” operand whose type
has its “Sampled” operand set to 1.
SubpassData must be the <id>
of a constant vector (0, 0), or if a layer coordinate is used, must be
a vector that was formed with constant 0 for the “u” and “v”
components.
OpTypeImage is ignored.
Decorations
GLSLShared and GLSLPacked decorations must not be used.
Flat, NoPerspective, Sample, and Centroid
decorations must not be used on variables with storage class other than
Input or on variables used in the interface of non-fragment shader
entry points.
Patch decoration must not be used on variables in the
interface of a vertex, geometry, or fragment shader stage’s entry
point.
OpTypeRuntimeArray must only be used for the last member of an
OpTypeStruct in the Uniform storage class.
Compute Shaders
LocalSize execution mode
or an object decorated with the WorkgroupSize decoration must be
specified.