METODE ID3D12Device1::CreatePipelineLibrary (d3d12.h)

Membuat pustaka alur yang di-cache. Untuk objek status alur (PSO) yang diharapkan untuk berbagi data bersama-sama, mengelompokkannya ke dalam pustaka sebelum menserialisasikannya berarti ada lebih sedikit overhead karena metadata, serta kesempatan untuk menghindari data redundan atau duplikat yang ditulis ke disk.

Anda dapat meminta dukungan ID3D12PipelineLibrary dengan ID3D12Device::CheckFeatureSupport, dengan D3D12_FEATURE_SHADER_CACHE dan D3D12_FEATURE_DATA_SHADER_CACHE. Jika anggota BenderaD3D12_FEATURE_DATA_SHADER_CACHE berisi bendera D3D12_SHADER_CACHE_SUPPORT_LIBRARY, antarmuka ID3D12PipelineLibrary didukung. Jika tidak, maka DXGI_ERROR_NOT_SUPPORTED akan selalu dikembalikan ketika fungsi ini dipanggil.

Sintaks

HRESULT CreatePipelineLibrary(
  const void *pLibraryBlob,
  SIZE_T     BlobLength,
  REFIID     riid,
  void       **ppPipelineLibrary
);

Parameter

pLibraryBlob

Jenis: [in] const void*

Jika blob pustaka input kosong, maka konten awal pustaka kosong. Jika blob pustaka input tidak kosong, maka blob tersebut divalidasi untuk integritas, diurai, dan pointer disimpan. Pointer yang disediakan sebagai input untuk metode ini harus tetap valid selama masa pakai objek yang dikembalikan. Untuk alasan efisiensi, data tidak disalin.

BlobLength

Jenis: SIZE_T

Menentukan panjang pLibraryBlob dalam byte.

riid

Jenis: REFIID

Menentukan REFIID unik untuk objek ID3D12PipelineLibrary . Biasanya atur ini dan parameter berikut dengan makro IID_PPV_ARGS(&Library), di mana Pustaka adalah nama objek.

ppPipelineLibrary

Jenis: [out] void**

Mengembalikan penunjuk ke pustaka yang dibuat.

Menampilkan nilai

Jenis: HRESULT

Jika fungsi berhasil, fungsi akan mengembalikan S_OK. Jika tidak, ia mengembalikan kode kesalahanHRESULT, termasuk E_INVALIDARG jika blob rusak atau tidak dikenali, D3D12_ERROR_DRIVER_VERSION_MISMATCH jika data yang disediakan berasal dari driver atau runtime lama, dan D3D12_ERROR_ADAPTER_NOT_FOUND jika data berasal dari perangkat keras yang berbeda.

Jika Anda lulus nullptr untuk pPipelineLibrary , maka runtime masih melakukan validasi blob tetapi menghindari pembuatan pustaka yang sebenarnya dan mengembalikan S_FALSE jika pustaka akan dibuat.

Selain itu, fitur ini memerlukan driver yang diperbarui, dan mencoba menggunakannya pada driver lama akan mengembalikan DXGI_ERROR_UNSUPPORTED.

Keterangan

Pustaka alur memungkinkan operasi berikut.

  • Menambahkan objek status alur (PSO) ke objek pustaka yang ada (lihat StorePipeline).
  • Menserialisasikan pustaka PSO ke dalam blok memori yang bersebelahan untuk penyimpanan disk (lihat Serialize).
  • Membatalkan serialisasi pustaka PSO dari penyimpanan persisten (ini ditangani oleh CreatePipelineLibrary).
  • Mengambil PSO individual dari pustaka (lihat LoadComputePipeline dan LoadGraphicsPipeline).

Tidak ada gunanya siklus hidup pustaka alur ada duplikasi antara PSO dengan sub-komponen yang identik.

Solusi yang direkomendasikan untuk mengelola masa pakai pointer yang disediakan sementara hanya harus menghitung ulang antarmuka yang dikembalikan adalah memanfaatkan ID3D12Object::SetPrivateDataInterface, dan menggunakan objek yang mengimplementasikan IUnknown, dan membebaskan memori saat ref-count mencapai 0.

Keamanan Thread

Pustaka alur aman untuk digunakan, dan akan disinkronkan secara internal seperlunya, dengan satu pengecualian: beberapa utas yang memuat PSO yang sama (melalui LoadComputePipeline, LoadGraphicsPipeline, atau LoadPipeline) harus disinkronkan sendiri, karena tindakan ini dapat memodifikasi status alur tersebut dalam pustaka dengan cara yang tidak aman.

Contoh

Lihat sampel cache status alur Direct3D 12.

Persyaratan

   
Target Platform Windows
Header d3d12.h
Pustaka D3d12.lib
DLL D3d12.dll

Lihat juga