Bendera D3DXSHADER
Bendera D3DXSHADER digunakan untuk mengurai, mengkompilasi, atau merakit shader.
Bendera pengurai
Bendera parse time hanya digunakan oleh sistem efek (sebelum kompilasi efek) saat Anda membuat pengkompilasi efek. Misalnya, Anda dapat membuat objek pengkompilasi dengan D3DXSHADER_PACKMATRIX_COLUMNMAJOR, lalu menggunakan objek pengkompilasi tersebut berulang kali dengan bendera pengkompilasi yang berbeda untuk menghasilkan kode khusus.
Terus-menerus | Deskripsi |
---|---|
|
Kecuali ditentukan secara eksplisit, matriks akan dikemas dalam urutan kolom-utama (setiap vektor akan berada dalam satu kolom) ketika diteruskan ke dan dari shader. Ini umumnya lebih efisien karena memungkinkan perkalian vektor-matriks dilakukan menggunakan serangkaian produk titik. |
|
Kecuali ditentukan secara eksplisit, matriks akan dikemas dalam urutan besar baris (setiap vektor akan berada dalam satu baris) ketika diteruskan ke atau dari shader. |
Bendera pengkompilasi
Pengkompilasi DirectX 10 HLSL sekarang menjadi pengkompilasi default. Lihat Alat Pengkompilasi Efek untuk detailnya.
Tabel berikut merinci bendera yang tersedia di Direct3D 9 dan Direct3D 10. Nilai untuk bendera adalah opsi fxc yang setara.
Konstanta/nilai | Deskripsi |
---|---|
|
Ini adalah petunjuk kepada pengkompilasi untuk menghindari penggunaan instruksi kontrol alur. Direct3D 9 - ya Direct3D 10 - ya |
|
Sisipkan nama file debug, nomor baris, dan informasi jenis dan simbol selama kompilasi shader. Direct3D 9 - ya Direct3D 10 - ya |
|
Kompilasi ps_1_x shader sebagai ps_2_0. Efek yang menentukan target ps_1_x akan dikompilasi ke target ps_2_0 karena ini adalah versi shader minimum yang didukung oleh versi pengkompilasi shader yang dikirim dengan DirectX 10. Bendera ini tidak berpengaruh ketika digunakan dengan target kompilasi tingkat yang lebih tinggi. Direct3D 9 - tidak Direct3D 10 - ya |
|
Paksa pengkompilasi untuk mengkompilasi terhadap target perangkat lunak tertinggi berikutnya yang tersedia untuk pemecah piksel. Bendera ini juga menonaktifkan pengoptimalan dan penelusuran kesalahan. Direct3D 9 - ya Direct3D 10 - ya |
|
Paksa pengkompilasi untuk mengkompilasi terhadap target perangkat lunak tertinggi berikutnya yang tersedia untuk shader vertex. Bendera ini juga menonaktifkan pengoptimalan dan penelusuran kesalahan. Direct3D 9 - ya Direct3D 10 - ya |
|
Nonaktifkan pengoptimalan yang dapat menyebabkan output program shader yang dikompilasi berbeda dari output program yang dikompilasi dengan pengkompilasi shader DirectX 9 karena erro presisi kecil dalam matematika floating point. Direct3D 9 - tidak Direct3D 10 - ya |
|
Menonaktifkan preshader. Pengkompilasi tidak akan mengeluarkan ekspresi statis untuk evaluasi pada CPU host. Selain itu, pengkompilasi tidak akan menyusun ekspresi apa pun saat mengkompilasi fungsi yang berdiri sendiri. Direct3D 9 - ya Direct3D 10 - ya |
|
Tingkat pengoptimalan terendah. Dapat menghasilkan kode yang lebih lambat tetapi akan melakukannya lebih cepat. Ini mungkin berguna dalam siklus pengembangan shader yang sangat berulang. Direct3D 9 - tidak Direct3D 10 - ya |
|
Tingkat pengoptimalan terendah kedua. Direct3D 9 - tidak Direct3D 10 - ya |
|
Tingkat pengoptimalan tertinggi kedua. Direct3D 9 - tidak Direct3D 10 - ya |
|
Tingkat pengoptimalan tertinggi. Akan menghasilkan kode terbaik tetapi mungkin membutuhkan waktu jauh lebih lama untuk melakukannya. Ini akan berguna untuk build akhir aplikasi di mana performa adalah faktor yang paling penting. Direct3D 9 - tidak Direct3D 10 - ya |
|
Paksa semua komputasi dalam shader yang dihasilkan terjadi pada presisi parsial. Hal ini dapat mengakibatkan evaluasi shader yang lebih cepat pada beberapa perangkat keras. Direct3D 9 - ya Direct3D 10 - ya |
|
Ini adalah petunjuk kepada pengkompilasi untuk lebih memilih menggunakan instruksi kontrol alur. Direct3D 9 - ya Direct3D 10 - ya |
|
Instruksikan pengkompilasi untuk melewati langkah-langkah pengoptimalan selama pembuatan kode. Kecuali Anda mencoba mengisolasi masalah dalam kode Anda dan Anda menduga pengkompilasi, menggunakan opsi ini tidak disarankan. Direct3D 9 - ya Direct3D 10 - ya |
|
Jangan memvalidasi kode yang dihasilkan terhadap kemampuan dan batasan yang diketahui. Opsi ini direkomendasikan hanya saat mengkompilasi shader yang diketahui berfungsi (yaitu, shader yang telah dikompilasi sebelumnya tanpa opsi ini). Shader selalu divalidasi oleh runtime sebelum diatur ke perangkat. Direct3D 9 - ya Direct3D 10 - ya |
|
Aktifkan penggunaan pengkompilasi Direct3D 9 HLSL asli. OCT2006_d3dx9_31_x86.cab atau OCT2006_d3dx9_31_x64.cab harus disertakan sebagai bagian dari aplikasi redist. Bendera ini diperlukan untuk mengkompilasi ps_1_x shader tanpa menggunakan bendera promosi untuk ps_2_0. Menentukan bendera ini saat mendapatkan antarmuka ID3DXEffectCompiler menyebabkan panggilan berikutnya ke CompileEffect dan CompileShader melalui objek ini untuk menggunakan pengkompilasi warisan. Direct3D 9 - ya Direct3D 10 - tidak |
Bendera perakitan
Bendera perakitan digunakan oleh sistem efek untuk mengoptimalkan kode perakitan shader dan efek.
Terus-menerus | Deskripsi |
---|---|
|
Sisipkan nama file debug, nomor baris, dan informasi jenis dan simbol selama kompilasi shader. |
|
Paksa pengkompilasi untuk mengkompilasi terhadap target perangkat lunak tertinggi berikutnya yang tersedia untuk pemecah piksel. Bendera ini juga menonaktifkan pengoptimalan dan penelusuran kesalahan. |
|
Paksa pengkompilasi untuk mengkompilasi terhadap target perangkat lunak tertinggi berikutnya yang tersedia untuk shader vertex. Bendera ini juga menonaktifkan pengoptimalan dan penelusuran kesalahan. |
|
Jangan memvalidasi kode yang dihasilkan terhadap kemampuan dan batasan yang diketahui. Opsi ini direkomendasikan hanya saat mengkompilasi shader yang diketahui berfungsi (yaitu, shader yang telah dikompilasi sebelumnya tanpa opsi ini). Shader selalu divalidasi oleh runtime sebelum diatur ke perangkat. |
Keterangan
Sistem efek akan menggunakan bendera pengurai ketika dipanggil oleh fungsi berikut:
Sistem efek akan menggunakan bendera pengkompilasi ketika dipanggil oleh fungsi berikut:
- D3DXCompileShader (atau D3DXCompileShaderFromFile atau D3DXCompileShaderFromResource)
- CompileEffect (atau CompileShader)
Selain itu, Anda dapat menggunakan bendera pengompilasi saat membuat efek dengan memanggil D3DXCreateEffect (atau D3DXCreateEffectFromFile atau D3DXCreateEffectFromResource).
- Jika Anda meneruskan file .fx yang tidak dikompresi, sistem efek akan menggunakan parameter input bendera selama kompilasi.
- Jika Anda meneruskan efek yang dikompilasi, sistem efek akan mengabaikan bendera pengkompilasi karena tidak diperlukan untuk memuat efek.
Sistem efek akan menggunakan bendera perakitan ketika dipanggil oleh fungsi berikut:
Menerapkan bendera pengkompilasi atau bendera perakit ke API yang salah akan gagal validasi shader. Periksa nilai pengembalian kode kesalahan Direct3D dari fungsi dengan Alat Pencarian Kesalahan DirectX (DXErr.exe) untuk membantu melacak kesalahan ini. Anda bisa mendapatkan DXErr.exe dan mempelajarinya dari DirectX SDK. Untuk informasi tentang DirectX SDK, lihat Di mana DirectX SDK?.
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|
Lihat juga