Bagikan melalui


Pengantar Konteks yang Ditangguhkan

Bagian ini hanya berlaku untuk Windows 7 dan yang lebih baru, dan Windows Server 2008 R2 dan versi yang lebih baru dari sistem operasi Windows.

Konteks yang ditangguhkan digunakan oleh aplikasi untuk membuat daftar perintah. Jika driver tampilan mode pengguna menunjukkan bahwa ia mendukung daftar perintah melalui bendera D3D11DDICAPS_COMMANDLISTS_BUILD_2 struktur D3D11DDI_THREADING_CAPS , itu juga harus mendukung kemampuan untuk membuat dan memanipulasi konteks yang ditangguhkan. Untuk informasi selengkapnya tentang bagaimana driver menunjukkan kemampuan threading, lihat Threading Pendukung, Daftar Perintah, dan Alur 3-D. Konteks yang ditangguhkan berbeda dari konteks langsung di mana perintah yang dicatat konteks yang ditangguhkan tidak dapat dijalankan sampai aplikasi secara eksplisit meminta untuk menjalankan perintah, dengan menjalankan daftar perintah yang dihasilkan. Untuk membuat dan menggunakan konteks yang ditangguhkan, Direct3D versi 11 menyediakan fungsi DDI baru berikut. Fungsi-fungsi ini adalah subset informasi yang diperlukan untuk membuat kombinasi konteks perangkat/langsung.

Semantik fungsi CalcPrivateDeferredContextSize dan CreateDeferredContext mirip dengan fungsi DDI serupa lainnya.

Runtime Direct3D melewati handel driver baru dan handel lapisan inti untuk setiap panggilan ke fungsi CreateDeferredContext driver untuk membuat setiap konteks yang ditangguhkan. Status alur dari setiap konteks yang ditangguhkan harus setara dengan status alur yang dimiliki konteks langsung setelah operasi status jelas dilakukan di atasnya. Driver harus mengisi anggota struktur D3D11DDI_DEVICEFUNCS bahwa anggota p11ContextFuncs dari struktur D3D11DDIARG_CREATEDEFERREDCONTEXT menunjuk ke dengan subset fungsi dari tabel fungsinya; runtime menggunakan masing-masing konteks yang ditangguhkan yang sesuai D3D10DDI_HDEVICE menangani nilai yang ditentukan anggota D3D11DDIARG_CREATEDEFERREDCONTEXT hDrvContext dengan tabel fungsi ini.

Driver harus terus menyediakan fungsi yang dimulai dengan pfnCreate, pfnOpen, dan pfnDestroy untuk konteks yang ditangguhkan. Fungsi-fungsi ini memiliki semantik utas yang sama dengan konteks lain yang ditangguhkan, dan digunakan untuk membuka dan menutup handel DDI konteks-lokal seperti yang dijelaskan dalam Menggunakan Handel DDI Context-Local. Fungsi yang dimulai dengan pfnCalcPrivate atau pfnCheck tidak dimanfaatkan untuk konteks yang ditangguhkan; oleh karena itu, driver dapat mengatur anggota D3D11DDI_DEVICEFUNCS untuk fungsi-fungsi ini ke NULL ketika konteks yang ditangguhkan dibuat. Sebagian besar fungsi perangkat yang tersisa dimanfaatkan untuk dukungan konteks yang ditangguhkan. Driver tidak memanfaatkan fungsi QueryGetData-nya . Namun, driver memanfaatkan fungsi ResourceMap dan ResourceUnmap-nya . Driver hanya mendukung fungsi ResourceIsStagingBusy dan fungsi DDI baru untuk klem sumber daya Direct3D versi 11 pada konteks langsung dengan menggunakan handel konteks langsung. Untuk daftar lengkap fungsi yang tidak dimanfaatkan untuk konteks yang ditangguhkan, lihat Mengecualikan Fungsi DDI untuk Konteks yang Ditangguhkan.

Driver memanfaatkan fungsi panggilan balik lapisan inti yang disediakan di blok memori yang ditunjuk oleh anggota D3D11DDIARG_CREATEDEFERREDCONTEXT p11UMCallbacks. Fungsi panggilan balik lapisan inti ini menyediakan DDI refresh-state untuk setiap konteks yang ditangguhkan. Namun, yang paling penting adalah penambahan fungsi panggilan balik pfnPerformAmortizedProcessingCb yang dijelaskan dalam Perubahan dari Direct3D 10.

Driver seharusnya tidak mengharapkan fungsi panggilan balik pfnDisableDeferredStagingResourceDestruction tempat anggota pfnDisableDeferredStagingResourceDestructionD3D11DDI_CORELAYER_DEVICECALLBACKS poin valid. Driver seharusnya memanggil pfnDisableDeferredStagingResourceDestruction dalam fungsi CreateDevice(D3D10) untuk konteks perangkat/segera; setelah itu, driver tidak boleh memanggil pfnDisableDeferredStagingResourceDestruction dengan semantik DDI Direct3D versi 11 baru.

Fungsi RecycleCreateDeferredContext driver harus menghapus status alur untuk konteks yang ditangguhkan, mirip dengan bagaimana CreateDeferredContext driver menghapus status alur untuk konteks yang ditangguhkan. Setelah runtime memanggil abandonCommandList, CreateCommandList, atau RecycleCreateCommandList driver, runtime dapat menggunakan handel konteks yang ditangguhkan dengan fungsi DestroyDevice(D3D10) atau RecycleCreateDeferredContext driver. Untuk informasi selengkapnya tentang RecycleCreateDeferredContext, lihat Pengoptimalan untuk Daftar Perintah Kecil.