ID3D12Resource::WriteToSubresource 메서드(d3d12.h)
CPU를 사용하여 데이터를 하위 리소스에 복사하여 CPU가 정의되지 않은 레이아웃으로 대부분의 텍스처의 콘텐츠를 수정할 수 있도록 합니다.
구문
HRESULT WriteToSubresource(
UINT DstSubresource,
[in, optional] const D3D12_BOX *pDstBox,
[in] const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch
);
매개 변수
DstSubresource
형식: UINT
하위 리소스의 인덱스를 지정합니다.
[in, optional] pDstBox
형식: const D3D12_BOX*
리소스 데이터를 복사할 대상 하위 리소스의 부분을 정의하는 상자에 대한 포인터입니다. NULL인 경우 데이터는 오프셋 없이 대상 하위 리소스에 기록됩니다. 원본의 차원이 대상에 맞아야 합니다( D3D12_BOX 참조).
빈 상자가 표시되어 작업 없음이 발생합니다. 위쪽 값이 아래쪽 값보다 크거나 같거나 왼쪽 값이 오른쪽 값보다 크거나 같거나 앞 값이 뒤 값보다 크거나 같은 경우 상자가 비어 있습니다. 상자가 비어 있으면 이 메서드는 작업을 수행하지 않습니다.
[in] pSrcData
형식: const void*
메모리의 원본 데이터에 대한 포인터입니다.
SrcRowPitch
형식: UINT
원본 데이터의 한 행에서 다음 행까지의 거리입니다.
SrcDepthPitch
형식: UINT
원본 데이터의 한 깊이 조각에서 다음까지의 거리입니다.
반환 값
형식: HRESULT
이 메서드는 Direct3D 12 반환 코드 중 하나를 반환합니다.
설명
먼저 맵을 사용하여 리소스를 매핑해야 합니다. 텍스처는 WriteToSubresource 및 ReadFromSubresource를 통한 CPU 액세스가 적합하려면 D3D12_RESOURCE_STATE_COMMON 상태여야 합니다. 그러나 버퍼는 그렇지 않습니다.
효율성을 위해 상자 내 익스텐트의 범위와 맞춤이 가로로 ( 64/[픽셀당 바이트] ) 픽셀인지 확인합니다. 세로 범위와 맞춤은 픽셀당 1 바이트 형식을 사용하는 경우를 제외하고 2개 행이어야 하며, 이 경우 4개의 행이 권장됩니다. 호출당 단일 깊이 조각이 효율적으로 처리됩니다. 128 바이트 정렬 포인터 및 보폭을 제공하는 것이 좋지만 필요하지는 않습니다.
하위 Mipmap 수준에 쓸 때 위에서 설명한 것보다 더 큰 너비와 높이를 사용하는 것이 좋습니다. 이는 작은 Mipmap 수준이 실제로 캐시 라인 정렬을 방해할 수 있는 불투명한 양의 오프셋으로 더 큰 메모리 블록 내에 저장될 수 있기 때문입니다.
WriteToSubresource 및 ReadFromSubresource 는 UMA 어댑터에 대해 거의 0개 복사 최적화를 사용할 수 있지만 텍스처 데이터가 로컬 비디오 메모리에 있을 수 없으므로 불연속/NUMA 어댑터의 효율성을 크게 저하시킬 수 있습니다. 일반적인 애플리케이션은 어댑터 아키텍처가 UMA임을 인식하지 않는 한 불연속적인 업로드 기술을 고수해야 합니다. 업로드에 대한 자세한 내용은 CopyTextureRegion을 참조하고 UMA에 대한 자세한 내용은 D3D12_FEATURE_DATA_ARCHITECTURE 참조하세요.
UMA 시스템에서 이 루틴을 사용하여 루프 타일링이라고 하는 루프 최적화를 통해 메모리 복사 비용을 최소화할 수 있습니다. 업로드를 CPU 캐시에 편안하게 맞는 척으로 분할하면 CPU와 기본 메모리 간의 효과적인 대역폭이 이론적 최대값을 더 가깝게 달성합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | d3d12.h |
라이브러리 | D3d12.lib |
DLL | D3d12.dll |