struktur D3D12_PIPELINE_STATE_STREAM_DESC (d3d12.h)

Menjelaskan aliran status alur.

Sintaks

typedef struct D3D12_PIPELINE_STATE_STREAM_DESC {
  SIZE_T SizeInBytes;
  void   *pPipelineStateSubobjectStream;
} D3D12_PIPELINE_STATE_STREAM_DESC;

Anggota

SizeInBytes

SAL: In

Menentukan ukuran struktur data buram yang diarahkan oleh anggota pPipelineStateSubobjectStream, dalam byte.

pPipelineStateSubobjectStream

SAL: In_reads(Inexpressible("Dependentonsizeofsubobjects"))

Menentukan alamat struktur data yang menggambarkan sebagai bytestream subobject status alur arbitrer.

Keterangan

Gunakan struktur ini dengan metode ID3D12Device2::CreatePipelineState untuk membuat objek status alur.

Format aliran yang disediakan harus terdiri dari sekumpulan D3D12_PIPELINE_STATE_SUBOBJECT_TYPE alternatif, dan jenis subobjek yang sesuai untuk mereka (misalnya, pasangan D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER dengan D3D12_RASTERIZER_DESC. Dalam hal penyelarasan, runtime D3D12 mengharapkan subobjek menjadi pasangan struct individu enum-struct, bukan serangkaian bidang berkelanjutan. Ini juga mengharapkan mereka untuk diselaraskan dengan keselarasan kata alami sistem. Ini dapat dicapai baik menggunakan alignas(void*), atau membuat union enum + subobject dan void*.

Penting

Tidak cukup hanya menyatukan D3D12_PIPELINE_STATE_SUBOBJECT_TYPE dengan kekosongan*, karena ini akan mengakibatkan subobjek tertentu tidak selaras. Misalnya, D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_PRIMITIVE_TOPOLOGY diikuti dengan enum D3D12_PRIMITIVE_TOPOLOGY_TYPE . Jika jenis subobject disatukan dengan kekosongan*, maka akan ada padding tambahan antara 2 anggota ini, yang mengakibatkan kerusakan aliran. Karena itu, Anda harus menyatukan seluruh struct subobject dengan kekosongan*, ketika alignas tidak tersedia

Contoh subobjek yang sesuai untuk digunakan dengan D3D12_RASTERIZER_DESC diperlihatkan di sini:

struct alignas(void*) StreamingRasterizerDesc
{
private:
  D3D12_PIPELINE_STATE_SUBOBJECT_TYPE Type = D3D12_PIPELINE_STATE_SUBOBJECT_TYPE_RASTERIZER;
public:
  D3D12_RASTERIZER_DESC Desc;
}

Runtime akan menentukan jenis aliran alur (jenis yang valid adalah COMPUTE, GRAPHICS, dan MESH), di mana jenis subobjek, dari VS (vertex shader), CS (shader komputasi), dan MS (shader jala), ditemukan. Jika runtime tidak menemukan shader ini, runtime akan gagal dalam pembuatan alur. Jika menemukan beberapa shader ini yang tidak null, itu juga akan gagal. Ini berarti legal untuk memiliki keduanya, misalnya, CS dan VS di objek stream Anda, asalkan hanya satu yang memiliki pointer non-null untuk bytecode shader untuk panggilan tertentu ke ID3D12Device2::CreatePipelineState. Jenis subobject tidak relevan dengan alur (misalnya subobject shader komputasi dalam aliran grafis) akan diabaikan. Jika subobject tidak disediakan (tidak termasuk subobjek yang diperlukan di atas), runtime akan memberikan nilai default untuk subobjek tersebut.

Pertimbangkan untuk menggunakan d3dx12.h ekstensi untuk C++, yang menyediakan sekumpulan struktur pembantu untuk semua subobjek alur (misalnya, struktur di atas sangat mirip dengan CD3DX12_PIPELINE_STATE_STREAM_RASTERIZER). Header ini dapat ditemukan di bawah repositori DirectX-Headers di github.

Persyaratan

Persyaratan Nilai
Header d3d12.h

Lihat juga

Struktur Inti