Registro profondità output
Il registro di profondità dell'output del pixel shader (oDepth) è un registro scalare di sola scrittura con l'intervallo [0..1] che restituisce un nuovo valore di profondità per un test di profondità sul buffer depth-stencil.
Sintassi
oDepth |
---|
Dove:
Nome | Descrizione |
---|---|
oDepth | Nuovo valore di profondità per un test di profondità sul buffer depth-stencil |
È importante tenere presente che la scrittura in oDepth causa la perdita di eventuali algoritmi di ottimizzazione del buffer di profondità specifici dell'hardware (ad esempio, gerarchici Z) che accelerano le prestazioni dei test di profondità.
Durante la scrittura in oDepth è necessario replicare swizzle di origine (.x | .y | .z | .w). Le maschere di scrittura esplicite non sono consentite.
La scrittura nel registro oDepth sostituisce il valore di profondità interpolato (e ignora eventuali rendering di distorsione della profondità/scala angolare). Se non è stato creato o collegato alcun buffer di profondità al dispositivo, la scrittura in oDepth viene ignorata.
Se si esegue il multicampionamento e si scrive in oDepth, poiché il pixel shader viene eseguito una sola volta per pixel, il valore di profondità viene replicato per tutte le posizioni di sottocampionamento coperte. Il test di profondità viene comunque eseguito per campione, ma non si dispone di un valore di profondità per campione durante il confronto dal pixel shader come se non si scrivesse oDepth.
Se un'applicazione ha un buffer w impostato come buffer di profondità, è necessario tenerne conto durante la scrittura in oDepth. Potenzialmente deve inviare informazioni sull'intervallo w al pixel shader e calcolare l'intervallo w per ridimensionare i valori w scritti in oDepth.
restrizioni ps_2_0 e ps_2_x
- oDepth può essere scritto solo con il mov - ps istruzione e può essere fatto solo una volta.
- Non è consentito alcun modificatore di origine durante la scrittura in oDepth.
- Non è consentito alcun modificatore di istruzioni durante la scrittura in oDepth.
- Nessuna scrittura in oDepth dall'interno di un costrutto di controllo di flusso o quando si usa il predicato.
restrizioni di ps_3_0
- Per ps_3_0, i registri di output oC# e oD# possono essere scritti in un numero qualsiasi di volte. L'output del pixel shader proviene dal contenuto dei registri di output alla fine dell'esecuzione dello shader. Se non viene eseguita una scrittura in un registro di output, ad esempio a causa del controllo del flusso o se lo shader non lo ha scritto, anche la destinazione di rendering corrispondente non viene aggiornata. Se viene scritto un subset dei canali in un registro di output, i valori non definiti verranno scritti nei canali rimanenti.
- È possibile scrivere in oDepth all'interno del controllo o del predicato del flusso, purché tutti i percorsi possibili possano essere scritti nel registro.
- Non è possibile eseguire calcoli sfumature (o operazioni che richiamano in modo implicito calcoli sfumature, ad esempio texld - ps_2_0 e, texldb - ps, texldp - ps) all'interno delle istruzioni di controllo del flusso le cui condizioni di diramazione variano in base a una base primitiva (ad esempio: istruzioni di controllo dinamico del flusso). Il predicato dell'istruzione non è considerato controllo di flusso dinamico.
Argomenti correlati