ID3D11DeviceContext ::CopyResource, méthode (d3d11.h)

Copiez l’intégralité du contenu de la ressource source vers la ressource de destination à l’aide du GPU.

Syntaxe

void CopyResource(
  [in] ID3D11Resource *pDstResource,
  [in] ID3D11Resource *pSrcResource
);

Paramètres

[in] pDstResource

Type : ID3D11Resource*

Pointeur vers l’interface ID3D11Resource qui représente la ressource de destination.

[in] pSrcResource

Type : ID3D11Resource*

Pointeur vers l’interface ID3D11Resource qui représente la ressource source.

Valeur de retour

None

Remarques

Cette méthode est inhabituelle en ce qu’elle oblige le GPU à effectuer l’opération de copie (similaire à un memcpy par le processeur). Par conséquent, il a quelques restrictions conçues pour améliorer les performances. Pour instance, les ressources source et de destination :

  • Il doit s’agir de ressources différentes.
  • Doit être du même type.
  • Doit avoir des dimensions identiques (largeur, hauteur, profondeur et taille, selon le cas).
  • Doit avoir des formats DXGI compatibles, ce qui signifie que les formats doivent être identiques ou au moins du même groupe de types. Par exemple, une texture DXGI_FORMAT_R32G32B32_FLOAT peut être copiée dans une texture DXGI_FORMAT_R32G32B32_UINT, car ces deux formats se trouvent dans le groupe DXGI_FORMAT_R32G32B32_TYPELESS. CopyResource peut copier entre plusieurs types de format. Pour plus d’informations, consultez Formater la conversion à l’aide de Direct3D 10.1.
  • Impossible de mapper actuellement.
CopyResource prend uniquement en charge la copie ; il ne prend pas en charge l’étirement, la touche de couleur ou le mélange. CopyResource peut réinterpréter les données de ressource entre quelques types de format. Pour plus d’informations, consultez Formater la conversion à l’aide de Direct3D 10.1.

Vous ne pouvez pas utiliser une ressource immuable comme destination. Vous pouvez utiliser une ressource de gabarit de profondeur comme source ou comme destination, à condition que le niveau de fonctionnalité soit D3D_FEATURE_LEVEL_10_1 ou supérieur. Pour les niveaux de fonctionnalités 9_x, les ressources créées avec l’indicateur D3D11_BIND_DEPTH_STENCIL peuvent uniquement être utilisées comme source pour CopyResource. Les ressources créées avec la fonctionnalité d’échantillonnage multiple (voir DXGI_SAMPLE_DESC) peuvent être utilisées comme source et destination uniquement si la source et la destination ont un nombre et une qualité identiques. Si la source et la destination diffèrent par le nombre et la qualité multiéchantillons, ou si l’une d’elles est échantillonnée à plusieurs et que l’autre n’est pas multi-échantillonnée, l’appel à ID3D11DeviceContext ::CopyResource échoue. Utilisez ID3D11DeviceContext ::ResolveSubresource pour résoudre une ressource à échantillonnage multiple en une ressource qui n’est pas échantillonnée à plusieurs échantillons.

La méthode est un appel asynchrone, qui peut être ajouté à la file d’attente command-buffer. Cette opération tente de supprimer les blocages de pipeline qui peuvent se produire lors de la copie de données. Pour plus d’informations, consultez Considérations relatives aux performances.

Nous vous recommandons d’utiliser ID3D11DeviceContext ::CopySubresourceRegion à la place si vous devez uniquement copier une partie des données d’une ressource.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête d3d11.h
Bibliothèque D3D11.lib

Voir aussi

ID3D11DeviceContext

ID3D11Resource