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 |