Share via


Método ID3D12Device::GetCopyableFootprints (d3d12.h)

Obtém um layout de recurso que pode ser copiado. Ajuda o aplicativo a preencher D3D12_PLACED_SUBRESOURCE_FOOTPRINT e D3D12_SUBRESOURCE_FOOTPRINT ao subalocar espaço em heaps de upload.

Sintaxe

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
);

Parâmetros

[in] pResourceDesc

Tipo: const D3D12_RESOURCE_DESC*

Uma descrição do recurso, como um ponteiro para uma estrutura D3D12_RESOURCE_DESC .

[in] FirstSubresource

Tipo: UINT

Índice do primeiro sub-recurso no recurso. O intervalo de valores válidos é de 0 a D3D12_REQ_SUBRESOURCES.

[in] NumSubresources

Tipo: UINT

O número de sub-recursos no recurso. O intervalo de valores válidos é de 0 a (D3D12_REQ_SUBRESOURCES – FirstSubresource).

BaseOffset

Tipo: UINT64

O deslocamento, em bytes, para o recurso.

[out, optional] pLayouts

Tipo: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*

Um ponteiro para uma matriz (de tamanho NumSubresources) de D3D12_PLACED_SUBRESOURCE_FOOTPRINT estruturas, a ser preenchida com a descrição e o posicionamento de cada sub-recurso.

[out, optional] pNumRows

Tipo: UINT*

Um ponteiro para uma matriz (de comprimento NumSubresources) de variáveis de inteiro, a ser preenchida com o número de linhas para cada sub-recurso.

[out, optional] pRowSizeInBytes

Tipo: UINT64*

Um ponteiro para uma matriz (de comprimento NumSubresources) de variáveis de inteiro, cada entrada a ser preenchida com o tamanho não adicionado em bytes de uma linha, de cada sub-recurso.

Por exemplo, se um recurso Texture2D tiver uma largura de 32 e bytes por pixel de 4,

em seguida , pRowSizeInBytes retorna 128.

PRowSizeInBytes não deve ser confundido com a inclinação de linha, pois examinar pLayouts e obter o pitch de linha de que lhe dará 256, pois ele está alinhado a D3D12_TEXTURE_DATA_PITCH_ALIGNMENT.

[out, optional] pTotalBytes

Tipo: UINT64*

Um ponteiro para uma variável de inteiro, a ser preenchida com o tamanho total, em bytes.

Valor retornado

Nenhum

Comentários

Essa rotina ajuda o aplicativo a preencher estruturas de D3D12_PLACED_SUBRESOURCE_FOOTPRINT e D3D12_SUBRESOURCE_FOOTPRINT ao subalocar espaço em heaps de carregamento. As estruturas resultantes são independentes do adaptador de GPU, o que significa que os valores não variam de um adaptador de GPU para o próximo. GetCopyableFootprints usa detalhes especificados sobre formatos de recurso, layouts de textura e requisitos de alinhamento (da estrutura D3D12_RESOURCE_DESC ) para preencher as estruturas de sub-recurso. Os aplicativos têm acesso a todos esses detalhes, portanto, esse método, ou uma variação dele, pode ser escrito como parte do aplicativo.

Exemplos

O exemplo D3D12Multithreading usa ID3D12Device::GetCopyableFootprints da seguinte maneira:

// 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;
}

Consulte o Código de Exemplo na Referência D3D12.

Requisitos

   
Plataforma de Destino Windows
Cabeçalho d3d12.h
Biblioteca D3d12.lib
DLL D3d12.dll

Confira também

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device