Bagikan melalui


Fungsi D3DKMTPresent (d3dkmthk.h)

Fungsi D3DKMTPresent mengirimkan perintah saat ini ke subsistem kernel grafis Microsoft DirectX (Dxgkrnl.sys).

Sintaks

NTSTATUS D3DKMTPresent(
  [in] D3DKMT_PRESENT *unnamedParam1
);

Parameter

[in] unnamedParam1

pData: Penunjuk ke struktur D3DKMT_PRESENT yang menjelaskan parameter untuk disajikan.

Nilai kembali

D3DKMTPresent mengembalikan nilai NTSTATUS, seperti salah satu nilai berikut:

Menampilkan kode Deskripsi
STATUS_SUCCESS Saat ini berhasil dilakukan.
STATUS_DEVICE_REMOVED Adaptor grafis dihentikan atau konteks tampilan direset.
STATUS_INVALID_PARAMETER Parameter divalidasi dan ditentukan salah.
STATUS_NO_MEMORY D3DKMTPresent tidak dapat diselesaikan karena memori yang tidak mencukup.
STATUS_GRAPHICS_ALLOCATION_INVALID Handel permukaan utama tidak valid karena mode tampilan berubah. Jika driver klien yang dapat diinstal OpenGL (ICD) menerima kode kesalahan ini, itu harus membuka kembali atau membuat kembali handel utama, ganti semua referensi di buffer perintah ke handel lama dengan handel baru, lalu kirim ulang buffer.
STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE Terjadi kesalahan pada konteks perangkat penyajian yang ditentukan anggota hContextD3DKMT_PRESENT .

Catatan

Kode kesalahan STATUS_GRAPHICS_GPU_EXCEPTION_ON_DEVICE tidak menunjukkan inisiasi proses Deteksi dan Pemulihan Batas Waktu (TDR) atau bahwa GPU berhenti merespons. Misalnya, subsistem kernel grafis DirectX menempatkan perangkat ke dalam status kesalahan jika driver miniport tampilan menunjukkan bahwa buffer DMA yang dikirimkan dari perangkat ini menyebabkan kesalahan atau jika manajer memori video tidak dapat melakukan page-in semua alokasi yang diperlukan untuk buffer DMA bahkan setelah memisahkan buffer DMA. Setelah perangkat dalam status kesalahan, perangkat tidak dapat melakukan operasi lagi dan harus dihancurkan dan dibuat ulang. ICD dapat memanggil fungsi D3DKMTGetDeviceState untuk menentukan alasan kesalahan yang lebih tepat.

Keterangan

