Passer au contenu principal
Utilise le processeur pour copier des données dans une sous-ressource, ce qui permet au processeur de modifier le contenu de la plupart des textures dont la disposition n’est pas 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 zone 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 tenir dans la destination (voir D3D12_BOX). Une zone vide n’entraîne aucune opération. Une zone est vide si la valeur top est supérieure ou égale à la valeur bottom, si la valeur left est supérieure ou égale à la valeur right, ou si la valeur front est supérieure ou égale à la valeur back. Lorsque la zone 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
Distance entre une ligne de données sources et la ligne suivante. SrcDepthPitch
Type : UINT
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 CPU via WriteToSubresource et ReadFromSubresource soit légal ; ce n’est pas le cas pour les mémoires tampons. Pour plus d’efficacité, assurez-vous que les limites et l’alignement des étendues de la zone sont de ( 64 / [octets par pixel] ) pixels horizontalement. Les limites et l’alignement verticaux doivent ê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 géré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 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 susceptible de perturber 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 classiques doivent s’en tenir à des techniques de chargement adaptées aux adaptateurs discrets, sauf si elles 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 le coût de la copie de mémoire grâce à l’optimisation de boucle appelée loop tiling (pavage de boucle). En divisant le chargement en blocs qui tiennent confortablement dans le cache du processeur, la bande passante effective entre le processeur 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