texldl - vs
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.
- 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 vertex | 1_1 | 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 "nol satu" (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, 0001 diperoleh di register tujuan.
Ini adalah perkiraan untuk algoritma 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 masker tulis. Lihat Masking Register Tujuan.
- Default untuk komponen yang hilang adalah 0 atau 1, dan bergantung pada format tekstur.
- src1 harus berupa Sampler (Direct3D 9 asm-vs) (s#). src1 mungkin tidak menggunakan pengubah negasi. src1 dapat menggunakan swizzle, yang diterapkan setelah pengambilan sampel sebelum masker tulis dihormati. Sampler harus dinyatakan (menggunakan dcl_samplerType (sm3 - vs 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 texldl 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 akan diasumsikan untuk mengabaikan komponen koordinat tekstur tambahan. Sebaliknya, pengambilan sampel tekstur dengan lebih banyak dimensi daripada yang ada dalam koordinat tekstur tidak diizinkan.
- Jika src0 (koordinat tekstur) adalah Daftar Sementara (r#), 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 titik mengambang, 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