DirectX

1. 자원 상태 전이

Awesome Red Tomato 2021. 12. 19. 05:27

자원에 자료를 다 기록하지 않았거나 기록을 아예 시작하지도 않은 상태에서 자원의 자료를 읽으려 하면 문제가 생기는데 이것을 자원 위험 상황(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에게 자원의 상태가 전이됨을 알려주는 하나의 명령이락도 생각하면 된다.