Share via


使用System-Generated值

系統產生的值是由 IA 階段產生, (根據使用者提供的輸入 意) ,以允許著色器作業的某些效率。

藉由附加資料,例如 VS) 可見的實例 (識別碼、VS) 可見的頂點 (識別碼,或 GS/PS) 可見的基本識別碼 (,後續著色器階段可能會尋找這些系統值來優化該階段的處理。 例如,VS 階段可能會尋找實例識別碼,以擷取著色器的其他每個頂點資料,或執行其他作業;GS 和 PS 階段可能會使用基本識別碼,以相同方式擷取個別基本資料。

VertexID

每個著色器階段都會使用頂點識別碼來識別每個頂點。 它是預設值為 0 的 32 位元不帶正負號整數。 當基本類型由 IA 階段處理時,它會指派給頂點。 將頂點識別碼語意附加至著色器輸入宣告,以通知 IA 階段產生每個頂點識別碼。

IA 會將頂點識別碼新增至每個頂點,以供著色器階段使用。 針對每個繪製呼叫,頂點識別碼會遞增 1。 跨索引的繪製呼叫,計數會重設回到起點。 針對 ID3D11DeviceCoNtext::D rawIndexedID3D11DeviceCoNtext::D rawIndexedInstanced,頂點識別碼代表索引值。 如果頂點識別碼溢位 (超過 2≦1) ,則會包裝為 0。

針對所有基本類型,頂點都有與其相關聯的頂點識別碼 (,不論相鄰) 。

PrimitiveID

每個著色器階段都會使用基本識別碼來識別每個基本類型。 它是預設值為 0 的 32 位元不帶正負號整數。 當基本類型由 IA 階段處理時,它會指派給基本類型。 若要通知 IA 階段產生基本識別碼,請將基本識別碼語意附加至著色器輸入宣告。

IA 階段會將基本識別碼新增至每個基本類型,以供幾何著色器或圖元著色器階段使用, (不論哪一個階段是 IA 階段之後的第一個階段) 。 對於每個索引繪製呼叫,基本識別碼會遞增 1,不過,每當新的實例開始時,基本識別碼就會重設為 0。 所有其他繪製呼叫都不會變更實例識別碼的值。如果實例識別碼溢位 (超過 2ーー– 1) ,則會包裝為 0。

圖元著色器階段沒有基本識別碼的個別輸入;不過,指定基本識別碼的任何圖元著色器輸入都會使用常數插補模式。

不支援自動產生相鄰基本類型的基本識別碼。 對於連續的基本類型,例如具有連續的三角形帶狀結構,基本識別碼只會針對內部基本類型維護, (非連續的基本類型) ,就像三角形帶中沒有連續的基本類型集一樣。

InstanceID

每個著色器階段都會使用實例識別碼來識別目前正在處理的幾何實例。 它是預設值為 0 的 32 位元不帶正負號整數。

如果頂點著色器輸入宣告包含實例識別碼語意,則 IA 階段會將實例識別碼新增至每個頂點。 針對每個索引繪製呼叫,實例識別碼會遞增 1。 所有其他繪製呼叫都不會變更實例識別碼的值。如果實例識別碼溢位 (超過 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

 

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

 

PrimitiveID 0 1 2
InstanceID 1 1 1

 

輸入組合器會產生 (頂點、基本和實例) 的識別碼;另請注意,每個實例都有唯一的實例識別碼。資料會以帶狀切割結束,這會分隔三角形帶的每個實例。

輸入組合階段