Prakebutan GPU

Model preemption dari GPU telah diperbarui di Windows 8 (WDDM 1.2). Dalam model yang diperbarui, sistem operasi:

  • Tidak mengizinkan driver tampilan mode kernel (KMD) untuk menonaktifkan pembatalan sementara paket GPU DMA.
  • Memastikan bahwa permintaan pra-pengambilalihan dikirim ke GPU sebelum memulai proses Timeout Detection and Recovery (TDR).
Syarat Deskripsi
Implementasi driver—Hanya grafis lengkap dan Render Wajib
persyaratan dan pengujian WHLK Device.Graphics...Preemption Test, Device.Graphics...FlipOnVSyncMmIo

Jika OS tidak berhasil mendahului paket yang berjalan lama, maka:

  • Pekerjaan GPU berprioritas tinggi (seperti pekerjaan yang diperlukan oleh Desktop Window Manager (DWM)) dapat ditunda. Penundaan ini mengakibatkan gangguan selama transisi jendela dan animasi.
  • Proses TDR mungkin berulang kali mereset GPU, dan akhirnya dapat menyebabkan terjadinya pemeriksaan bug sistem.

Semua WDDM 1.2 KMD harus mendukung model preemption Windows 8. Namun, ketika beroperasi, driver WDDM 1.2 juga dapat menolak model preemption Windows 8 dan mempertahankan perilaku Windows 7 melalui penjadwal subsistem kernel grafis DirectX (Dxgkrnl).

Antarmuka GPU preemption

KMD dapat menggunakan DDI berikut untuk mengimplementasikan model preemption GPU Windows 8.

Langkah-langkah implementasi driver

Ikuti langkah-langkah umum ini untuk menerapkan model preemption GPU Windows 8 di KMD Anda:

  1. Kompilasi-lah driver Anda terhadap header yang memiliki DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN8.
  2. Nyatakan dukungan untuk model preemption GPU Windows 8 dengan mengatur anggota struktur DXGK_VIDSCHCAPS PreemptionAware dan MultiEngineAware menjadi 1. Untuk mendukung model preemption Windows 7, atur PreemptionAware ke nol.
  3. Tentukan tingkat granularitas preemption yang didukung dalam struktur D3DKMDT_PREEMPTION_CAPS, yang mengambil nilai konstan dari enumerasi D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY dan D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY.
  4. Jika perangkat keras mendukung pengalih-konteks malas, kirimkan buffer panjang nol ke fungsi DxgkDdiSubmitCommand dan atur anggota pSubmitCommand di->Flags->ContextSwitch menjadi 1. Perhatikan diskusi tentang anggota ContextSwitch dari struktur DXGK_SUBMITCOMMANDFLAGS.
  5. Atur alokasi konteks GPU dan alokasi konteks perangkat dengan memanggil fungsi DxgkCbCreateContextAllocation. Perhatikan instruksi dan batasan spesifik yang diberikan dalam Keterangan untuk fungsi tersebut.
  6. Panggil fungsi DxgkCbDestroyContextAllocation untuk melepaskan alokasi konteks GPU dan alokasi konteks perangkat yang dibuat dengan DxgkCbCreateContextAllocation.
  7. Saat menyiapkan buffer DMA sebagai respons terhadap panggilan ke fungsi DxgkDdiBuildPagingBuffer, inisialisasi sumber daya konteks dengan mengisi struktur internal InitContextResource dalam struktur DXGKARG_BUILDPAGINGBUFFER. Jika sumber daya konteks dikeluarkan atau direlokasi, manajer memori video akan mempertahankan konten sumber daya konteks.
  8. Driver harus mendukung pembalikan I/O yang dipetakan pada memori pada saat sinkronisasi vertikal berikutnya. Di Windows 8, penjadwal GPU mencoba untuk mengganggu perangkat keras bahkan jika pembalikan sedang menunggu. Oleh karena itu, untuk mencegah tearing dan artefak render, driver harus mendukung model flip memory-mapped I/O dan harus mengatur anggota FlipOnVSyncMmIo dari struktur DXGK_FLIPCAPS menjadi 1 serta mendukung operasi yang dijelaskan di bawah FlipOnVSyncMmIo.

