Bagikan melalui


Manajemen Status Dipercepat

Manajemen status yang dipercepat adalah mekanisme untuk mengkomunikasikan perubahan status besar di seluruh API dan DDI dalam satu panggilan. Skema ini memungkinkan aplikasi untuk menentukan kumpulan panggilan yang ditetapkan status sebagai blok status yang ditentukan oleh satu bilangan bulat. Mengirim bilangan bulat ini sebagai status render menjalankan semua perubahan status dalam satu panggilan.

Ini mengurangi overhead API dengan mengurangi jumlah panggilan metode IDirect3DDevice7::SetRenderState yang diperlukan, dan dapat meningkatkan efisiensi driver dengan memungkinkan mereka untuk "melakukan prakompilasi" perubahan tahap ke dalam format khusus perangkat keras mereka sendiri pada definisi blok status, alih-alih pada eksekusi setiap perubahan status. IDirect3DDevice7::SetRenderState dijelaskan dalam dokumentasi Direct3D SDK

Sebagian besar aplikasi hanya merender dalam beberapa status, sehingga memiliki transisi status halus jarang penting. Yang lebih penting adalah mampu mendefinisikan blok status yang dapat dipertukarkan sebagai sakelar driver antara skenario penyajian umum. Ini adalah seluruh titik manajemen status yang dipercepat.

Token yang ditetapkan status digunakan untuk merekam status dalam driver. Handel mengacu pada kumpulan status. Struktur D3DHAL_DP2STATESET memberi tahu driver tentang operasi yang ditetapkan status yang akan dilakukan.

Jika anggota dwOperation dari struktur D3DHAL_DP2STATESET diatur ke D3DHAL_STATESETBEGIN, driver mulai merekam status untuk handel yang terkandung dalam anggota dwParam . Ketika driver menerima dwOperation D3DHAL_STATESETEND, driver berhenti merekam status.

Jika anggota dwOperation D3DHAL_STATESETDELETE, set status yang dimaksud oleh handel dwParam harus dihapus.

Jika anggota dwOperation D3DHAL_STATESETEXECUTE, blok status yang dimaksud oleh handel dwParam harus diterapkan di perangkat.

Jika anggota dwOperation D3DHAL_STATESETCAPTURE, status saat ini dalam driver harus ditangkap dengan cara tertentu, memberikan rekam jepret dari status saat ini yang ditentukan dalam blok status. Artinya, hanya status yang sudah ada di blok status yang ditangkap. Dengan demikian, blok status bertindak sebagai semacam masker, hanya status rekaman yang didefinisikan di dalamnya. Misalnya, jika ada status render D3DRENDERSTATE_ZENABLE di blok status, maka status saat ini untuk D3DRENDERSTATE_ZENABLE ditangkap dan dimasukkan ke dalam blok status. Jika tidak ada D3DRENDERSTATE_ZENABLE di blok status, maka status tersebut tidak ditangkap.

Pengelompokan status digunakan untuk membuat blok status generik yang dapat dimodifikasi sedikit untuk skenario penyajian yang berbeda. Pengelompokan yang telah ditentukan sebelumnya (dijumlahkan dalam D3DSTATEBLOCKTYPE dalam dokumentasi DirectX SDK) menentukan blok status generik yang kemudian dapat dimodifikasi dengan perubahan status untuk mengakomodasi skenario penyajian berulang yang diantisipasi. Misalnya, driver mungkin membuat 100 blok status generik yang telah ditentukan sebelumnya dan kemudian memodifikasi masing-masing sedikit untuk mengakomodasi skenario penyajian yang berbeda. Jenis blok status diteruskan di anggota sbType dari struktur D3DHAL_DP2STATESET.

Anggota sbType hanya valid untuk D3DHAL_STATESETBEGIN dan D3DHAL_STATESETEND dan menentukan jenis blok status yang telah ditentukan sebelumnya dengan salah satu jenis enumerasi D3DSTATEBLOCKTYPE berikut: NULL tanpa status, D3DSBT_ALL untuk semua status, D3DSBT_PIXELSTATE untuk status piksel, dan D3DSBT_VERTEXSTATE untuk status vertex.

Driver harus mengabaikan anggotasbType kecuali mengimplementasikan ekstensi status render. Jika driver menerapkan status render yang diperluas, yaitu, merender status di luar persediaan runtime Direct3D, driver dapat menggunakan sbTypeuntuk menentukan jenis status render yang telah ditentukan sebelumnya yang digunakan. Dari informasi ini dapat menentukan cara menambahkan blok status dengan tepat, untuk mendukung ekstensinya.