Bagikan melalui


PFND3DDDI_CREATERESOURCE2 fungsi panggilan balik (d3dumddi.h)

Membuat sumber daya. Diimplementasikan oleh Windows Display Driver Model (WDDM) 1.2 dan driver tampilan mode pengguna yang lebih baru.

Sintaks

PFND3DDDI_CREATERESOURCE2 Pfnd3dddiCreateresource2;

HRESULT Pfnd3dddiCreateresource2(
  [in] HANDLE hDevice,
       D3DDDIARG_CREATERESOURCE2 *unnamedParam2
)
{...}

Parameter

[in] hDevice

Handel ke perangkat tampilan (konteks grafis) yang digunakan untuk membuat sumber daya.

unnamedParam2

pResource2 [masuk, keluar]

Penunjuk ke struktur D3DDDIARG_CREATERESOURCE2 yang menjelaskan sumber daya yang dibuat.

Menampilkan nilai

Mengembalikan S_OK atau hasil kesalahan yang sesuai. Driver WDDM 1.3 dan yang lebih baru Direct3D Level 9 harus mengembalikan kode kesalahan ini:

Menampilkan kode Deskripsi
E_INVALIDARG D3DDDIARG_CREATERESOURCE2 . Flagsmember memiliki nilai bendera CaptureBuffer yang ditetapkan dan sumber daya melebihi apa yang dapat didukung driver.

Keterangan

Panggilan ke CreateResource2 dapat berisi daftar permukaan. Anggota SurfCount dari struktur D3DDDIARG_CREATERESOURCE2 yang ditentukan oleh parameter pResource2 menentukan jumlah permukaan—termasuk tingkat peta MIP—untuk dibuat. Misalnya, sumber daya peta MIP tekstur 256x256x9 berisi daftar sembilan permukaan di mana anggota SurfCount dan jumlah tingkat peta MIP keduanya diatur ke 9. Peta kubus yang berisi sembilan tingkat peta MIP harus memiliki jumlah tingkat peta MIP yang diatur ke 9 dan SurfCount diatur ke 54. Rantai pertukaran tiga permukaan harus memiliki SurfCount yang diatur ke 3 dan jumlah tingkat peta MIP diatur ke 0. Perhatikan bahwa jumlah tingkat peta MIP selalu kurang dari atau sama dengan nilai di SurfCount.

Menanggapi panggilan CreateResource2 , driver tampilan mode pengguna dapat memanggil fungsi pfnAllocateCb untuk membuat satu atau beberapa alokasi memori. Driver tampilan mode pengguna harus menentukan apakah harus membuat beberapa alokasi per permukaan, satu alokasi untuk semua permukaan, atau satu alokasi per permukaan. Untuk informasi selengkapnya tentang alokasi, lihat Manajemen Memori Video dan Penjadwalan GPU.

Catatan Fungsi CreateResource2 driver tidak diperlukan untuk memanggil pfnAllocateCb sebelum kembali; sebaliknya, driver dapat menunda pembuatan alokasi.
 
Catatan Sumber daya hanya dapat dibagikan jika semua alokasi untuk sumber daya dilakukan secara atomik dalam satu panggilan ke pfnAllocateCb.
 
Anggota hResource dalam struktur D3DDDIARG_CREATERESOURCE2 adalah handel yang digunakan untuk mengidentifikasi sumber daya. Driver tampilan mode pengguna harus menyimpan nilai hResource yang diteruskan dalam panggilan CreateResource2 dan menimpa nilai dengan nilai lain yang dapat digunakan runtime Microsoft Direct3D saat panggilan CreateResource2 kembali. Dengan kata lain, dalam panggilan ke runtime, driver tampilan mode pengguna menggunakan nilai hResource yang diteruskan ke CreateResource2; dalam panggilan ke driver tampilan mode pengguna (misalnya, dalam panggilan ke fungsi SetTexture atau SetStreamSource ), runtime menggunakan nilai hResource yang dikembalikan dari CreateResource2. Perhatikan bahwa setiap permukaan tidak memiliki handel eksplisit; jika permukaan harus dirujuk satu per satu (misalnya dalam panggilan ke fungsi Blt ), permukaan harus dirujuk oleh handel dan indeks. Indeks mengidentifikasi permukaan dalam sumber daya. Indeks sama dengan indeks permukaan dalam array yang terkandung dalam anggota pSurfListD3DDDIARG_CREATERESOURCE2.

