Bagikan melalui


struktur D3DKMT_CREATEALLOCATIONFLAGS (d3dkmthk.h)

D3DKMT_CREATEALLOCATIONFLAGS adalah struktur bidang bit yang menentukan cara membuat alokasi dalam panggilan ke fungsi D3DKMTCreateAllocation .

Sintaks

typedef struct _D3DKMT_CREATEALLOCATIONFLAGS {
  UINT CreateResource : 1;
  UINT CreateShared : 1;
  UINT NonSecure : 1;
  UINT CreateProtected : 1;
  UINT RestrictSharedAccess : 1;
  UINT ExistingSysMem : 1;
  UINT NtSecuritySharing : 1;
  UINT ReadOnly : 1;
  UINT CreateWriteCombined : 1;
  UINT CreateCached : 1;
  UINT SwapChainBackBuffer : 1;
  UINT CrossAdapter : 1;
  UINT OpenCrossAdapter : 1;
  UINT PartialSharedCreation : 1;
  UINT Zeroed : 1;
  UINT WriteWatch : 1;
  UINT StandardAllocation : 1;
  UINT ExistingSection : 1;
  UINT AllowNotZeroed : 1;
  UINT PhysicallyContiguous : 1;
  UINT NoKmdAccess : 1;
  UINT SharedDisplayable : 1;
  UINT NoImplicitSynchronization : 1;
#if ...
  UINT Reserved : 9;
#elif
  UINT Reserved : 10;
#elif
  UINT Reserved : 11;
#elif
  UINT Reserved : 13;
#elif
  UINT Reserved : 14;
#elif
  UINT Reserved : 16;
#elif
  UINT Reserved : 21;
#else
  UINT Reserved : 26;
#endif
} D3DKMT_CREATEALLOCATIONFLAGS;

Anggota

CreateResource

Menentukan apakah akan membuat sumber daya khusus perangkat. Jika Anda mengatur CreateShared, Anda juga harus mengatur CreateResource.

CreateShared

Menentukan apakah akan membuat sumber daya yang dibagikan di semua perangkat. Jika Anda mengatur CreateShared, Anda juga harus mengatur CreateResource. Untuk informasi selengkapnya tentang menggunakan CreateShared, lihat bagian Keterangan.

NonSecure

Menentukan apakah akan membuat alokasi yang dapat dibuka oleh proses apa pun. Jika NonSecure diatur, proses yang aman dan tidak aman dapat membuka alokasi.

CreateProtected

Anggota ini dicadangkan dan harus diatur ke nol. Didukung dimulai dengan Windows 7.

RestrictSharedAccess

Menentukan apakah akan membuat sumber daya yang dibagikan di semua perangkat tetapi dengan beberapa batasan. Didukung dimulai dengan Windows 7.

ExistingSysMem

Anggota ini dicadangkan dan harus diatur ke nol. Didukung dimulai dengan Windows 7. Batasan ExistingSysMem mengikuti:

  • ExistingSystemMem dan ExistingSection tidak dapat diatur untuk alokasi yang sama. ExistingSysMem diatur, StandardAllocation juga harus diatur.

  • ExistingSysMem harus diratakan dengan benar. Buffer memori sistem yang ada yang diberikan runtime D3D ke kernel harus selaras dengan halaman dan kelipatan ukuran halaman, jika tidak, kernel gagal melakukan panggilan ke D3DKMTCreateAllocation.

  • Saat kernel membuat jenis D3DKMDT_STANDARDALLOCATION_GDISURFACE alokasi standar:

    • Runtime menyediakan ukuran buffer sistem yang ada. Dengan menggunakan ukuran ini, kernel membuat alokasi standar jenis GDISURFACE dengan parameter berikut yang dipahami KMD dengan benar:

      D3DKMDT_GDISURFACEDATA::Width = Size of ExistingSysMem buffer
      D3DKMDT_GDISURFACEDATA::Height = 1
      D3DKMDT_GDISURFACEDATA::Format = D3DDDIFMT_UNKNOWN
      D3DKMDT_GDISURFACEDATA::Type = D3DKMDT_GDISURFACE_TEXTURE_CROSSADAPTER
      
  • Lindungi dari penunjuk ExistingSysMem yang menunjuk ke DXGALLOCATION yang MemRotated

    Kernel harus melindungi dari skenario di mana mode pengguna mengunci DXGALLOCATION yang ada dan menggunakan penunjuk CPU yang dihasilkan untuk membuat alokasi standar ExistingSysMem. Kasus ini tidak valid jika VAD DXGALLOCATION MEM_ROTATE, yaitu jika alokasi dapat berada di VRAM. Kernel mengambil langkah-langkah berikut dalam membuat alokasi standar dengan panggilan ExistingSysMem:

    • MemSecure penunjuk ExistingSysMem.
    • VirtualQuery memori. Jika atribut berisi MEM_ROTATE, maka gagalkan panggilan.
    • MemSecure hanya dirilis ketika alokasi ini dibebaskan untuk mencegah memori diubah di belakang punggung kernel.

NtSecuritySharing

