ID3D12Device::CreatePlacedResource method (d3d12.h)
Membuat sumber daya yang ditempatkan dalam tumpukan tertentu. Sumber daya yang ditempatkan adalah objek sumber daya dengan bobot paling ringan yang tersedia, dan merupakan yang tercepat untuk dibuat dan dihancurkan.
Aplikasi Anda dapat menggunakan kembali memori video dengan tumpang tindih beberapa sumber daya Direct3D yang ditempatkan dan dipesan di wilayah timbunan. Model penggunaan kembali memori sederhana (dijelaskan dalam Remarks) ada untuk mengklarifikasi sumber daya yang tumpang tindih mana yang valid pada waktu tertentu. Untuk memaksimalkan dukungan alat grafis, dengan pewarisan data model sederhana tidak didukung; dan petak peta yang lebih halus dan pembatalan sub-sumber daya tidak didukung. Hanya pembatalan sumber daya yang tumpang tindih penuh yang terjadi.
Sintaksis
HRESULT CreatePlacedResource(
ID3D12Heap *pHeap,
UINT64 HeapOffset,
const D3D12_RESOURCE_DESC *pDesc,
D3D12_RESOURCE_STATES InitialState,
const D3D12_CLEAR_VALUE *pOptimizedClearValue,
REFIID riid,
void **ppvResource
);
Parameter
pHeap
Jenis: [in] ID3D12Heap*
Penunjuk ke antarmuka ID3D12Heap
HeapOffset
Jenis:
Offset, dalam byte, ke sumber daya. HeapOffset harus berupa kelipatan keselarasan sumber daya, dan HeapOffset ditambah ukuran sumber daya harus lebih kecil dari atau sama dengan ukuran tumpukan. GetResourceAllocationInfo harus digunakan untuk memahami ukuran sumber daya tekstur.
pDesc
Jenis: [in] const D3D12_RESOURCE_DESC*
Penunjuk ke struktur D3D12_RESOURCE_DESC yang menjelaskan sumber daya.
InitialState
Jenis: D3D12_RESOURCE_STATES
Status awal sumber daya, sebagai kombinasi bitwise-OR dari konstanta enumerasi D3D12_RESOURCE_STATES.
Saat sumber daya dibuat bersama dengan tumpukan D3D12_HEAP_TYPE_UPLOAD, initialState harus D3D12_RESOURCE_STATE_GENERIC_READ. Saat sumber daya dibuat bersama dengan tumpukan
pOptimizedClearValue
Jenis: [in, opsional] const D3D12_CLEAR_VALUE*
Menentukan D3D12_CLEAR_VALUE yang menjelaskan nilai default untuk warna yang jelas.
pOptimizedClearValue menentukan nilai di mana operasi yang jelas paling optimal. Ketika sumber daya yang dibuat adalah tekstur dengan bendera D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET atau D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL, aplikasi Anda harus memilih nilai yang paling umum akan dipanggil oleh operasi yang jelas.
Operasi yang jelas dapat dipanggil dengan nilai lain, tetapi operasi tersebut tidak akan seefisien ketika nilai cocok dengan yang diteruskan ke dalam pembuatan sumber daya.
pOptimizedClearValue harus NULL saat digunakan dengan D3D12_RESOURCE_DIMENSION_BUFFER.
riid
Jenis:
Pengidentifikasi unik global (GUID) untuk antarmuka sumber daya. Ini adalah parameter input.
REFIID, atau GUID, antarmuka ke sumber daya dapat diperoleh dengan menggunakan makro __uuidof
. Misalnya,
ppvResource
Jenis: [out, opsional] ** kekosongan
Penunjuk ke blok memori yang menerima penunjuk ke sumber daya. ppvResource dapat berupa NULL, untuk mengaktifkan pengujian kemampuan. Ketika ppvResource NULL, tidak ada objek yang akan dibuat dan S_FALSE akan dikembalikan ketika pResourceDesc dan parameter lainnya valid.
Mengembalikan nilai
Jenis:
Metode ini mengembalikan E_OUTOFMEMORY jika memori tidak mencukup untuk membuat sumber daya. Lihat Direct3D 12 Mengembalikan Kode untuk kemungkinan nilai pengembalian lainnya.
Komentar
CreatePlacedResource mirip dengan sepenuhnya memetakan sumber daya yang dipesan ke offset dalam timbunan; tetapi ruang alamat virtual yang terkait dengan timbunan juga dapat digunakan kembali.
Sumber daya yang ditempatkan lebih ringan untuk dibuat dan dihancurkan daripada sumber daya yang diterapkan. Ini karena tidak ada timbunan yang dibuat atau dihancurkan selama operasi tersebut. Selain itu, sumber daya yang ditempatkan memungkinkan teknik bobot yang lebih ringan untuk menggunakan kembali memori daripada pembuatan dan penghancuran sumber daya—yaitu, menggunakan kembali melalui alias, dan penghalang alias. Beberapa sumber daya yang ditempatkan dapat secara bersamaan saling tumpang tindih pada tumpukan yang sama, tetapi hanya satu sumber daya yang tumpang tindih yang dapat digunakan pada satu waktu.
Ada dua semantik penggunaan sumber daya yang ditempatkan—model sederhana, dan model tingkat lanjut. Kami menyarankan agar Anda memilih model sederhana (ini memaksimalkan dukungan alat grafis di berbagai ekosistem GPU), kecuali dan sampai Anda menemukan bahwa Anda memerlukan model tingkat lanjut untuk aplikasi Anda.
Model sederhana
Dalam model ini, Anda dapat mempertimbangkan sumber daya yang ditempatkan berada di salah satu dari dua status: aktif, atau tidak aktif. GPU tidak valid untuk membaca atau menulis dari sumber daya yang tidak aktif. Sumber daya yang ditempatkan dibuat dalam status tidak aktif.
Untuk mengaktifkan sumber daya dengan hambatan alias pada daftar perintah, aplikasi Anda harus meneruskan sumber daya di D3D12_RESOURCE_ALIASING_BARRIER::p ResourceAfter. pResourceBefore dapat dibiarkan NULL selama aktivasi. Semua sumber daya yang berbagi memori fisik dengan sumber daya yang diaktifkan sekarang menjadi tidak aktif, yang mencakup sumber daya yang ditempatkan dan dipesan yang tumpang tindih.
Hambatan alias harus dikelompokkan dan dikirimkan bersama-sama, untuk memaksimalkan efisiensi.
Setelah aktivasi, sumber daya dengan target render atau bendera stensil kedalaman harus diinisialisasi lebih lanjut. Lihat catatan tentang inisialisasi sumber daya yang diperlukan di bawah ini.
Catatan tentang inisialisasi sumber daya yang diperlukan
Jenis sumber daya tertentu masih memerlukan inisialisasi. Sumber daya dengan target render atau bendera stensil kedalaman harus diinisialisasi dengan operasi yang jelas atau kumpulan salinan sub sumber daya penuh. Jika hambatan alias digunakan untuk menunjukkan transisi antara dua sumber daya alias, inisialisasi harus terjadi setelah hambatan alias. Inisialisasi ini masih diperlukan setiap kali sumber daya akan diaktifkan dalam model sederhana.
Sumber daya yang ditempatkan dan dipesan dengan target render atau bendera stensil kedalaman harus diinisialisasi dengan salah satu operasi berikut sebelum operasi lain didukung.
- Operasi Clear; misalnya ClearRenderTargetView atau ClearDepthStencilView.
- Operasi
DiscardResource. - Operasi Salin
; misalnya CopyBufferRegion , CopyTextureRegion , atauCopyResource .
Aplikasi harus lebih memilih operasi paling eksplisit yang menghasilkan jumlah texel yang dimodifikasi paling sedikit. Pertimbangkan contoh berikut.
- Menggunakan buffer kedalaman untuk memecahkan visibilitas piksel biasanya memerlukan setiap texel kedalaman dimulai pada 1.0 atau 0. Oleh karena itu, operasi Clear harus menjadi opsi paling efisien untuk inisialisasi buffer kedalaman alias.
- Aplikasi dapat menggunakan target render alias sebagai tujuan pemetaan nada. Karena aplikasi akan merender setiap piksel selama pemetaan nada, DiscardResource harus menjadi opsi paling efisien untuk inisialisasi.
Model tingkat lanjut
Dalam model ini, Anda dapat mengabaikan abstraksi status aktif/tidak aktif. Sebagai gantinya, Anda harus mematuhi aturan tingkat bawah ini.
- Hambatan alias harus berada di antara dua akses sumber daya GPU yang berbeda dari memori fisik yang sama, selama akses tersebut berada dalam panggilan ExecuteCommandLists yang sama.
- Operasi penyajian pertama ke jenis sumber daya alias tertentu masih harus menjadi inisialisasi, sama seperti model sederhana.
Operasi inisialisasi harus terjadi baik pada seluruh sub sumber daya, atau pada granularitas 64KB. Seluruh inisialisasi sub sumber daya didukung untuk semua jenis sumber daya. Granularitas inisialisasi 64KB, diselaraskan pada offset 64KB, didukung untuk buffer dan tekstur dengan tata letak tekstur 64KB_UNDEFINED_SWIZZLE atau 64KB_STANDARD_SWIZZLE (lihat D3D12_TEXTURE_LAYOUT).
Catatan pada hambatan alias
Penghalang alias dapat mengatur NULL untuk pResourceAfter dan pResourceBefore. Definisi koherensi memori executeCommandLists dan hambatan alias sama, sehingga dua akses alias ke memori fisik yang sama tidak memerlukan hambatan alias ketika akses berada di dua executeCommandLists yang berbeda pemanggilan.
Untuk model penggunaan tingkat lanjut D3D12, definisi sinkronisasi ExecuteCommandLists setara dengan hambatan alias. Oleh karena itu, aplikasi dapat memasukkan penghalang alias antara menggunakan kembali memori fisik, atau memastikan dua penggunaan alias memori fisik terjadi dalam dua panggilan terpisah ke ExecuteCommandLists.
Jumlah tidak aktif bervariasi berdasarkan properti sumber daya. Tekstur dengan tata letak memori yang tidak ditentukan adalah kasus terburuk, karena seluruh tekstur harus tidak aktif secara atomik. Untuk dua sumber daya yang tumpang tindih dengan tata letak yang ditentukan, tidak aktif hanya dapat mengakibatkan wilayah sumber daya yang tumpang tindih. Pewarisan data bahkan dapat didefinisikan dengan baik. Untuk detail selengkapnya, lihat alias memori dan pewarisan data.
Persyaratan
Syarat | Nilai |
---|---|
Platform Target |
Windows |
Header |
d3d12.h |
Pustaka |
D3D12.lib |
DLL |
D3D12.dll |
Lihat juga
Timbunan Bersama