共用方式為


輸出深度快取器

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

快取器