ID3D12Resource ::WriteToSubresource, méthode (d3d12.h)
Utilise le processeur pour copier des données dans une sous-ressource, ce qui lui permet de modifier le contenu de la plupart des textures avec des dispositions non définies.
Syntaxe
HRESULT WriteToSubresource(
UINT DstSubresource,
[in, optional] const D3D12_BOX *pDstBox,
[in] const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch
);
Paramètres
DstSubresource
Type : UINT
Spécifie l’index de la sous-ressource.
[in, optional] pDstBox
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 ressource. Si la valeur est 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 zone vide entraîne une absence d’opération. Une zone est vide si la valeur supérieure est supérieure ou égale à la valeur inférieure, ou si la valeur de gauche est supérieure ou égale à la valeur de droite, ou si la valeur de début est supérieure ou égale à la valeur d’arrière-plan. Lorsque la zone est vide, cette méthode n’effectue aucune opération.
[in] pSrcData
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 d’une tranche de profondeur des données sources à la suivante.
Valeur retournée
Type : HRESULT
Cette méthode retourne l’un des codes de retour Direct3D 12.
Remarques
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 au processeur via WriteToSubresource et ReadFromSubresource soit légal ; mais pas les mémoires tampons.
Pour plus d’efficacité, assurez-vous que les limites et l’alignement des étendues dans la zone sont ( 64 / [octets par pixel] ) pixels horizontalement. Les limites verticales et l’alignement doivent être de 2 lignes, sauf lorsque des formats de 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 foulées alignés sur 128 octets.
Lors de l’écriture dans des niveaux de sous-mipmap, il est recommandé d’utiliser des largeurs et des hauteurs supérieures à celles décrites ci-dessus. Cela est dû au fait que les petits niveaux de mipmap peuvent en fait être stockés dans un bloc de mémoire plus grand, avec une quantité opaque de compensation qui peut interférer avec l’alignement des lignes de cache.
WriteToSubresource et ReadFromSubresource permettent des optimisations de copie quasi nulle pour les adaptateurs UMA, mais peuvent nuire de manière prohibitive à 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 aux techniques de chargement discrètes, sauf si elles reconnaissent que l’architecture de l’adaptateur est UMA. Pour plus d’informations sur le chargement, reportez-vous à CopyTextureRegion et, pour plus d’informations sur UMA, reportez-vous à 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 la mémoire par le biais de l’optimisation de boucle appelée mosaïne de boucle. En décomposant le chargement en mandrins qui s’intègrent confortablement dans le cache du processeur, la bande passante effective entre le processeur et la mémoire main atteint des maximums théoriques.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d12.h |
Bibliothèque | D3d12.lib |
DLL | D3d12.dll |