PFND3DDDI_MAKERESIDENTCB fungsi panggilan balik (d3dumddi.h)

pfnMakeResidentCb digunakan untuk menginstruksikan OS untuk menambahkan sumber daya ke daftar residensi perangkat dan menambah jumlah referensi residensi pada alokasi ini.

Sintaks

PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;

HRESULT Pfnd3dddiMakeresidentcb(
  HANDLE hDevice,
  D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}

Parameter

hDevice

Handel ke perangkat tampilan.

unnamedParam2

pData [masuk, keluar]

Penunjuk ke struktur D3DDDI_MAKERESIDENT yang menjelaskan halaman memori untuk dijadikan residen.

Menampilkan nilai

pfnMakeResidentCb mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
S_OK Semua alokasi telah dibuat residen pada GPU saat keluar dari fungsi ini dan siap untuk segera diakses.
E_PENDING Alokasi telah ditambahkan ke daftar persyaratan residensi perangkat tetapi masih memiliki operasi penomoran halaman yang tertunda untuk diselesaikan sebelum berhasil diakses. Dalam hal ini driver mode pengguna harus menunggu PagingFenceValue pada objek sinkronisasi pagar yang dipantau yang terkait dengan hPagingQueue untuk diberi sinyal sebelum mengirimkan buffer perintah yang mereferensikan alokasi atau kesalahan halaman GPU dapat terjadi.
E_OUTOFMEMORY Manajer memori video tidak dapat membuat setiap penduduk alokasi yang diminta. Ketika ini terjadi, tidak ada alokasi dalam daftar yang disediakan yang akan melihat jumlah residensi mereka dimodifikasi. Dengan kata lain ini adalah operasi atom di mana semua alokasi mendapatkan jumlah residensi mereka meningkat, atau tidak satu pun dari mereka. Selanjutnya, NumBytesToTrim menunjukkan kepada driver berapa banyak byte yang harus dipangkas dari daftar persyaratan residensi perangkat, dengan memanggil pfnEvictCb, sebelum mencoba membuat residen alokasi yang gagal lagi.
Anggaran memori yang terkait dengan aplikasi dapat berubah secara asinkron dengan aplikasi yang berjalan. Sebagai konsekuensi dari ini, pemangkasan jumlah byte yang diminta tidak akan menjamin bahwa upaya berikutnya untuk membuat serangkaian alokasi penduduk akan berhasil karena anggaran memori untuk aplikasi mungkin telah menurun. Karena itu, driver harus memastikan bahwa ia mencoba permintaan residensi dalam perulangan, pemangkasan antara setiap iterasi, sampai permintaan berhasil atau driver telah memangkas semua yang mungkin dapat dilakukan untuk meneruskan kemajuan pada satu operasi dan menggunakan sumber daya yang diperlukan pada upaya akhir tersebut. Jika upaya akhir tersebut gagal, perangkat yang mendasar akan mengalami kesalahan dan driver mode pengguna harus membatalkan permintaan dan kembali ke aplikasi. Tidak ada pengiriman lebih lanjut ke konteks apa pun milik perangkat yang mengalami kesalahan yang akan diizinkan oleh kernel.
Untuk driver mode pengguna DirectX 12.0, pfnMakeResidentCb berperilaku sedikit berbeda karena tidak lagi bertanggung jawab untuk pemangkasan atau paging dalam alokasi. Ini dilakukan untuk memastikan bahwa status alokasi setelah kembali dari panggilan tetap sama seperti sebelum panggilan. Ini berarti bahwa jika E_OUTOFMEMORY dikembalikan dari fungsi :
- Semua alokasi tetap dalam keadaan semula.
- Alokasi tidak dibuat residen.
- PagingFenceValue harus diabaikan.
Jika driver perlu melakukan panggilan pfnMakeResidentCb dalam beberapa batch untuk mengakomodasi terjemahan sumber daya-ke-alokasi, driver harus membatalkan panggilan sebelumnya ke pfnMakeResidentCb dengan panggilan yang setara ke pfnEvictCb, dan menyebarluaskan kode kesalahan kembali ke runtime.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10
Server minimum yang didukung Server Windows 2016
Target Platform Desktop
Header d3dumddi.h (termasuk D3dumddi.h)

Lihat juga

D3DDDI_MAKERESIDENT

pfnEvictCb