Partager via


ID3D12Device::GetCopyableFootprints, méthode (d3d12.h)

Obtient une disposition de ressource qui peut être copiée. Aide l’application à remplir D3D12_PLACED_SUBRESOURCE_FOOTPRINT et D3D12_SUBRESOURCE_FOOTPRINT lors de la sous-allocation d’espace dans les tas de chargement.

Syntaxe

void GetCopyableFootprints(
  [in]            const D3D12_RESOURCE_DESC          *pResourceDesc,
  [in]            UINT                               FirstSubresource,
  [in]            UINT                               NumSubresources,
                  UINT64                             BaseOffset,
  [out, optional] D3D12_PLACED_SUBRESOURCE_FOOTPRINT *pLayouts,
  [out, optional] UINT                               *pNumRows,
  [out, optional] UINT64                             *pRowSizeInBytes,
  [out, optional] UINT64                             *pTotalBytes
);

Paramètres

[in] pResourceDesc

Type : const D3D12_RESOURCE_DESC*

Description de la ressource, en tant que pointeur vers une structure D3D12_RESOURCE_DESC .

[in] FirstSubresource

Type : UINT

Index de la première sous-ressource de la ressource. La plage de valeurs valides est comprise entre 0 et D3D12_REQ_SUBRESOURCES.

[in] NumSubresources

Type : UINT

Nombre de sous-ressources dans la ressource. La plage de valeurs valides est comprise entre 0 et (D3D12_REQ_SUBRESOURCES - FirstSubresource).

BaseOffset

Type : UINT64

Décalage, en octets, de la ressource.

[out, optional] pLayouts

Type : D3D12_PLACED_SUBRESOURCE_FOOTPRINT*

Pointeur vers un tableau (de longueur NumSubresources) de D3D12_PLACED_SUBRESOURCE_FOOTPRINT structures, à remplir avec la description et l’emplacement de chaque sous-ressource.

[out, optional] pNumRows

Type : UINT*

Pointeur vers un tableau (de longueur NumSubresources) de variables entières, à remplir avec le nombre de lignes pour chaque sous-ressource.

[out, optional] pRowSizeInBytes

Type : UINT64*

Pointeur vers un tableau (de longueur NumSubresources) de variables entières, chaque entrée à remplir avec la taille non pavée en octets d’une ligne, de chaque sous-ressource.

Par exemple, si une ressource Texture2D a une largeur de 32 et 4 octets par pixel,

puis pRowSizeInBytes retourne 128.

pRowSizeInBytes ne doit pas être confondu avec le pitch de ligne, car l’examen de pLayouts et l’obtention du pitch de ligne à partir de ce qui vous donnera 256 car il est aligné sur D3D12_TEXTURE_DATA_PITCH_ALIGNMENT.

[out, optional] pTotalBytes

Type : UINT64*

Pointeur vers une variable entière, à remplir avec la taille totale, en octets.

Valeur de retour

None

Notes

Cette routine aide l’application à remplir les structures D3D12_PLACED_SUBRESOURCE_FOOTPRINT et D3D12_SUBRESOURCE_FOOTPRINT , lors de la sous-allocation d’espace dans les tas de chargement. Les structures résultantes sont indépendantes de l’adaptateur GPU, ce qui signifie que les valeurs ne varient pas d’un adaptateur GPU à l’autre. GetCopyableFootprints utilise des détails spécifiés sur les formats de ressources, les dispositions de texture et les exigences d’alignement (de la structure D3D12_RESOURCE_DESC ) pour remplir les structures de sous-ressource. Les applications ayant accès à tous ces détails, cette méthode, ou une variante de celle-ci, peut être écrite dans le cadre de l’application.

Exemples

L’exemple D3D12Multithreading utilise ID3D12Device::GetCopyableFootprints comme suit :

// Returns required size of a buffer to be used for data upload
inline UINT64 GetRequiredIntermediateSize(
    _In_ ID3D12Resource* pDestinationResource,
    _In_range_(0,D3D12_REQ_SUBRESOURCES) UINT FirstSubresource,
    _In_range_(0,D3D12_REQ_SUBRESOURCES-FirstSubresource) UINT NumSubresources)
{
    D3D12_RESOURCE_DESC Desc = pDestinationResource->GetDesc();
    UINT64 RequiredSize = 0;
    
    ID3D12Device* pDevice;
    pDestinationResource->GetDevice(__uuidof(*pDevice), reinterpret_cast<void**>(&pDevice));
    pDevice->GetCopyableFootprints(&Desc, FirstSubresource, NumSubresources, 0, nullptr, nullptr, nullptr, &RequiredSize);
    pDevice->Release();
    
    return RequiredSize;
}

Reportez-vous à l’exemple de code dans la référence D3D12.

Spécifications

   
Plateforme cible Windows
En-tête d3d12.h
Bibliothèque D3d12.lib
DLL D3d12.dll

Voir aussi

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device