Fase de fusión de salida (OM)Output Merger (OM) stage

La fase de fusión de salida (OM) combina varios tipos de datos de salida (valores del sombreador de píxeles, información de profundidad y estarcido) con el contenido de los búferes de destino de representación y de profundidad/estarcido para generar el resultado final de la canalización.The Output Merger (OM) stage combines various types of output data (pixel shader values, depth and stencil information) with the contents of the render target and depth/stencil buffers to generate the final pipeline result.

Propósito y usosPurpose and uses

La fase de fusión de salida (OM) es el último paso para determinar qué píxeles son visibles (con pruebas de estarcido de profundidad) y mezclar los colores finales de los píxeles.The Output Merger (OM) stage is the final step for determining which pixels are visible (with depth-stencil testing) and blending the final pixel colors.

La fase OM genera el color de píxel representado final mediante una combinación de lo siguiente:The OM stage generates the final rendered pixel color using a combination of the following:

  • Estado de canalizaciónPipeline state
  • Los datos de píxeles generados por los sombreadores de píxelesThe pixel data generated by the pixel shaders
  • El contenido de los destinos de representaciónThe contents of the render targets
  • El contenido de los búferes de profundidad/estarcido.The contents of the depth/stencil buffers.

Información general de blendingBlending overview

La mezcla combina uno o más valores de píxeles para crear un color de píxel final.Blending combines one or more pixel values to create a final pixel color. En el diagrama siguiente se muestra el proceso implicado en la combinación de datos de píxeles.The following diagram shows the process involved in blending pixel data.

diagrama de cómo funciona la fusión de datos

Conceptualmente, puede visualizar este diagrama de flujo implementado dos veces en la fase de fusión de salida: el primero combina los datos RGB, mientras que en paralelo, un segundo combina los datos alfa.Conceptually, you can visualize this flow chart implemented twice in the Output Merger stage: the first one blends RGB data, while in parallel, a second one blends alpha data. Para ver cómo usar la API para crear y establecer el estado de Blend, consulte Configuración de la funcionalidad de fusión.To see how to use the API to create and set blend state, see Configuring Blending Functionality.

La mezcla de funciones fijas se puede habilitar de forma independiente para cada destino de representación.Fixed-function blend can be enabled independently for each render target. Sin embargo, solo hay un conjunto de controles de Blend, de modo que la misma mezcla se aplica a todos los RenderTargets con la fusión mediante combinación habilitada.However there is only one set of blend controls, so that the same blend is applied to all RenderTargets with blending enabled. Los valores de Blend (incluido BlendFactor) siempre se fijan en el intervalo del formato de destino de representación antes de la fusión.Blend values (including BlendFactor) are always clamped to the range of the render-target format before blending. La compresión se realiza por destino de representación, respetando el tipo de destino de representación.Clamping is done per render target, respecting the render target type. La única excepción son los formatos float16, float11 o float10 que no están fijados, por lo que las operaciones de mezcla en estos formatos se pueden realizar con al menos la misma precisión/intervalo que el formato de salida.The only exception is for the float16, float11 or float10 formats which are not clamped so that blend operations on these formats can be done with at least equal precision/range as the output format. Los NaN y los ceros con signo se propagan para todos los casos (incluidos los pesos de 0,0 Blend).NaN's and signed zeros are propagated for all cases (including 0.0 blend weights).

Cuando se utilizan destinos de representación sRGB, el tiempo de ejecución convierte el color del destino de representación en un espacio lineal antes de realizar la fusión.When you use sRGB render targets, the runtime converts the render target color into linear space before it performs blending. El tiempo de ejecución convierte de nuevo el valor de fusión final en el espacio sRGB antes de guardar el valor en el destino de representación.The runtime converts the final blended value back into sRGB space before it saves the value back to the render target.

Fusión de colores de origen dualDual-source color blending

