Sous-ressources (Direct3D 12 Graphics)
Décrit comment une ressource est divisée en sous-ressources et comment référencer une seule, plusieurs ou plusieurs sous-ressources.
Exemples de sous-ressources
Si une ressource contient une mémoire tampon, elle contient simplement une sous-ressource avec un index de 0. Si la ressource contient une texture (ou un tableau de textures), le référencement des sous-ressources est plus complexe.
Certaines API accèdent à une ressource entière (telle que la méthode ID3D12GraphicsCommandList :: CopyResource ), d’autres accèdent à une partie d’une ressource (par exemple, la méthode ID3D12Resource :: ReadFromSubresource ). Les méthodes qui accèdent à une partie d’une ressource utilisent généralement une description de la vue (telle que la structure _ SRV du _ tableau _ D3D12 TEX2D ) pour spécifier les sous-ressources auxquelles accéder. Reportez-vous à la section API des sous- ressources pour obtenir une liste complète.
Indexation des sous-ressources
Pour indexer une sous-ressource particulière, les niveaux MIP sont indexés en premier lorsque chaque entrée de tableau est indexée.

Tranche MIP
Une tranche MIP comprend un niveau de mipmap pour chaque texture d’un tableau, comme illustré dans l’image suivante.

Tranche de tableau
À partir d’un tableau de textures, chaque texture avec des mipmaps, une tranche de tableau comprend une texture et tous ses niveaux MIP, comme illustré dans l’image suivante.

Tranche plan
En général, les formats planaires ne sont pas utilisés pour stocker les données RVBA, mais dans les cas où il s’agit (par exemple, des données RGB 24bpp), un plan peut représenter l’image rouge, l’image verte et l’image bleue. Toutefois, un plan n’est pas nécessairement une couleur, deux couleurs ou plus peuvent être combinées dans un plan. Plus généralement, les données planaires sont utilisées pour les données de Depth-Stencil et YCbCr sous-échantillonnées. Depth-Stencil est le seul format qui prend entièrement en charge les des mipmaps, les tableaux et les plans multiples (souvent le plan 0 pour la profondeur et le plan 1 du stencil).
L’indexation des sous-ressources pour un tableau de deux images Depth-Stencil, chacune avec trois niveaux MIP, est illustrée ci-dessous.

Le sous-échantillon YCbCr prend en charge les tableaux et contient des plans, mais ne prend pas en charge des mipmaps. Les images YCbCr ont deux plans, l’un pour la luminance (Y), dont l’oeil humain est le plus sensible, et l’autre pour la chrominance (à la fois CB et CR, entrelacé) qui est moins sensible à l’oeil humain. Ce format permet la compression des valeurs de chrominance afin de compresser une image sans affecter la luminance, et est un format de compression vidéo courant pour cette raison, bien qu’elle soit utilisée pour compresser des images fixes. L’image ci-dessous montre le format NV12, en notant que la chrominance a été compressée à un quart de la résolution de la luminance, ce qui signifie que la largeur de chaque plan est identique et que le plan de chrominance correspond à la moitié de la hauteur du plan de luminance. Les plans sont indexés en tant que sous-ressources de manière identique à l’exemple de Depth-Stencil ci-dessus.

Les formats planaires existaient dans Direct3D 11, mais les plans individuels n’ont pas pu être traités individuellement, par exemple pour les opérations de copie ou de mappage. Cela a été modifié dans Direct3D 12 afin que chaque plan ait reçu son propre ID de sous-ressource. Comparez les deux méthodes suivantes pour calculer l’ID de sous-ressource.
Direct3D 11
inline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )
{
return MipSlice + (ArraySlice * MipLevels);
}
Direct3D 12
inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
{
return MipSlice + (ArraySlice * MipLevels) + (PlaneSlice * MipLevels * ArraySize);
}
La plupart du matériel suppose que la mémoire pour le plan N est toujours allouée immédiatement après le plan N-1.
Une alternative à l’utilisation de sous-ressources est qu’une application peut allouer une ressource complètement distincte par plan. Dans ce cas, l’application comprend les données planes et utilise plusieurs ressources pour les représenter.
Sous-ressources multiples
Un affichage des ressources de nuanceur peut sélectionner n’importe quelle zone rectangulaire de sous-ressources, à l’aide de l’une des tranches décrites ci-dessus et de l’utilisation judicieuse des champs dans les structures de vue (par exemple, D3D12 _ TEX2D _ array _ SRV), comme indiqué dans l’image.

