共用方式為


sample (sm4 - asm)

使用指定的位址和指定取樣器所識別的篩選模式,從指定的元素/紋理取樣數據取樣。

sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler
項目 說明
dest
[in]作業結果的位址。
srcAddress
[in]一組紋理座標。 如需詳細資訊,請參閱備註一節。
srcResource
[in]紋理快取器。 如需詳細資訊,請參閱備註一節。
srcSampler
[in]取樣器快取器。 如需詳細資訊,請參閱備註一節。

備註

源數據可能來自緩衝區以外的任何資源類型。

srcAddress 提供執行樣本所需的一組紋理座標,因為浮點值參考紋理中的正規化空間。 位址換行模式 (wrap/mirror/clamp/border etc.) 適用於 [0...1] 範圍以外的紋理坐標,取自取樣器狀態 (s#),並在任何位址位移套用至紋理座標之後套用。

srcResource 是紋理緩存器(t#)。 這隻是紋理的佔位元,包括要取樣之資源的傳回數據類型。 所有這些信息都會在著色器前置詞中宣告。 要取樣的實際資源會系結至位置 #(適用於 t# 的外部著色器)。

srcSampler 是取樣器緩存器(s)。 這隻是篩選控件集合的佔位元,例如點與線性、誤用和位址換行控件。

硬體執行取樣所需的一組資訊會分割成兩個正交片段。 首先,紋理緩存器會提供源數據類型資訊,例如紋理是否包含SRGB數據的相關信息。 它也會參考正在取樣的實際記憶體。 其次,取樣器緩存器會定義要套用的篩選模式。

數位資源

針對 Texture1D 陣列, srcAddress g 元件 (POS-swizzle) 會選取要從中擷取的數位配量。 這一律會被視為縮放浮點數,而不是標準紋理座標的正規化空間,而且值上套用圓到最接近的偶數,後面接著可用BufferArray範圍的夾帶。

針對 Texture2D 陣列, srcAddress b 元件 (POS-swizzle) 會選取要從中擷取的數位配量,否則會使用相同的 Texture1D 數位列所描述的語意。

位址位移

選擇性 [_aoffimmi(u,v,w)] 後綴(位址位移為即時整數)表示樣本的紋理座標要由一組提供的即時紋素空間整數常數值來位移。 常值是一組 4 位 2 的補碼,具有整數範圍 [-8,7]。 此修飾詞會針對所有 Resources 定義,包括 Texture1D/2D 陣列和 Texture3D,但未針對 TextureCube 定義。

硬體可以利用即時知識,瞭解周遊一些關於通用位置的紋素使用量正由一組範例指示執行。 這可以使用 _aoffimmi(u,v,w) 來傳達。

位移會新增至紋理座標,在紋素空間中,相對於要存取的每個錯位。 因此,即使紋理座標是以標準化浮點值的形式提供,位移仍會套用紋素空間整數位移。

位址位移不會沿著 Texture1D/2D 陣列的陣列軸套用。

_aoffimmi v,會忽略 Texture1D 的 w 元件。

針對 Texture2D,會忽略 w 元件_aoffimmi。

在套用至紋理座標的任何位址位移之後,會套用取樣器狀態的位址換行模式(wrap/mirror/clamp/border etc.)。

傳回型別控件

範例傳回至目的地緩存器的數據格式取決於系結至 srcResource 參數的資源格式(DXGI_FORMAT*)。 例如,如果指定的 t# 與格式為 DXGI_FORMAT_A8B8G8R8_UNORM_SRGB 的資源系結,則取樣作業會將取樣的紋素從 gamma 2.0 轉換成 1.0、套用篩選,並將結果寫入目的地緩存器做為範圍 [0..1] 中的浮點值。

傳回的值是 4 向量(格式中沒有元件的格式特定預設值)。 srcResource 上的 swizzle 會決定如何從紋理範例/篩選傳回的 4 元件結果,之後 dest 上的 .mask 會決定 dest 中的哪些元件更新。

樣本 將 32 位浮點數讀入 32 位緩存器時,點取樣(沒有篩選),它可能會或可能不會排清反正規值,但否則數位不會修改。 如果具有點取樣反正規值的不確定性是應用程式的問題,請使用 ld 指令,保證32位浮點數的讀取未修改。

LOD 計算

如需在判斷 LOD 以進行篩選的過程中如何計算衍生專案的詳細資訊,請參閱 deriv_rtxderiv_rty。 範例指令會使用衍生著色器指令所使用的相同定義,隱含計算紋理座標上的衍生衍生專案。 這不適用於 sample_lsample_d 指示。 針對這些指示,LOD 或衍生專案是由應用程式直接提供。

針對範例指示,實作可以選擇在 2x2 戳記的所有 4 個像素之間共用相同的 LOD 計算,或執行每圖元 LOD 計算。

其他詳細數據

針對 Buffer 和 Texture1D, 會忽略 srcAddress .gba 元件 (POS-swizzle)。 針對 Texture1D 陣列, 會忽略 srcAddress .ba 元件(POS-swizzle)。 對於 Texture2Ds, 會忽略 srcAddress .a 元件 (POS-swizzle) 。

從沒有任何系結至的輸入位置擷取會針對所有元件傳回 0。

限制

  • srcResource 必須是 t# 快取器。 srcResource 不能是 ConstantBuffer,無法繫結至 t# 快取器。
  • srcSampler 必須是 s# 快取器。
  • 不允許 srcResourcesrcSampler 上的相對尋址。
  • srcAddress 必須是 temp (r#/x#), constantBuffer (cb#), input (v#) register 或 immediate value(s)。
  • dest 必須是 temp (r#/x#) 或輸出 (o*#) 快取器。
  • textureCubes 不允許_aoffimmi(u,v,w) 。

這個指示適用於下列著色器階段:

頂點著色器 幾何著色器 像素著色器
x

最小著色器模型

下列著色器模型中支援此函式。

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

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