Esta característica permite a la fase de fusión de salida usar simultáneamente ambas salidas de sombreador de píxeles (O0 y O1) como entradas de una operación de mezcla con el destino de representación único en la ranura 0.This feature enables the Output Merger stage to simultaneously use both pixel shader outputs (o0 and o1) as inputs to a blending operation with the single render target at slot 0. Entre las operaciones de mezcla válidas se incluyen: Add, Retract y revsubtract.Valid blend operations include: add, subtract and revsubtract. La ecuación de Blend y la máscara de escritura de salida especifican qué componentes está generando el sombreador de píxeles.The blend equation and the output write mask specify which components the pixel shader is outputting. Se omiten los componentes adicionales.Extra components are ignored.

La escritura en otras salidas del sombreador de píxeles (O2, O3 etc.) no está definida. no se puede escribir en un destino de representación si no está enlazado a la ranura 0.Writing to other pixel shader outputs (o2, o3 etc.) is undefined; you may not write to a render target if it is not bound to slot 0. La escritura de oDepth es válida durante la combinación de colores de origen dual.Writing oDepth is valid during dual source color blending.

Información general sobre pruebas de estarcido de profundidadDepth-stencil testing overview

Un búfer de estarcido de profundidad, que se crea como un recurso de textura, puede contener datos de profundidad y datos de estarcido.A depth-stencil buffer, which is created as a texture resource, can contain both depth data and stencil data. Los datos de profundidad se usan para determinar qué píxeles se encuentran más cerca de la cámara, y los datos de la galería de símbolos se usan para enmascarar los píxeles que se pueden actualizar.The depth data is used to determine which pixels lie closest to the camera, and the stencil data is used to mask which pixels can be updated. En última instancia, la fase de combinación de resultados utiliza los datos de los valores Depth y stencil para determinar si se debe dibujar un píxel.Ultimately, both the depth and stencil values data are used by the output-merger stage to determine if a pixel should be drawn or not. En el diagrama siguiente se muestra conceptualmente cómo se realizan las pruebas de profundidad de la galería de símbolos.The following diagram shows conceptually how depth-stencil testing is done.

diagrama de cómo funciona la prueba de profundidad-estarcido

Para configurar las pruebas de profundidad y estarcido, consulte configuración de la funcionalidad de la galería de símbolosde profundidad.To configure depth-stencil testing, see Configuring Depth-Stencil Functionality. Un objeto de galería de símbolos de profundidad encapsula el estado de la galería de símbolos de profundidad.A depth-stencil object encapsulates depth-stencil state. Una aplicación puede especificar el estado de la galería de símbolos de profundidad o la fase OM usará los valores predeterminados.An application can specify depth-stencil state, or the OM stage will use default values. Las operaciones de combinación se realizan por píxel si el muestreo múltiple está deshabilitado.Blending operations are performed on a per-pixel basis if multisampling is disabled. Si el muestreo múltiple está habilitado, la fusión se produce en cada muestreo.If multisampling is enabled, blending occurs on a per-multisample basis.

El proceso de usar el búfer de profundidad para determinar qué píxel se debe dibujar se denomina almacenamiento en búfer de profundidad, también denominado almacenamiento en búfer z.The process of using the depth buffer to determine which pixel should be drawn is called depth buffering, also sometimes called z-buffering.

Una vez que los valores de profundidad llegan a la fase de fusión de salida (ya sea desde la interpolación o desde un sombreador de píxeles), siempre están fijados: z = min (viewport. MaxDepth, Max (viewport. MinDepth, z)) según el formato y la precisión del búfer de profundidad, mediante reglas de punto flotante.Once depth values reach the output-merger stage (whether coming from interpolation or from a pixel shader) they are always clamped: z = min(Viewport.MaxDepth,max(Viewport.MinDepth,z)) according to the format/precision of the depth buffer, using floating-point rules. Después de la compresión, se compara el valor de profundidad (mediante DepthFunc) con el valor de búfer de profundidad existente.After clamping, the depth value is compared (using DepthFunc) against the existing depth-buffer value. Si no se enlaza ningún búfer de profundidad, la prueba de profundidad siempre se supera.If no depth buffer is bound, the depth test always passes.

