texldl - ps
Contoh tekstur dengan sampler tertentu. Tingkat detail mipmap tertentu yang sedang diambil sampelnya harus ditentukan sebagai komponen keempat dari koordinat tekstur.
Sintaks
texldl dst, src0, src1 |
---|
Di mana:
- dst adalah register tujuan.
- src0 adalah register sumber yang menyediakan koordinat tekstur untuk sampel tekstur. Lihat Daftar Koordinat Tekstur.
- src1 mengidentifikasi register sampler sumber (s#), di mana # menentukan nomor sampler tekstur mana yang akan diambil sampelnya. Sampler telah dikaitkan dengan tekstur dan status kontrol yang ditentukan oleh enumerasi D3DSAMPLERSTATETYPE (misalnya, D3DSAMP_MINFILTER).
Keterangan
Versi shader piksel | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texldl | x | x |
texldl mencari set tekstur pada tahap sampler yang direferensikan oleh src1. Tingkat detail dipilih dari src0.w. Nilai ini bisa negatif dalam hal ini tingkat detail yang dipilih adalah yang ke-nol (peta terbesar) dengan MAGFILTER. Karena src0.w adalah nilai floating point, nilai pecahan digunakan untuk menginterpolasi (jika MIPFILTER ADALAH LINEAR) antara dua tingkat mip. Sampler menyatakan MIPMAPLODBIAS dan MAXMIPLEVEL dihormati. Untuk informasi selengkapnya tentang status sampler, lihat D3DSAMPLERSTATETYPE.
Jika program shader mengambil sampel dari sampler yang tidak memiliki set tekstur, maka 0001 diperoleh di register tujuan.
Berikut ini adalah algoritma kasar yang diikuti perangkat referensi:
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;
}
}
Pembatasan:
- Koordinat tekstur tidak boleh diskalakan berdasarkan ukuran tekstur.
- dst harus berupa Daftar Sementara (r#).
- dst dapat menerima writemask. Lihat Tujuan Mendaftarkan Write Mask.
- Default untuk komponen yang hilang adalah 0 atau 1, dan bergantung pada format tekstur.
- src1 harus berupa Sampler (Direct3D 9 asm-ps) (s#). src1 mungkin tidak menggunakan pengubah negate (lihat Destination Register Write Mask). src1 dapat menggunakan swizzle (lihat Source Register Swizzling), yang diterapkan setelah pengambilan sampel, tetapi sebelum masker tulis (lihat Destination Register Write Mask) dihormati. Sampler harus dinyatakan (menggunakan dcl_samplerType (sm2, sm3 - ps asm)) di awal shader.
- Jumlah koordinat yang diperlukan untuk melakukan sampel tekstur tergantung pada bagaimana sampler dinyatakan. Jika dinyatakan sebagai kubus, koordinat tekstur tiga komponen diperlukan (.rgb). Validasi memberlakukan bahwa koordinat yang disediakan untuk tex_ldl Cukup untuk dimensi tekstur yang dideklarasikan untuk sampler. Namun, tidak dijamin bahwa aplikasi benar-benar menetapkan tekstur (melalui API) dengan dimensi yang sama dengan dimensi yang dideklarasikan untuk sampler. Dalam kasus seperti itu, runtime akan mencoba mendeteksi ketidakcocokan (mungkin hanya dalam debug). Pengambilan sampel tekstur dengan dimensi yang lebih sedikit daripada yang ada dalam koordinat tekstur akan diizinkan dan diasumsikan untuk mengabaikan komponen koordinat tekstur tambahan. Sebaliknya, pengambilan sampel tekstur dengan lebih banyak dimensi daripada yang ada dalam koordinat tekstur adalah ilegal.
- Jika src0 (koordinat tekstur) adalah Daftar Sementara, komponen yang diperlukan untuk pencarian (dijelaskan di atas) harus ditulis sebelumnya.
- Pengambilan sampel tekstur RGB yang tidak ditandatangani akan menghasilkan nilai float antara 0,0 dan 1,0.
- Tekstur bertanda tangan pengambilan sampel akan menghasilkan nilai float antara -1,0 hingga 1,0.
- Saat mengambil sampel tekstur floating-point, Float16 berarti bahwa data akan berkisar dalam MAX_FLOAT16. Float32 berarti rentang maksimum alur akan digunakan. Pengambilan sampel di luar salah satu rentang tidak ditentukan.
- Tidak ada batas baca dependen.
Topik terkait