Étape Output Merger (OM)Output Merger (OM) stage

L’étape de fusion de sortie (OM) combine différents types de données de sortie (valeurs de nuanceur de pixels, détails et informations de stencil) au contenu de la cible de rendu et des mémoires tampons de profondeur/stencil pour générer le résultat final du pipeline.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.

Usage et utilisationsPurpose and uses

L’étape de fusion de sortie (OM) est la dernière étape permettant de déterminer les pixels visibles (avec test des stencils de profondeur) et de fusionner les couleurs finales des pixels.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.

L’étape OM génère la couleur de pixel rendue finale à l’aide d’une combinaison des éléments suivants :The OM stage generates the final rendered pixel color using a combination of the following:

  • État du pipelinePipeline state
  • Données de pixels générées par les nuanceurs de pixelsThe pixel data generated by the pixel shaders
  • Contenu des cibles de renduThe contents of the render targets
  • Contenu des mémoires tampons de profondeur/stencil.The contents of the depth/stencil buffers.

Vue d’ensemble de la fusionBlending overview

La fusion combine une ou plusieurs valeurs de pixel pour créer une couleur de pixel finale.Blending combines one or more pixel values to create a final pixel color. Le diagramme suivant illustre le processus impliqué dans la fusion de données de pixels.The following diagram shows the process involved in blending pixel data.

Diagramme illustrant le fonctionnement de la fusion de données

Conceptuellement, vous pouvez visualiser ce graphique de Flow implémenté deux fois dans l’étape de fusion de sortie : la première fusionne les données RVB, tandis qu’en parallèle, une seconde fusionne les données alpha.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. Pour savoir comment utiliser l’API pour créer et définir l’état de fusion, consultez Configuration de la fonctionnalité de fusion.To see how to use the API to create and set blend state, see Configuring Blending Functionality.

La fonction Fixed-Blend peut être activée indépendamment pour chaque cible de rendu.Fixed-function blend can be enabled independently for each render target. Toutefois, il n’existe qu’un seul jeu de contrôles Blend, de sorte que le même lissage est appliqué à tous les RenderTargets avec la fusion activée.However there is only one set of blend controls, so that the same blend is applied to all RenderTargets with blending enabled. Les valeurs de fusion (y compris BlendFactor) sont toujours ancrées à la plage du format de cible de rendu avant la fusion.Blend values (including BlendFactor) are always clamped to the range of the render-target format before blending. Le verrouillage est effectué par cible de rendu, en respectant le type de cible de rendu.Clamping is done per render target, respecting the render target type. La seule exception concerne les formats float16, float11 ou float10 qui ne sont pas ancrées afin que les opérations de fusion sur ces formats puissent être effectuées avec une précision ou une plage au moins égale à celle du format de sortie.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. Les zéros de NaN et signés sont propagés dans tous les cas (y compris les poids de fusion 0,0).NaN's and signed zeros are propagated for all cases (including 0.0 blend weights).

Lorsque vous utilisez des cibles de rendu sRVB, le Runtime convertit la couleur de la cible de rendu en espace linéaire avant d’effectuer la fusion.When you use sRGB render targets, the runtime converts the render target color into linear space before it performs blending. Le Runtime convertit la dernière valeur fusionnée en espace sRVB avant de l’enregistrer à nouveau dans la cible de rendu.The runtime converts the final blended value back into sRGB space before it saves the value back to the render target.

Fusion de couleurs à double sourceDual-source color blending

Cette fonctionnalité permet à l’étape de fusion de sortie d’utiliser simultanément des sorties de nuanceur de pixels (o0 et O1) comme entrées d’une opération de fusion avec la cible de rendu unique à l’emplacement 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. Les opérations de fusion valides sont les suivantes : Add, Subtract et revsubtract.Valid blend operations include: add, subtract and revsubtract. L’équation de fusion et le masque d’écriture de sortie spécifient les composants que le nuanceur de pixels est en train de sortir.The blend equation and the output write mask specify which components the pixel shader is outputting. Les composants supplémentaires sont ignorés.Extra components are ignored.

L’écriture dans d’autres sorties de nuanceur de pixels (O2, O3, etc.) n’est pas définie. vous ne pouvez pas écrire dans une cible de rendu si elle n’est pas liée à l’emplacement 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. L’écriture de oDepth est valide pendant la fusion de couleurs à double source.Writing oDepth is valid during dual source color blending.

Présentation-vue d’ensemble des tests stencilDepth-stencil testing overview

Une mémoire tampon de stencil de profondeur, créée en tant que ressource de texture, peut contenir à la fois des données de profondeur et des données de stencil.A depth-stencil buffer, which is created as a texture resource, can contain both depth data and stencil data. Les données de profondeur sont utilisées pour déterminer les pixels les plus proches de l’appareil photo, et les données du stencil sont utilisées pour masquer les pixels qui peuvent être mis à jour.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. Au final, les données de la profondeur et de la valeur du stencil sont utilisées par l’étape de fusion de sortie pour déterminer si un pixel doit être dessiné ou non.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. Le diagramme suivant illustre le fonctionnement conceptuel du test des stencils de profondeur.The following diagram shows conceptually how depth-stencil testing is done.

Diagramme illustrant le fonctionnement du test des stencils de profondeur

