Bagikan melalui


Metode IDMLCommandRecorder::RecordDispatch (directml.h)

Merekam eksekusi objek yang dapat dikirim (penginisialisasi operator, atau operator yang dikompilasi) ke daftar perintah.

Metode ini tidak mengirimkan eksekusi ke GPU; itu hanya merekamnya ke daftar perintah. Anda bertanggung jawab untuk menutup daftar perintah dan mengirimkannya ke antrean perintah Direct3D 12.

Sebelum menjalankan panggilan ini pada GPU, semua sumber daya yang terikat harus dalam status D3D12_RESOURCE_STATE_UNORDERED_ACCESS , atau status yang secara implisit dapat diproyeksikan ke D3D12_RESOURCE_STATE_UNORDERED_ACCESS, seperti D3D12_RESOURCE_STATE_COMMON. Setelah panggilan ini selesai, sumber daya tetap dalam status D3D12_RESOURCE_STATE_UNORDERED_ACCESS . Satu-satunya pengecualian untuk ini adalah untuk tumpukan unggahan yang terikat saat menjalankan penginisialisasi operator dan sementara satu atau beberapa tensor memiliki bendera DML_TENSOR_FLAG_OWNED_BY_DML diatur. Dalam hal ini, setiap tumpukan unggahan yang terikat untuk input harus dalam status D3D12_RESOURCE_STATE_GENERIC_READ dan akan tetap dalam keadaan tersebut, seperti yang diperlukan oleh semua tumpukan unggahan.

Metode ini mereset status berikut pada daftar perintah.

  • Tanda tangan akar komputasi
  • Status alur
Tidak ada status daftar perintah lain yang dimodifikasi.

Meskipun metode ini mengambil tabel pengikatan yang mewakili sumber daya untuk mengikat alur, metode ini tidak mengatur tumpukan deskriptor yang berisi deskriptor itu sendiri. Oleh karena itu, aplikasi Anda bertanggung jawab untuk memanggil ID3D12GraphicsCommandList::SetDescriptorHeaps untuk mengikat tumpukan deskriptor yang benar ke alur.

Jika DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE tidak diatur saat mengkompilasi operator, maka semua pengikatan harus diatur pada tabel pengikatan sebelum RecordDispatch dipanggil, jika tidak, perilaku tidak terdefinisi. Jika tidak, jika bendera _DESCRIPTORS_VOLATILE diatur, pengikatan sumber daya dapat ditangguhkan hingga daftar perintah Direct3D 12 dikirimkan ke antrean perintah untuk dieksekusi.

Metode ini bertindak secara logis seperti panggilan ke ID3D12GraphicsCommandList::D ispatch. Dengan demikian, hambatan tampilan akses tidak berurutan (UAV) diperlukan untuk memastikan pemesanan yang benar jika ada dependensi data antara pengiriman. Metode ini tidak memasukkan hambatan UAV pada sumber daya input atau output. Aplikasi Anda harus memastikan bahwa hambatan UAV yang benar dilakukan pada input apa pun jika kontennya bergantung pada pengiriman upstream, dan pada output apa pun jika ada pengiriman hilir yang bergantung pada output tersebut.

Metode ini tidak menyimpan referensi ke salah satu antarmuka yang diteruskan. Anda bertanggung jawab untuk memastikan bahwa objek IDMLDispatchable tidak dirilis sampai semua pengiriman menggunakannya telah menyelesaikan eksekusi pada GPU.

Sintaks

void RecordDispatch(
  ID3D12CommandList *commandList,
  IDMLDispatchable  *dispatchable,
  IDMLBindingTable  *bindings
);

Parameter

commandList

Jenis: ID3D12CommandList*

Penunjuk ke antarmuka ID3D12CommandList yang mewakili daftar perintah untuk merekam eksekusi. Daftar perintah harus terbuka dan harus memiliki tipe D3D12_COMMAND_LIST_TYPE_DIRECT atau D3D12_COMMAND_LIST_TYPE_COMPUTE.

dispatchable

Jenis: IDMLDispatchable*

Penunjuk ke antarmuka IDMLDispatchable yang mewakili objek (penginisialisasi operator, atau operator terkompilasi) yang eksekusinya akan direkam ke dalam daftar perintah.

bindings

Jenis: IDMLBindingTable*

Penunjuk ke antarmuka IDMLBindingTable yang mewakili pengikatan yang digunakan untuk mengeksekusi objek yang dapat dikirim. Jika bendera DML_EXECUTION_FLAG_DESCRIPTORS_VOLATILE tidak diatur, maka Anda harus mengisi semua pengikatan yang diperlukan, jika tidak, kesalahan akan dihasilkan.

Menampilkan nilai

Tidak ada

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header directml.h
Pustaka DirectML.lib
DLL DirectML.dll

Lihat juga

Pengikatan di DirectML

IDMLCommandRecorder