struktur D3DDDICB_LOCKFLAGS (d3dukmdt.h)

Struktur D3DDDICB_LOCKFLAGS mengidentifikasi cara mengunci alokasi.

Sintaks

typedef struct _D3DDDICB_LOCKFLAGS {
  union {
    struct {
      UINT ReadOnly : 1;
      UINT WriteOnly : 1;
      UINT DonotWait : 1;
      UINT IgnoreSync : 1;
      UINT LockEntire : 1;
      UINT DonotEvict : 1;
      UINT AcquireAperture : 1;
      UINT Discard : 1;
      UINT NoExistingReference : 1;
      UINT UseAlternateVA : 1;
      UINT IgnoreReadSync : 1;
      UINT Reserved : 21;
    };
    UINT Value;
  };
} D3DDDICB_LOCKFLAGS;

Anggota

ReadOnly

Nilai UINT yang menentukan apakah alokasi terkunci hanya dapat dibaca. Mengatur anggota ini setara dengan mengatur bit pertama anggota Nilai 32-bit (0x00000001).

WriteOnly

Nilai UINT yang menentukan apakah alokasi terkunci hanya dapat ditulis. Mengatur anggota ini setara dengan mengatur bit kedua anggota Nilai 32-bit (0x00000002).

DonotWait

Nilai UINT yang menentukan apakah manajer memori video harus menunggu untuk mengunci alokasi. Jika anggota ini diatur, manajer memori gagal melakukan panggilan ke pfnLockCb dengan D3DERR_WASSTILLDRAWING jika perangkat keras grafis menggunakan alokasi.

Mengatur anggota ini setara dengan mengatur bit ketiga dari anggota Nilai 32-bit (0x00000004).

IgnoreSync

Nilai UINT yang menentukan apakah manajer memori video harus memeriksa apakah perangkat keras grafis menggunakan alokasi. Jika anggota ini diatur, manajer memori tidak boleh memeriksa.

IgnoreSync hanya dapat diatur dengan alokasi yang dapat ditempatkan di segmen aperture. Ini tidak dapat diatur dengan alokasi tergelap, atau dengan alokasi cache ketika koherensi cache tidak didukung oleh adaptor grafis.

Mengatur anggota ini setara dengan mengatur bit keempat dari anggota Nilai 32-bit (0x00000008).

LockEntire

Nilai UINT yang menentukan apakah seluruh wilayah alokasi dikunci bukan hanya subregion.

Mengatur anggota ini setara dengan mengatur bit kelima dari anggota Nilai 32-bit (0x00000010).

DonotEvict

Nilai UINT yang menentukan apakah manajer memori video harus mengeluarkan alokasi sehingga kunci dapat berhasil. Jika anggota ini diatur, manajer memori tidak boleh mengeluarkan alokasi. Jika alokasi harus dikeluarkan untuk menangani permintaan kunci, manajer memori gagal melakukan panggilan ke pfnLockCb dengan D3DERR_NOTAVAILABLE. Pengeluaran mungkin diperlukan ketika semua aperture yang memburuk kelelahan.

Mengatur anggota ini setara dengan mengatur bit keenam dari anggota Nilai 32-bit (0x00000020).

AcquireAperture

Nilai UINT yang menentukan apakah manajer memori video harus memanggil fungsi DxgkDdiAcquireSwizzlingRange driver miniport tampilan untuk menyiapkan aperture yang tidak berdengung untuk alokasi.

Alokasi yang dikunci tanpa mengatur AcquireAperture tidak dapat dikunci lagi dengan set AcquireAperture .

AcquireAperture tidak dapat diatur jika alokasi hanya dapat ditemukan di segmen aperture.

Mengatur anggota ini setara dengan mengatur bit ketujuh dari anggota Nilai 32-bit (0x00000040).

Discard

Nilai UINT yang menentukan apakah manajer memori video dapat mengganti nama atau beberapa buffer alokasi. Untuk informasi selengkapnya tentang mengganti nama alokasi, lihat Meminta untuk Mengganti Nama Alokasi.

Buang diabaikan untuk alokasi yang disematkan, primer, atau bersama.

Mengatur anggota ini setara dengan mengatur bit kedelapan dari anggota Nilai 32-bit (0x00000080).

NoExistingReference

Nilai UINT yang menentukan apakah driver tampilan mode pengguna saat ini tidak telah mengantre dalam buffer perintahnya referensi ke instans alokasi apa pun yang sedang dikunci. Driver harus menggunakan anggota NoExistingReference setelah manajer memori video gagal dalam permintaan penguncian hanya dengan menggunakan bendera Buang dan setelah driver menghapus buffer perintah saat ini ke kernel. Driver harus menggunakan NoExistingReference dalam kombinasi dengan Buang.

Mengatur anggota ini setara dengan mengatur bit kesembilan anggota Nilai 32-bit (0x00000100).

UseAlternateVA

Nilai UINT yang menentukan apakah driver miniport tampilan dapat mengunci alokasi pada alamat fisik yang berbeda dari lokasi segmen alokasi saat ini atau dengan jejak memori yang berbeda dari yang dialokasikan sebelumnya. Ketika bendera ini ditentukan, driver miniport tampilan dapat memperbarui alamat dasar dan ukuran rentang alamat fisik yang dapat diakses CPU (dengan memperbarui anggota RangeSize dan CPUTranslatedAddress dari struktur DXGKARG_ACQUIRESWIZZLINGRANGE dalam panggilan ke fungsi DxgkDdiAcquireSwizzlingRange ). Ketika bendera ini ditentukan, manajer memori video mencoba mengalokasikan alamat virtual baru untuk menangani permintaan kunci daripada menggunakan alamat virtual penyimpanan cadangan alokasi. Namun, jika manajer memori video tidak dapat mengalokasikan alamat virtual baru, permintaan kunci gagal.

