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을 반환합니다.

pRowSizeInBytespLayout을 검사하고 그로부터 행 피치를 가져오면 D3D12_TEXTURE_DATA_PITCH_ALIGNMENT 맞춰질 때 256을 제공하므로 행 피치와 혼동해서는 안됩니다.

[out, optional] pTotalBytes

형식: UINT64*

총 크기(바이트)로 채울 정수 변수에 대한 포인터입니다.

반환 값

없음

설명

이 루틴은 업로드 힙의 공간을 하위 할당할 때 애플리케이션이 D3D12_PLACED_SUBRESOURCE_FOOTPRINTD3D12_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
헤더 d3d12.h
라이브러리 D3d12.lib
DLL D3d12.dll

추가 정보

CD3DX12_RESOURCE_DESC

CD3DX12_SUBRESOURCE_FOOTPRINT

ID3D12Device