系統產生的值是由 輸入組合器(IA)階段產生的(根據使用者提供的輸入 語意),以提升著色器作業的某些效率。 藉由附加數據,例如實例標識碼(可見於 頂點著色器(VS)階段)、頂點標識碼(可見於 VS),或基本標識碼(可見於 幾何著色器(GS)階段/及像素著色器(PS)階段),後續的著色器階段可能會尋找這些系統值來優化該階段的處理。
例如,VS 階段可能會尋找實例 ID,以擷取著色器的額外逐頂點數據或執行其他操作;GS 和 PS 階段可以使用基元 ID 以相同方式擷取逐基元數據。
頂點標識碼
每個著色器階段都會使用頂點標識碼來識別每個頂點。 它是預設值為 0 的 32 位無符號整數。 在 輸入組合器(IA)階段處理圖元時,它會被指派給頂點。 將頂點 ID 語意附加到著色器輸入宣告,以通知 IA 階段生成每個頂點的 ID。
IA 會為每個頂點新增頂點ID,以供著色器階段使用。 針對每個繪圖呼叫,頂點ID會遞增1。 在編製索引的繪圖呼叫過程中,計數會重設回起始值。 如果頂點標識符溢出(超過 2³²–1),則會重置為 0。
針對所有基本類型,頂點都有與其相關聯的頂點標識碼(不論相鄰)。
原始識別碼
每個著色器階段都會使用原始ID來識別每個圖元。 它是預設值為 0 的 32 位無符號整數。 當圖元被 輸入組合器 (IA) 階段處理時,它會被指派給該圖元。 若要通知 IA 階段產生原始 ID,請將原始 ID 語意附加至著色器輸入宣告。
IA 階段會將圖元 ID 追加至每個基本類型,供 幾何著色器(GS)階段 或 頂點著色器(VS)階段 使用,這是 IA 階段之後的第一個啟動階段。 針對每個已編製索引的繪圖调用,原始 ID 会递增 1,不过,每當新實例開始时,原始 ID 就会重設为 0。 所有其他繪製呼叫都不會變更實例標識碼的值。 如果實例標識符溢位(超過 2³²–1),它會重置為 0。
像素著色器(PS)階段 沒有圖元 ID 的單獨輸入;不過,任何指定圖元 ID 的像素著色器輸入都會使用常量插值模式。
不支援自動產生相鄰基本類型的基本標識碼。 對於具有相鄰的基本類型,例如帶相鄰的三角形帶狀,只有內部的基元(非相鄰的基元)會維護基元識別碼,就像不具有相鄰的三角形帶狀中的基元集合一樣。
InstanceID
每個著色器階段都會使用實例標識碼來識別目前正在處理的幾何實例。 它是預設值為 0 的 32 位無符號整數。
如果頂點著色器輸入宣告包含實例標識符語意, 輸入組合器 (IA) 階段 會將實例識別碼新增至每個頂點。 針對每個已編製索引的繪製呼叫,實例 ID 會遞增 1。 所有其他繪製呼叫都不會變更實例標識碼的值。 如果實例 ID 發生溢位(超過 2³² - 1),它將重置為 0。
範例
以下圖示顯示系統值如何附加於 輸入組合器(IA)階段中的實例三角形帶狀。
這些數據表會顯示針對相同三角形帶狀結構之兩個實例所產生的系統值。 第一個實例 (實例 U) 以藍色顯示,第二個實例 (實例 V) 會以綠色顯示。 實線連接基本類型的頂點,虛線連接相鄰頂點。
下表顯示實例 U 的系統產生值。
| 頂點數據 | C,U | D,U | E,U | F,U | G、U | H、U | I,U | J,U | K、U | L,U |
|---|---|---|---|---|---|---|---|---|---|---|
| 頂點標識碼 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
三角形帶狀實例 U 有 3 個三角形基本類型,具有下列系統產生的值:
| 值 1 | 值 2 | 值 3 | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 0 | 0 | 0 |
下表顯示實例 V 的系統產生值。
| 頂點數據 | C,V | D,V | E,V | F,V | G、V | H、V | I、V | J,V | K,V | L、V |
|---|---|---|---|---|---|---|---|---|---|---|
| 頂點標識碼 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
三角形帶狀結構實例 V 有 3 個三角形基本類型,具有下列系統產生的值:
| 值 1 | 值 2 | 值 3 | |
|---|---|---|---|
| PrimitiveID | 0 | 1 | 2 |
| InstanceID | 1 | 1 | 1 |
輸入組合器 (IA) 階段會產生識別碼(頂點、基本和實例):另請注意,每個實例都會獲得唯一的實例標識碼。 數據會以帶狀切割結束,這會分隔三角形帶狀線的每個實例。
相關主題