Menggunakan presisi minimum HLSL

Dimulai dengan Windows 8, driver grafis dapat menerapkan jenis data skalar HLSL presisi minimum dengan menggunakan presisi apa pun yang lebih besar dari atau sama dengan presisi bit yang ditentukan. Ketika kode shader presisi minimum HLSL Anda digunakan pada perangkat keras yang mengimplementasikan presisi minimum HLSL, Anda menggunakan lebih sedikit bandwidth memori dan akibatnya Anda juga menggunakan lebih sedikit daya sistem.

Anda dapat meminta dukungan presisi minimum yang disediakan driver grafis dengan memanggil ID3D11Device::CheckFeatureSupport dengan nilai D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT . Untuk informasi selengkapnya, lihat Dukungan presisi minimum HLSL.

Mendeklarasikan variabel dengan jenis data presisi minimum

Untuk menggunakan presisi minimum dalam kode shader HLSL, deklarasikan variabel individual dengan jenis seperti min16float (min16float4 untuk vektor), min16int, min10float, dan sebagainya. Dengan variabel ini, kode shader Anda menunjukkan bahwa tidak memerlukan lebih banyak presisi daripada yang ditunjukkan oleh variabel. Tetapi perangkat keras dapat mengabaikan indikator presisi minimum dan berjalan pada presisi 32-bit penuh. Ketika kode shader Anda digunakan pada perangkat keras yang memanfaatkan presisi minimum, Anda menggunakan lebih sedikit bandwidth memori dan sebagai hasilnya Anda juga menggunakan lebih sedikit daya sistem selama kode shader Anda tidak mengharapkan lebih presisi dari yang ditentukan.

Anda tidak perlu menulis beberapa shader yang melakukan dan tidak menggunakan presisi minimum. Sebagai gantinya, buat shader dengan presisi minimum, dan variabel presisi minimum bereaksi pada presisi 32-bit penuh jika driver grafis melaporkan bahwa itu tidak mendukung presisi minimum. Shader presisi minimum HLSL tidak berfungsi pada sistem operasi lebih awal dari Windows 8 jadi jika Anda berencana untuk menargetkan sistem operasi sebelumnya, Anda harus menulis beberapa shader, beberapa yang melakukannya dan lainnya yang tidak menggunakan presisi minimum.

Catatan

Jangan beralih data antara tingkat presisi yang berbeda dalam shader karena jenis konversi ini boros dan mengurangi performa. Pengecualiannya adalah bahwa konstanta shader masih selalu 32 bit, tetapi vendor dapat merancang perangkat keras grafis yang dapat bebas dikonversi ke presisi yang lebih rendah apa pun yang mungkin digunakan pembacaan instruksi HLSL.

 

Dengan menggunakan presisi minimum, Anda dapat mengontrol presisi komputasi di berbagai bagian kode shader Anda.

Aturan untuk presisi minimum HLSL mirip dengan C/C++, di mana jenis dalam ekspresi menentukan presisi operasi, bukan jenis yang akhirnya ditulis.

Menguji kode shader presisi minimum Anda

Rasterizer referensi (D3D_DRIVER_TYPE_REFERENCE) memberi Anda gambaran kasar tentang seberapa presisi minimum dalam kode shader HLSL Anda berprilaku dengan mengukur setiap instruksi HLSL dengan presisi yang ditentukan. Ini membantu Anda menemukan kode yang mungkin secara tidak sengaja mengandalkan lebih dari presisi minimum. Rasterizer referensi tidak berjalan lebih cepat ketika kode shader HLSL Anda menggunakan presisi minimum, tetapi Anda dapat menggunakannya untuk memverifikasi kebenaran kode Anda. WARP (D3D_DRIVER_TYPE_WARP) tidak mendukung penggunaan presisi minimum dalam kode shader HLSL; WARP hanya berjalan pada presisi 32-bit penuh.

Panduan Pemrograman untuk HLSL