Partager via


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-source 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, il doit s’agir de 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, il doit s’agir de zéro.

[in] pSrcResource

Type : ID3D11Resource*

Pointeur vers la ressource source (voir ID3D11Resource).

[in] SrcSubresource

Type : UINT

Index de sous-source source.

[in, optional] pSrcBox

Type : const D3D11_BOX*

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

Une zone vide génère une no-op. Une zone est vide si la valeur supérieure est supérieure ou égale à la valeur inférieure, ou si la valeur gauche est supérieure ou égale à la valeur de droite, ou si la valeur frontale est supérieure ou égale à la valeur de retour. Lorsque la zone est vide, CopySubresourceRegion n’effectue pas d’opération de copie.

Valeur de retour

Aucun

Remarques

La zone source doit se trouver dans la taille de la ressource source. Les décalages de destination, (x, y et z), autorisent le décalage de la zone source lors de l’écriture dans la ressource de destination ; Toutefois, les dimensions de la zone source et les décalages doivent se trouver dans la taille de la ressource. Si vous essayez de copier en dehors de la ressource de destination ou 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 CopySubresourceReg ion non valide. Les paramètres non valides pour CopySubresourceRegion entraîner un comportement non défini et peuvent entraîner un rendu incorrect, une capture, aucune copie ou même la suppression de l’appareil 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 calculer les 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 :

  • Doit être des sous-ressources différentes (bien qu’elles puissent provenir de la même ressource).
  • Doit être le 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 pouvez copier entre quelques types de format. Pour plus d’informations, consultez Conversion de format à 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 pouvez réinterpréter les données de ressource entre quelques types de format. Pour plus d’informations, consultez Conversion de format à l’aide de Direct3D 10.1.

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 mémoires tampons de commandes, 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 passez 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é 9_x Sous-ressources créés avec l’indicateur de D3D11_BIND_DEPTH_STENCIL ne peut être utilisé qu’en tant que source pour CopySubresourceRegion.
 
Remarque Si vous utilisez CopySubresourceRegion avec une mémoire tampon de gabarit de profondeur ou une ressource à plusieurs échantillonnages, vous devez copier l’intégralité de la sous-ressource. Dans ce cas, vous devez passer 0 auxDstX , DstY et paramètres DstZ et NULL au paramètre pSrcBox . En outre, les ressources source et de destination, qui sont représentées par les pSrcResource et paramètres pDstResource, doivent avoir des valeurs identiques de nombre d’échantillons.
 

exemple de

L’extrait de code suivant copie une zone (située à (120 100),(200 220)) d’une texture source dans une région (10 20),(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, l’avant et l’arrière sont définis respectivement sur 0 et 1.

Exigences

Exigence Valeur
plateforme cible Windows
d’en-tête d3d11.h
bibliothèque D3D11.lib

Voir aussi

ID3D11DeviceContext

ID3D11Resource