Pertimbangan pemetaan memori dalam implementasi Anda

Ikuti panduan ini untuk membuat driver kuat yang mendukung model preemption GPU Windows 8 dan memberikan pengalaman pengguna yang berkualitas:

  • Minta preemasi buffer mid-DMA dari GPU saat penjadwal Dxgkrnl mengirimkan perintah preemption. Perangkat keras yang memiliki tingkat granularitas yang lebih halus dari preempsi buffer mid-DMA harus menghasilkan pengalaman pelanggan yang lebih baik.
  • Izinkan ID pagar perintah paging digunakan kembali: jika permintaan pra-penghentian mengakibatkan penghentian perintah paging dalam antrean perangkat keras, penjadwal Dxgkrnl akan mengirimkan ulang perintah paging yang dihentikan dengan ID pagar yang sama yang awalnya digunakan untuk mereka, dan perintah paging akan dijadwalkan sebelum perintah lain di mesin tersebut. Perintah non-halaman akan dikirim ulang dengan ID pagar yang baru ditetapkan.
  • Berikan daftar lokasi patch untuk buffer DMA terpisah. Untuk informasi selengkapnya, lihat Memisahkan buffer DMA.
  • Mode verifikasi, yang disebut deteksi kebocoran pengikatan, tersedia. Mode verifikasi ini berjalan melalui daftar lokasi patch dan menolak paket yang tidak mengikat atau yang tidak memprogram ulang alokasi untuk setiap paket terpisah. Beberapa perangkat keras mendukung alamat virtual, memungkinkan tingkat tidak langsung tambahan yang dapat membuat verifikasi ini tidak perlu. Dalam situasi seperti itu, untuk menunjukkan bahwa driver memilih keluar dari mode verifikasi, setel anggota NoDmaPatching dalam struktur DXGK_VIDSCHCAPS menjadi 1.
  • Di Windows 7, penjadwal Dxgkrnl menjamin bahwa semua paket DMA terpisah yang sesuai dengan perintah render yang sama dijalankan secara berurutan tanpa beralih ke konteks render lain. Dalam model preemption Windows 8, penjadwal dapat menjalankan paket render dari konteks yang berbeda antara dua paket terpisah yang sesuai dengan perintah render yang sama. Sebagai konsekuensinya, driver yang menyadari preemption harus menangani pengiriman paket DMA terpisah/parsial dengan cara yang sama seperti pengiriman paket penuh biasa. Secara khusus, status GPU harus disimpan atau dipulihkan pada batas untuk pengiriman tersebut.
  • Driver yang menyadari preemption tidak boleh mengubah isi dari buffer DMA yang terpecah ketika sedang disiarkan ke beberapa adaptor dalam mode adaptor tampilan tertaut (LDA), di mana beberapa GPU fisik ditautkan untuk membentuk satu GPU virtual yang lebih cepat. Dalam model preemption Windows 8, penjadwal Dxgkrnl tidak lagi menjamin pelaksanaan sinkron dari urutan paket terpisah tanpa beralih ke konteks lain. Driver yang mengubah konten paket DMA terpisah akan membahayakan integritas data paket. Secara khusus, jika paket dijalankan pada mesin lain, paket tersebut akan beroperasi pada salinan data buffer DMA yang sama.
  • Dalam model penghentian sementara GPU Windows 8, penjadwal Dxgkrnl memungkinkan penghentian sementara untuk paket yang dihubungkan dengan primitif sinkronisasi "sinyal on submit". Jika perangkat menggunakan primitif sinkronisasi "sinyal saat disampaikan" dengan status tunggu berbasis perangkat keras, perangkat harus mendukung kemampuan untuk menghentikan instruksi tunggu sebelum kondisi tunggu terpenuhi.

Persyaratan sertifikasi perangkat keras

Untuk informasi tentang persyaratan yang harus dipenuhi perangkat keras saat menerapkan fitur ini, lihat dokumentasi WHLK yang relevan di Device.Graphics... Uji Preemption dan Device.Graphics... FlipOnVSyncMmIo.