Predikasi
Predikasi adalah fitur yang memungkinkan GPU daripada CPU untuk menentukan untuk tidak menggambar, menyalin, atau mengirimkan objek.
Gambaran Umum
Penggunaan predikasi yang khas adalah dengan oklusi; jika kotak pembatas digambar dan dihilangkan, jelas tidak ada gunanya menggambar objek itu sendiri. Dalam situasi ini, gambar objek dapat "diprediksikan", memungkinkan penghapusannya dari penyajian aktual oleh GPU.
Pada awalnya, ini mungkin tampak berlebihan di atas dan di atas tes kedalaman standar ditambah lulus kedalaman awal. Tetapi predikasi dapat menghapus overhead status perintah gambar itu sendiri, ditambah rasterisasi. Meskipun pass kedalaman awal menghapus piksel yang tidak perlu, itu masih dapat mengeksekusi vertex, lambung, domain, dan shader geometri, dan memanggil perakitan input fungsi tetap, tesselator, dan rasterizer. Dengan menggambar kotak pembatas sederhana atau volume pembatas serupa—yang lebih mudah diproses dan dirasterisasi daripada model nyata—Anda menghindari rasterisasi dan pemrosesan yang tidak perlu.
Tidak seperti Direct3D 11, predikasi dipisahkan dari kueri, dan diperluas di Direct3D 12 untuk memungkinkan aplikasi untuk memprediksikan objek berdasarkan alasan apa pun yang dapat diputuskan pengembang aplikasi (bukan hanya oklusi).
SetPredication
Predikasi dapat ditetapkan berdasarkan nilai 64-bit dalam buffer (lihat D3D12_PREDICATION_OP).
Saat GPU menjalankan perintah SetPredication , GPU akan memposisikan nilai dalam buffer. Perubahan pada data di masa mendatang dalam buffer tidak secara surut memengaruhi status predikasi.
Jika buffer parameter input adalah NULL, maka predikasi dinonaktifkan.
Petunjuk predikasi tidak ada di DIRECT3D 12 API; predikasi dan diizinkan pada daftar perintah langsung, komputasi, dan salin. Buffer sumber dapat berada dalam jenis heap apa pun (default, upload, readback, custom).
Runtime inti akan memvalidasi hal berikut:
- AlignedBufferOffset adalah kelipatan 8 byte
- Sumber daya adalah buffer
- Operasi ini adalah anggota enumerasi yang valid
- SetPredication tidak dapat dipanggil dari dalam bundel
- Jenis daftar perintah mendukung predikasi
- Offset tidak melebihi ukuran buffer
Lapisan debug akan mengeluarkan kesalahan jika buffer sumber tidak dalam status D3D12_RESOURCE_STATE_PREDICATION (yang sama dengan D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT, dan hanya alias).
Sekumpulan operasi yang dapat dipredikat adalah:
- DrawInstanced
- DrawIndexedInstanced
- Pengiriman
- CopyTextureRegion
- CopyBufferRegion
- CopyResource
- CopyTiles
- ResolveSubresource
- ClearDepthStencilView
- ClearRenderTargetView
- ClearUnorderedAccessViewUint
- ClearUnorderedAccessViewFloat
- ExecuteIndirect
ExecuteBundle tidak diprediksikan sendiri. Sebagai gantinya, operasi individual dari daftar di atas yang terkandung di sisi bundel diprediksikan.
Metode ID3D12GraphicsCommandList ResolveQueryData, BeginQuery, dan EndQuery tidak diprediksikan.
Topik terkait