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
리소스의 첫 번째 하위 리소스 인덱스입니다. 유효한 값의 범위는 D3D12_REQ_SUBRESOURCES 0입니다.
[in] NumSubresources
형식: UINT
리소스의 하위 리소스 수입니다. 유효한 값의 범위는 0에서 (D3D12_REQ_SUBRESOURCES - FirstSubresource)입니다.
BaseOffset
형식: UINT64
리소스에 대한 오프셋(바이트)입니다.
[out, optional] pLayouts
형식: D3D12_PLACED_SUBRESOURCE_FOOTPRINT*
각 하위 리소스의 설명 및 배치로 채워질 D3D12_PLACED_SUBRESOURCE_FOOTPRINT 구조체의 배열(길이 NumSubresources)에 대한 포인터입니다.
[out, optional] pNumRows
형식: UINT*
각 하위 리소스의 행 수로 채울 정수 변수의 배열( NumSubresources 길이)에 대한 포인터입니다.
[out, optional] pRowSizeInBytes
형식: UINT64*
정수 변수의 배열( NumSubresources 길이)에 대한 포인터이며, 각 항목은 각 하위 리소스의 행에 대한 패키지되지 않은 크기(바이트)로 채워집니다.
예를 들어 Texture2D 리소스의 너비가 32이고 픽셀당 바이트가 4인 경우
pRowSizeInBytes는 128을 반환합니다.
pRowSizeInBytes는 pLayout을 검사하고 그로부터 행 피치를 가져오면 D3D12_TEXTURE_DATA_PITCH_ALIGNMENT 맞춰질 때 256을 제공하므로 행 피치와 혼동해서는 안됩니다.
[out, optional] pTotalBytes
형식: UINT64*
총 크기(바이트)로 채울 정수 변수에 대한 포인터입니다.
반환 값
없음
설명
이 루틴은 업로드 힙의 공간을 하위 할당할 때 애플리케이션이 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;
}
요구 사항
대상 플랫폼 | Windows |
헤더 | d3d12.h |
라이브러리 | D3d12.lib |
DLL | D3d12.dll |