PFND3DDDI_UNLOCKCB fungsi panggilan balik (d3dumddi.h)

Fungsi pfnUnlockCb membuka alokasi yang dikunci oleh panggilan ke fungsi pfnLockCb .

Sintaks

PFND3DDDI_UNLOCKCB Pfnd3dddiUnlockcb;

HRESULT Pfnd3dddiUnlockcb(
  HANDLE hDevice,
  const D3DDDICB_UNLOCK *unnamedParam2
)
{...}

Parameter

hDevice

Handel ke perangkat tampilan (konteks grafis).

unnamedParam2

pData [in]

Penunjuk ke struktur D3DDDICB_UNLOCK yang menjelaskan alokasi untuk membuka kunci.

Nilai kembali

pfnUnlockCb mengembalikan salah satu nilai berikut:

Menampilkan kode Deskripsi
S_OK Alokasi berhasil dibuka kuncinya.
E_OUTOFMEMORY pfnUnlockCb tidak dapat diselesaikan karena memori yang tidak mencukup. (Kesalahan ini terjadi ketika sistem berada dalam situasi memori yang sangat rendah dan tidak ada cukup ruang untuk mengalokasikan array halaman.)
E_INVALIDARG Parameter divalidasi dan ditentukan salah.

Fungsi ini mungkin juga mengembalikan nilai HRESULT lainnya.

Keterangan

Driver tampilan mode pengguna harus memanggil fungsi pfnUnlockCb untuk membuka kunci alokasi yang sebelumnya dikunci dalam panggilan ke fungsi pfnLockCb . Jika driver tidak memanggil pfnUnlockCb, koordinasi antara runtime Microsoft Direct3D, driver tampilan mode pengguna, dan driver miniport tampilan hilang.

Driver tampilan mode pengguna biasanya memanggil pfnUnlockCb sebagai respons terhadap panggilan ke fungsi Unlock atau ResourceUnmap (atau variasi ResourceUnmap lainnya seperti DynamicIABufferUnmap) untuk membuka kunci sumber daya atau permukaan dalam sumber daya. Sebelum kembali dari panggilan Unlock atau ResourceUnmap , driver tampilan mode pengguna harus terlebih dahulu memetakan sumber daya atau permukaan ke alokasi yang sesuai lalu memanggil pfnUnlockCb untuk membuka kunci alokasi.

Driver tampilan mode pengguna juga dapat memanggil pfnUnlockCb sebagai respons terhadap panggilan ke fungsi DestroyDevice atau DestroyDevice (D3D10) untuk membebaskan semua sumber daya yang dialokasikan untuk perangkat. Dalam masa pakai perangkat, setiap panggilan ke pfnLockCb untuk mengunci alokasi harus dipasangkan dengan panggilan ke fungsi pfnUnlockCb untuk membuka kunci alokasi.

Driver tampilan mode pengguna dapat membuka kunci beberapa alokasi dalam satu panggilan ke pfnUnlockCb dengan mengatur anggota NumAllocations dari struktur D3DDDICB_UNLOCK ke jumlah alokasi dalam array yang ditentukan oleh anggota phAllocations D3DDDICB_UNLOCK.

Driver tampilan mode pengguna harus memanggil pfnUnlockCb untuk membuka kunci semua alokasi yang dirujuk dalam aliran perintah sebelum memanggil fungsi pfnRenderCb . Driver dapat memiliki alokasi terkunci ke dukungan--misalnya, bendera bit-field NoOverwrite . Jika driver tidak membuka kunci semua alokasi ini, manajer memori video mungkin diperlukan untuk menempatkan alokasi ini dalam memori AGP.

Driver tampilan mode pengguna tidak boleh memanggil pfnUnlockCb untuk membuka kunci alokasi yang dapat digunakan aplikasi. Driver diberi tahu bahwa aplikasi tidak lagi membaca dari atau menulis ke alokasi ketika driver menerima panggilan ke fungsi Unlock atau ResourceUnmap pada sumber daya yang sesuai.

Contoh

Contoh kode berikut menunjukkan cara membuka kunci alokasi.

HRESULT CD3DContext::SyncEnginesUsingLock(VOID) {
    HRESULT hr;
    D3DDDICB_LOCK   lockCB;
    D3DDDICB_UNLOCK Unlock;

    memset(&lockCB, 0, sizeof(D3DDDICB_LOCK));
    lockCB.hAllocation = m_HandleUsedInLastSubmit;
    lockCB.PrivateDriverData = 0;                       
    hr = m_d3dCallbacks.pfnLockCb(m_hD3D, &lockCB);
    if (FAILED(hr)) {
        DBG_BREAK;
        return hr;
    }
    Unlock.NumAllocations = 1;
    Unlock.phAllocations = &m_HandleUsedInLastSubmit;
    m_d3dCallbacks.pfnUnlockCb(m_hD3D, &Unlock);   
    return hr;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows Vista dan versi yang lebih baru dari sistem operasi Windows.
Target Platform Desktop
Header d3dumddi.h (termasuk D3dumddi.h)

Lihat juga

D3DDDICB_UNLOCK

D3DDDI_DEVICECALLBACKS

DestroyDevice

DestroyDevice(D3D10)

ResourceUnmap

Unlock

pfnLockCb

pfnRenderCb