共用方式為


輸出深度暫存器

圖元著色器輸出深度暫存器 (oDepth) 是唯寫純量暫存器,其範圍 [0..1] 會針對深度樣板緩衝區傳回深度測試的新深度值。

Syntax

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 和 uptexldb - ps、texldp - ps) ,其流程式控制制語句內的分支條件會依每個基本基礎而有所不同, (例如:動態流程式控制制指令) 。 指令預先設定不會被視為動態流程式控制制。

寄存 器