輸出色彩快取器
圖元著色器色彩輸出緩存器 (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 - ps、texldp - ps)的流程控制語句內,其分支條件會根據每個基本基礎而有所不同(例如:動態流程控制指示)。 指令述詞不會被視為動態流程控制。
相關主題