Si no hay ningún componente de estarcido en el formato de búfer de profundidad o no hay ningún límite de búfer de profundidad, la prueba de estarcido siempre pasa.If there is no stencil component in the depth-buffer format, or no depth buffer bound, then the stencil test always passes.

Solo un búfer de profundidad/estarcido puede estar activo a la vez; cualquier vista de recursos enlazada debe coincidir con la vista de profundidad/estarcido (el mismo tamaño y dimensiones).Only one depth/stencil buffer can be active at a time; any bound resource view must match (same size and dimensions) the depth/stencil view. Esto no significa que el tamaño del recurso debe coincidir, solo que el tamaño de la vista debe coincidir.This does not mean the resource size must match, just that the view size must match.

Información general de la máscara de ejemploSample mask overview

Una máscara de ejemplo es una máscara de cobertura Multimuestra de 32 bits que determina qué muestras se actualizan en los destinos de representación activos.A sample mask is a 32-bit multisample coverage mask that determines which samples get updated in active render targets. Solo se permite una máscara de ejemplo.Only one sample mask is allowed. El usuario define la asignación de bits en una máscara de ejemplo a los ejemplos de un recurso.The mapping of bits in a sample mask to the samples in a resource is defined by a user. En la representación de n-Sample, se usan los primeros n bits (del LSB) de la máscara de ejemplo (32 bits es el número máximo de bits).For n-sample rendering, the first n bits (from the LSB) of the sample mask are used (32 bits it the maximum number of bits).

EntradasInput

La fase de fusión de salida (OM) genera el color de píxel representado final mediante una combinación de lo siguiente:The Output Merger (OM) stage generates the final rendered pixel color using a combination of the following:

  • Estado de canalizaciónPipeline state
  • Los datos de píxeles generados por los sombreadores de píxelesThe pixel data generated by the pixel shaders
  • El contenido de los destinos de representaciónThe contents of the render targets
  • El contenido de los búferes de profundidad/estarcido.The contents of the depth/stencil buffers.

GenereOutput

Salida: Introducción a la máscara de escrituraOutput-write mask overview

Use una máscara de salida-escritura para controlar (por componente) Qué datos se pueden escribir en un destino de representación.Use an output-write mask to control (per component) what data can be written to a render target.

Información general de varios destinos de representaciónMultiple render targets overview

Un sombreador de píxeles se puede usar para representar al menos 8 destinos de representación independientes, todos ellos deben ser del mismo tipo (buffer, Texture1D, Texture1DArray, etc.).A pixel shader can be used to render to at least 8 separate render targets, all of which must be the same type (buffer, Texture1D, Texture1DArray, and so on). Además, todos los destinos de representación deben tener el mismo tamaño en todas las dimensiones (ancho, alto, profundidad, tamaño de la matriz, recuentos de muestras).Furthermore, all render targets must have the same size in all dimensions (width, height, depth, array size, sample counts). Cada destino de representación puede tener un formato de datos diferente.Each render target may have a different data format.

Puede usar cualquier combinación de ranuras de destinos de representación (hasta 8).You may use any combination of render targets slots (up to 8). Sin embargo, una vista de recursos no se puede enlazar a varias ranuras de destino de representación simultáneamente.However, a resource view cannot be bound to multiple render-target-slots simultaneously. Una vista se puede volver A usar siempre que los recursos no se usen simultáneamente.A view may be reused as long as the resources are not used simultaneously.

En esta secciónIn this section

TemaTopic DescripciónDescription

Configurar la funcionalidad de la galería de símbolos de profundidadConfiguring depth-stencil functionality

En esta sección se explican los pasos para configurar el búfer de estarcido de profundidad y el estado de la galería de símbolos de profundidad para la fase de combinación de salida.This section covers the steps for setting up the depth-stencil buffer, and depth-stencil state for the output-merger stage.

 

Temas relacionadosRelated topics

Canalización de gráficosGraphics pipeline