Registro colori di output

I registri di output dei colori del pixel shader (oC#) sono registri di sola scrittura che generano risultati in più destinazioni di rendering.

Sintassi

Oc #

 

Dove:

Nome Descrizione
oC0 destinazione di rendering #0
oC1 destinazione di rendering n. 1
oC2 destinazione di rendering n. 2
oC3 destinazione di rendering n. 3

 

Commenti

  • Se oCn è scritto ma non esiste una destinazione di rendering corrispondente, questa scrittura in oCn viene ignorata.
  • Gli stati di rendering D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2 e D3DRS_COLORWRITEENABLE3 determinare quali componenti di oCn vengono infine scritti nella destinazione di rendering (se applicabile). Se lo shader scrive alcuni componenti ma non tutti i componenti definiti dagli stati di rendering D3DRS_COLORWRITEENABLE* per un determinato registro oCn, i canali non scritti producono valori non definiti nella destinazione di rendering corrispondente. Se nessuno dei componenti di un oCn viene scritto, la destinazione di rendering corrispondente non deve essere aggiornata affatto (come indicato in precedenza), quindi gli stati di rendering D3DRS_COLORWRITEENABLE* non si applicano.

Restrizioni del modello shader 2

  • oCn può essere scritto solo con l'istruzione mov - ps .
  • oC0 deve essere sempre scritto nello shader.
  • Non è consentito alcun swizzle di origine (tranne .xyzw = swizzle predefinito) o modificatore di origine durante la scrittura in qualsiasi oCn.
  • Nessuna maschera di scrittura di destinazione (tranne .xyzw = maschera predefinita) o modificatore di istruzioni è consentita durante la scrittura in qualsiasi oCn.
  • Se oCn è scritto, è necessario scrivere anche oC0 - oCn-1. Ad esempio, per scrivere in oC2, è necessario scrivere anche in oC0 e oC1.
  • Al massimo una scrittura in qualsiasi oC# per ogni shader è consentita.
  • Per ps_2_x e ps_3_0, non è possibile scrivere nei registri oC# e oD# all'interno del controllo o del predicato del flusso dinamico (le scritture in oC# all'interno del controllo flusso statico sono appropriate).

Restrizioni del modello shader 3

  • 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 il renderingtarget corrispondente non viene aggiornato. Se viene scritto un subset dei canali in un registro di output, i valori non definiti verranno scritti nei canali rimanenti.
  • Per ps_3_0, i registri oC# possono essere scritti con qualsiasi maschera di scrittura.
  • Per ps_2_x e ps_3_0, non è possibile scrivere nei registri oC# e oD# all'interno del controllo o del predicato del flusso dinamico (le scritture in oC# all'interno del controllo flusso statico sono appropriate).
  • Non è possibile eseguire calcoli sfumature (o operazioni che richiamano in modo implicito calcoli sfumature, ad esempio texld - ps_2_0 e up, texldb - ps, texldp - ps) all'interno delle istruzioni di controllo del flusso le cui condizioni di diramazione variano in base alla primitiva (ad esempio: istruzioni di controllo del flusso dinamico). Il predicato dell'istruzione non è considerato controllo di flusso dinamico.

Registri

Più destinazioni di rendering (Direct3D 9)