Поделиться через


Метод 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

См. также раздел

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device