Daftar Warna Output

Register output warna shader piksel (oC#) adalah register hanya-tulis yang menghasilkan hasil ke beberapa target render.

Sintaks

Oc #

 

Mana:

Nama Deskripsi
oC0 render target #0
oC1 render target #1
oC2 render target #2
oC3 render target #3

 

Keterangan

  • Jika oCn ditulis tetapi tidak ada target render yang sesuai, maka penulisan ke oCn ini diabaikan.
  • Render menyatakan D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2 dan D3DRS_COLORWRITEENABLE3 menentukan komponen oCn mana yang pada akhirnya ditulis ke target render (setelah campuran, jika berlaku). Jika shader menulis beberapa tetapi tidak semua komponen yang ditentukan oleh status render D3DRS_COLORWRITEENABLE* untuk register oCn tertentu, maka saluran yang tidak ditulis menghasilkan nilai yang tidak terdefinisi dalam target render yang sesuai. Jika tidak ada komponen oCn yang ditulis, target render yang sesuai tidak boleh diperbarui sama sekali (seperti yang dinyatakan di atas), sehingga status render D3DRS_COLORWRITEENABLE* tidak berlaku.

Pembatasan Model Shader 2

  • oCn hanya dapat ditulis dengan instruksi mov - ps .
  • oC0 harus selalu ditulis dalam shader.
  • Tidak ada swizzle sumber (kecuali .xyzw = default swizzle) atau pengubah sumber yang diizinkan saat menulis ke oCn apa pun.
  • Tidak ada masker tulis tujuan (kecuali .xyzw = masker default) atau pengubah instruksi yang diizinkan saat menulis ke oCn apa pun.
  • Jika oCn ditulis, maka oC0 - oCn-1 juga harus ditulis. Misalnya, untuk menulis ke oC2, Anda juga harus menulis ke oC0 dan oC1.
  • Paling banyak satu penulisan ke oC# per shader diizinkan.
  • Untuk ps_2_x dan ps_3_0, Anda tidak dapat menulis ke oC# dan oD# mendaftar dalam kontrol atau predikasi alur dinamis (menulis ke oC# di dalam kontrol aliran statis baik-baik saja).

Pembatasan Model Shader 3

  • Untuk ps_3_0, output mendaftarkan oC# dan oD# dapat ditulis beberapa kali. Output shader piksel berasal dari konten register output di akhir eksekusi shader. Jika penulisan ke register output tidak terjadi, mungkin karena kontrol aliran atau jika shader tidak menulisnya, rendertarget yang sesuai juga tidak diperbarui. Jika subset saluran dalam register output ditulis, maka nilai yang tidak ditentukan akan ditulis ke saluran yang tersisa.
  • Untuk ps_3_0, register oC# dapat ditulis dengan writemasks apa pun.
  • Untuk ps_2_x dan ps_3_0, Anda tidak dapat menulis ke oC# dan oD# mendaftar dalam kontrol atau predikasi alur dinamis (menulis ke oC# di dalam kontrol aliran statis baik-baik saja).
  • Anda tidak boleh melakukan perhitungan gradien apa pun (atau operasi yang secara implisit memanggil perhitungan gradien seperti texld - ps_2_0 dan up, texldb - ps, texldp - ps) di dalam pernyataan kontrol aliran yang kondisi percabangannya bervariasi berdasarkan per-primitif (yaitu: instruksi kontrol aliran dinamis). Predikasi instruksi tidak dianggap sebagai kontrol alur dinamis.

Register

Multiple Render Targets (Direct3D 9)