Partager via


structure D3D12_RAYTRACING_GEOMETRY_TRIANGLES_DESC (d3d12.h)

Décrit un ensemble de triangles utilisés comme géométrie de raytracing. La géométrie pointée par ce struct est toujours sous forme de liste triangle, indexée ou non indexée. Les bandes de triangles ne sont pas prises en charge.

Syntaxe

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;

Membres

Transform3x4

Adresse d’une matrice de transformation affine 3x4 en disposition de ligne principale à appliquer aux sommets dans vertexBuffer lors d’une build de structure d’accélération. Le contenu de VertexBuffer n’est pas modifié. Si un format de vertex 2D est utilisé, la transformation est appliquée avec le troisième composant de vertex supposé être égal à zéro.

Si Transform3x4 a la valeur NULL, les sommets ne seront pas transformés. L’utilisation de Transform3x4 peut entraîner une augmentation des besoins en calcul et/ou en mémoire pour la build de structure d’accélération.

La mémoire pointée vers doit être à l’état D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. L’adresse doit être alignée sur 16 octets, défini comme D3D12_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT.

IndexFormat

Format des index dans IndexBuffer. Doit prendre l'une des valeurs suivantes :

  • DXGI_FORMAT_UNKNOWN : quand IndexBuffer a la valeur NULL
  • DXGI_FORMAT_R32_UINT
  • DXGI_FORMAT_R16_UINT

VertexFormat

Format des sommets dans VertexBuffer. Doit prendre l'une des valeurs suivantes :

  • DXGI_FORMAT_R32G32_FLOAT : le troisième composant est supposé 0
  • DXGI_FORMAT_R32G32B32_FLOAT
  • DXGI_FORMAT_R16G16_FLOAT : le troisième composant est supposé 0
  • DXGI_FORMAT_R16G16B16A16_FLOAT - Le composant A16 est ignoré, d’autres données peuvent y être emballées, comme la définition de la foulée de vertex sur 6 octets.
  • DXGI_FORMAT_R16G16_SNORM : le troisième composant est supposé 0
  • DXGI_FORMAT_R16G16B16A16_SNORM : le composant A16 est ignoré, d’autres données peuvent y être emballées, comme la définition de la foulée de vertex sur 6 octets.

Les appareils de niveau 1.1 prennent en charge les formats supplémentaires suivants :

  • DXGI_FORMAT_R16G16B16A16_UNORM - Le composant A16 est ignoré, d’autres données peuvent y être emballées, comme la définition de la foulée de vertex sur 6 octets
  • DXGI_FORMAT_R16G16_UNORM - troisième composant supposé 0
  • DXGI_FORMAT_R10G10B10A2_UNORM - Le composant A2 est ignoré, la foulée doit être de 4 octets
  • DXGI_FORMAT_R8G8B8A8_UNORM - Le composant A8 est ignoré, d’autres données peuvent y être emballées, comme la définition de la foulée de vertex sur 3 octets
  • DXGI_FORMAT_R8G8_UNORM - troisième composant supposé 0
  • DXGI_FORMAT_R8G8B8A8_SNORM : le composant A8 est ignoré, d’autres données peuvent y être emballées, comme la définition de la foulée de vertex sur 3 octets
  • DXGI_FORMAT_R8G8_SNORM - troisième composant supposé 0

IndexCount

Nombre d’index dans IndexBuffer. Doit être 0 si IndexBuffer a la valeur NULL.

VertexCount

Nombre de sommets dans VertexBuffer.

IndexBuffer

Tableau d’index de vertex. Si la valeur est NULL, les triangles ne sont pas indexés. Comme pour les graphiques, l’adresse doit être alignée sur la taille d’IndexFormat.

La mémoire pointée vers doit être à l’état D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Notez que si une application souhaite partager des entrées de mémoire tampon d’index entre l’assembleur d’entrée graphique et l’entrée de build de structure d’accélération de raytracing, elle peut toujours placer une ressource dans une combinaison d’états de lecture simultanément, par exemple D3D12_RESOURCE_STATE_INDEX_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE.

VertexBuffer

Tableau de sommets, y compris une foulée. L’alignement sur l’adresse et la foulée doit être un multiple de la taille du composant, donc 4 octets pour les formats avec des composants 32 bits et 2 octets pour les formats avec des composants 16 bits. Contrairement aux graphiques, il n’y a aucune contrainte sur la foulée, si ce n’est que les 32 bits inférieurs de la valeur sont tous utilisés - le champ est UINT64 uniquement pour que les champs voisins s’alignent correctement/évidemment partout. Chaque position de vertex est censée se trouver à l’adresse de début de la plage de foulée et tout espace excédentaire est ignoré par les builds de structure d’accélération. Cet espace excédentaire peut contenir d’autres données d’application, telles que des attributs de vertex, que l’application est chargée d’extraire manuellement dans les nuanceurs, qu’elles soient entrelacées dans des tampons de vertex ou ailleurs.

La mémoire pointée vers doit être à l’état D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE. Notez que si une application souhaite partager des entrées de mémoire tampon de vertex entre l’assembleur d’entrée graphique et l’entrée de build de structure d’accélération de raytracing, elle peut toujours placer une ressource dans une combinaison d’états de lecture simultanément, par exemple D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER | D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE

Configuration requise

Condition requise Valeur
En-tête d3d12.h