Passer au contenu principal
Utilise le CPU pour copier des données dans une sous-ressource, permettant au CPU de modifier le contenu de la plupart des textures dont la disposition est non définie.

Syntaxe

Paramètres

DstSubresource
Type : UINT
Spécifie l’index de la sous-ressource. pDstBox [in, optional]
Type : const D3D12_BOX *
Pointeur vers une boîte qui définit la partie de la sous-ressource de destination dans laquelle copier les données de la ressource. Si NULL, les données sont écrites dans la sous-ressource de destination sans décalage. Les dimensions de la source doivent correspondre à la destination (voir D3D12_BOX). Une boîte vide n’entraîne aucune opération. Une boîte est vide si la valeur du haut est supérieure ou égale à la valeur du bas, ou si la valeur de gauche est supérieure ou égale à la valeur de droite, ou si la valeur avant est supérieure ou égale à la valeur arrière. Lorsque la boîte est vide, cette méthode n’effectue aucune opération. pSrcData [in]
Type : const void *
Pointeur vers les données sources en mémoire. SrcRowPitch
Type : UINT
La distance entre une ligne de données sources et la ligne suivante. SrcDepthPitch
Type : UINT
La distance entre une tranche de profondeur de données sources et la suivante.

Valeur de retour

Type : HRESULT Cette méthode retourne l’un des codes de retour Direct3D 12.

Remarques

REMARQUE : Cette fonctionnalité n’est actuellement pas prise en charge sur les consoles XBOX Series et la famille XBOX One.
La ressource doit d’abord être mappée à l’aide de Map. Les textures doivent être dans l’état D3D12_RESOURCE_STATE_COMMON pour que l’accès du CPU au moyen de WriteToSubresource et de ReadFromSubresource soit légal; ce n’est toutefois pas le cas des mémoires tampons. Pour plus d’efficacité, assurez-vous que les limites et l’alignement des étendues à l’intérieur de la boîte sont de ( 64 / [octets par pixel] ) pixels horizontalement. Les limites et l’alignement verticaux devraient être de 2 lignes, sauf lorsque des formats à 1 octet par pixel sont utilisés, auquel cas 4 lignes sont recommandées. Les tranches de profondeur uniques par appel sont traitées efficacement. Il est recommandé, mais pas nécessaire, de fournir des pointeurs et des pas alignés sur 128 octets. Lors de l’écriture dans des sous-niveaux de mipmap, il est recommandé d’utiliser des largeurs et des hauteurs plus grandes que celles décrites ci-dessus. En effet, les petits niveaux de mipmap peuvent en réalité être stockés dans un bloc de mémoire plus grand, avec un décalage opaque qui peut nuire à l’alignement sur les lignes de cache. WriteToSubresource et ReadFromSubresource permettent des optimisations quasi sans copie pour les adaptateurs UMA, mais peuvent nuire considérablement à l’efficacité des adaptateurs discrets/NUMA, car les données de texture ne peuvent pas résider dans la mémoire vidéo locale. Les applications typiques devraient s’en tenir aux techniques de chargement adaptées aux adaptateurs discrets, à moins qu’elles ne reconnaissent que l’architecture de l’adaptateur est UMA. Pour plus de détails sur le chargement, consultez CopyTextureRegion, et pour plus de détails sur UMA, consultez D3D12_FEATURE_DATA_ARCHITECTURE. Sur les systèmes UMA, cette routine peut être utilisée pour réduire au minimum le coût de la copie de mémoire grâce à l’optimisation de boucle appelée pavage de boucle. En divisant le chargement en blocs qui tiennent aisément dans le cache du CPU, la bande passante effective entre le CPU et la mémoire principale se rapproche davantage des maximums théoriques.

Configuration requise

En-tête : d3d12_xs.h ou d3d12_x.h
Bibliothèque : d3d12_xs.lib ou d3d12_x.lib
Plateformes prises en charge : actuellement non pris en charge sur les consoles XBOX Series et la famille XBOX One

Voir aussi

ID3D12Resource Sous-ressources
Dernière modification le 6 octobre 2026