énumération D3D12_TEXTURE_LAYOUT (d3d12.h)

Spécifie les options de disposition de texture.

Syntax

typedef enum D3D12_TEXTURE_LAYOUT {
  D3D12_TEXTURE_LAYOUT_UNKNOWN = 0,
  D3D12_TEXTURE_LAYOUT_ROW_MAJOR = 1,
  D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
  D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE = 3
} ;

Constantes

 
D3D12_TEXTURE_LAYOUT_UNKNOWN
Valeur : 0
Indique que la disposition est inconnue et qu’elle dépend probablement de l’adaptateur.
Lors de la création, le pilote choisit la disposition la plus efficace en fonction d’autres propriétés de ressource, en particulier la taille des ressources et les indicateurs.
Préférez ce choix, sauf si certaines fonctionnalités sont requises à partir d’une autre disposition de texture.

Il existe des optimisations de chargement de textures de copie zéro pour les architectures UMA ; consultez ID3D12Resource ::WriteToSubresource.
D3D12_TEXTURE_LAYOUT_ROW_MAJOR
Valeur : 1
Indique que les données de la texture sont stockées dans l’ordre principal des lignes (parfois appelé « ordre linéaire de tangage »).

Cette disposition de texture localise les texels consécutifs d’une ligne contiguëment en mémoire, avant les texels de la ligne suivante.
De même, les texels consécutifs d’une profondeur ou d’une tranche de tableau particulière sont contigus en mémoire avant les texels de la profondeur ou de la tranche de tableau suivante.
Un remplissage peut exister entre les lignes et entre les tranches de profondeur ou de tableau pour aligner les collections de données.
Une foulée est la distance en mémoire entre les lignes, la profondeur ou les tranches de tableau ; et il inclut n’importe quel remplissage.

Cette disposition de texture permet de partager les données de texture entre plusieurs adaptateurs, lorsque d’autres dispositions ne sont pas disponibles.

De nombreuses restrictions s’appliquent, car cette disposition n’est généralement pas efficace pour une utilisation intensive :


  • La localité des texels à proximité n’est pas invariante.

  • Seules les propriétés de texture suivantes sont prises en charge :


  • La texture doit être créée sur un tas avec D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER.


Les mémoires tampons sont créées avec D3D12_TEXTURE_LAYOUT_ROW_MAJOR, car les données de texture principale de ligne peuvent y être localisées sans créer d’objet de texture.
Il est couramment utilisé pour charger ou lire des données de texture, en particulier pour les adaptateurs discrets/NUMA.
Toutefois, D3D12_TEXTURE_LAYOUT_ROW_MAJOR peut également être utilisé lors du marshaling de données de texture entre des GPU ou des adaptateurs.
Pour obtenir des exemples d’utilisation avec ID3D12GraphicsCommandList ::CopyTextureRegion, consultez certaines des rubriques suivantes :

D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE
Valeur : 2
Indique que la disposition dans les vignettes de 64 Ko et l’empaquetage de la queue est à la charge du pilote.
Aucun modèle swizzle standard.

Cette disposition de texture est organisée en régions contiguës de 64 Ko, également appelées vignettes, contenant une quantité quasi équilatérale d’un nombre consécutif de texels le long de chaque dimension.
Les vignettes sont organisées dans l’ordre principal des lignes.
Bien qu’il n’y ait pas de remplissage entre les vignettes, il existe généralement des texels inutilisés dans la dernière vignette de chaque dimension.
La disposition des texels dans la vignette n’est pas définie.
Chaque sous-ressource suit immédiatement l’emplacement où se termine la sous-ressource précédente, et l’ordre de sous-ressource suit la même séquence que les ordinaux de sous-ressource.
Toutefois, l’empaquetage de la queue est spécifique à l’adaptateur.
Pour plus d’informations, consultez Niveau de ressource en mosaïque et ID3D12Device ::GetResourceTiling.

Cette disposition de texture permet des scénarios de texture partiellement résidents ou partiellement épars lorsqu’ils sont utilisés avec la fonctionnalité de mappage de page de mémoire virtuelle.
Cette disposition de texture doit être utilisée avec ID3D12Device ::CreateReservedResource pour permettre l’utilisation de ID3D12CommandQueue ::UpdateTileMappings.

Certaines restrictions s’appliquent aux textures avec cette disposition :

D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE
Valeur : 3
Indique qu’une texture par défaut utilise le modèle swizzle standardisé.

Cette disposition de texture est organisée de la même façon que D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE, sauf que la disposition des texels dans la vignette est définie. L’empaquetage de la queue mip est spécifique à l’adaptateur.

Cette disposition de texture permet d’optimiser le marshaling des données entre plusieurs adaptateurs ou entre le processeur et le GPU.
La quantité de copie peut être réduite lorsque plusieurs composants comprennent la disposition de la mémoire de texture.
Cette disposition est généralement plus efficace pour une utilisation intensive que la disposition de ligne principale, en raison de la localité invariante de rotation des texels voisins.
Cette disposition ne peut généralement être utilisée qu’avec des adaptateurs qui prennent en charge swizzle standard, mais des exceptions existent pour les tas partagés entre adaptateurs.

Les restrictions pour cette disposition sont que les éléments suivants ne sont pas pris en charge :

Remarques

Cette énumération est utilisée par la structure D3D12_RESOURCE_DESC .

Cette énumération contrôle le modèle swizzle des textures par défaut et active la prise en charge de la carte sur les textures par défaut. Les appelants doivent interroger D3D12_FEATURE_DATA_D3D12_OPTIONS pour s’assurer que chaque option est prise en charge.

Les formats swizzle standard s’appliquent à chaque bloc de taille de page, et les pages sont disposées dans un ordre linéaire les unes par rapport aux autres. Un modèle entrelacé 16 bits définit la conversion de l’emplacement intrapage pré-swizzled vers l’emplacement post-swizzled.

Modèles swizzle standard

Pour illustrer, considérez le format swizzle 2D 32bpp ci-dessus. Cela est représenté par les masques entrelacés suivants, où les bits à gauche sont les plus significatifs :

UINT xBytesMask = 1010 1010 1000 1111
UINT yMask =      0101 0101 0111 0000

Pour calculer l’adresse swizzled, le code suivant peut être utilisé (où l’instruction intrinsèque _pdep_u32 est prise en charge) :

UINT swizzledOffset = resourceBaseOffset +
                      _pdep_u32(xOffset, xBytesMask) +
                      _pdep_u32(yOffset, yBytesMask);

Configuration requise

Condition requise Valeur
En-tête d3d12.h

Voir aussi

CD3DX12_RESOURCE_DESC

Énumérations principales

Optimisations UMA : Textures accessibles au processeur et Swizzle standard