1. 자원 상태 전이
자원에 자료를 다 기록하지 않았거나 기록을 아예 시작하지도 않은 상태에서 자원의 자료를 읽으려 하면 문제가 생기는데 이것을 자원 위험 상황(resource hazard)이라고 부르기로 한다. 이 문제를 해결하기 위해 D3D는 자원들에게 상태를 부여한다. 새로 생성된 자원은 기본 상태(default state)로 시작한다. 이 상태들을 다른 상태로 전환하는 것이 자원 상태 전이다.
자원 상태 전이는 전이 자원 장벽(transition resource barrier)들의 배열을 설정해서 지정한다. 배열을 사용하는 덕분에, 한 번의 API 호출로 여러 개의 자원을 전이할 수 있다. 자원 장벽은 D3D12_RESOURCE_BARRIER_DESC 구조체로 서술된다.
CD3D12_RESOURCE_BARRIER
https://docs.microsoft.com/ko-kr/windows/win32/direct3d12/cd3dx12-resource-barrier
CD3DX12_RESOURCE_BARRIER 구조체(D3dx12.h) - Win32 apps
D3D12 RESOURCE BARRIER 구조를 쉽게 초기화할 수 있도록 하는 도우미 \_ \_ 구조체입니다.
docs.microsoft.com
이 보조 함수는 주어진 자원과 이전, 이후 상태에 해당하는 전이 자원 장벽 서술 구조체를 돌려준다. D3D12_RESOURCE_BARRIER_DESC를 상속하고, 여기에 편의용 메서드들을 추가한 일종의 '확장 버전'이다. CD3DX12_로 시작하는 확장 버전들은 d3dx12.h에 정의되어 있다.
사용 예시)
mCommandList->ResourceBarrier(
1,
&CD3DX12_REOUSRCE_BARRIER::Transition(
CurrentBackBuffer(),
D3D12_RESOURCE_STATE_PRESENT,
D3D12_RESOURCE_STATE_RENDER_TARGET));
이 코드는 자원을 제시 상태(present)에서 렌더 대상 상태(render_target)으로 전이한다. 전이 자원 장벽이라는 것을, GPU에게 자원의 상태가 전이됨을 알려주는 하나의 명령이락도 생각하면 된다.