Condividi tramite


Metodo ID3D12GraphicsCommandList1::SetSamplePositions (d3d12.h)

Questo metodo configura le posizioni di esempio utilizzate da operazioni di disegno, copia, risoluzione e simili successive.

Sintassi

void SetSamplePositions(
  [in] UINT                  NumSamplesPerPixel,
  [in] UINT                  NumPixels,
  [in] D3D12_SAMPLE_POSITION *pSamplePositions
);

Parametri

[in] NumSamplesPerPixel

Tipo: UINT

SAL: In

Specifica il numero di campioni da accettare, per pixel. Questo valore può essere 1, 2, 4, 8 o 16; in caso contrario, la chiamata SetSamplePosition viene eliminata. Il numero di campioni deve corrispondere al numero di campioni configurato nel PSO in fase di disegno. In caso contrario, il comportamento non è definito.

[in] NumPixels

Tipo: UINT

SAL: In

Specifica il numero di pixel per cui vengono specificati i modelli di esempio. Questo valore può essere 1 o 4. In caso contrario, la chiamata SetSamplePosition viene eliminata. Il valore 1 configura un singolo modello di esempio da usare per ogni pixel; Un valore pari a 4 configura modelli di esempio separati per ogni pixel in una griglia di 2x2 pixel che viene ripetuta sullo spazio di destinazione di rendering o viewport, allineato alle coordinate pari.

Si noti che il numero massimo di campioni combinati non può superare 16, altrimenti la chiamata viene eliminata. Se NumPixels è impostato su 4, NumSamplesPerPixel non può specificare più di 4 campioni.

[in] pSamplePositions

Tipo: D3D12_SAMPLE_POSITION*

SAL: In_reads(NumSamplesPerPixel*NumPixels)

Specifica una matrice di elementi D3D12_SAMPLE_POSITION. Le dimensioni della matrice sono NumPixels * NumSamplesPerPixel. Se NumPixels è impostato su 4, il primo gruppo di posizioni campione corrisponde al pixel superiore sinistro nella griglia 2x2 di pixel; il gruppo successivo di posizioni campione corrisponde al pixel superiore destro, al gruppo successivo al pixel inferiore sinistro e al gruppo finale al pixel inferiore destro.

Se durante il rendering viene usata l'interpolazione centroide, l'ordine delle posizioni per ogni pixel determina la priorità di campionamento centroid. Ovvero, il primo campione coperto nell'ordine specificato viene scelto come posizione del campione centroide.

Valore restituito

nessuno

Osservazioni

La semantica operativa delle posizioni di esempio è determinata dalle varie operazioni di disegno, copia, risoluzione e altre operazioni che possono verificarsi.

CommandList: In assenza di chiamate precedenti a SetSamplePositions in un oggetto CommandList, gli esempi presuppongono la posizione predefinita in base all'oggetto Stato pipeline (PSO). Le posizioni predefinite sono determinate dalla parte SAMPLE_DESC dell'oggetto PSO, se presente, o dalle posizioni standard del campione se la parte RASTERIZER_DESC del PSO ha ForcedSampleCount impostato su un valore maggiore di 0.

Dopo aver chiamato SetSamplePosition, le chiamate di disegno successive devono usare un PSO che specifica un conteggio di campioni corrispondente usando la parte SAMPLE_DESC del PSO o ForcedSampleCount nella parte RASTERIZER_DESC dell'oggetto PSO.

SetSamplePositions può essere chiamato solo in un oggetto CommandList grafico. Non può essere chiamato in un bundle; i bundle ereditano lo stato della posizione di esempio dall'oggetto CommandList chiamante e non lo modificano.

La chiamata a SetSamplePositions(0, 0, NULL) ripristina le posizioni di esempio sui valori predefiniti.

Cancella RenderingTarget: Le posizioni di esempio vengono ignorate quando si cancella una destinazione di rendering.

Clear DepthStencil: Quando si cancella la parte di profondità di una superficie depth-stencil o di qualsiasi area, le posizioni del campione devono essere impostate in modo che corrispondano a quelle del rendering futuro alla superficie o all'area cancellata; il contenuto di tutte le aree non chiare prodotte utilizzando posizioni di esempio diverse diventano indefinite.

Quando si cancella la parte dello stencil di una superficie depth-stencil o di qualsiasi area di esso, le posizioni campione vengono ignorate.

Disegnare per RenderTarget: Quando si disegna in una destinazione di rendering, è possibile modificare le posizioni del campione per ogni chiamata di disegno, anche quando si disegna in un'area che si sovrappone alle chiamate di disegno precedenti. Le posizioni di esempio correnti determinano la semantica operativa di ogni chiamata di disegno e i campioni vengono ricavati dal contenuto archiviato della destinazione di rendering, anche se il contenuto è stato prodotto utilizzando posizioni di esempio diverse.

Disegnare usando DepthStencil: Quando si esegue il disegno in una superficie depth-stencil (lettura o scrittura) o in qualsiasi area, le posizioni del campione devono essere impostate in modo che corrispondano a quelle usate per cancellare l'area interessata in precedenza. Per usare una posizione di esempio diversa, è prima necessario cancellare l'area di destinazione. I pixel esterni all'area non sono interessati.

L'hardware può archiviare la parte di profondità o una superficie depth-stencil come equazioni del piano e valutarle per produrre valori di profondità quando l'applicazione rilascia una lettura. Solo il rasterizzatore e la fusione di output sono necessari per supportare posizioni campione programmabili della parte di profondità di una superficie depth-stencil. Qualsiasi altra lettura o scrittura della parte di profondità di cui è stato eseguito il rendering con posizioni campione impostate può ignorarle e invece campionarle nelle posizioni standard.