Bendera ini juga digunakan untuk mengunci alokasi bergelimpangan atau bertingkat yang saat ini terletak di segmen aperture non-AGP. Dalam jenis kunci ini, manajer memori video memetakan alamat virtual alternatif ke rentang alamat fisik yang dapat tidak tergesa-gesa atau sampai dengan cepat dan kemudian mengalihkan akses memori ke halaman memori sistem.

Manajer memori video membuat alamat virtual alternatif ketika alokasi pertama kali dikunci dengan UseAlternateVA dan merilis alamat virtual dalam salah satu skenario berikut:

  • Alokasi tidak dapat diakses oleh CPU, dan rentang yang menggeliat dirilis untuk digunakan kembali oleh alokasi lain.
  • Alokasi tidak dapat diakses oleh CPU dan sedang dikeluarkan.
  • Alokasi sedang dihancurkan.
  • Alokasi sedang di-paged in setelah dikeluarkan saat dikunci.
Ketahuilah bahwa UseAlternateVA hanya dapat digunakan pada alokasi utama jika alokasi utama dibuat dengan menentukan bendera bit-field UseAlternateVA di anggota Bendera struktur DXGK_ALLOCATIONINFO dalam panggilan ke fungsi DxgkDdiCreateAllocation driver miniport tampilan. Alokasi utama yang dibuat sedemikian sehingga hanya dapat dikunci dengan bendera UseAlternateVA .

UseAlternateVA tidak dapat digunakan pada alokasi bersama.

Alokasi yang dikunci dengan set UseAlternateVA tidak dapat dikunci lagi.

Catatan Jika driver tampilan mode pengguna telah mengatur UseAlternateVA di anggota Bendera struktur D3DDDICB_LOCKFLAGS selama panggilan ke fungsi pfnLockCb , driver miniport tampilan tidak boleh memanggil fungsi DxgkCbExcludeAdapterAccess .
 
Mengatur anggota ini setara dengan mengatur bit kesepuluh dari anggota Nilai 32-bit (0x00000200).

IgnoreReadSync

Nilai UINT yang menentukan apakah manajer memori video harus menunggu hanya untuk operasi tulis Graphics Processing Unit (GPU) yang tertunda ke alokasi untuk diselesaikan. Jika anggota ini diatur, manajer memori tidak diperlukan untuk menunggu operasi baca GPU selesai. Artinya, segera setelah operasi tulis GPU terakhir selesai, kunci dapat kembali meskipun GPU mungkin masih membaca dari alokasi.

IgnoreReadSync hanya dapat diatur dengan alokasi yang dapat ditempatkan di segmen aperture. Ini tidak dapat diatur dengan alokasi tergelap, atau dengan alokasi cache ketika koherensi cache tidak didukung oleh adaptor grafis.

Mengatur anggota ini setara dengan mengatur bit ke-sebelas dari anggota Nilai 32-bit (0x00000400).

Reserved

Anggota ini dicadangkan dan harus diatur ke nol. Mengatur anggota ini ke nol setara dengan mengatur 21 bit yang tersisa (0xFFFFF800) dari anggota Nilai 32-bit ke nol.

Value

Anggota dalam serikat yang terkandung dalam D3DDDICB_LOCKFLAGS yang dapat menyimpan satu nilai 32-bit yang mengidentifikasi cara mengunci alokasi.

Keterangan

Saat Anda menggunakan struktur D3DDDICB_LOCKFLAGS untuk menentukan cara mengunci alokasi, Anda harus mematuhi aturan berikut:

  • Secara bersamaan menentukan anggota ReadOnly dan WriteOnly tidak valid.
  • Anggota IgnoreSync tidak berpengaruh jika ditentukan dengan anggota Buang .
  • Anggota DonotWait tidak berpengaruh jika ditentukan dengan anggota Buang .
  • Secara bersamaan menentukan anggota IgnoreSync dan AcquireAperture tidak valid.
  • Karena menentukan anggota UseAlternateVA menunjukkan bahwa aperture diperoleh, anggota AcquireAperture juga harus ditetapkan.
  • Alokasi yang dihentikan atau ditawarkan tidak dapat dikunci. Lihat juga Meminta untuk Mengganti Nama Alokasi.
  • Alokasi hanya dapat dikunci jika dibuat dengan anggota CpuVisible yang diatur dalam struktur DXGK_ALLOCATIONINFOFLAGS .
  • Hanya pemilik (pembuat) alokasi bersama yang dapat menguncinya, kecuali jika itu adalah alokasi utama yang tidak dikelola GDI.
  • Alokasi yang dikunci dengan rentang berdenyut harus dibuka kuncinya sebelum dapat dikunci lagi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows Vista dan versi yang lebih baru dari sistem operasi Windows.
Header d3dukmdt.h (termasuk D3dukmdt.h)

Lihat juga

D3DDDICB_LOCK

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiAcquireSwizzlingRange

pfnLockCb