texldp - ps

Instruksi beban tekstur yang diproyeksikan. Instruksi ini membagi koordinat tekstur input dengan elemen keempat (.a atau .w) tepat sebelum pengambilan sampel.

Sintaks

texldp 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 Sampler (Direct3D 9 asm-ps) (s#), di mana # menentukan nomor sampler tekstur mana yang akan diambil sampelnya. Sampler telah mengaitkan dengan tekstur dan status sampler yang ditentukan oleh D3DSAMPLERSTATETYPE.

Untuk kumpulan pembatasan saat menggunakan texldp, lihat texld.

Keterangan

texldp melakukan proyeksi pada koordinat yang dibaca dari src0 sebelum melakukan sampel. Setiap koordinat tekstur dibagi dengan src0.w, kemudian tekstur diambil sampelnya. Ketika texldp selesai, konten src0 tidak terpengaruh (kecuali dst adalah register yang sama). Alternatif untuk menggunakan texldp adalah melakukan pembagian proyeksi secara manual di shader. Namun, melakukan pembagian dalam kode shader biasanya lebih lambat daripada ketika dilakukan oleh instruksi texldp, jadi hindari matematika tambahan tersebut jika memungkinkan.

Jumlah koordinat yang diperlukan src0 untuk melakukan sampel tekstur tergantung pada bagaimana src1 dinyatakan, ditambah komponen .w. Jenis sampler dideklarasikan dengan dcl_samplerType (sm2, sm3 - ps asm). Jika src1 dinyatakan sebagai sampler 2D, maka src0 harus berisi koordinat .xyw; jika src1 dinyatakan sebagai sampel kubus atau sampler volume, maka src0 harus berisi koordinat .xyzw. Pengambilan sampel tekstur 2D dengan koordinat .xyzw diizinkan (koordinat .z diabaikan).

Jika tekstur sumber berisi kurang dari empat komponen, default ditempatkan di komponen yang hilang. Default bergantung pada format tekstur seperti yang diperlihatkan dalam tabel berikut.

Format Tekstur Nilai Default untuk komponen yang hilang
D3DFMT_R5G6B5, D3DFMT_R8G8B8, D3DFMT_L8, D3DFMT_L16, D3DFMT_R3G3B2, D3DFMT_CxV8U8, D3DFMT_L6V5U5 A = 1.0
D3DFMT_V8U8, D3DFMT_V16U16, D3DFMT_G16R16, D3DFMT_G16R16F, D3DFMT_G32R32F B = A = 1,0
D3DFMT_A8 R = G = B = 0,0
D3DFMT_R16F, D3DFMT_R32F G = B = A = 1,0
Semua format kedalaman/stensil R = B = 0,0, A = 1,0

 

Instruksi ini didukung dalam versi berikut:

Versi shader piksel 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldp x x x x x

 

ps_2_0 dan ps_2_x

dst harus berupa Daftar Sementara (r#) dan hanya masker .xyzw (masker default) yang diizinkan.

src0 harus berupa Texture Coordinate Register (t#) atau Temporary Register (r#), tanpa modifier atau swizzle.

src1 harus berupa Sampler (Direct3D 9 asm-ps) (s#), tanpa pengubah atau gerimis.

Jika bit batas D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT tidak diatur (dalam D3DPSHADERCAPS2_0), instruksi tekstur tertentu (texld, texldp, texldb - ps, texldd ) mungkin bergantung pada, paling banyak, urutan ketiga. Instruksi tekstur dependen urutan pertama adalah instruksi tekstur di mana:

  • src0 adalah Daftar Sementara (r#)
  • dst sebelumnya ditulis, sekarang sedang ditulis lagi.

Instruksi tekstur dependen urutan kedua didefinisikan sebagai instruksi tekstur yang membaca atau menulis ke Daftar Sementara (r#) yang isinya, sebelum menjalankan instruksi tekstur, bergantung (mungkin secara tidak langsung) pada hasil instruksi tekstur dependen urutan pertama. Instruksi tekstur dependen (n)urutan berasal dari instruksi tekstur (n - 1)urutan ke-1.

ps_3_0

Untuk ps_3_0, src1 harus berupa Sampler (Direct3D 9 asm-ps) (s#), tanpa pengubah. Swizzle diizinkan pada src1, dan ketika diterapkan, hasil pencarian tekstur telah di-swizzle sebelum ditulis ke dst.

Instruksi Piksel Shader