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


Метод ID3D12Device::GetCopyableFootprints (d3d12.h)

Возвращает макет ресурса, который можно скопировать. Помогает приложению заполнить D3D12_PLACED_SUBRESOURCE_FOOTPRINT и D3D12_SUBRESOURCE_FOOTPRINT при подраспределении места в кучах отправки.

Syntax

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

Parameters

[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

Смещение в байтах, которое добавляется в смещение каждого D3D12_PLACED_SUBRESOURCE_FOOTPRINT в массиве pLayouts .

[out, optional] pLayouts

Тип: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*

Указатель на массив (длину NumSubresources) D3D12_PLACED_SUBRESOURCE_FOOTPRINT структур, которые должны быть заполнены описанием и размещением каждого подресурса.

[out, optional] pNumRows

Тип: UINT*

Указатель на массив (с длиной NumSubresources) целых переменных, заполняемых числом строк для каждого подресурса.

[out, optional] pRowSizeInBytes

Тип: UINT64*

Указатель на массив (длину NumSubresources) целочисленных переменных, каждая запись, заполняемая неpadded размером в байтах строки, каждого подресурса.

Например, если ресурс Texture2D имеет ширину 32 и байт на пиксель 4,

затем pRowSizeInBytes возвращает 128.

pRowSizeInBytes не следует путать с полем строки, так как изучение pLayouts и получение поля строки от этого даст вам 256, так как он выровнен по D3D12_TEXTURE_DATA_PITCH_ALIGNMENT.

[out, optional] pTotalBytes

Тип: UINT64*

Указатель на целочисленную переменную, заполненную общим размером в байтах. Если pResourceDesc недопустим, значение pTotalBytes имеет значение UINT64_MAX.

Возвращаемое значение

None

Remarks

Эта подпрограмма помогает приложению заполнять D3D12_PLACED_SUBRESOURCE_FOOTPRINT и D3D12_SUBRESOURCE_FOOTPRINT структуры при подлокации пространства в кучах отправки. Результирующая структура — это адаптер GPU, не зависящий от того, что значения не будут отличаться от одного адаптера GPU к следующему. GetCopyableFootprints использует указанные сведения о форматах ресурсов, макетах текстур и требованиях к выравниванию (из структуры D3D12_RESOURCE_DESC ) для заполнения структур подресурсов. Приложения имеют доступ ко всем этим сведениям, поэтому этот метод или вариант его можно записать как часть приложения.

Examples

В примере 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.

Requirements

Requirement Value
целевая платформа Windows
Header d3d12.h
Library D3d12.lib
DLL D3d12.dll

См. также

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device