Interpolation decorations control the behavior of attribute interpolation in
the fragment shader stage. Interpolation decorations can be applied to
Input
storage class variables in the fragment shader stage’s interface,
and control the interpolation behavior of those variables.
Inputs that could be interpolated can be decorated by at most one of the following decorations:
Fragment input variables decorated with neither Flat
nor
NoPerspective
use perspective-correct interpolation (for
lines and
polygons).
The presence of and type of interpolation is controlled by the above
interpolation decorations as well as the auxiliary decorations Centroid
and Sample
.
A variable decorated with Flat
will not be interpolated. Instead, it
will have the same value for every fragment within a triangle. This value
will come from a single provoking vertex. A
variable decorated with Flat
can also be decorated with Centroid
or Sample
, which will mean the same thing as decorating it only as
Flat
.
For fragment shader input variables decorated with neither Centroid
nor
Sample
, the assigned variable may be interpolated
anywhere within the pixel and a single value may be assigned to each sample
within the pixel.
Centroid
and Sample
can be used to control the location and
frequency of the sampling of the decorated fragment shader input. If a
fragment shader input is decorated with Centroid
, a single value may
be assigned to that variable for all samples in the pixel, but that value
must be interpolated to a location that lies in both the pixel and in the
primitive being rendered, including any of the pixel’s samples covered by
the primitive. Because the location at which the variable is interpolated
may be different in neighboring pixels, and derivatives may be computed by
computing differences between neighboring pixels, derivatives of
centroid-sampled inputs may be less accurate than those for non-centroid
interpolated variables. If a fragment shader input is decorated with
Sample
, a separate value must be assigned to that variable for each
covered sample in the pixel, and that value must be sampled at the location
of the individual sample. When rasterizationSamples
is
VK_SAMPLE_COUNT_1_BIT
, the pixel center must be used for
Centroid
, Sample
, and undecorated attribute interpolation.
Fragment shader inputs that are signed or unsigned integers, integer
vectors, or any double-precision floating-point type must be decorated with
Flat
.