Метод ID3D12Device::GetCopyableFootprints (d3d12.h)
Возвращает макет ресурса, который можно скопировать. Помогает приложению заполнять D3D12_PLACED_SUBRESOURCE_FOOTPRINT и D3D12_SUBRESOURCE_FOOTPRINT при выделении дополнительного пространства в кучах отправки.
Синтаксис
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
);
Параметры
[in] pResourceDesc
Тип: const D3D12_RESOURCE_DESC*
Описание ресурса в качестве указателя на структуру D3D12_RESOURCE_DESC .
[in] FirstSubresource
Тип: UINT
Индекс первого подресурса в ресурсе. Диапазон допустимых значений — от 0 до D3D12_REQ_SUBRESOURCES.
[in] NumSubresources
Тип: UINT
Количество вложенных ресурсов в ресурсе. Диапазон допустимых значений — от 0 до (D3D12_REQ_SUBRESOURCES — FirstSubresource).
BaseOffset
Тип: UINT64
Смещение ресурса в байтах.
[out, optional] pLayouts
Тип: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*
Указатель на массив (длиной NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT структур, заполняемых описанием и размещением каждого подресурса.
[out, optional] pNumRows
Тип: UINT*
Указатель на массив (длиной NumSubresources) целочисленных переменных, заполняемых количеством строк для каждого подресурса.
[out, optional] pRowSizeInBytes
Тип: UINT64*
Указатель на массив (длиной NumSubresources) целочисленных переменных, каждая запись, заполняемая размером строки в байтах каждого подресурса.
Например, если ресурс Texture2D имеет ширину 32 и байт на пиксель 4,
затем pRowSizeInBytes возвращает значение 128.
pRowSizeInBytes не следует путать с шагом строки, так как при анализе pLayouts и получении шага строки из этого поля вы получите 256 при выравнивании по D3D12_TEXTURE_DATA_PITCH_ALIGNMENT.
[out, optional] pTotalBytes
Тип: UINT64*
Указатель на целочисленную переменную, заполняемую общим размером в байтах.
Возвращаемое значение
None
Remarks
Эта процедура помогает приложению заполнять D3D12_PLACED_SUBRESOURCE_FOOTPRINT и D3D12_SUBRESOURCE_FOOTPRINT структуры при выделении дополнительного пространства в кучах отправки. Результирующая структура не зависит от адаптера GPU. Это означает, что значения не будут отличаться от одного адаптера GPU к другому. GetCopyableFootprints использует указанные сведения о форматах ресурсов, макетах текстур и требованиях к выравниванию (из структуры D3D12_RESOURCE_DESC ) для заполнения структур вложенных ресурсов. Приложения имеют доступ ко всем этим сведениям, поэтому этот метод или его разновидность могут быть написаны как часть приложения.
Примеры
В примере D3D12Multithreading используется ID3D12Device::GetCopyableFootprints следующим образом:
// 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;
}
См. пример кода в справочнике по D3D12.
Требования
Целевая платформа | Windows |
Header | d3d12.h |
Библиотека | D3d12.lib |
DLL | D3d12.dll |