DXGKDDI_RENDERKM fungsi panggilan balik (d3dkmddi.h)

Untuk adaptor tampilan yang mendukung akselerasi perangkat keras GDI, fungsi DxgkDdiRenderKm menghasilkan buffer akses memori langsung (DMA) dari buffer perintah yang dilewatkan oleh Driver Tampilan Kanonis (CDD) mode kernel.

Sintaks

DXGKDDI_RENDERKM DxgkddiRenderkm;

NTSTATUS DxgkddiRenderkm(
  [in]     IN_CONST_HANDLE hContext,
  [in/out] INOUT_PDXGKARG_RENDER pRenderKmArgs
)
{...}

Parameter

[in] hContext

Handel ke konteks perangkat untuk DMA dan buffer perintah. Fungsi DxgkDdiCreateContext driver miniport tampilan sebelumnya mengembalikan handel ini di anggota hContext dari struktur DXGKARG_CREATECONTEXT yang ditunjukkan parameter pCreateContext dari DxgkDdiCreateContext .

Jika driver tidak mendukung pembuatan konteks, subsistem kernel grafis Microsoft DirectX menggantikan handel ke konteks dengan handel ke perangkat. Fungsi DxgkDdiCreateDevice driver miniport tampilan sebelumnya mengembalikan handel perangkat di anggota hDevice dari struktur DXGKARG_CREATEDEVICE tempat parameter pCreateDevice dari titik DxgkDdiCreateDevice .

[in/out] pRenderKmArgs

Penunjuk ke struktur DXGKARG_RENDER yang berisi informasi tentang buffer DMA dan buffer perintah yang diformat.

Jika driver miniport tampilan mendukung akselerasi perangkat keras GDI, pRenderKmArgs-pCommand>menunjuk ke buffer perintah DXGK_RENDERKM_COMMAND.

Driver harus menerjemahkan buffer perintah input ke dalam perintah buffer DMA dan membangun daftar lokasi patch.

Menampilkan nilai

DxgkDdiRenderKm mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
STATUS_SUCCESS Seluruh buffer perintah diterjemahkan.
STATUS_NO_MEMORY DxgkDdiRenderKm tidak dapat mengalokasikan memori yang diperlukan untuk menyelesaikannya.
STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER Buffer DMA saat ini habis.
STATUS_INVALID_PARAMETER DxgkDdiRenderKm mendeteksi parameter instruksi yang tidak dapat didukung perangkat keras grafis; namun, perangkat keras grafis dapat mendukung instruksi itu sendiri. Driver tidak diperlukan untuk mengembalikan kode galat ini. Sebaliknya, ia dapat mengembalikan STATUS_ILLEGAL_INSTRUCTION ketika mendeteksi parameter instruksi yang tidak didukung.
STATUS_INVALID_USER_BUFFER DxgkDdiRenderKm mendeteksi data atau instruksi underrun atau overrun. Artinya, driver menerima lebih sedikit atau lebih banyak instruksi atau data dari yang diharapkan. Driver tidak diperlukan untuk mengembalikan kode galat ini. Sebaliknya, ia dapat mengembalikan STATUS_ILLEGAL_INSTRUCTION ketika mendeteksi data atau instruksi underrun atau overrun.
STATUS_INVALID_HANDLE DxgkDdiRenderKm mendeteksi handel yang tidak valid di buffer perintah.
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE Driver miniport tampilan mendeteksi kesalahan dalam aliran DMA. Perangkat konteks grafis ditempatkan dalam status hilang jika driver mengembalikan kode kesalahan ini.

Keterangan

Subsistem kernel grafis DirectX memanggil fungsi DxgkDdiRenderKm driver miniport tampilan untuk menghasilkan buffer DMA dari buffer perintah yang diteruskan oleh Canonical Display Driver (CDD) mode kernel yang disediakan oleh sistem operasi. Selain buffer DMA output, driver miniport tampilan juga harus menghasilkan daftar lokasi patch output. Manajer memori video menggunakan daftar ini untuk memisahkan dan mem-patch buffer DMA dengan tepat.

Akses ke buffer kernel tidak memerlukan perlindungan dari try/except kode.

Driver miniport tampilan tidak diperlukan untuk menggunakan informasi yang disediakan CDD jika dapat membuat ulang informasi secara lebih optimal. Misalnya, jika anggota pRender-pPatchLocationListIn > kosong karena driver tampilan mode pengguna tidak menyediakan daftar lokasi patch input, driver miniport tampilan dapat menghasilkan konten anggota pRender-pPatchLocationListOut> berdasarkan konten buffer perintah sebagai gantinya.

Selain handel khusus perangkat, subsistem kernel grafis DirectX menyediakan driver miniport tampilan dengan alamat segmen GPU terakhir yang diketahui untuk setiap alokasi. Jika indeks alokasi N saat ini di-paged out, subsistem kernel grafis DirectX menetapkan anggota SegmentId dari elemen Nth dari anggota pAllocationListDXGKARG_RENDER ke nol. Jika anggota SegmentId dari elemen Nth dari daftar alokasi tidak diatur ke nol, driver miniport tampilan harus menambal buffer DMA yang dihasilkan dengan informasi alamat segmen yang disediakan sebelum subsistem kernel grafis DirectX memanggil fungsi DxgkDdiPatch untuk mengirim ulang buffer DMA. Driver harus melakukan patching awal ini ketika diminta karena subsistem kernel grafis DirectX mungkin tidak memanggil fungsi DxgkDdiPatch pada buffer DMA yang harus di-patch dengan benar oleh driver.

Meskipun fungsi DxgkDdiRenderKm driver melakukan patching buffer DMA awal seperti yang dijelaskan sebelumnya, driver masih harus menyisipkan semua referensi ke alokasi ke dalam daftar lokasi patch output yang ditentukan anggota pPatchLocationListOutdari DXGKARG_RENDER . Daftar ini harus berisi semua referensi karena alamat alokasi mungkin berubah sebelum buffer DMA dikirimkan ke GPU; oleh karena itu, subsistem kernel grafis DirectX akan memanggil fungsi DxgkDdiPatch untuk mengirimkan ulang buffer DMA.

Untuk membatalkan alokasi, driver miniport tampilan dapat menentukan elemen dalam daftar alokasi yang mereferensikan handel NULL lalu dapat menggunakan elemen lokasi patch yang mereferensikan alokasi NULL tersebut. Biasanya, driver harus menggunakan elemen pertama dari daftar alokasi (elemen 0) sebagai elemen NULL .

Dalam mode DMA kontrak yang dijamin, ketika driver miniport tampilan menerjemahkan buffer perintah ke buffer DMA, CDD harus menjamin sumber daya yang cukup untuk perintah terjemahan. Jika sumber daya yang cukup tidak ada untuk terjemahan, driver miniport tampilan harus menolak buffer DMA. Untuk informasi selengkapnya, lihat Menggunakan Model Buffer DMA Kontrak Terjamin.

DxgkDdiRenderKm harus dibuat dapat dipaginasi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7
Target Platform Desktop
Header d3dkmddi.h
IRQL PASSIVE_LEVEL

Lihat juga

D3DDDI_ALLOCATIONLIST

DXGKARG_CREATECONTEXT

DXGKARG_CREATEDEVICE

DXGK_ALLOCATIONLIST

DXGK_RENDERKM_COMMAND

DxgkDdiCreateContext

DxgkDdiCreateDevice

DxgkDdiOpenAllocation

DxgkDdiPatch

DxgkDdiRender