DXGKDDI_PRESENT fungsi panggilan balik (d3dkmddi.h)
Fungsi DxgkDdiPresent menyalin konten dari alokasi sumber ke permukaan utama (dan terkadang ke alokasi memori sistem di luar layar).
Sintaks
DXGKDDI_PRESENT DxgkddiPresent;
NTSTATUS DxgkddiPresent(
[in] IN_CONST_HANDLE hContext,
[in/out] INOUT_PDXGKARG_PRESENT pPresent
)
{...}
Parameter
[in] hContext
Handel ke konteks perangkat untuk informasi penyalinan. 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 yang ditunjukkan oleh parameter pCreateDevice dari DxgkDdiCreateDevice .
[in/out] pPresent
Penunjuk ke struktur DXGKARG_PRESENT yang berisi informasi tentang operasi salin.
Menampilkan nilai
DxgkDdiPresent mengembalikan salah satu nilai berikut:
Menampilkan kode | Deskripsi |
---|---|
STATUS_SUCCESS | DxgkDdiPresent berhasil menyalin konten. |
STATUS_NO_MEMORY atau STATUS_INSUFFICIENT_RESOURCES | DxgkDdiPresent tidak dapat mengalokasikan memori yang diperlukan untuk menyelesaikannya. |
STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER | Buffer akses memori langsung (DMA) saat ini habis. |
STATUS_GRAPHICS_CANNOTCOLORCONVERT | Driver miniport tampilan mendeteksi transfer blok bit (bitblt) untuk konversi warna yang tidak dapat dilakukan perangkat. Runtime Microsoft Direct3D mencegah aplikasi dilanjutkan, dan aplikasi menerima kegagalan untuk menyalin konten. |
STATUS_PRIVILEGED_INSTRUCTION | DxgkDdiPresent mendeteksi instruksi nonprivileged (yaitu, instruksi yang mengakses memori di luar hak istimewa dari proses unit pemrosesan pusat [CPU] saat ini). |
STATUS_ILLEGAL_INSTRUCTION | DxgkDdiPresent mendeteksi instruksi yang tidak dapat didukung oleh perangkat keras grafis. |
STATUS_INVALID_HANDLE | DxgkDdiPresent 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 DxgkDdiPresent driver miniport tampilan untuk menyalin konten dari alokasi sumber biasanya ke permukaan utama. (Fungsi ini juga dapat menyalin konten ke alokasi memori sistem di luar layar.) Karena permukaan utama didefinisikan secara longgar, DxgkDdiPresent dapat diimplementasikan untuk skenario berikut:
- Tergantung pada posisi jendela, fungsi DxgkDdiPresent harus dilakukan di berbagai primari yang dapat berada di adaptor yang sama atau di berbagai adaptor.
- Primer berada di monitor jarak jauh dan diakses melalui klien layanan terminal atau Microsoft NetMeeting.
- Peralihan mode baru-baru ini terjadi dan format utama berbeda dari format sumber, sehingga konversi warna diperlukan. Selain itu, operasi DxgkDdiPresent dapat diklip karena pengklipan dan pemesanan jendela.
Driver miniport tampilan tidak diperlukan untuk mengetahui secara spesifik skenario sebelumnya selama driver mendukung abstraksi berikut:
- Dalam operasi salin dari sumber memori video ke tujuan memori video atau sistem utama, salinan dari sumber memori sistem di luar layar ke tujuan utama, salinan dari dan ke primer, atau salinan dari sumber utama ke tujuan memori sistem di luar layar, sumber ditentukan oleh anggota hDeviceSpecificAllocation dari elemen array pAllocationList[DXGK_PRESENT_SOURCE_INDEX] dari struktur DXGKARG_PRESENT yang pPresentents parameter DxgkDdiPresent menunjuk ke. Tujuan, yang merupakan primer perangkat saat ini atau alokasi memori sistem di luar layar, ditentukan oleh anggota hDeviceSpecificAllocation dari elemen array pAllocationList[DXGK_PRESENT_DESTINATION_INDEX] dari DXGKARG_PRESENT. Jika tujuan sama dengan sumber (yaitu, tujuan == sumber), operasi salin adalah transfer bit-block layar-ke-layar (bitblt). Oleh karena itu, subsistem grafis mengatur sumber dan tujuan ke nilai berikut:
- destination != NULL (yaitu, destination == nonNULL)
- source != NULL (yaitu, source == nonNULL)
- Dalam memori video membalik dari alokasi saat ini ke alokasi lain, sumber dapat ditentukan oleh sistem operasi dan diatur dalam anggota hDeviceSpecificAllocation dari elemen array pAllocationList[DXGK_PRESENT_SOURCE_INDEX] dari DXGKARG_PRESENT. Subsistem grafik mengatur sumber dan tujuan ke nilai berikut:
- destination == NULL
- source != NULL (yaitu, source == nonNULL)
Catatan Flip no-op dapat dilakukan dari alokasi sumber yang sama dengan alokasi yang saat ini dipindai. Flip no-op digunakan untuk menyisipkan antrean menunggu kosong vertikal di aliran penyajian. Driver miniport tampilan harus memasukkan perintah balik perangkat keras seolah-olah membalik ke alokasi lain. - Dalam operasi pengisian warna ke permukaan utama, tidak ada alokasi sumber yang diperlukan dan tujuannya adalah handel alokasi utama yang ditentukan oleh anggota hDeviceSpecificAllocation dari elemen array pAllocationList[DXGK_PRESENT_DESTINATION_INDEX] dari DXGKARG_PRESENT. Anggota Warna DXGKARG_PRESENT biasanya dalam format D3DDDIFMT_A8R8G8B8 dari jenis enumerasi D3DDDIFORMAT . Namun, ketika format utama dipalsukan RGB, Warna berisi indeks palet. Oleh karena itu, subsistem grafis mengatur sumber dan tujuan ke nilai berikut:
- destination != NULL (yaitu, destination == nonNULL)
- source == NULL
Subsistem grafis kemudian memperoleh buffer DMA baru dan memanggil fungsi DxgkDdiPresent driver lagi dengan daftar struktur RECT yang sama dengan panggilan DxgkDdiPresent sebelumnya. Driver harus menggunakan anggota MultipassOffset dari struktur DXGKARG_PRESENT yang diarahkan oleh pPresent untuk merekam jumlah kemajuan yang dibuat dalam menyelesaikan daftar RECT dalam panggilan sebelumnya ke DxgkDdiPresent sehingga driver dapat melanjutkan dari mana ia berhenti dengan buffer DMA baru. Ketika fungsi DxgkDdiPresent driver menyelesaikan daftar struktur RECT, fungsi mengembalikan STATUS_SUCCESS.
Selain menghasilkan buffer DMA, driver miniport tampilan harus menghasilkan daftar lokasi patch yang menunjukkan berbagai offset dalam buffer DMA yang harus di-patch nanti ketika alamat fisik untuk alokasi diketahui. Terkadang, manajer memori video memberi driver informasi pra-patch (yaitu, alamat fisik terakhir yang diketahui untuk sumber dan tujuan) dalam daftar alokasi.
Ketika manajer memori video memberikan informasi ini, driver harus menghasilkan buffer DMA dengan menentukan bahwa alamat fisik ini adalah alamat akhir yang akan disediakan subsistem kernel grafis DirectX. Subsistem grafis mungkin tidak memanggil fungsi DxgkDdiPatch pada buffer DMA untuk menambalnya lagi nanti. Oleh karena itu, driver harus menggunakan informasi pra-patch untuk menghasilkan buffer DMA dengan benar. Informasi pra-patch disediakan untuk elemen N ketika anggota SegmentId dari elemen Ndari array pAllocationListDXGKARG_PRESENT bukan nol.
Alokasi utama sumber ditentukan dalam fungsi DxgkDdiCommitVidPn . Jika beberapa jalur berasal dari sumber yang diberikan (mode kloning), driver miniport tampilan harus memastikan bahwa output diputar dengan benar mengingat mode rotasi jalur untuk target yang berbeda. Semua parameter yang disediakan ke DxgkDdiPresent adalah agnostik rotasi. Persegi panjang sumber dan target bisa menjadi seluruh layar saat klien memahaminya (misalnya, 768 x 1024).
DxgkDdiPresent harus dibuat pageable.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista |
Target Platform | Desktop |
Header | d3dkmddi.h |
IRQL | PASSIVE_LEVEL |
Lihat juga
DXGKARG_PRESENT
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk