共用方式為


輸出色彩快取器

圖元著色器色彩輸出緩存器 (oC#) 是僅寫入緩存器,可將結果輸出至多個轉譯目標。

語法

oC#

 

哪裡:

名字 描述
oC0 轉譯目標 #0
oC1 轉譯目標 #1
oC2 轉譯目標 #2
oC3 轉譯目標 #3

 

言論

  • 如果 oCn 已寫入,但沒有對應的轉譯目標,則會忽略此寫入 oCn。
  • 轉譯狀態D3DRS_COLORWRITEENABLE、D3DRS_COLORWRITEENABLE1、D3DRS_COLORWRITEENABLE2和D3DRS_COLORWRITEENABLE3決定 oCn 的哪些元件最終會寫入轉譯目標(如果適用的話在混合之後)。 如果著色器寫入特定 oCn 快取器所定義的部分元件,但不是所有元件 D3DRS_COLORWRITEENABLE,則未寫入的通道會在對應的轉譯目標中產生未定義的值。 如果未寫入 oCn 的元件,則完全不能更新對應的轉譯目標(如上所述),因此不會套用D3DRS_COLORWRITEENABLE* 轉譯狀態。

著色器模型 2 限制

  • oCn 只能使用 mov - ps 指令來撰寫
  • oC0 必須一律以著色器撰寫。
  • 寫入任何 oCn 時,不允許來源 swizzle (除了 .xyzw = 預設 swizzle) 或來源修飾詞。
  • 寫入至任何 oCn 時,不允許使用目的地寫入遮罩 (除了 .xyzw = 預設遮罩) 或指令修飾詞。
  • 如果寫入 oCn,則 oC0 - oCn-1 也必須寫入。 例如,若要寫入 oC2,您也必須寫入 oC0 和 oC1。
  • 每個著色器最多一次寫入任何 oC# 都允許。
  • 對於ps_2_x和ps_3_0,您無法在動態流程控制或述詞內寫入 oC# 和 oD# 快取器(靜態流程控制內的 oC# 寫入沒問題)。

著色器模型 3 限制

  • 針對ps_3_0,輸出緩存器 oC# 和 oD# 可以寫入任何次數。 圖元著色器的輸出來自著色器執行結束時輸出緩存器的內容。 如果寫入輸出緩存器未發生,可能是因為流程控制或著色器只是未寫入,則對應的轉譯目標也不會更新。 如果寫入輸出緩存器中的通道子集,則會將未定義的值寫入其餘通道。
  • 針對ps_3_0,oC# 緩存器可以使用任何寫入掩碼來撰寫。
  • 對於ps_2_x和ps_3_0,您無法在動態流程控制或述詞內寫入 oC# 和 oD# 快取器(靜態流程控制內的 oC# 寫入沒問題)。
  • 您不可以執行任何漸層計算(或隱含叫用漸層計算的作業,例如 texld - ps_2_0和向上texldb - pstexldp - ps)的流程控制語句內,其分支條件會根據每個基本基礎而有所不同(例如:動態流程控制指示)。 指令述詞不會被視為動態流程控制。

快取器

多個轉譯目標 (Direct3D 9)