Une vue de cible de rendu ne peut utiliser qu’une seule sous-ressource ou une seule tranche MIP et ne peut pas inclure de sous-ressources de plus d’une tranche MIP. Autrement dit, chaque texture dans une vue de cible de rendu doit avoir la même taille. Un affichage des ressources de nuanceur peut sélectionner n’importe quelle zone rectangulaire de sous-ressources, comme illustré dans l’image.
API de sous-ressource
Les API suivantes référencent et utilisent des sous-ressources :
Énumérations :
Les structures suivantes contiennent des index PlaneSlice , la plupart contiennent des index MipSlice .
- D3D12 _ TEX2D _ RTV
- D3D12 _ _ tableau TEX2D _ RTV
- D3D12 _ TEX2D _ SRV
- _SRV du _ tableau D3D12 TEX2D _
- D3D12 _ TEX2D _ UAV
- D3D12 _ TEX2D _ array _ UAV
Les structures suivantes contiennent des index ArraySlice , la plupart contiennent des index MipSlice .
- _DSV D3D12 TEX1D _ array _
- _DSV D3D12 TEX2D _ array _
- _DSV D3D12 TEX2DMS _ array _
- D3D12 _ _ tableau TEX1D _ RTV
- D3D12 _ _ tableau TEX2D _ RTV
- D3D12 _ _ tableau TEX2DMS _ RTV
- _SRV du _ tableau D3D12 TEX1D _
- _SRV du _ tableau D3D12 TEX2D _
- _SRV du _ tableau D3D12 TEX2DMS _
- D3D12 _ TEX1D _ array _ UAV
- D3D12 _ TEX2D _ array _ UAV
Les structures suivantes contiennent des index MipSlice , mais ni des index ArraySlice , ni des index PlaneSlice .
- D3D12 _ TEX1D _ DSV
- D3D12 _ TEX2D _ DSV
- D3D12 _ TEX1D _ RTV
- D3D12 _ TEX3D _ RTV
- D3D12 _ TEX1D _ UAV
- D3D12 _ TEX3D _ UAV
Les structures suivantes référencent également des sous-ressources :
- D3D12 _ IGNORER la _ région : structure utilisée pour la préparation de l’abandon d’une ressource.
- D3D12 _ _ _ Encombrement des sous-ressources placé : ajoute un décalage dans une ressource à l’encombrement de base.
- D3D12 _ _ _ Barrière de transition de ressource : décrit la transition des sous-ressources entre différentes utilisations (ressource de nuanceur, cible de rendu, etc.).
- D3D12 _ _Données des sous-ressources : les données des sous-ressources incluent les données elles-mêmes, ainsi que la largeur des lignes et des secteurs.
- D3D12 _ _Encombrement des sous-ressources : un encombrement comprend le format, la largeur, la hauteur, la profondeur et l’espacement des lignes de la sous-ressource.
- D3D12 _ _Informations sur les sous-ressources : contient le décalage, la largeur des lignes et le pas de profondeur de la sous-ressource.
- D3D12 _ _Mosaïque de sous-ressources : décrit un volume de sous-ressources en mosaïque (reportez-vous à ressources en mosaïque de volume).
- D3D12 _ _ _ Emplacement de copie de texture : décrit une partie d’une texture à des fins de copie.
- D3D12 _ _ _ Coordonnée des ressources en mosaïque : décrit les coordonnées d’une ressource en mosaïque.
Méthodes :
- ID3D12Device :: GetCopyableFootprints : obtient des informations sur une ressource pour permettre l’établissement d’une copie.
- ID3D12Device :: GetResourceTiling : obtient des informations sur la façon dont une ressource en mosaïque est divisée en mosaïques.
- ID3D12GraphicsCommandList :: ResolveSubresource : copie une sous-ressource échantillonnée sur plusieurs sous-ressources échantillonnées.
- ID3D12Resource :: Map : retourne un pointeur vers les données spécifiées dans la ressource et refuse l’accès au GPU à la sous-ressource.
- ID3D12Resource :: ReadFromSubresource : copie les données d’une sous-ressource, ou une zone rectangulaire d’une sous-ressource.
- ID3D12Resource :: DEMAPPAGE : annule la correspondance de la plage de mémoire spécifiée et invalide le pointeur vers la ressource. Rétablit l’accès GPU à la sous-ressource.
- ID3D12Resource :: WriteToSubresource : copie des données vers une sous-ressource, ou une zone rectangulaire d’une sous-ressource.
Les textures doivent être dans l’État commun de l’état de la _ ressource _ _ D3D12 pour que l’accès au processeur via WriteToSubresource et ReadFromSubresource soit légal, mais ce n’est pas le cas des tampons. L’accès de l’UC à une ressource est généralement effectué par le biais de mappages de mappage / .