Fase di unione dell'outputOutput Merger (OM) stage

La fase di Unione output (OM) combina vari tipi di dati di output (pixel shader valori, informazioni di profondità e stencil) con il contenuto della destinazione di rendering e i buffer di profondità/stencil per generare il risultato finale della 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.

Scopo e usiPurpose and uses

La fase di Unione dell'output è il passaggio finale per determinare quali pixel sono visibili (con test di stencil Depth) e i colori finali dei pixel.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 il colore del pixel finale sottoposto a rendering utilizzando una combinazione dei seguenti elementi:The OM stage generates the final rendered pixel color using a combination of the following:

  • Stato della pipelinePipeline state
  • Dati pixel generati dai pixel shaderThe pixel data generated by the pixel shaders
  • Contenuto delle destinazioni di renderingThe contents of the render targets
  • Contenuto dei buffer di profondità/stencil.The contents of the depth/stencil buffers.

Panoramica della fusioneBlending overview

La fusione combina uno o più valori di pixel per creare un colore finale del pixel.Blending combines one or more pixel values to create a final pixel color. Il diagramma seguente illustra il processo richiesto per la fusione dei dati pixel.The following diagram shows the process involved in blending pixel data.

diagramma di come funziona la fusione dei dati

Dal punto di vista concettuale, è possibile visualizzare questo diagramma di flusso implementato due volte nella fase di Unione dell'output: la prima combina i dati RGB, mentre in parallelo, un secondo combina i dati 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. Per informazioni su come usare l'API per creare e impostare lo stato di Blend, vedere configurazione della funzionalità di fusione.To see how to use the API to create and set blend state, see Configuring Blending Functionality.

La funzione Fixed-Blend può essere abilitata in modo indipendente per ogni destinazione di rendering.Fixed-function blend can be enabled independently for each render target. Tuttavia è presente un solo set di controlli Blend, in modo che la stessa Blend venga applicata a tutti RenderTargets con la fusione abilitata.However there is only one set of blend controls, so that the same blend is applied to all RenderTargets with blending enabled. I valori di Blend (incluso BlendFactor) vengono sempre bloccati nell'intervallo del formato di destinazione di rendering prima della fusione.Blend values (including BlendFactor) are always clamped to the range of the render-target format before blending. Il blocco viene eseguito per ogni destinazione di rendering, rispettando il tipo di destinazione di rendering.Clamping is done per render target, respecting the render target type. L'unica eccezione riguarda i formati float16, float11 o float10 che non vengono bloccati, in modo che le operazioni di Blend in questi formati possano essere eseguite con una precisione o un intervallo almeno uguale a quello del formato di output.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. I NaN e gli zeri con segno vengono propagati per tutti i casi (compresi i pesi di 0,0 Blend).NaN's and signed zeros are propagated for all cases (including 0.0 blend weights).

Quando si usano le destinazioni di rendering sRGB, il runtime converte il colore della destinazione di rendering in uno spazio lineare prima di eseguire la fusione.When you use sRGB render targets, the runtime converts the render target color into linear space before it performs blending. Il runtime converte nuovamente il valore di Blend finale nello spazio sRGB prima di salvarlo di nuovo nella destinazione di rendering.The runtime converts the final blended value back into sRGB space before it saves the value back to the render target.

Combinazione di colori dual sourceDual-source color blending

Questa funzionalità consente alla fase di Unione dell'output di usare contemporaneamente entrambi gli output pixel shader (o0 e O1) come input per un'operazione di fusione con la singola destinazione di rendering nello slot 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. Le operazioni di Blend valide includono: Add, Subtract e RevSubtract.Valid blend operations include: add, subtract and revsubtract. L'equazione di Blend e la maschera di scrittura di output specificano i componenti che l'pixel shader sta inserendo.The blend equation and the output write mask specify which components the pixel shader is outputting. I componenti aggiuntivi vengono ignorati.Extra components are ignored.

La scrittura in altri output pixel shader (O2, O3 e così via) non è definita. non è possibile scrivere in una destinazione di rendering se non è associato allo slot 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 scrittura di oDepth è valida durante la combinazione di colori di origine doppia.Writing oDepth is valid during dual source color blending.

Panoramica sul test di stencil DepthDepth-stencil testing overview

Un buffer di stencil Depth, creato come una risorsa di trama, può contenere sia dati di profondità che dati di stencil.A depth-stencil buffer, which is created as a texture resource, can contain both depth data and stencil data. I dati di profondità vengono utilizzati per determinare quali pixel si trovano più vicini alla fotocamera e i dati dello stencil vengono utilizzati per mascherare i pixel che è possibile aggiornare.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. Infine, i dati relativi ai valori di profondità e stencil vengono usati dalla fase di Unione dell'output per determinare se un pixel deve essere disegnato o meno.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. Il diagramma seguente illustra concettualmente il modo in cui viene eseguito il test di stencil Depth.The following diagram shows conceptually how depth-stencil testing is done.

diagramma del funzionamento del test di stencil Depth

