Sistem multi-adaptor
Menjelaskan dukungan di Direct3D 12 untuk sistem yang menginstal beberapa adaptor, mencakup skenario di mana aplikasi Anda secara eksplisit menargetkan beberapa adaptor GPU, dan skenario di mana driver secara implisit menggunakan beberapa adaptor GPU atas nama aplikasi Anda.
Gambaran umum multi-adaptor
Adaptor GPU dapat berupa adaptor apa pun (grafis atau komputasi, diskrit, atau terintegrasi), dari produsen apa pun, yang mendukung Direct3D 12.
Beberapa adaptor dirujuk sebagai simpul. Sejumlah elemen, seperti antrean, berlaku untuk setiap simpul, jadi jika ada dua simpul, akan ada dua antrean 3D default. Elemen lain, seperti status alur dan tanda tangan akar dan perintah, dapat merujuk ke satu atau beberapa atau semua simpul, seperti yang ditunjukkan dalam diagram.
Berbagi timbunan di seluruh adaptor
API multi-adaptor, dan masker node
Mirip dengan API Direct3D sebelumnya, setiap set adaptor tertaut dijumlahkan sebagai objek IDXGIAdapter3 tunggal. Semua output yang dilampirkan ke adaptor apa pun dalam tautan dijumlahkan sebagai dilampirkan ke objek IDXGIAdapter3 tunggal.
Aplikasi Anda dapat menentukan jumlah adaptor fisik yang terkait dengan perangkat tertentu dengan memanggil ID3D12Device::GetNodeCount.
Banyak API di Direct3D 12 menerima masker simpul (masker bit), yang menunjukkan set simpul yang dirujuk oleh panggilan API. Setiap simpul memiliki indeks berbasis nol. Tetapi dalam masker node, nol diterjemahkan menjadi bit 1; 1 diterjemahkan ke bit 2; dan sebagainya.
Simpul tunggal
Saat memanggil API (node tunggal) berikut, aplikasi Anda menentukan satu simpul yang akan dikaitkan dengan panggilan API. Sebagian besar waktu, ini ditentukan oleh masker simpul. Setiap bit dalam masker sesuai dengan satu simpul. Untuk semua API yang dijelaskan di bagian ini, Anda harus mengatur tepat satu bit dalam masker node.
- D3D12_COMMAND_QUEUE_DESC : memiliki anggota NodeMask.
- CreateCommandQueue : membuat antrean dari struktur D3D12_COMMAND_QUEUE_DESC .
- CreateCommandList : mengambil parameter nodeMask .
- D3D12_DESCRIPTOR_HEAP_DESC : memiliki anggota NodeMask.
- CreateDescriptorHeap : membuat timbunan deskriptor dari struktur D3D12_DESCRIPTOR_HEAP_DESC .
- D3D12_QUERY_HEAP_DESC : memiliki anggota NodeMask.
- CreateQueryHeap : membuat timbunan kueri dari struktur D3D12_QUERY_HEAP_DESC .
Beberapa simpul
Saat memanggil API (beberapa simpul) berikut, aplikasi Anda menentukan sekumpulan simpul yang akan dikaitkan dengan panggilan API. Anda menentukan afinitas simpul sebagai masker simpul, berpotensi dengan beberapa bit yang ditetapkan. Jika aplikasi Anda melewati 0 untuk masker bit ini, maka driver Direct3D 12 mengonversinya ke bit mask 1 (menunjukkan bahwa objek dikaitkan dengan node 0).
- D3D12_CROSS_NODE_SHARING_TIER : menentukan dukungan untuk berbagi simpul simpul silang.
- D3D12_FEATURE_DATA_D3D12_OPTIONS : struktur mereferensikan D3D12_CROSS_NODE_SHARING_TIER.
- D3D12_FEATURE_DATA_ARCHITECTURE : berisi anggota NodeIndex.
- D3D12_GRAPHICS_PIPELINE_STATE_DESC : memiliki anggota NodeMask.
- CreateGraphicsPipelineState : membuat objek status alur grafis dari struktur D3D12_GRAPHICS_PIPELINE_STATE_DESC .
- D3D12_COMPUTE_PIPELINE_STATE_DESC : memiliki anggota NodeMask.
- CreateComputePipelineState : membuat objek status alur komputasi dari struktur D3D12_COMPUTE_PIPELINE_STATE_DESC .
- CreateRootSignature: mengambil parameter nodeMask .
- D3D12_COMMAND_SIGNATURE_DESC: memiliki anggota NodeMask.
- CreateCommandSignature : membuat objek tanda tangan perintah dari struktur D3D12_COMMAND_SIGNATURE_DESC .
API pembuatan sumber daya
Masker node referensi API berikut.
- D3D12_HEAP_PROPERTIES : memiliki anggota CreationNodeMask dan VisibleNodeMask.
- GetResourceAllocationInfo : memiliki parameter visibleMask .
- GetCustomHeapProperties : memiliki parameter nodeMask .
Saat membuat sumber daya yang dipesan, tidak ada indeks simpul atau masker yang ditentukan. Sumber daya yang dipesan dapat dipetakan ke timbunan pada simpul apa pun (mengikuti aturan berbagi lintas simpul).
Metode MakeResident bekerja secara internal dengan antrean adaptor, tidak perlu aplikasi Anda menentukan apa pun untuk ini.
Saat memanggil API ID3D12Device berikut, aplikasi Anda tidak perlu menentukan sekumpulan simpul yang akan dikaitkan dengan panggilan API karena panggilan API berlaku untuk semua simpul.
- CreateFence
- GetDescriptorHandleIncrementSize
- SetStablePowerState
- CheckFeatureSupport
- CreateSampler
- CopyDescriptors
- CopyDescriptorsSimple
- CreateSharedHandle
- OpenSharedHandleByName
- OpenSharedHandle : dengan pagar sebagai parameter. Dengan sumber daya atau timbunan sebagai parameter, metode ini tidak menerima simpul sebagai parameter karena masker node diwarisi dari objek yang dibuat sebelumnya.
- CreateCommandAllocator
- CreateConstantBufferView
- CreateRenderTargetView
- CreateUnorderedAccessView
- CreateDepthStencilView
- CreateShaderResourceView