Home | History | Annotate | Download | only in cso
      1 .. _blend:
      2 
      3 Blend
      4 =====
      5 
      6 This state controls blending of the final fragments into the target rendering
      7 buffers.
      8 
      9 Blend Factors
     10 -------------
     11 
     12 The blend factors largely follow the same pattern as their counterparts
     13 in other modern and legacy drawing APIs.
     14 
     15 Dual source blend factors are supported for up to 1 MRT, although
     16 you can advertise > 1 MRT, the stack cannot handle them for a few reasons.
     17 There is no definition on how the 1D array of shader outputs should be mapped
     18 to something that would be a 2D array (location, index). No current hardware
     19 exposes > 1 MRT, and we should revisit this issue if anyone ever does.
     20 
     21 Logical Operations
     22 ------------------
     23 
     24 Logical operations, also known as logicops, lops, or rops, are supported.
     25 Only two-operand logicops are available. When logicops are enabled, all other
     26 blend state is ignored, including per-render-target state, so logicops are
     27 performed on all render targets.
     28 
     29 .. warning::
     30    The blend_enable flag is ignored for all render targets when logical
     31    operations are enabled.
     32 
     33 For a source component `s` and destination component `d`, the logical
     34 operations are defined as taking the bits of each channel of each component,
     35 and performing one of the following operations per-channel:
     36 
     37 * ``CLEAR``: 0
     38 * ``NOR``: :math:`\lnot(s \lor d)`
     39 * ``AND_INVERTED``: :math:`\lnot s \land d`
     40 * ``COPY_INVERTED``: :math:`\lnot s`
     41 * ``AND_REVERSE``: :math:`s \land \lnot d`
     42 * ``INVERT``: :math:`\lnot d`
     43 * ``XOR``: :math:`s \oplus d`
     44 * ``NAND``: :math:`\lnot(s \land d)`
     45 * ``AND``: :math:`s \land d`
     46 * ``EQUIV``: :math:`\lnot(s \oplus d)`
     47 * ``NOOP``: :math:`d`
     48 * ``OR_INVERTED``: :math:`\lnot s \lor d`
     49 * ``COPY``: :math:`s`
     50 * ``OR_REVERSE``: :math:`s \lor \lnot d`
     51 * ``OR``: :math:`s \lor d`
     52 * ``SET``: 1
     53 
     54 .. note::
     55    The logical operation names and definitions match those of the OpenGL API,
     56    and are similar to the ROP2 and ROP3 definitions of GDI. This is
     57    intentional, to ease transitions to Gallium.
     58 
     59 Members
     60 -------
     61 
     62 These members affect all render targets.
     63 
     64 dither
     65 %%%%%%
     66 
     67 Whether dithering is enabled.
     68 
     69 .. note::
     70    Dithering is completely implementation-dependent. It may be ignored by
     71    drivers for any reason, and some render targets may always or never be
     72    dithered depending on their format or usage flags.
     73 
     74 logicop_enable
     75 %%%%%%%%%%%%%%
     76 
     77 Whether the blender should perform a logicop instead of blending.
     78 
     79 logicop_func
     80 %%%%%%%%%%%%
     81 
     82 The logicop to use. One of ``PIPE_LOGICOP``.
     83 
     84 independent_blend_enable
     85    If enabled, blend state is different for each render target, and
     86    for each render target set in the respective member of the rt array.
     87    If disabled, blend state is the same for all render targets, and only
     88    the first member of the rt array contains valid data.
     89 rt
     90    Contains the per-rendertarget blend state.
     91 alpha_to_coverage
     92    If enabled, the fragment's alpha value is used to override the fragment's
     93    coverage mask.  The coverage mask will be all zeros if the alpha value is
     94    zero.  The coverage mask will be all ones if the alpha value is one.
     95    Otherwise, the number of bits set in the coverage mask will be proportional
     96    to the alpha value.  Note that this step happens regardless of whether
     97    multisample is enabled or the destination buffer is multisampled.
     98 alpha_to_one
     99    If enabled, the fragment's alpha value will be set to one.  As with
    100    alpha_to_coverage, this step happens regardless of whether multisample
    101    is enabled or the destination buffer is multisampled.
    102 
    103 
    104 Per-rendertarget Members
    105 ------------------------
    106 
    107 blend_enable
    108    If blending is enabled, perform a blend calculation according to blend
    109    functions and source/destination factors. Otherwise, the incoming fragment
    110    color gets passed unmodified (but colormask still applies).
    111 rgb_func
    112    The blend function to use for rgb channels. One of PIPE_BLEND.
    113 rgb_src_factor
    114    The blend source factor to use for rgb channels. One of PIPE_BLENDFACTOR.
    115 rgb_dst_factor
    116    The blend destination factor to use for rgb channels. One of PIPE_BLENDFACTOR.
    117 alpha_func
    118    The blend function to use for the alpha channel. One of PIPE_BLEND.
    119 alpha_src_factor
    120    The blend source factor to use for the alpha channel. One of PIPE_BLENDFACTOR.
    121 alpha_dst_factor
    122    The blend destination factor to use for alpha channel. One of PIPE_BLENDFACTOR.
    123 colormask
    124    Bitmask of which channels to write. Combination of PIPE_MASK bits.
    125