dcl_interface_dynamicindexed (sm5 - asm)

宣告函式資料表指標 (介面) 。

dcl_interface_dynamicindexed fp#[arraySize][numCallSites] = {ft#, ft#, ...}
項目 描述
Fp#
[in]函式資料表指標。

備註

每個介面都必須從 API 系結,才能使用著色器。 系結提供其中一個函式資料表的參考,以便填入方法位置。 編譯器不會產生未參考物件的指標。

函式資料表指標具有一組完整的方法位置,以避免 C++ 指標對 vtable 標記法需要的額外間接層級。 這也需要此指標為 5 元組。 在 HLSL 虛擬內嵌模型中,一律知道呼叫所使用的全域變數/輸入,以便我們可以為每個根物件設定資料表。

函式指標宣告會指出哪些函式資料表是與其搭配使用的合法函式資料表。 這也允許衍生方法相互關聯資訊。

介面宣告的第一個 [] 是陣列大小。 如果使用動態索引編制,宣告將會指出如下所示。 介面指標的陣列也可以以靜態方式編制索引,介面指標的陣列並不一定表示動態編制索引。

第一個宣告的介面指標編號從 0 開始,後續會將陣列大小納入考慮,因此四個專案陣列 fp0[4][1] 之後的第一個指標會是 fp4[][]。

介面宣告的第二個 [] 是呼叫月臺數目,必須符合宣告中所參考之每個資料表中的主體數目。

(ft#) 選項可以列在介面宣告中,沒有任何範圍。

指定的函式資料表 (ft#) 可以在一或多個介面宣告中出現一次以上。

Restrictions

  • 著色器中的物件網站數目,也就是其 [arraySize] 宣告之所有 fp# 宣告的總和,不能超過 253。 這個數位會對應到 這個 指標可以存在的數目。 執行時間會強制執行此 253 限制,以限制 DDI 的大小來傳達此指標資料。

  • 著色器中的呼叫網站數目,也就是潛在分支目標數目之所有 fcall 語句的總和,不得超過 4096。

    例如,針對第一個fp[][]維度使用靜態索引的fcall會計算為一個:

    fcall fp0[0][0] // +1

    使用動態索引的fcall會計算為數組中 (第一個 [] dcl_interface) 的專案數目:

    dcl_interface_dynamicindexed fp1[2][1] = {ft2, ft3, ft4} ...

    fcall fp1[r0.z + 0][1] // +2

    此限制可協助某些實作輕鬆地調整常數緩衝區型儲存體中函式主體選取範圍的資料表。

本指示適用于下列著色器階段:

頂點 船體 網域 幾何形狀 像素 計算
X X X X X X

最小著色器模型

下列著色器模型中支援此指示:

著色器模型 支援
著色器模型 5
著色器模型 4.1
著色器模型 4
著色器模型 3 (DirectX HLSL)
著色器模型 2 (DirectX HLSL)
著色器模型 1 (DirectX HLSL)

cs_4_0和cs_4_1支援 UAV 和 SRV 的此指示。

著色器模型 5 元件 (DirectX HLSL)