texldl - vs

使用特定取樣器取樣紋理。 取樣的特定 mipmap 層級詳細資料必須指定為紋理座標的第四個元件。

Syntax

texldl dst, src0, src1

 

其中:

  • dst 是目的地暫存器。
  • src0 是一種來源暫存器,可提供紋理樣本的紋理座標。
  • src1 會識別來源取樣器暫存器 (s#) ,其中 # 會指定要取樣的紋理取樣器編號。 取樣器已與它建立關聯的紋理和 D3DSAMPLERSTATETYPE 列舉所定義的控制項狀態 (,例如,D3DSAMP_MINFILTER) 。

備註

頂點著色器版本 1_1 2_0 2_x 2_sw 3_0 3_sw
texldl x x

 

texldl 會在 src1 所參考的取樣器階段查詢紋理集。 從 src0.w 選取詳細資料層級。 此值可以是負數,在此情況下,選取的詳細資料層級是「零一」, (使用 MAGFILTER 的最大對應) 。 因為 src0.w 是浮點值,所以如果 MIPFILTER 是兩個 mip 層級之間的線性) ,則會使用小數點值來插補 (。 接受取樣器狀態 MIPMAPLODBIAS 和 MAXMIPLEVEL。 如需取樣器狀態的詳細資訊,請參閱 D3DSAMPLERSTATETYPE

如果來自沒有紋理集之取樣器的著色器程式範例,則會在目的地暫存器中取得 0001。

這是參考裝置演算法的近似值。

LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
   LOD = 0;
   Filter = MagFilter;
   tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
   Filter = MinFilter;
   LOD = MAX( MAXMIPLEVEL, LOD);
   tex = Lookup( Floor(LOD), Filter );
   if( MipFilter == LINEAR )
   {
      tex1 = Lookup( Ceil(LOD), Filter );                        
      tex = (1 - frac(src0.w))*tex + frac(src0.w)*tex1;
   }
}

限制:

  • 紋理座標不應依紋理大小調整。
  • dst 必須是 暫存緩存 器 (r#) 。
  • dst 可以接受寫入遮罩。 請參閱 目的地暫存器遮罩
  • 遺漏元件的預設值為 0 或 1,且取決於紋理格式。
  • src1 必須是 Sampler (Direct3D 9 asm-vs) (s#) 。 src1 可能不會使用否定修飾詞。 src1 可能會使用 swizzle,這會在接受寫入遮罩之前套用取樣之後套用。 取樣器必須在著色器開頭使用 dcl_samplerType (sm3 - vs asm ) ) 來宣告 (。
  • 執行紋理樣本所需的座標數目取決於取樣器的宣告方式。 如果它宣告為 Cube,則需要三個元件紋理座標, (.rgb) 。 驗證會強制執行提供給 texldl 的座標組于針對取樣器所宣告的紋理維度而言已足夠。 不過,不保證應用程式實際上透過 API 設定紋理 (,且維度等於針對取樣器宣告的維度) 。 在這種情況下,執行時間會嘗試偵測 (可能只在偵錯中) 不相符的情況。 取樣維度比紋理座標中存在的維度少,將會被允許,並假設忽略額外的紋理座標元件。 相反地,不允許取樣具有比紋理座標中存在的維度更多的紋理。
  • 如果 src0 (紋理座標) 是暫 存緩存 器 (r#) ,則必須先前撰寫上述查閱 (所需的元件) 。
  • 取樣未帶正負號的 RGB 紋理會導致浮點數介於 0.0 和 1.0 之間。
  • 取樣帶正負號的紋理會導致介於 -1.0 到 1.0 之間的浮點值。
  • 取樣浮點紋理時,Float16 表示資料會範圍在MAX_FLOAT16內。 Float32 表示將使用管線的最大範圍。 在任一範圍以外的取樣未定義。
  • 沒有相依的讀取限制。

頂點著色器指示