Per configurare il test di stencil Depth, vedere configurazione della funzionalità depth-stencil.To configure depth-stencil testing, see Configuring Depth-Stencil Functionality. Un oggetto stencil Depth incapsula lo stato di stencil Depth.A depth-stencil object encapsulates depth-stencil state. Un'applicazione può specificare lo stato di stencil Depth oppure la fase OM utilizzerà i valori predefiniti.An application can specify depth-stencil state, or the OM stage will use default values. Se il campionamento multiplo è disabilitato, le operazioni di fusione vengono eseguite in base ai singoli pixel.Blending operations are performed on a per-pixel basis if multisampling is disabled. Se è abilitato il campionamento multiplo, la fusione si verifica in base a ogni singolo campione.If multisampling is enabled, blending occurs on a per-multisample basis.

Il processo di utilizzo del buffer di profondità per determinare il pixel da disegnare viene definito buffering di profondità, anche a volte definito buffer 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 volta che i valori di profondità raggiungono la fase di Unione dell'output (sia proveniente dall'interpolazione che da un pixel shader), vengono sempre bloccati: z = min (viewport. MaxDepth, Max (viewport. MinDepth, z)) in base al formato o alla precisione del buffer di profondità, usando le regole a virgola mobile.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. Dopo la chiusura, il valore di profondità viene confrontato (usando DepthFunc) con il valore del buffer di profondità esistente.After clamping, the depth value is compared (using DepthFunc) against the existing depth-buffer value. Se non è associato alcun buffer di profondità, il test di profondità viene sempre superato.If no depth buffer is bound, the depth test always passes.

Se non è presente alcun componente dello stencil nel formato del buffer di profondità o nessun limite di buffer di profondità, il test di stencil viene sempre superato.If there is no stencil component in the depth-buffer format, or no depth buffer bound, then the stencil test always passes.

Può essere attivo un solo buffer di profondità/stencil alla volta. qualsiasi visualizzazione delle risorse associata deve corrispondere (dimensione e dimensioni uguali) alla visualizzazione profondità/stencil.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. Questo non significa che le dimensioni della risorsa devono corrispondere, solo che le dimensioni della vista devono corrispondere.This does not mean the resource size must match, just that the view size must match.

Panoramica della maschera di esempioSample mask overview

Una maschera di esempio è una maschera di code coverage multisample a 32 bit che determina quali esempi vengono aggiornati nelle destinazioni di rendering attive.A sample mask is a 32-bit multisample coverage mask that determines which samples get updated in active render targets. È consentita una sola maschera di esempio.Only one sample mask is allowed. Il mapping dei bit in una maschera di esempio agli esempi in una risorsa è definito da un utente.The mapping of bits in a sample mask to the samples in a resource is defined by a user. Per il rendering n-Sample, vengono usati i primi n bit (dal LSB) della maschera di esempio (32 bit il numero massimo di bit).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).

InputInput

La fase di Unione dell'output genera il colore del pixel finale sottoposto a rendering utilizzando una combinazione dei seguenti elementi:The Output Merger (OM) stage generates the final rendered pixel color using a combination of the following:

  • Stato della pipelinePipeline state
  • Dati pixel generati dai pixel shaderThe pixel data generated by the pixel shaders
  • Contenuto delle destinazioni di renderingThe contents of the render targets
  • Contenuto dei buffer di profondità/stencil.The contents of the depth/stencil buffers.

OutputOutput

Output-Panoramica della maschera di scritturaOutput-write mask overview

Usare una maschera di scrittura di output per controllare (per componente) quali dati possono essere scritti in una destinazione di rendering.Use an output-write mask to control (per component) what data can be written to a render target.

Panoramica di più destinazioni di renderingMultiple render targets overview

È possibile utilizzare un pixel shader per eseguire il rendering di almeno 8 destinazioni di rendering separate, che devono essere dello stesso tipo (buffer, Texture1D, Texture1DArray e così via).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). Inoltre, tutte le destinazioni di rendering devono avere le stesse dimensioni in tutte le dimensioni (larghezza, altezza, profondità, dimensioni della matrice, conteggi di esempio).Furthermore, all render targets must have the same size in all dimensions (width, height, depth, array size, sample counts). Ogni destinazione di rendering può avere un formato dati diverso.Each render target may have a different data format.

È possibile utilizzare qualsiasi combinazione di slot di destinazioni di rendering (fino a 8).You may use any combination of render targets slots (up to 8). Tuttavia, una visualizzazione delle risorse non può essere associata a più slot di destinazione di rendering simultaneamente.However, a resource view cannot be bound to multiple render-target-slots simultaneously. Una vista può essere riutilizzata purché le risorse non vengano utilizzate simultaneamente.A view may be reused as long as the resources are not used simultaneously.

Contenuto della sezioneIn this section

ArgomentoTopic DescrizioneDescription

Configurazione della funzionalità depth-stencilConfiguring depth-stencil functionality

In questa sezione vengono illustrati i passaggi per configurare il buffer di stencil Depth e lo stato depth-stencil per la fase di Unione dell'output.This section covers the steps for setting up the depth-stencil buffer, and depth-stencil state for the output-merger stage.

 

Argomenti correlatiRelated topics

Pipeline graficaGraphics pipeline