ps_1_1__ps_1_2__ps_1_3__ps_1_4 Mendaftar

Shader pixel bergantung pada register untuk mendapatkan data vertex, untuk menghasilkan data piksel, untuk menyimpan hasil sementara selama perhitungan dan untuk mengidentifikasi tahap pengambilan sampel tekstur. Ada beberapa jenis register, masing-masing dengan fungsionalitas yang unik. Bagian ini berisi informasi referensi untuk register input dan output yang diimplementasikan oleh versi pixel shader 1_X.

Daftar menyimpan data untuk digunakan oleh shader piksel. Daftar sepenuhnya dijelaskan di bagian berikut.

  • Jenis Register menjelaskan empat jenis register yang tersedia dan tujuannya.
  • Baca Batas Port merinci pembatasan penggunaan beberapa register dalam satu instruksi.
  • Baca saja Baca Tulis menjelaskan register mana yang dapat digunakan untuk membaca, menulis, atau keduanya.
  • Rentang merinci rentang data komponen.

Tipe Daftar

Nama Jenis Versi 1_1 Versi 1_2 Versi 1_3 Versi 1_4
C # Daftar konstanta 8 8 8 8
R # Daftar sementara 2 2 2 6
T # Register tekstur 4 4 4 6
V # Daftar warna 2 2 2 2 dalam fase 2

 

  • Daftar konstanta berisi data konstanta. Data dapat dimuat ke dalam register konstan menggunakan SetPixelShaderConstantF atau dapat didefinisikan menggunakan def - ps. Register konstanta tidak dapat digunakan dengan instruksi alamat tekstur. Satu-satunya pengecualian adalah instruksi texm3x3spec - ps , yang menggunakan register konstan untuk memasok vektor sinar mata.

  • Register sementara digunakan untuk menyimpan hasil perantara. r0 juga berfungsi sebagai output shader piksel. Nilai dalam r0 di akhir shader adalah warna piksel untuk shader.

    Validasi shader akan gagal CreatePixelShader pada shader apa pun yang mencoba membaca dari register sementara yang belum ditulis oleh instruksi sebelumnya. D3DXAssembleShader juga akan gagal, dengan asumsi validasi diaktifkan (jangan gunakan D3DXSHADER_SKIPVALIDATION).

  • Daftar tekstur

    Untuk pixel shader versi 1_1 hingga 1_3, register tekstur berisi data tekstur atau koordinat tekstur. Data tekstur dimuat ke dalam register tekstur saat tekstur diambil sampelnya. Pengambilan sampel tekstur menggunakan koordinat tekstur untuk mencari, atau mengambil sampel, nilai warna pada koordinat (u,v,w,q) yang ditentukan sambil mempertimbangkan atribut status tahap tekstur. Data koordinat tekstur diinterpolasi dari data koordinat tekstur puncak dan dikaitkan dengan tahap tekstur tertentu. Ada hubungan default satu-ke-satu antara nomor tahap tekstur dan urutan deklarasi koordinat tekstur. Secara default, kumpulan koordinat tekstur pertama yang ditentukan dalam format puncak dikaitkan dengan tahap tekstur 0.

    Untuk versi shader piksel ini, tekstur register bersifat seperti register sementara saat digunakan oleh instruksi aritmatika.

    Untuk pixel shader versi 1_4, texture register (t#) berisi data koordinat tekstur baca-saja. Ini berarti bahwa kumpulan koordinat tekstur dan nomor tahap tekstur independen satu sama lain. Nomor tahap tekstur (dari mana sampel tekstur) ditentukan oleh nomor register tujuan (r0 hingga r5). Untuk instruksi texld, kumpulan koordinat tekstur ditentukan oleh register sumber (t0 hingga t5), sehingga kumpulan koordinat tekstur dapat dipetakan ke tahap tekstur apa pun. Selain itu, register sumber (menentukan koordinat tekstur) untuk texld juga dapat menjadi register sementara (r#), dalam hal ini konten register sementara digunakan sebagai koordinat tekstur.

  • Daftar warna berisi nilai warna per piksel. Nilai diperoleh dengan iterasi per piksel dari nilai warna difus dan spekular dalam data vertex. Untuk shader pixel shader versi 1_4, daftar warna hanya tersedia selama fase kedua.

    Jika mode bayangan diatur ke D3DSHADE_FLAT, iterasi kedua warna puncak (difus dan spekular) dinonaktifkan. Terlepas dari mode bayangan, kabut masih akan diulang oleh alur jika kabut piksel diaktifkan. Perlu diingat bahwa kabut diterapkan nanti di alur daripada pixelshader.

    Adalah umum untuk memuat register v0 dengan data warna vertex diffuse. Biasanya juga memuat register v1 dengan data warna spekular vertex.

    Nilai data warna input dijepit (jenuh) ke rentang 0 hingga 1 karena ini adalah rentang input yang valid untuk daftar warna di shader piksel.

    Shader pixel hanya memiliki akses baca ke daftar warna. Isi dari register ini adalah nilai iterasi, tetapi iterasi dapat dilakukan pada presisi yang jauh lebih rendah daripada koordinat tekstur.

Batas Port Baca

Batas port baca menentukan jumlah register yang berbeda dari setiap jenis register yang dapat digunakan sebagai register sumber dalam satu instruksi.

Nama Jenis Versi 1_1 Versi 1_2 Versi 1_3 Versi 1_4
C # Daftar konstanta 2 2 2 2
R # Daftar sementara 2 2 2 3
T # Register tekstur 2 3 3 1
V # Daftar warna 2 2 2 2 dalam fase 2

 

Misalnya, warna mendaftar untuk hampir semua versi memiliki batas port baca dua. Ini berarti bahwa satu instruksi dapat menggunakan maksimum dua register warna yang berbeda (v0 dan v1 misalnya) sebagai register sumber. Contoh ini menunjukkan dua register warna yang digunakan dalam instruksi yang sama:

mad r0, v1, c2, v0

Baca-saja, Baca/Tulis

Jenis register diidentifikasi sesuai dengan kemampuan baca-saja (RO) atau kemampuan baca/tulis (RW) dalam tabel berikut. Register baca-saja hanya dapat digunakan sebagai register sumber dalam instruksi; mereka tidak pernah dapat digunakan sebagai register tujuan.

Nama Jenis Versi 1_1 Versi 1_2 Versi 1_3 Versi 1_4
Nama Jenis 1_1 1_2 1_3 1_4
C # Daftar konstanta RO RO RO RO
R # Daftar sementara RW RW RW RW
T # Register tekstur RW RW RW Lihat catatan berikut
V # Daftar warna RO RO RO RO

 

Register yang mampu RW dapat digunakan untuk menyimpan hasil perantara. Ini termasuk register sementara dan register tekstur untuk beberapa versi shader.

Catatan

  • Untuk pixel shader versi 1_4, register tekstur adalah RO untuk instruksi pengalamatan tekstur, dan register tekstur tidak dapat dibaca dari atau ditulis dengan instruksi aritmatika. Selain itu, karena register tekstur telah menjadi register koordinat tekstur, memiliki akses RO bukanlah regresi fungsionalitas sebelumnya.

 

Rentang

Rentang adalah nilai data register maksimum dan minimum. Rentang bervariasi berdasarkan jenis register. Rentang untuk beberapa register dapat dikueri dari batas perangkat menggunakan GetDeviceCaps.

Nama Jenis Rentang Versi
C # Daftar konstanta -1 hingga +1 Semua versi
R # Daftar sementara - PixelShader1xMaxValue ke + PixelShader1xMaxValue Semua versi
T # Register tekstur - MaxTextureRepeat ke + MaxTextureRepeat Semua versi
V # Daftar warna 0 hingga 1 Semua versi

 

Perangkat keras shader piksel awal mewakili data dalam register menggunakan angka titik tetap. Ini membatasi presisi hingga maksimum sekitar delapan bit untuk bagian pecahan dari angka. Ingatlah hal ini saat merancang shader.

Untuk pixel shader versi 1_1 hingga 1_3, MaxTextureRepeat harus minimal satu. Untuk 1_4, MaxTextureRepeat harus minimal delapan.

Lihat D3DCAPS9 untuk informasi selengkapnya tentang PixelShader1xMaxValue.

Register