共用方式為


新的資源類型

Direct3D 11 已新增數個新的資源類型。

讀取/寫入緩衝區和紋理

著色器模型 4 資源是唯讀的。 著色器模型 5 會實作一組新的讀取/寫入資源:

這些資源需要資源變數才能存取記憶體(透過編製索引),因為沒有直接存取記憶體的方法。 資源變數可以在方程式左側和右側使用;如果在右側使用,範本類型必須是單一元件(float、int 或 uint)。

結構化緩衝區

結構化緩衝區是包含大小相等專案的緩衝區。 使用結構搭配一或多個成員類型來定義專案。 以下是具有三個成員的結構。

struct MyStruct
{
    float4 Color;
    float4 Normal;
    bool isAwesome;
};

使用此結構來宣告結構化緩衝區,如下所示:

StructuredBuffer<MyStruct> mySB;

除了編製索引之外,結構化緩衝區還支援存取如下的單一成員:

float4 myColor = mySb[27].Color;

使用下列物件類型來存取結構化緩衝區:

ATOMIC 函式 在 rwStructuredBuffer int 和 uint 元素上允許實作聯結作業。

位元組位址緩衝區

位元組位址緩衝區是緩衝區,其內容可透過位元組位移尋址。 一般而言,緩衝區的內容 會針對每個元素使用步幅編製索引,以及 S*N 所指定的項目編號 (N)。 位元組位址緩衝區,也可以稱為原始緩衝區,使用位元組值位移從緩衝區開頭存取數據。 位元組值必須是四個的倍數,才能對齊 DWORD。 如果提供任何其他值,則行為未定義。

著色器模型 5 引進物件,用於存取 只讀位元組位址緩衝區,以及 讀寫位元組位址緩衝區。 位元組位址緩衝區的內容設計為32位無符號整數;如果緩衝區中的值不是非帶正負號的整數,請使用 asfloat 等函式來讀取它。

未排序的存取緩衝區或紋理

未排序的存取資源(包括緩衝區、紋理和紋理陣列 - 沒有多重取樣),允許從多個線程暫時取消排序的讀取/寫入存取。 這表示此資源類型可由多個線程同時讀取/寫入,而不需透過使用 Atomic Functions產生記憶體衝突。

藉由呼叫 ID3D11Device::CreateBufferID3D11Device::CreateTexture2D 和從 D3D11_BIND_FLAG 列舉傳入 D3D11_BIND_UNORDERED_ACCESS 旗標等函式,以建立未排序的存取緩衝區或紋理。

未排序的存取資源只能系結至圖元著色器和計算著色器。 在執行期間,以平行方式執行的圖元著色器或計算著色器會繫結相同的未排序存取資源。

附加和取用緩衝區

附加和取用緩衝區是非排序資源的特殊類型,可支援從緩衝區結尾新增和移除值,類似於堆疊的運作方式。

附加和取用緩衝區必須是結構化緩衝區:

透過這些資源的方法使用這些資源,這些資源不會使用資源變數。

計算著色器概觀