D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC-Struktur (d3d12.h)

Beschreibt eine Reihe von Dreiecken, die als Raytracinggeometrie verwendet werden. Die Geometrie, auf die diese Struktur verweist, ist immer in Dreieckslistenform, indiziert oder nicht indiziert. Dreiecksstreifen werden nicht unterstützt.

Syntax

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;

Member

Transform3x4

Adresse einer 3x4 affinen Transformationsmatrix im Zeilen-Hauptlayout, die während eines Beschleunigungsstrukturbuilds auf die Scheitelpunkte im VertexBuffer angewendet werden soll. Der Inhalt von VertexBuffer wird nicht geändert. Wenn ein 2D-Vertexformat verwendet wird, wird die Transformation angewendet, wobei angenommen wird, dass die dritte Vertexkomponente 0 ist.

Wenn Transform3x4 NULL ist, werden die Scheitelpunkte nicht transformiert. Die Verwendung von Transform3x4 kann zu erhöhten Berechnungs- und/oder Arbeitsspeicheranforderungen für den Beschleunigungsstrukturbuild führen.

Der Speicher, auf den verwiesen wird, muss sich im Zustand D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE befinden. Die Adresse muss an 16 Bytes ausgerichtet werden, die als D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT definiert sind.

IndexFormat

Format der Indizes im IndexBuffer. Dies muss eine der folgenden Ressourcen sein:

  • DXGI_FORMAT_UNKNOWN – wenn IndexBuffer NULL ist
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

Format der Scheitelpunkte in VertexBuffer. Dies muss eine der folgenden Ressourcen sein:

  • DXGI_FORMAT_R32G32_FLOAT – dritte Komponente wird 0 angenommen
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT : Die dritte Komponente wird 0 angenommen.
  • DXGI_FORMAT_R16G16B16A16_FLOAT : Die A16-Komponente wird ignoriert, andere Daten können dort gepackt werden, z. B. das Festlegen von Scheitelpunktstride auf 6 Bytes.
  • DXGI_FORMAT_R16G16_SNORM – dritte Komponente wird 0 angenommen
  • DXGI_FORMAT_R16G16B16A16_SNORM : Die A16-Komponente wird ignoriert, andere Daten können dort gepackt werden, z. B. das Festlegen von Scheitelpunktstride auf 6 Bytes.

Geräte der Stufe 1.1 unterstützen die folgenden zusätzlichen Formate:

  • DXGI_FORMAT_R16G16B16A16_UNORM : Die A16-Komponente wird ignoriert, andere Daten können dort gepackt werden, z. B. das Festlegen des Scheitelpunkts auf 6 Bytes.
  • DXGI_FORMAT_R16G16_UNORM – dritte Komponente wird 0 angenommen
  • DXGI_FORMAT_R10G10B10A2_UNORM : A2-Komponente wird ignoriert, stride muss 4 Bytes betragen.
  • DXGI_FORMAT_R8G8B8A8_UNORM : A8-Komponente wird ignoriert, andere Daten können dort gepackt werden, z. B. Festlegen von Scheitelpunktschritt auf 3 Bytes
  • DXGI_FORMAT_R8G8_UNORM – dritte Komponente wird 0 angenommen
  • DXGI_FORMAT_R8G8B8A8_SNORM : A8-Komponente wird ignoriert, andere Daten können dort gepackt werden, z. B. Festlegen von Scheitelpunktstride auf 3 Bytes
  • DXGI_FORMAT_R8G8_SNORM – dritte Komponente wird 0 angenommen

IndexCount

Anzahl der Indizes in IndexBuffer. Muss 0 sein, wenn IndexBuffer NULL ist.

VertexCount

Anzahl der Scheitelpunkte in VertexBuffer.

IndexBuffer

Array von Vertexindizes. Bei NULL sind Dreiecke nicht indiziert. Genau wie bei Grafiken muss die Adresse an der Größe von IndexFormat ausgerichtet werden.

Der Speicher, auf den verwiesen wird, muss sich im Zustand D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE befinden. Beachten Sie, dass eine App, wenn eine App Indexpuffereingaben zwischen Grafikeingabeassemblyer und Raytracing-Beschleunigungsstrukturbuildeingaben freigeben möchte, eine Ressource immer gleichzeitig in eine Kombination von Lesezuständen einfügen kann, z. B. D3D12_RESOURCE_STATE_INDEX_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE.

VertexBuffer

Array von Scheitelpunkten, einschließlich eines Schritts. Die Ausrichtung an adresse und stride muss ein Vielfaches der Komponentengröße sein, also 4 Bytes für Formate mit 32-Bit-Komponenten und 2 Bytes für Formate mit 16-Bit-Komponenten. Im Gegensatz zu Grafiken gibt es keine Einschränkung für den Stride, abgesehen davon, dass die unteren 32 Bit des Werts alle verwendet werden – das Feld ist UINT64, nur um benachbarte Felder sauber/offensichtlich überall ausrichten zu lassen. Es wird erwartet, dass sich jede Scheitelpunktposition an der Startadresse des Stride-Bereichs befindet, und jeglicher überschüssiger Speicherplatz wird von Beschleunigungsstrukturbuilds ignoriert. Dieser überschüssige Speicherplatz kann andere App-Daten wie Vertexattribute enthalten, die die App für das manuelle Abrufen in Shadern verantwortlich ist, unabhängig davon, ob sie in Vertexpuffern oder an anderer Stelle verschachtelt ist.

Der Speicher, auf den verwiesen wird, muss sich im Zustand D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE befinden. Wenn eine App Vertexpuffereingaben zwischen Grafikeingabeassemblyer und Raytracing-Beschleunigungsstrukturbuildeingaben freigeben möchte, kann sie eine Ressource immer gleichzeitig in eine Kombination von Lesezuständen versetzen, z. B. D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE

Anforderungen

Anforderung Wert
Header d3d12.h