다음을 통해 공유


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 반환 코드 중 하나를 반환합니다.

설명

먼저 을 사용하여 리소스를 매핑해야 합니다. 텍스처는 WriteToSubresourceReadFromSubresource를 통한 CPU 액세스가 적합하려면 D3D12_RESOURCE_STATE_COMMON 상태여야 합니다. 그러나 버퍼는 그렇지 않습니다.

효율성을 위해 상자 내 익스텐트의 범위와 맞춤이 가로로 ( 64/[픽셀당 바이트] ) 픽셀인지 확인합니다. 세로 범위와 맞춤은 픽셀당 1 바이트 형식을 사용하는 경우를 제외하고 2개 행이어야 하며, 이 경우 4개의 행이 권장됩니다. 호출당 단일 깊이 조각이 효율적으로 처리됩니다. 128 바이트 정렬 포인터 및 보폭을 제공하는 것이 좋지만 필요하지는 않습니다.

하위 Mipmap 수준에 쓸 때 위에서 설명한 것보다 더 큰 너비와 높이를 사용하는 것이 좋습니다. 이는 작은 Mipmap 수준이 실제로 캐시 라인 정렬을 방해할 수 있는 불투명한 양의 오프셋으로 더 큰 메모리 블록 내에 저장될 수 있기 때문입니다.

WriteToSubresourceReadFromSubresource 는 UMA 어댑터에 대해 거의 0개 복사 최적화를 사용할 수 있지만 텍스처 데이터가 로컬 비디오 메모리에 있을 수 없으므로 불연속/NUMA 어댑터의 효율성을 크게 저하시킬 수 있습니다. 일반적인 애플리케이션은 어댑터 아키텍처가 UMA임을 인식하지 않는 한 불연속적인 업로드 기술을 고수해야 합니다. 업로드에 대한 자세한 내용은 CopyTextureRegion을 참조하고 UMA에 대한 자세한 내용은 D3D12_FEATURE_DATA_ARCHITECTURE 참조하세요.

UMA 시스템에서 이 루틴을 사용하여 루프 타일링이라고 하는 루프 최적화를 통해 메모리 복사 비용을 최소화할 수 있습니다. 업로드를 CPU 캐시에 편안하게 맞는 척으로 분할하면 CPU와 기본 메모리 간의 효과적인 대역폭이 이론적 최대값을 더 가깝게 달성합니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 d3d12.h
라이브러리 D3d12.lib
DLL D3d12.dll

추가 정보

ID3D12Resource

하위 리소스