系統產生的值由 IA 階段產生(基於使用者提供的輸入 語意),以提升著色器操作的效率。
透過附加資料,例如實例 ID(VS 可見)、頂點 ID(VS 可見)或原始 ID(GS/PS 可見),後續著色器階段可尋找這些系統值以優化該階段的處理。 例如,VS 階段可能會尋找實例 id,以取得著色器所需的額外每個頂點資料或執行其他操作;GS 與 PS 階段可使用原始 ID 以相同方式擷取每個基元資料。
備註
這些 Direct3D 系統產生的數值適用於應用程式,無論它們使用 Win32 或 UWP 應用程式模型。
VertexID
每個著色器階段都使用頂點 ID 來識別每個頂點。 它是一個 32 位元無符號整數,預設值為 0。 當 IA 階段處理原元時,它會被指派到頂點。 將頂點 id 語意附加到著色器輸入宣告中,通知 IA 階段產生每個頂點的 ID。
IA 會為每個頂點加上一個頂點 ID,供著色器階段使用。 每次繪圖呼叫時,頂點 ID 都會遞增 1。 在各個索引繪製呼叫之間,計數會重設回起始值。 對於 ID3D11DeviceContext::DrawIndexed 與 ID3D11DeviceContext::DrawIndexedInstanced,頂點 ID 代表索引值。 若頂點 id 溢出(超過 2³²–1),則包裹為 0。
對於所有原始類型,頂點都有一個頂點 ID(不論相鄰關係如何)。
原始ID
每個著色器階段都會使用一個原始 ID 來識別每個原體。 它是一個 32 位元無符號整數,預設值為 0。 當 IA 階段處理圖元時,它會被指派給該圖元。 要通知 IA 階段產生原始 ID,請將原始 id 語意附加到著色器輸入宣告中。
IA 階段會為每個圖元加入一個圖元 ID,供幾何著色器或像素著色器階段使用(以 IA 階段之後第一個啟用的階段為準)。 對於每個索引繪製呼叫,原始 ID 會增加 1,但每當有新實例開始時,原始 ID 會重置為 0。 所有其他繪製呼叫都不會改變實例 ID 的值。如果實例 ID 溢位(超過 2³²–1),則會回繞至 0。
像素著色器階段沒有獨立的原始 ID 輸入;然而,任何指定原始 ID 的像素著色器輸入都會使用恆定插值模式。
目前不支援為相鄰圖元自動產生圖元 ID。 對於具有鄰接的原始型態,例如帶有鄰接的三角形帶,僅對內部圖元(非相鄰的圖元)保留原始 ID,就像三角形帶中沒有鄰接的圖元集合一樣。
InstanceID
每個著色器階段都會使用一個實例 ID,用來識別目前正在處理的幾何體實例。 它是一個 32 位元無符號整數,預設值為 0。
如果頂點著色器輸入宣告包含實例 id 語意,IA 階段會在每個頂點新增一個實例 ID。 對於每個索引式繪製呼叫,實例 ID 都會遞增 1。 所有其他繪圖呼叫都不會改變 instance ID 的值。若 instance 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 |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 價值 | 價值 | 價值 | |
|---|---|---|---|
| 原始ID | 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 |
|---|---|---|---|---|---|---|---|---|---|---|
| VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 價值 | 價值 | 價值 | |
|---|---|---|---|
| 原始ID | 0 | 1 | 2 |
| InstanceID | 1 | 1 | 1 |
輸入組譯器產生 ID(頂點、原始碼與實例);同時也請注意,每個實例都有獨特的實例 ID。資料以條狀切割結束,將三角形條的每個實例分隔開來。
相關主題