輸出深度快取器
圖元著色器輸出深度緩存器 (oDepth) 是具有範圍 [0..1] 的僅限寫入純量緩存器,會針對深度樣板緩衝區傳回深度測試的新深度值。
語法
oDepth |
---|
哪裡:
名字 | 描述 |
---|---|
oDepth | 針對深度樣板緩衝區進行深度測試的新深度值 |
請務必注意,寫入 oDepth 會導致任何硬體特定深度緩衝區優化演算法(即階層式 Z)遺失,以加速深度測試效能。
寫入 oDepth 時,需要復寫來源 swizzle (.x | .y | .z | .w) 。 不允許明確寫入遮罩。
寫入 oDepth 快取器會取代插入深度值(並忽略任何深度偏差/斜率縮放轉譯統計數據)。 如果尚未建立或連結至裝置的深度緩衝區,則會忽略寫入 oDepth。
如果您是多重取樣並寫入 oDepth,因為圖元著色器只會針對每個圖元執行一次,您的深度值會針對所有涵蓋的子樣本位置進行複寫。 深度測試仍會進行個別取樣,但如果您沒有從圖元著色器進行比較的每個樣本深度值,就像您未撰寫 oDepth 一樣。
如果應用程式已將 w 緩衝區設定為其深度緩衝區,則在寫入 oDepth 時必須考慮該緩衝區。 它可能需要將 w 範圍資訊傳送至圖元著色器,並計算 w 範圍,以調整寫出至 oDepth 的 w 值。
ps_2_0和ps_2_x限制
- oDepth 只能使用mov 撰寫 - ps 指令,而且只能完成一次。
- 寫入 oDepth 時,不允許任何來源修飾詞。
- 寫入 oDepth 時不允許任何指令修飾詞。
- 在流程控制建構內或使用述詞時,不寫入 oDepth。
ps_3_0限制
- 針對ps_3_0,輸出緩存器 oC# 和 oD# 可以寫入任何次數。 圖元著色器的輸出來自著色器執行結束時輸出緩存器的內容。 如果寫入輸出緩存器未發生,可能是因為流程控制或著色器只是未寫入它,則對應的轉譯目標也不會更新。 如果寫入輸出緩存器中的通道子集,則會將未定義的值寫入其餘通道。
- 只要所有可能的路徑最終都會寫入緩存器,就可以在流程控制或述詞內寫入 oDepth。
- 您不可以執行任何漸層計算(或隱含叫用漸層計算的作業,例如 texld - ps_2_0和向上、texldb - ps、texldp - ps)的流程控制語句內,其分支條件會根據每個基本基礎而有所不同(例如:動態流程控制指示)。 指令述詞不會被視為動態流程控制。
相關主題