使用系統產生的值
輸入組合語言 (IA) 階段會產生系統產生的值 (根據使用者提供的輸入語意),以便為著色器作業提供某些效率。 只要附加執行個體 ID (可在頂點著色器 (VS) 階段中檢視)、頂點 ID (可供 VS 檢視) 或原始物件 ID (可供幾何著色器 (GS) 階段/和像素著色器 (PS) 階段檢視) 等資料,後續的著色器階段就能檢視這些系統值,以最佳化該階段中的處理作業。
例如,VS 階段可能會尋找執行個體標識符,以擷取著色器的其他每個頂點資料,或執行其他作業;GS 和 PS 階段可以使用基本標識碼,以相同方式擷取每個基本類型資料。
VertexID
每個著色器階段都會使用頂點標識碼來識別每個頂點。 它是預設值為 0 的 32 位無符號整數。 當輸入彙編器 (IA) 階段處理圖元時,它被指派給一個頂點。 將頂點 ID 語意附加到著色器輸入聲明,以通知 IA 階段產生每個頂點 ID。
IA 會將頂點標識元新增至每個頂點,以供著色器階段使用。 對於每個繪製調用,頂點 ID 都會增加 1。 在索引繪製呼叫中,計數重設回起始值。 如果頂點 ID 溢出 (超過 2³²– 1),則會換行為 0。
對於所有基元類型,頂點都有一個與其關聯的頂點 ID (無論鄰接性如何)。
PrimitiveID
每個著色器階段都會使用基本標識碼來識別每個基本類型。 它是預設值為 0 的 32 位無符號整數。 當輸入彙編器 (IA) 階段處理圖元時,它被指派給一個原語。 若要通知 IA 階段產生圖元 ID,請將圖元 ID 語意附加到著色器輸入聲明。
IA 階段將為每個圖元新增一個圖元 ID,以供幾何著色器 (GS) 階段或頂點著色器 (VS) 階段 (以 IA 階段之後第一個活動的階段為準) 使用。 對於每個索引繪製叫用,圖元 ID 都會遞增 1,但是,只要新執行個體開始,圖元 ID 就會重設為 0。 所有其他繪製呼叫不會更改執行個體 ID 的值。 如果執行個體 ID 溢出 (超過 2³²– 1),則會換行為 0。
像素著色器 (PS) 階段沒有單獨的圖元 ID 輸入;但是,任何指定圖元 ID 的像素著色器輸入都使用常數插值模式。
不支援自動產生相鄰圖元的圖元 ID。 對於有鄰接的圖元類型,例如有鄰接的三角形帶,只為內部圖元 (不相鄰的圖元) 維護圖元 ID,就像沒有鄰接的三角形帶中的圖元集合一樣。
InstanceID
每個著色器階段使用執行個體 ID 來識別目前正在處理的幾何體的執行個體。 它是預設值為 0 的 32 位無符號整數。
如果頂點著色器輸入聲明包含執行個體 ID 語義,則輸入組裝器 (IA) 階段將為每個頂點新增執行個體 ID。 對於每個索引繪製調用,執行個體 ID 都會遞增 1。 所有其他繪製呼叫不會更改執行個體 ID 的值。 如果執行個體 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 |
三角形帶狀執行個體 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 |
---|---|---|---|---|---|---|---|---|---|---|
VertexID | 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) 階段產生 ID (頂點、基元和執行個體);另外請注意,每個執行個體都有一個唯一的執行個體 ID。 資料會以帶狀切割結束,這會分隔三角形帶狀線的每個執行個體。
相關主題