Fungsi D3DKMTPresent mungkin mengembalikan STATUS_INVALID_PARAMETER, tergantung pada kombinasi nilai parameter (yaitu, nilai dalam anggota struktur D3DKMT_PRESENT yang dituju pData ). Daftar berikut menjelaskan kombinasi nilai parameter yang paling umum yang dapat menyebabkan D3DKMTPresent mengembalikan PARAMETER STATUS_INVALID:

  • Anggota hDestinationnon-NULL dan setidaknya salah satu kondisi berikut ini benar:

    • Anggota pSrcSubRects adalah NULL.
    • Anggota SubRectCnt adalah 0.
    • Bendera bit-field Blt anggota Bendera tidak diatur.
    • Bendera bit-field SrcRectValiddari Bendera tidak diatur.
    • Bendera bidang bit ColorFilldari Bendera diatur.
    • Bendera bidang bit Flip, FlipDoNotFlip, FlipDoNotWait, atau FlipRestart diatur.
    • Bendera bidang bit SrcColorKey atau DstColorKey dari Bendera diatur.
    • Anggota hSource sama dengan hDestination.
    • Sumber dan tujuan bukan permukaan utama.
  • Bendera Flip bit-field Bendera diatur dan setidaknya salah satu kondisi berikut ini benar:

    • Bendera bidang bit ColorFilldari Bendera diatur.
    • Bendera blt bit-field dari Bendera diatur.
    • Bendera bidang bit SrcColorKey atau DstColorKey dari Bendera diatur.
    • Bendera bit-field SrcRectValid atau DstRectValiddari Bendera diatur.
    • Bendera Putar bit-field dari Bendera diatur.
    • Bendera bit-field RestrictVidPnSourcedari Bendera diatur.
    • Sumbernya bukan permukaan utama.
    • Driver miniport tampilan tidak mendukung interval flip yang ditentukan anggota FlipInterval .
    • Fungsi D3DKMTSetDisplayMode sebelumnya tidak dipanggil.
  • Bendera bidang bit ColorFilldari Bendera diatur dan salah satu kondisi berikut ini benar:

    • pSrcSubRects adalah NULL.
    • SubRectCnt adalah 0.
    • Bendera blt bit-field dari Bendera diatur.
    • Bendera bidang bit Flip, FlipDoNotFlip, FlipDoNotWait, atau FlipRestart diatur.
    • Bendera bidang bit SrcColorKey atau DstColorKey dari Bendera diatur.
    • Bendera bidang bit SrcRectValiddari Bendera diatur.
  • Bendera bit-field Bltdari Bendera diatur dan salah satu kondisi berikut ini benar:

    • pSrcSubRects adalah NULL.
    • SubRectCnt adalah 0.
    • Bendera bidang bit ColorFilldari Bendera diatur.
    • Bendera bidang bit Flip, FlipDoNotFlip, FlipDoNotWait, atau FlipRestart diatur.

Driver grafis mode pengguna yang memanggil D3DKMTPresent untuk gaya blit yang ada, dengan bendera blt bit-field dari set Bendera , perlu berhati-hati untuk memastikan bahwa semua pekerjaan yang dikirimkan sebelumnya ke konteks yang disajikan sepenuhnya dapat dikosongkan. Kegagalan untuk melakukannya dapat mengakibatkan aplikasi kebuntuan itu sendiri, atau di beberapa sudut kasus kebuntuan desktop pengguna saat ini. Konteks sepenuhnya dapat dikosongkan jika hanya berisi tunggu pada objek sinkronisasi GPU di mana sinyal yang sesuai telah diantrekan ke database penjadwal GPU dan di mana sinyal itu sendiri tidak berada di belakang penantian lain yang tidak dapat dibatalkan. Dengan kata lain, jika ruang pengguna semua proses dalam sistem dijeda segera setelah panggilan ke D3DKMTPresent, penantian akan terpenuhi setelah rantai penyajian dependen yang sudah diantrekan ke penjadwal GPU akan selesai dirender. Driver tidak boleh memanggil blit yang ada pada konteks yang tergantung pada tunggu GPU yang saat ini tidak puas dan diharapkan puas dengan beberapa operasi selanjutnya yang berasal dari proses ini atau proses lain.

Contoh

Contoh kode berikut menunjukkan bagaimana OpenGL ICD dapat menggunakan D3DKMTPresent untuk menyajikan data.

HRESULT Present(D3DKMT_HANDLE hDevice, 
                HWND hWnd, 
                RECT* pSrcRect,
                 RECT* pDstRect)
{
    D3DKMT_PRESENT PresentData = {0};

    PresentData.hDevice = hDevice;
    PresentData.Flags.Blt = 
    PresentData.Flags.DstRectValid = 
    PresentData.Flags.SrcRectValid = TRUE;
    PresentData.hWindow = hWnd;
    PresentData.DstRect = *pDstRect;
    PresentData.SrcRect = *pSrcRect;
    PresentData.SubRectCnt = 1;  
    PresentData.pSrcSubRects = pSrcRect; 

    if (NT_SUCCESS((*pfnKTPresent)(&PresentData))) {
        return S_OK;
    }
    return E_FAIL;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Target Platform Universal
Header d3dkmthk.h (termasuk D3dkmthk.h)
Pustaka Gdi32.lib
DLL Gdi32.dll

Lihat juga

D3DKMTGetDeviceState

D3DKMTSetDisplayMode

D3DKMT_PRESENT