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.