When the fragment stage is present in a pipeline, the fragment shader
outputs form an interface with the output attachments of the current
subpass. The fragment shader output variables are matched by the
Location
and Component
decorations to the color attachments
specified in the pColorAttachments
array of the
VkSubpassDescription
structure that describes the subpass that the
fragment shader is executed in.
The fragment shader output variables listed by OpEntryPoint
with the
Output
storage class form the fragment output interface.
These variables must be identified with a Location
decoration.
They can also be identified with a Component
decoration and/or
an Index
decoration. For the
purposes of interface matching: variables declared without a Component
decoration are considered to have a Component
decoration of zero,
and variables declared without an Index
decoration are considered
to have an Index
decoration of zero.
A fragment shader output variable identified with a Location
decoration
of i is directed to the color attachment indicated by
pColorAttachments
[i], after passing through the blending unit as
described in Section 26.1, “Blending”, if enabled. Locations are consumed as
described in Location Assignment. The
number of available fragment output locations is given by the
maxFragmentOutputAttachments
member of the
VkPhysicalDeviceLimits
structure.
Components of the output variables are assigned as described in Component Assignment. Output components identified as 0, 1, 2, and 3 will be directed to the R, G, B, and A inputs to the blending unit, respectively, or to the output attachment if blending is disabled. If two variables are placed within the same location, they must have the same underlying type (floating-point or integer). The input to blending or color attachment writes is undefined for components which do not correspond to a fragment shader output.
Fragment outputs identified with an Index
of zero are directed
to the first input of the blending unit associated with the
corresponding Location
. Outputs identified with an Index
of one are directed to the second input of the corresponding
blending unit.
No component aliasing of output variables is allowed, that is there must not be two output variables which have the same location, component, and index, either explicitly declared or implied.
Output values written by a fragment shader must be declared with
either OpTypeFloat
or OpTypeInt
, and a Width of 32.
Composites of these types are also permitted. If the color attachment has a
signed or unsigned normalized fixed-point format, color values are assumed
to be floating-point and are converted to fixed-point as described in
Section 2.8.1, “Conversion from Normalized Fixed-Point to Floating-Point”; otherwise no type conversion
is applied. If the type of the values written by the fragment shader do
not match the format of the corresponding color attachment, the result is
undefined for those components.