共用方式為


HLSL 串流資源曝光

您需要使用特定的 Microsoft 高階著色器語言 (HLSL) 語法,才能在著色器模型 5.0 中支援串流資源。

適用於著色器模型 5.0 的 HLSL 語法僅允許在具有串流資源支援的裝置上使用。 下表中列出了適用於串流資源的每個相關 HLSL 方法,這些方法皆可接受一個 (feedback) 或兩個 (clamp 和 feedback,依此順序) 額外的選擇性參數。 舉例來說,Sample 方法為:

Sample(sampler, location [, offset [, clamp [, feedback] ] ])

Sample 方法的其中一個範例,就是 Texture2D.Sample(S,float,int,float,uint)

而 offset、clamp 和 feedback 皆為選擇性參數。 您必須指定所有必要的選擇性參數,而這也與 C++ 的預設函式引述規則一致。 舉例來說,如果需要 feedback 的狀態,則 offset 和 clamp 參數都需要明確提供給 Sample,即便兩者沒有邏輯上的必要性。

clamp 參數為純量浮點值。 clamp=0.0f 的常值會指出 clamp 作業並不會執行。

feedback 參數為 uint 變數,可提供給記憶體存取查詢的 CheckAccessFullyMapped 內建函式。 您必須修改或解譯 feedback 參數的值;但編譯器不會提供任何進階分析和診斷,以偵測您是否已修改該值。

下方為 CheckAccessFullyMapped 的語法:

bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped 會解譯 FeedbackVar 的值,並在存取的所有資料已於資源中對應時傳回 true;否則,CheckAccessFullyMapped 就會傳回 false。

如果clamp 或 feedback 參數存在,則編譯器會發出基本指示的變體。 舉例來說,串流資源的取樣會產生 sample_cl_s 指示。

如果沒有指定 clamp 或 feedback,編譯器就會發出基本指示,因此和目前的行為不會有任何變化。

0.0f 的 clamp 值代表不會執行任何 clamp 作業;因此,驅動程式編譯器可針對目標硬體來進一步自訂指示。 如果指示中的 feedback 為 NULL 暫存器,則不會使用 feedback;因此,驅動程式編譯器可針對目標架構來進一步自訂指示。

如果 HLSL 編譯器推斷 clamp 為 0.0f,而且並未使用 feedback,則編譯器會發出對應的基本指示 (例如 sample,而非 sample_cl_s)。

如果串流資源存取包含多個組成位元組程式碼指示 (例如針對結構化資源),則編譯器會透過 OR 作業來彙總個別的 feedback 值,以產生最終的 feedback 值。 因此,針對這類型的複雜存取,您會看到單一 feedback 值。

下表摘要說明變更為可支援 feedback 和/或 clamp 的 HLSL 方法。 這些項目全都可以在所有維度的並排和非串流資源上運作。 非串流資源一律會顯示為完全對應。

HLSL 物件 具有 feedback 選項 (*) 的內建方法 - 也具有 clamp 選項

[RW]Texture2D

[RW]Texture2DArray

TextureCUBE

TextureCUBEArray

收集

GatherRed

GatherGreen

GatherBlue

GatherAlpha

GatherCmp

GatherCmpRed

GatherCmpGreen

GatherCmpBlue

GatherCmpAlpha

[RW]Texture1D

[RW]Texture1DArray

[RW]Texture2D

[RW]Texture2DArray

[RW]Texture3D

TextureCUBE

TextureCUBEArray

Sample*

SampleBias*

SampleCmp*

SampleCmpLevelZero

SampleGrad*

SampleLevel

[RW]Texture1D

[RW]Texture1DArray

[RW]Texture2D

Texture2DMS

[RW]Texture2DArray

Texture2DArrayMS

[RW]Texture3D

[RW]Buffer

[RW]ByteAddressBuffer

[RW]StructuredBuffer

Load

 

透過管道存取串流式處理資源