Bagikan melalui


struktur D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC (d3d12.h)

Menjelaskan satu set segitiga yang digunakan sebagai geometri raytracing. Geometri yang diacu oleh struktur ini selalu dalam bentuk daftar segitiga, diindeks atau tidak diindeks. Strip segitiga tidak didukung.

Sintaks

typedef struct D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC {
  D3D12_GPU_VIRTUAL_ADDRESS            Transform3x4;
  DXGI_FORMAT                          IndexFormat;
  DXGI_FORMAT                          VertexFormat;
  UINT                                 IndexCount;
  UINT                                 VertexCount;
  D3D12_GPU_VIRTUAL_ADDRESS            IndexBuffer;
  D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE VertexBuffer;
} D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC;

Anggota

Transform3x4

Alamat matriks transformasi affine 3x4 dalam tata letak utama baris untuk diterapkan ke simpul di VertexBuffer selama build struktur akselerasi. Konten VertexBuffer tidak dimodifikasi. Jika format vertex 2D digunakan, transformasi diterapkan dengan komponen vertex ketiga yang diasumsikan nol.

Jika Transform3x4 ADALAH NULL, simpul tidak akan diubah. Menggunakan Transform3x4 dapat mengakibatkan peningkatan persyaratan komputasi dan/atau memori untuk build struktur akselerasi.

Memori yang ditujukan harus dalam status D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Alamat harus diratakan ke 16 byte, yang didefinisikan sebagai D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT.

IndexFormat

Format indeks dalam IndexBuffer. Harus salah satu dari berikut ini:

  • DXGI_FORMAT_UNKNOWN - ketika IndexBuffer adalah NULL
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

Format simpul di VertexBuffer. Harus salah satu dari berikut ini:

  • DXGI_FORMAT_R32G32_FLOAT - komponen ketiga diasumsikan 0
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT - komponen ketiga diasumsikan 0
  • DXGI_FORMAT_R16G16B16A16_FLOAT - Komponen A16 diabaikan, data lain dapat dikemas di sana, seperti pengaturan vertex melangkah ke 6 byte.
  • DXGI_FORMAT_R16G16_SNORM - komponen ketiga diasumsikan 0
  • DXGI_FORMAT_R16G16B16A16_SNORM - Komponen A16 diabaikan, data lain dapat dikemas di sana, seperti pengaturan vertex melangkah ke 6 byte.

Perangkat Tingkat 1.1 mendukung format tambahan berikut:

  • DXGI_FORMAT_R16G16B16A16_UNORM - Komponen A16 diabaikan, data lain dapat dikemas di sana, seperti pengaturan vertex melangkah ke 6 byte
  • DXGI_FORMAT_R16G16_UNORM - komponen ketiga diasumsikan 0
  • DXGI_FORMAT_R10G10B10A2_UNORM - Komponen A2 diabaikan, langkah harus 4 byte
  • DXGI_FORMAT_R8G8B8A8_UNORM - Komponen A8 diabaikan, data lain dapat dikemas di sana, seperti pengaturan vertex melangkah ke 3 byte
  • DXGI_FORMAT_R8G8_UNORM - komponen ketiga diasumsikan 0
  • DXGI_FORMAT_R8G8B8A8_SNORM - Komponen A8 diabaikan, data lain dapat dikemas di sana, seperti pengaturan vertex melangkah ke 3 byte
  • DXGI_FORMAT_R8G8_SNORM - komponen ketiga diasumsikan 0

IndexCount

Jumlah indeks di IndexBuffer. Harus 0 jika IndexBuffer adalah NULL.

VertexCount

Jumlah simpul di VertexBuffer.

IndexBuffer

Array indeks vertex. Jika NULL, segitiga tidak diindeks. Sama seperti grafik, alamat harus diselaraskan dengan ukuran IndexFormat.

Memori yang ditujukan harus dalam status D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Perhatikan bahwa jika aplikasi ingin berbagi input buffer indeks antara perakit input grafis dan input build struktur akselerasi raytracing, aplikasi selalu dapat memasukkan sumber daya ke dalam kombinasi status baca secara bersamaan, misalnya D3D12_RESOURCE_STATE_INDEX_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE.

VertexBuffer

Array simpul termasuk langkah. Perataan pada alamat dan langkah harus kelipatan ukuran komponen, jadi 4 byte untuk format dengan komponen 32bit dan 2 byte untuk format dengan komponen 16bit. Tidak seperti grafik, tidak ada batasan pada langkah, selain itu 32bit bawah nilai adalah semua yang digunakan - bidang adalah UINT64 murni untuk membuat bidang tetangga selaras dengan bersih / jelas di mana-mana. Setiap posisi puncak diharapkan berada di alamat awal rentang langkah dan ruang berlebih diabaikan oleh build struktur akselerasi. Ruang berlebih ini mungkin berisi data aplikasi lain seperti atribut vertex, yang bertanggung jawab untuk diambil secara manual dalam shader, baik itu diselingi dalam buffer vertex atau di tempat lain.

Memori yang ditujukan harus dalam status D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Perhatikan bahwa jika aplikasi ingin berbagi input buffer vertex antara perakit input grafis dan input build struktur akselerasi raytracing, aplikasi selalu dapat memasukkan sumber daya ke dalam kombinasi status baca secara bersamaan, misalnya D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE

Persyaratan

Persyaratan Nilai
Header d3d12.h