HLSL 並排顯示的資源曝光
需要新的 Microsoft 高階著色器語言 (HLSL) 語法,才能支援 著色器模型 5中的並排資源。
新的 HLSL 語法只允許在具有磚資源支援的裝置上。 下表中磚資源的每個相關 HLSL 方法都會接受一個 (意見反應) 或兩個 (限制和意見反應,) 額外的選擇性參數。 例如,Sample 方法為:
範例 (取樣器, 位置 [, 位移 [, 限制 [, 意見反應] ] ])
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 都未指定,編譯器就會發出基本指令,目前行為也就沒有變更。 clamp 值為 0.0f,表示不會執行 clamp;因此,驅動程式編譯器可進一步依照目標硬體建立指令。 如果 feedback 為指令中的 NULL 暫存器,則 feedback 未使用;因此,驅動程式編譯器可以進一步依照目標架構建立指令。
如果 HLSL 編譯器推斷 clamp 為 0.0f 且 feedback 未使用,則編譯器會發出對應的基本指令 (例如 sample
而非 sample_cl_s
)。
如果並排資源存取是由數個組成位元組程式碼指令所組成,例如,針對結構化資源,編譯器會透過 OR 作業匯總個別的意見反應值,以產生最終的意見反應值。 因此,您會看到這類複雜存取的單一 feedback 值。
這是 HLSL 方法的摘要表,已變更為支援 feedback 和/或 clamp。 這些全都適用于所有維度的並排和非並排資源。 非並排顯示的資源一律會顯示為完全對應。
HLSL 物件 | 包含 feedback 選項 (*) 的內建方法 - 也有 clamp 選項 |
---|---|
[RW]Texture2D [RW]Texture2DArray TextureCUBE TextureCUBEArray |
Gather 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 |
載入 |