gather4 (sm5 - asm)

收集將用於雙向線性篩選作業的四個紋素,並將其封裝成單一暫存器。 此指令僅適用于 2D 或 CubeMap 紋理,包括陣列。 只會使用取樣器的定址模式,並使用任何 Mip 金字塔圖的最上層。

gather4[_aoffimmi (u,v) ] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler[.select_component]
項目 描述
dest
[in]作業結果的位址。
srcAddress
[in]一組紋理座標。
srcResource
[in]紋理暫存器。
srcSampler
[in]取樣器暫存器。

備註

此指令的行為就像 範例 指令,但不會產生篩選的樣本。 有助於篩選的四個樣本會以逆時針順序放入 xyzw 中,從查詢位置左下角的樣本開始。 這與 (u,v) 紋理座標差異位於下列位置的點取樣相同: (-,+) , (+,+) , (+,-) , (-,-) ,其中差異的大小一律為半紋素。

針對 CubeMap 紋理,當雙向線性使用量跨越邊緣時,會使用鄰近臉部的紋素。 角落使用與 範例 指令相同的規則;也就是說,未知的角落會被視為三個隱含臉部角落的平均值。

有一個紋理格式限制會套用至以格式清單表示的 gather4

srcResource上的 swizzle 可讓傳回的值在寫入目的地之前任意撥動。

srcSampler上的.select_component會選擇要從中讀取 4 個材質的來源紋理元件, (r/g/b/a) 。

針對具有 float32 元件的格式,如果擷取的值已正規化、反正規化、+-0 或 +-INF,則會傳回未變更的著色器。 NaN 會以 NaN 傳回,但 NaN 的確切位標記法可能會變更。 對於 TextureCubes,遺漏第 4 個紋素的某些合成必須在角落髮生,因此不會套用合成材質的傳回位,而且可以排清反數。

對於硬體實作,傳統雙向線性篩選中的優化會直接在紋素上偵測樣本,並略過讀取具有重量 0 的紋素,無法利用此指示。 gather4 一律會傳回所有要求的紋素。

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

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

最小著色器模型

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

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

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