Risolvere RenderTarget: Durante la risoluzione di una destinazione di rendering o di qualsiasi area, le posizioni di esempio vengono ignorate; queste API operano solo sui valori di colore archiviati.

Risolvere DepthStencil: Quando si risolve la parte di profondità di una superficie depth-stencil o di qualsiasi area, le posizioni del campione devono essere impostate in modo che corrispondano a quelle del rendering precedente alla superficie o all'area risolta. Per usare una posizione di esempio diversa, è prima necessario cancellare l'area di destinazione.

Quando si risolve la parte dello stencil di una superficie depth-stencil o di qualsiasi area di esso, le posizioni campione vengono ignorate; stencil risolve il funzionamento solo sui valori degli stencil archiviati.

Copia RenderTarget: Durante la copia da una destinazione di rendering, le posizioni di esempio vengono ignorate indipendentemente dal fatto che si tratti di una copia completa o parziale.

Copia DepthStencil (sottorisorsa completa): Quando si copia una sottorisorsa completa da una superficie depth-stencil, le posizioni del campione devono essere impostate in modo che corrispondano alle posizioni campione usate per generare la superficie di origine. Per usare una posizione di esempio diversa, è prima necessario cancellare l'area di destinazione.

In alcune proprietà hardware della superficie di origine (ad esempio, equazioni del piano archiviate per i valori di profondità) vengono trasferite nella destinazione. Pertanto, se la superficie di destinazione viene disegnata successivamente, le posizioni di esempio originariamente utilizzate per generare il contenuto di origine devono essere utilizzate con la superficie di destinazione. L'API richiede questa funzionalità in tutti gli hardware per coerenza anche se può essere applicata solo ad alcuni.

Copy DepthStencil (Partial Subresource): Quando si copia una sottorisorsa parziale da una superficie depth-stencil, le posizioni di esempio devono essere impostate in modo che corrispondano alle posizioni di esempio utilizzate per generare la superficie di origine, in modo analogo alla copia di una sottorisorsa completa. Tuttavia, se il contenuto di una sottorisorsa di destinazione interessata è coperto solo parzialmente dalla copia, il contenuto della parte individuata all'interno di tali sottorisorse diventa indefinito a meno che non vengano generate tutte le risorse usando le stesse posizioni di esempio dell'origine di copia. Per usare una posizione di esempio diversa, è prima necessario cancellare l'area di destinazione.

Quando si copia una sottorisorsa parziale dalla parte stencil di una superficie depth-stencil, i postions di esempio vengono ignorati. Non importa quali posizioni di esempio sono state usate per generare contenuto per qualsiasi altra area del buffer di destinazione non coperta dalla copia. Tali contenuti rimangono validi.

SamplePos shader: L'intrinseco HLSL SamplePos non riconosce le posizioni programmabili del campione e i risultati restituiti agli shader che lo chiamano su una superficie sottoposta a rendering con posizioni programmabili non sono definite. Se necessario, le applicazioni devono passare le coordinate al proprio shader manualmente. Analogamente, la valutazione degli attributi per indice di esempio non è definita con posizioni di esempio programmabili.

Transizione dallo stato di DEPTH_READ o di DEPTH_WRITE: Se una sottorisorsa in DEPTH_READ o DEPTH_WRITE stato viene passata a qualsiasi altro stato, tra cui COPY_SOURCE o RESOLVE_SOURCE, potrebbe essere necessario decomprimere la superficie. Pertanto, le posizioni di esempio devono essere impostate nell'elenco di comandi in modo che corrispondano a quelle usate per generare il contenuto nell'area di origine. Inoltre, per tutte le transizioni successive della superficie, mentre gli stessi dati di profondità rimangono al suo interno, le posizioni di esempio devono continuare a corrispondere a quelle impostate nell'elenco dei comandi. Per usare una posizione di esempio diversa, è prima necessario cancellare l'area di destinazione.

Se un'applicazione vuole ridurre al minimo l'area decompressa quando è necessario usare solo una parte o solo per mantenere la compressione, è possibile chiamare ResolveSubresourceRegion() in modalità DECOMPRESS con un rect specificato. In questo modo si decomprime solo l'area pertinente per una risorsa separata lasciando intatta l'origine in alcuni hardware, anche se in altri hardware anche l'area di origine è decompressa. La risorsa separata decompressa può quindi essere passata allo stato desiderato, ad esempio SHADER_RESOURCE.

Transizione dallo stato RENDER_TARGET: Se viene eseguita la transizione di una sottorisorsa nello stato RENDER_TARGET diverso da COPY_SOURCE o RESOLVE_SOURCE, è possibile che alcune implementazioni debbano decomprimere la superficie. Questa decompressione è indipendente dalle posizioni campione.

Se un'applicazione vuole ridurre al minimo l'area decompressa quando è necessario usare solo una parte o solo per mantenere la compressione, è possibile chiamare ResolveSubresourceRegion() in modalità DECOMPRESS con un rect specificato. In questo modo si decomprime solo l'area pertinente per una risorsa separata lasciando intatta l'origine in alcuni hardware, anche se in altri hardware anche l'area di origine è decompressa. La risorsa separata decompressa può quindi essere passata allo stato desiderato, ad esempio SHADER_RESOURCE.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d12.h
Libreria D3d12.lib
DLL D3d12.dll

Vedi anche

ID3D12GraphicsCommandList1