Menentukan apakah alokasi dibagikan dengan handel NT, yang berarti tidak memiliki handel mode kernel D3DKMT_HANDLE global ke sumber daya.

Jika NtSecuritySharing diatur ke 1 (TRUE):

  • Alokasi dibagikan menggunakan fungsi D3DKMTShareObjects tetapi tidak memiliki handel D3DKMT_HANDLE global ke sumber daya.
  • CreateShared harus diatur ke 1.

Untuk informasi selengkapnya tentang menggunakan NtSecuritySharing, lihat bagian Keterangan. Didukung dimulai dengan Windows 8.

ReadOnly

Menentukan apakah alokasi hanya dapat dibaca. Didukung dimulai dengan Windows 8.

CreateWriteCombined

Anggota ini dicadangkan dan harus diatur ke nol. Didukung dimulai dengan Windows 8.

CreateCached

Anggota ini dicadangkan dan harus diatur ke nol. Didukung dimulai dengan Windows 8.

SwapChainBackBuffer

Anggota ini dicadangkan dan harus diatur ke nol. Didukung dimulai dengan Windows 8.

CrossAdapter

Jika diatur, menunjukkan bahwa sumber daya adalah sumber daya lintas adaptor bersama.

OpenCrossAdapter

Jika diatur, menunjukkan bahwa sumber daya dibuat dengan membuka sumber daya adaptor silang. Tidak dapat digunakan saat alokasi dibuat dari mode pengguna. Didukung dimulai dengan Windows 8.1 (WDDM 1.3).

PartialSharedCreation

Menentukan apakah alokasi dibuat sebagai alokasi bersama parsial. Didukung dimulai dengan Windows 8.1 (WDDM 1.3).

Zeroed

[out] Atur kapan alokasi terpenuhi dengan halaman nol. Didukung dimulai dengan Windows 8 (WDDM 1.3).

WriteWatch

[in] Menunjukkan apakah akan membuat alokasi dengan write-watch diaktifkan. Didukung dimulai dengan Windows 8.1 (WDDM 1.3).

StandardAllocation

[in] Saat diatur, menginstruksikan Dxgkrnl untuk membuat alokasi standar menggunakan pStandardAllocation alih-alih pPrivateDriverData. ExistingSysMem atau ExistingSection (tetapi tidak keduanya) juga harus diatur jika StandardAllocation diatur. Selain itu, saat membuat StandardAllocation, bendera CreateShared dan CrossAdapter juga harus diatur. Didukung dimulai dengan Windows 10 versi 1709 (WDDM 2.3).

ExistingSection

[in] Ketika diatur, menginstruksikan Dxgkrnl untuk menggunakan handel bagian (hSection) alih-alih penunjuk memori sistem (pSystemMem). ExistingSystemMem dan ExistingSection tidak dapat diatur untuk alokasi yang sama. Jika ExistingSection diatur, StandardAllocation juga harus diatur. Didukung dimulai dengan Windows 10 versi 1709 (WDDM 2.3).

AllowNotZeroed

[in] Menunjukkan bahwa alokasi dapat dibuat tanpa nol halaman. Didukung dimulai dengan Windows 10, versi 1903 (WDDM 2.6).

PhysicallyContiguous

[in] Menunjukkan bahwa alokasi harus berdamai secara fisik. Didukung dimulai dengan Windows 10, versi 2004 (WDDM 2.7).

NoKmdAccess

[in] Menunjukkan bahwa KMD tidak diberi tahu tentang alokasi. Didukung dimulai dengan Windows 10, versi 2004 (WDDM 2.7).

SharedDisplayable

Menunjukkan bahwa alokasi adalah sumber daya bersama yang dapat ditampilkan. Didukung dimulai dengan Windows 11 (WDDM 3.0).

NoImplicitSynchronization

Reserved

Didukung dimulai dengan Windows 8.

Anggota ini dicadangkan dan harus diatur ke nol.

Keterangan

Objek yang akan dibagikan dengan menggunakan fungsi D3DKMTShareObjects harus terlebih dahulu dibuat dengan kumpulan nilai bendera NtSecuritySharing . Nilai bendera ini tersedia dalam struktur D3DKMT_CREATEALLOCATIONFLAGS, D3DKMT_CREATEKEYEDMUTEX2_FLAGS, dan D3DDDI_SYNCHRONIZATIONOBJECT_FLAGS .

Driver harus mengikuti panduan ini tentang D3DKMT_CREATEALLOCATIONFLAGS berbagi bendera:

  • Jika alokasi tidak dibagikan, atur CreateShared dan NtSecuritySharing ke 0.
  • Jika alokasi dibagikan dengan jenis data D3DKMT_HANDLE , atur CreateShared = 1 dan NtSecuritySharing = 0.
  • Jika alokasi dibagikan dengan handel NT ke proses (dan tanpa handel mode kernel D3DKMT_HANDLE global ke sumber daya), atur CreateShared = 1 dan NtSecuritySharing = 1.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista
Header d3dkmthk.h (termasuk D3dkmthk.h)

Lihat juga

D3DKMTCreateAllocation

D3DKMT_CREATEALLOCATION