Mappage de textures par défaut
L’utilisation du mappage de textures par défaut réduit la copie et l’utilisation de la mémoire lors du partage de données d’image entre le GPU et le processeur. Toutefois, il ne doit être utilisé que dans des situations spécifiques. La disposition swizzle standard évite de copier ou de faire pivoter des données dans plusieurs dispositions.
Vue d’ensemble
Le mappage des textures par défaut ne doit pas être le premier choix pour les développeurs. Les développeurs doivent d’abord coder de manière discrète et conviviale pour les GPU (c’est-à-dire ne pas avoir d’accès au processeur pour la majorité des textures et charger avec CopySubresourceRegion1). Toutefois, dans certains cas, le processeur et le GPU peuvent interagir si fréquemment sur les mêmes données que le mappage des textures par défaut devient utile pour économiser de l’énergie ou pour accélérer une conception particulière sur des adaptateurs ou des architectures spécifiques. Les applications doivent détecter ces cas et optimiser les copies inutiles.
Dans D3D11.3, les textures créées avec D3D11_TEXTURE_LAYOUT_UNDEFINED (un membre de l’énumération D3D11_TEXTURE_LAYOUT ) et aucun accès au processeur sont les plus efficaces pour le rendu et l’échantillonnage GPU fréquents. Lors du test des performances, ces textures doivent être comparées à D3D11_TEXTURE_LAYOUT_UNDEFINED avec l’accès au processeur, et D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE avec l’accès au processeur, et D3D11_TEXTURE_LAYOUT_ROW_MAJOR pour la prise en charge des cartes croisées.
L’utilisation de D3D11_TEXTURE_LAYOUT_UNDEFINED avec accès au processeur active les méthodes WriteToSubresource, ReadFromSubresource, Map (empêchant l’accès de l’application au pointeur) et Unmap ; mais peut sacrifier l’efficacité de l’accès GPU. L’utilisation de D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE avec accès au processeur active WriteToSubresource, ReadFromSubresource, Map (qui retourne un pointeur valide vers l’application) et Unmap. Il peut également sacrifier l’efficacité de l’accès gpu plus que D3D11_TEXTURE_LAYOUT_UNDEFINED avec l’accès au processeur.
En règle générale, les applications doivent créer la majorité des textures en tant que gpu uniquement accessibles et avec D3D11_TEXTURE_LAYOUT_UNDEFINED.
Avant la fonctionnalité de mappage des textures par défaut, il n’existait qu’une seule disposition standardisée pour les données multidimensionnelles : « linéaire », également appelée « row-major ». Les applications doivent éviter les textures USAGE_STAGING et USAGE_DYNAMIC lorsque la carte par défaut est disponible. Les textures USAGE_STAGING et USAGE_DYNAMIC utilisent la disposition linéaire.
D3D1.3 (et D3D12) introduisent une disposition de données multidimensionnelle standard. Cette opération permet à plusieurs unités de traitement de fonctionner sur les mêmes données sans copier les données ou les basculer entre plusieurs dispositions. Une disposition standardisée permet des gains d’efficacité grâce aux effets réseau et permet aux algorithmes d’effectuer des raccourcis en supposant un modèle particulier.
Notez toutefois que ce swizzle standard est une fonctionnalité matérielle et peut ne pas être pris en charge par tous les GPU.
API D3D11.3
Contrairement à D3D12, D3D11.3 ne prend pas en charge le mappage de textures par défaut. Vous devez donc interroger D3D11_FEATURE_DATA_D3D11_OPTIONS2. Swizzle standard doit également être interrogé avec un appel à ID3D11Device::CheckFeatureSupport et la vérification du StandardSwizzle64KBSupported
champ de D3D11_FEATURE_DATA_D3D11_OPTIONS2.
Les API suivantes référencent le mappage de texture :
Énumérations
- D3D11_TEXTURE_LAYOUT : 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.
- D3D11_FEATURE : référence D3D11_FEATURE_DATA_D3D11_OPTIONS2.
- D3D11_TILE_COPY_FLAG : contient des indicateurs permettant de copier les ressources en mosaïque swizzled vers et à partir de mémoires tampons linéaires.
Structures
- D3D11_TEXTURE2D_DESC1 : décrit une texture 2D. Notez la structure d’assistance CD3D11_TEXTURE2D_DESC1.
- D3D11_TEXTURE3D_DESC1 : décrit une texture 3D. Notez la structure d’assistance CD3D11_TEXTURE3D_DESC1.
Méthodes
- ID3D11Device3::CreateTexture2D1 : crée un tableau de textures 2D.
- ID3D11Device3::CreateTexture3D1 : crée une texture 3D unique.
- ID3D11Device3::WriteToSubresource : copie les données dans une texture D3D11_USAGE_DEFAULT qui a été mappée à l’aide de Map.
- ID3D11Device3::ReadFromSubresource : copie les données d’une texture D3D11_USAGE_DEFAULT qui a été mappée à l’aide de Map.
- ID3D11DeviceContext::Map : obtient un pointeur vers les données contenues dans une sous-ressource et refuse l’accès gpu à cette sous-ressource.
- ID3D11DeviceContext::Unmap : invalide le pointeur vers une ressource et réactive l’accès du GPU à cette ressource.
- ID3D11Texture2D1::GetDesc1 : obtient les propriétés d’une ressource de texture 2D.
- ID3D11Texture3D1::GetDesc1 : obtient les propriétés d’une ressource de texture 3D.
Rubriques connexes