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
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
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.
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
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
D3DXSHADER_AVOID_FLOW_CONTROL
/Gfa
Ini adalah petunjuk kepada pengkompilasi untuk menghindari penggunaan instruksi kontrol alur.
Direct3D 9 - ya
Direct3D 10 - ya
D3DXSHADER_DEBUG
/Zi
Sisipkan nama file debug, nomor baris, dan informasi jenis dan simbol selama kompilasi shader.
Direct3D 9 - ya
Direct3D 10 - ya
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY
/Gec
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
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
T/A
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
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
T/A
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
D3DXSHADER_IEEE_STRICTNESS
/Gis
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
D3DXSHADER_NO_PRESHADER
/Op
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
D3DXSHADER_OPTIMIZATION_LEVEL0
/O0
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
D3DXSHADER_OPTIMIZATION_LEVEL1
/O1
Tingkat pengoptimalan terendah kedua.
Direct3D 9 - tidak
Direct3D 10 - ya
D3DXSHADER_OPTIMIZATION_LEVEL2
/O2
Tingkat pengoptimalan tertinggi kedua.
Direct3D 9 - tidak
Direct3D 10 - ya
D3DXSHADER_OPTIMIZATION_LEVEL3
/O3
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
D3DXSHADER_PARTIALPRECISION
/Gpp
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
D3DXSHADER_PREFER_FLOW_CONTROL
/Gfp
Ini adalah petunjuk kepada pengkompilasi untuk lebih memilih menggunakan instruksi kontrol alur.
Direct3D 9 - ya
Direct3D 10 - ya
D3DXSHADER_SKIPOPTIMIZATION
/Od
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
D3DXSHADER_SKIPVALIDATION
/Vd
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
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
/LD
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
D3DXSHADER_DEBUG
Sisipkan nama file debug, nomor baris, dan informasi jenis dan simbol selama kompilasi shader.
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
Paksa pengkompilasi untuk mengkompilasi terhadap target perangkat lunak tertinggi berikutnya yang tersedia untuk pemecah piksel. Bendera ini juga menonaktifkan pengoptimalan dan penelusuran kesalahan.
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
Paksa pengkompilasi untuk mengkompilasi terhadap target perangkat lunak tertinggi berikutnya yang tersedia untuk shader vertex. Bendera ini juga menonaktifkan pengoptimalan dan penelusuran kesalahan.
D3DXSHADER_SKIPVALIDATION
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:

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
D3dx9shader.h

Lihat juga

Konstanta D3DX