Sumber daya dapat dibagikan oleh beberapa perangkat (hDevice) dan proses. Runtime menentukan bahwa sumber daya dibagikan dengan mengatur bendera bit-field SharedResource di anggota BenderaD3DDDIARG_CREATERESOURCE2. Jika bendera bidang bit ini diatur, driver tampilan mode pengguna harus mematuhi batasan berikut pada sumber daya bersama:

  • Driver tampilan mode pengguna dapat memanggil fungsi pfnAllocateCb dan pfnDeallocateCb persis satu kali.
  • Driver tampilan mode pengguna tidak dapat membuat alokasi tambahan untuk sumber daya setelah sumber daya awalnya dibuat dan juga dapat menghancurkan alokasi sumber daya hanya pada saat sumber daya itu sendiri dihancurkan.
  • Ketika fungsi DestroyResource driver tampilan mode pengguna dipanggil untuk sumber daya bersama yang dibuat atau dibuka melalui panggilan ke fungsi CreateResource2 atau OpenResource driver, driver harus mengatur anggota hResource dari struktur D3DDDICB_DEALLOCATE ke non-NULL dan anggota NumAllocationsdari D3DDDICB_DEALLOCATE ke nol dalam panggilan ke fungsi pfnDeallocateCb untuk menghancurkan atau menutup sumber daya. Artinya, alokasi yang terkait dengan sumber daya bersama tidak dapat dihancurkan atau ditutup secara individual; sumber daya harus dihancurkan atau ditutup secara atomik dalam satu panggilan ke pfnDeallocateCb.
  • Jumlah alokasi harus konsisten untuk jenis sumber daya (yaitu, proses lain yang membuat jenis sumber daya yang sama harus menghasilkan jumlah dan jenis alokasi yang sama). Selain itu, penggantian nama tidak diizinkan untuk sumber daya ini.
Bendera bidang bit yang ditentukan dalam struktur D3DDDI_RESOURCEFLAGS2 diteruskan di anggota BenderaD3DDDIARG_CREATERESOURCE2.
Catatan Sumber daya dapat dibuat tanpa menentukan bendera apa pun. Permukaan yang terkait dengan sumber daya tersebut berpotensi dikunci dan dapat menjadi sumber atau tujuan dalam operasi transfer blok bit (bitblt). Namun, permukaan seperti itu tidak dapat digunakan untuk hal lain.
 
Catatan Permukaan polos dibedakan dari tekstur atau target render yang berdiri sendiri dengan tidak adanya bendera Tekstur atau bidang bit Utama . Misalnya, keberadaan bendera bidang bit Utama menunjukkan target render yang berdiri sendiri dan tidak adanya bendera ini menunjukkan target render yang merupakan buffer belakang.
 
Catatan Untuk memastikan bahwa perubahan pada runtime tidak merusak driver yang ada, driver tidak boleh menggunakan anggota terpesan berikut dari struktur D3DDDIARG_CREATERESOURCE2 dalam panggilan ke fungsi CreateResource2 mereka untuk memengaruhi perilaku driver:
  • Bit yang tidak ditentukan dari anggota Bendera dicadangkan.
  • Jika bendera bidang bit Utama tidak diatur dalam Bendera, anggota RefreshRate dan Output akan dicadangkan.
  • Jika bendera bit-field RenderTarget, DecodeRenderTarget, atau VideoProcessRenderTarget tidak diatur di Bendera, anggota MultisampleType dan MultisampleQuality dicadangkan.
  • Jika bendera bit-field VertexBuffer tidak diatur dalam Bendera, anggota Fvf akan dicadangkan.
  • Jika bendera Tekstur, CubeMap, dan Bit-field Volume tidak diatur dalam Bendera, anggota MipLevels akan dicadangkan.
 
Untuk informasi selengkapnya tentang membuat dan menghancurkan sumber daya, lihat Menangani Pembuatan dan Penghancuran Sumber Daya.

Untuk sumber daya memori sistem, driver miniport tampilan dapat memilih untuk membungkus alokasi di sekitar memori sistem jika memori sistem diselaraskan dengan benar untuk akses langsung oleh unit pemrosesan grafis (GPU). Driver miniport tampilan membungkus alokasi di sekitar memori sistem dengan mengatur bendera ExistingSysMem di anggota Bendera struktur DXGK_ALLOCATIONINFO saat membuat alokasi dengan menggunakan fungsi DxgkDdiCreateAllocation . Jika driver miniport tampilan tidak dapat membungkus alokasi di sekitar memori sistem atau pembungkusan gagal, driver masih harus berhasil membuat sumber daya dan menggunakan CPU untuk mengakses sumber daya.

Jika runtime meminta untuk membuat puncak atau buffer indeks dan jika driver tampilan mode pengguna tidak dapat membuat buffer karena alasan selain kehabisan memori (misalnya, kurangnya dukungan perangkat keras), driver harus gagal dengan D3DERR_NOTAVAILABLE.

Persyaratan

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

Lihat juga

Blt

D3DDDIARG_CREATERESOURCE2

D3DDDI_RESOURCEFLAGS2

DXGK_ALLOCATIONINFO

DxgkDdiCreateAllocation

SetStreamSource

SetTexture

pfnAllocateCb

pfnDeallocateCb