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

Copiez une région d’une ressource source vers une ressource de destination.

Syntaxe

void CopySubresourceRegion(
  [in]           ID3D11Resource  *pDstResource,
  [in]           UINT            DstSubresource,
  [in]           UINT            DstX,
  [in]           UINT            DstY,
  [in]           UINT            DstZ,
  [in]           ID3D11Resource  *pSrcResource,
  [in]           UINT            SrcSubresource,
  [in, optional] const D3D11_BOX *pSrcBox
);

Paramètres

[in] pDstResource

Type : ID3D11Resource*

Pointeur vers la ressource de destination (voir ID3D11Resource).

[in] DstSubresource

Type : UINT

Index de sous-ressource de destination.

[in] DstX

Type : UINT

Coordonnée x du coin supérieur gauche de la région de destination.

[in] DstY

Type : UINT

Coordonnée y du coin supérieur gauche de la région de destination. Pour une sous-ressource 1D, cette valeur doit être égale à zéro.

[in] DstZ

Type : UINT

Coordonnée z du coin supérieur gauche de la région de destination. Pour une sous-ressource 1D ou 2D, cette valeur doit être égale à zéro.

[in] pSrcResource

Type : ID3D11Resource*

Pointeur vers la ressource source (voir ID3D11Resource).

[in] SrcSubresource

Type : UINT

Index de sous-ressource source.

[in, optional] pSrcBox

Type : const D3D11_BOX*

Pointeur vers une zone 3D (voir D3D11_BOX) qui définit la sous-ressource source qui peut être copiée. Si la valeur est NULL, la sous-ressource source entière est copiée. La zone doit s’adapter à la ressource source.

Une zone vide génère une opération de non-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 avant est supérieure ou égale à la valeur arrière. Lorsque la zone est vide, CopySubresourceRegion n’effectue pas d’opération de copie.

Valeur de retour

None

Remarques

La zone source doit être dans la taille de la ressource source. Les décalages de destination (x, y et z) permettent à la zone source d’être décalée lors de l’écriture dans la ressource de destination ; toutefois, les dimensions de la zone source et les décalages doivent être dans la taille de la ressource. Si vous essayez de copier en dehors de la ressource de destination ou si vous spécifiez une zone source supérieure à la ressource source, le comportement de CopySubresourceRegion n’est pas défini. Si vous avez créé un appareil qui prend en charge la couche de débogage, la sortie de débogage signale une erreur sur cet appel CopySubresourceRegion non valide. Les paramètres non valides de CopySubresourceRegion entraînent un comportement non défini et peuvent entraîner un rendu incorrect, une coupure, aucune copie ou même la suppression du périphérique de rendu.

Si les ressources sont des mémoires tampons, toutes les coordonnées sont en octets ; si les ressources sont des textures, toutes les coordonnées sont en texels. D3D11CalcSubresource est une fonction d’assistance pour le calcul des index de sous-ressources.

CopySubresourceRegion effectue la copie sur le GPU (similaire à un memcpy par le processeur). Par conséquent, les ressources source et de destination :

  • Il doit s’agir de sous-ressources différentes (bien qu’elles puissent provenir de la même ressource).
  • Doit être du même type.
  • Doit avoir des formats DXGI compatibles (identiques ou 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. CopySubresourceRegion peut copier entre quelques types de format. Pour plus d’informations, consultez Formater la conversion à l’aide de Direct3D 10.1.
  • Peut ne pas être mappé actuellement.
**CopySubresourceRegion** prend uniquement en charge la copie ; il ne prend pas en charge l’étirement, la touche de couleur ou le mélange. **CopySubresourceRegion** peut réinterpréter les données de ressources entre quelques types de format. Pour plus d’informations, consultez [Formater la conversion à l’aide de Direct3D 10.1](/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression#format-conversion-using-direct3d-101).

Si votre application doit copier une ressource entière, nous vous recommandons d’utiliser ID3D11DeviceContext ::CopyResource à la place.

CopySubresourceRegion est un appel asynchrone, qui peut être ajouté à la file d’attente de la mémoire tampon de commande, ce qui tente de supprimer les blocages de pipeline qui peuvent se produire lors de la copie de données. Pour plus d’informations sur les blocages de pipeline, consultez Considérations relatives aux performances.

RemarqueS’applique uniquement au niveau des fonctionnalités 9_x matériel Si vous utilisez ID3D11DeviceContext ::UpdateSubresource ou CopySubresourceRegion pour copier à partir d’une ressource intermédiaire vers une ressource par défaut, vous pouvez endommager le contenu de destination. Cela se produit si vous transmettez une zone source NULL et si la ressource source a des dimensions différentes de celles de la ressource de destination ou si vous utilisez des décalages de destination (x, y et z). Dans ce cas, transmettez toujours une zone source qui correspond à la taille complète de la ressource source.
 
RemarqueS’applique uniquement au niveau des fonctionnalités 9_x matériel Vous ne pouvez pas utiliser CopySubresourceRegion pour copier des textures de volume mipmapped.
 
RemarqueS’applique uniquement aux niveaux de fonctionnalités 9_x les sous-ressources créées avec l’indicateur D3D11_BIND_DEPTH_STENCIL ne peuvent être utilisées que comme source pour CopySubresourceRegion.
 
Note Si vous utilisez CopySubresourceRegion avec une mémoire tampon de gabarit de profondeur ou une ressource multi-échantillonnée, vous devez copier l’ensemble de la sous-ressource. Dans ce cas, vous devez passer 0 aux paramètres DstX, DstY et DstZ et NULL au paramètre pSrcBox . En outre, les ressources sources et de destination, qui sont représentées par les paramètres pSrcResource et pDstResource , doivent avoir des valeurs de nombre d’échantillons identiques.
 

Exemple

L’extrait de code suivant copie une zone (située à (120 100),(200 220)) d’une texture source dans une région (10 200), (90 140) dans une texture de destination.
D3D11_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;

pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );

Notez que pour une texture 2D, les valeurs avant et arrière sont définies sur 0 et 1 respectivement.

Configuration requise

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

Voir aussi

ID3D11DeviceContext

ID3D11Resource