METODE ID3D12Device::CreateCommittedResource (d3d12.h)

Membuat sumber daya dan tumpukan implisit, sehingga tumpukan cukup besar untuk memuat seluruh sumber daya, dan sumber daya dipetakan ke tumpukan.

Sintaks

HRESULT CreateCommittedResource(
  [in]            const D3D12_HEAP_PROPERTIES *pHeapProperties,
  [in]            D3D12_HEAP_FLAGS            HeapFlags,
  [in]            const D3D12_RESOURCE_DESC   *pDesc,
  [in]            D3D12_RESOURCE_STATES       InitialResourceState,
  [in, optional]  const D3D12_CLEAR_VALUE     *pOptimizedClearValue,
  [in]            REFIID                      riidResource,
  [out, optional] void                        **ppvResource
);

Parameter

[in] pHeapProperties

Jenis: const D3D12_HEAP_PROPERTIES*

Penunjuk ke struktur D3D12_HEAP_PROPERTIES yang menyediakan properti untuk timbunan sumber daya.

[in] HeapFlags

Jenis: D3D12_HEAP_FLAGS

Opsi heap, sebagai kombinasi bitwise-OR dari konstanta enumerasi D3D12_HEAP_FLAGS .

[in] pDesc

Jenis: const D3D12_RESOURCE_DESC*

Penunjuk ke struktur D3D12_RESOURCE_DESC yang menjelaskan sumber daya.

[in] InitialResourceState

Jenis: D3D12_RESOURCE_STATES

Status awal sumber daya, sebagai kombinasi bitwise-OR dari konstanta enumerasi D3D12_RESOURCE_STATES .

Saat membuat sumber daya bersama dengan tumpukan D3D12_HEAP_TYPE_UPLOAD , Anda harus mengatur InitialResourceState ke D3D12_RESOURCE_STATE_GENERIC_READ.

Saat membuat sumber daya bersama dengan tumpukan D3D12_HEAP_TYPE_READBACK , Anda harus mengatur InitialResourceState ke D3D12_RESOURCE_STATE_COPY_DEST.

[in, optional] pOptimizedClearValue

Jenis: const D3D12_CLEAR_VALUE*

Menentukan struktur D3D12_CLEAR_VALUE yang menjelaskan nilai default untuk warna yang jelas.

pOptimizedClearValue menentukan nilai yang operasinya 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 , Anda harus memilih nilai yang paling sering disebut operasi yang jelas. Anda dapat memanggil operasi yang jelas dengan nilai lain, tetapi operasi tersebut tidak akan seefisien ketika nilai cocok dengan yang diteruskan ke pembuatan sumber daya.

Saat Anda menggunakan D3D12_RESOURCE_DIMENSION_BUFFER, Anda harus mengatur pOptimizedClearValue ke nullptr.

[in] riidResource

Jenis: REFIID

Referensi ke pengidentifikasi unik global (GUID) antarmuka sumber daya untuk kembali di ppvResource.

Meskipun riidResource paling umum adalah GUIDID3D12Resource, ini mungkin GUID antarmuka apa pun. Jika objek sumber daya tidak mendukung antarmuka untuk GUID ini, pembuatan gagal dengan E_NOINTERFACE.

[out, optional] ppvResource

Jenis: void**

Penunjuk opsional ke blok memori yang menerima penunjuk antarmuka yang diminta ke objek sumber daya yang dibuat.

ppvResource dapat berupa nullptr, untuk mengaktifkan pengujian kemampuan. Ketika ppvResource adalah nullptr, tidak ada objek yang dibuat, dan S_FALSE dikembalikan ketika pDesc valid.

Menampilkan nilai

Jenis: HRESULT

Jika fungsi berhasil, fungsi akan mengembalikan S_OK. Jika tidak, kode kesalahanHRESULT akan dikembalikan.

Mengembalikan nilai Deskripsi
E_OUTOFMEMORY Memori tidak cukup untuk membuat sumber daya.

Lihat Kode pengembalian Direct3D 12 untuk kemungkinan nilai pengembalian lainnya.

Keterangan

Metode ini membuat sumber daya dan timbunan, sehingga timbunan cukup besar untuk memuat seluruh sumber daya, dan sumber daya dipetakan ke tumpuk. Tumpukan yang dibuat dikenal sebagai tumpukan implisit, karena objek heap tidak dapat diperoleh oleh aplikasi. Sebelum merilis referensi akhir pada sumber daya, aplikasi Anda harus memastikan bahwa GPU tidak akan lagi membaca atau menulis ke sumber daya ini.

Tumpukan implisit dibuat residen untuk akses GPU sebelum metode mengembalikan kontrol ke aplikasi Anda. Lihat juga Residensi.

Pemetaan VA GPU sumber daya tidak dapat diubah. Lihat ID3D12CommandQueue::UpdateTileMappings dan Sumber daya ubin Volume.

Metode ini dapat dipanggil oleh beberapa utas secara bersamaan.

Contoh

Sampel D3D12Bundles menggunakan ID3D12Device::CreateCommittedResource sebagai berikut:

Buat buffer vertex.

auto heapProperties = CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT);
auto resourceDesc = CD3DX12_RESOURCE_DESC::Buffer(SampleAssets::VertexDataSize);
ThrowIfFailed(m_device->CreateCommittedResource(
    &heapProperties,
    D3D12_HEAP_FLAG_NONE,
    &resourceDesc,
    D3D12_RESOURCE_STATE_COPY_DEST,
    nullptr,
    IID_PPV_ARGS(&m_vertexBuffer)));

Lihat Contoh kode dalam referensi Direct3D 12.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header d3d12.h
Pustaka D3D12.lib
DLL D3D12.dll

Lihat juga

CreatePlacedResource

CreateReservedResource

D3D12_HEAP_FLAGS

ID3D12Device