Pour configurer le test des stencils de profondeur, consultez configuration de la fonctionnalité de stencil de profondeur.To configure depth-stencil testing, see Configuring Depth-Stencil Functionality. Un objet de stencil de profondeur encapsule l’état de gabarit de profondeur.A depth-stencil object encapsulates depth-stencil state. Une application peut spécifier l’état du stencil de profondeur, ou l’étape OM utilisera les valeurs par défaut.An application can specify depth-stencil state, or the OM stage will use default values. Les opérations de fusion sont effectuées par pixel si l’échantillonnage multiple est désactivé.Blending operations are performed on a per-pixel basis if multisampling is disabled. Si l’échantillonnage multiple est activé, la fusion se produit sur une base par échantillonnage multiple.If multisampling is enabled, blending occurs on a per-multisample basis.

Le processus d’utilisation de la mémoire tampon de profondeur pour déterminer le pixel à dessiner est appelé mise en mémoire tampon de profondeur, également parfois appelé mise en mémoire tampon z.The process of using the depth buffer to determine which pixel should be drawn is called depth buffering, also sometimes called z-buffering.

Une fois les valeurs de profondeur atteintes à l’étape de fusion de sortie (qu’elles proviennent d’une interpolation ou d’un nuanceur de pixels), elles sont toujours ancrées : z = min (Viewport. MaxDepth, Max (Viewport. MinDepth, z)) en fonction du format/précision de la mémoire tampon de profondeur, à l’aide de règles à virgule flottante.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. Après le verrouillage, la valeur de profondeur est comparée (à l’aide de DepthFunc) à la valeur de mémoire tampon de profondeur existante.After clamping, the depth value is compared (using DepthFunc) against the existing depth-buffer value. Si aucun tampon de profondeur n’est lié, le test de profondeur passe toujours.If no depth buffer is bound, the depth test always passes.

S’il n’existe aucun composant de stencil dans le format de mémoire tampon de profondeur, ou si aucune limite de mémoire tampon de profondeur n’est liée, le test de stencil passe toujours.If there is no stencil component in the depth-buffer format, or no depth buffer bound, then the stencil test always passes.

Une seule mémoire tampon de gabarit ou de profondeur peut être active à la fois ; toute vue de ressource liée doit correspondre (taille et dimensions identiques) à la vue de la profondeur/du gabarit.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. Cela ne signifie pas que la taille de la ressource doit être la même que la taille de la vue doit correspondre.This does not mean the resource size must match, just that the view size must match.

Présentation de l’exemple de masqueSample mask overview

Un exemple de masque est un masque de couverture à exemple de 32 bits qui détermine les exemples qui sont mis à jour dans les cibles de rendu actives.A sample mask is a 32-bit multisample coverage mask that determines which samples get updated in active render targets. Un seul exemple de masque est autorisé.Only one sample mask is allowed. Le mappage des bits dans un exemple de masque aux exemples d’une ressource est défini par un utilisateur.The mapping of bits in a sample mask to the samples in a resource is defined by a user. Pour le rendu n-Sample, les n premiers bits (à partir du LSB) de l’échantillon de masque sont utilisés (32 bits le nombre maximal 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).

EntréeInput

L’étape de fusion de sortie (OM) génère la couleur de pixel rendue finale à l’aide d’une combinaison des éléments suivants :The Output Merger (OM) stage generates the final rendered pixel color using a combination of the following:

  • État du pipelinePipeline state
  • Données de pixels générées par les nuanceurs de pixelsThe pixel data generated by the pixel shaders
  • Contenu des cibles de renduThe contents of the render targets
  • Contenu des mémoires tampons de profondeur/stencil.The contents of the depth/stencil buffers.

SortieOutput

Vue d’ensemble du masque d’écriture de sortieOutput-write mask overview

Utilisez un masque d’écriture de sortie pour contrôler (par composant) les données qui peuvent être écrites dans une cible de rendu.Use an output-write mask to control (per component) what data can be written to a render target.

Vue d’ensemble des cibles de rendu multiplesMultiple render targets overview

Un nuanceur de pixels peut être utilisé pour effectuer le rendu sur au moins 8 cibles de rendu distinctes, qui doivent toutes être du même type (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). En outre, toutes les cibles de rendu doivent avoir la même taille dans toutes les dimensions (largeur, hauteur, profondeur, taille de tableau, nombre d’échantillons).Furthermore, all render targets must have the same size in all dimensions (width, height, depth, array size, sample counts). Chaque cible de rendu peut avoir un format de données différent.Each render target may have a different data format.

Vous pouvez utiliser n’importe quelle combinaison d’emplacements de cibles de rendu (jusqu’à 8).You may use any combination of render targets slots (up to 8). Toutefois, un affichage des ressources ne peut pas être lié à plusieurs emplacements de rendu-cible simultanément.However, a resource view cannot be bound to multiple render-target-slots simultaneously. Une vue peut être réutilisée tant que les ressources ne sont pas utilisées simultanément.A view may be reused as long as the resources are not used simultaneously.

Dans cette sectionIn this section

RubriqueTopic DescriptionDescription

Configuration de la fonctionnalité de profondeur-gabaritConfiguring depth-stencil functionality

Cette section décrit les étapes de configuration de la mémoire tampon du stencil de profondeur et l’état du gabarit de profondeur pour l’étape de fusion de sortie.This section covers the steps for setting up the depth-stencil buffer, and depth-stencil state for the output-merger stage.

 

Rubriques connexesRelated topics

Pipeline graphiqueGraphics pipeline