2020. 7. 27. 21:23ใPROGRAMMING/DirectX 12
[ DirectX 12 ์ฅ์น ์ด๊ธฐํ ๋จ๊ณ ]
1 ๋จ๊ณ Device(๊ทธ๋ํฝ ๋๋ฐ์ด์ค) ์์ฑ.
2 ๋จ๊ณ CommandQueue์ CommandList ์์ฑ.
3 ๋จ๊ณ SwapChain ์์ฑ.
4 ๋จ๊ณ FenceObject ์์ฑ.
5 ๋จ๊ณ ๋ ๋ํ๊ฒ(RenderTarget)๊ณผ ๊น์ด/์คํ ์ค(Depth/Stencil) ๋ฒํผ ์์ฑ.
[ ๋ ๋ํ๊ฒ & ๊น์ด/์คํ ์ค ๋ฒํผ ์์ ์ ํ ์์ฑ ]
์์ ์ ํ(Descriptor Heap)์ ์์ ์๋ค์ ์ ์ฅํ๊ธฐ ์ํ ๋ฐฐ์ด์ด๋ผ๊ณ ์์์ ์ค๋ช ํ๋ค.
์์ ์ ํ์ ๋ง๋ค๊ธฐ ์ํด์๋ ID3D12DescriptorHeap* ๋ฅผ ์ ์ธํ๊ณ ,
ID3D12Device์ CreateDescriptorHeap() ํจ์๋ฅผ ํตํด ์์ฑํ ์ ์๋ค.
D3D12_DESCRIPTOR_HEAP_DESC์ NumDescriptors๋ ์์ ์์ ๊ฐ์๋ฅผ ์ค์ ํ๋ ๋ณ์์ด๋ค.
์ ๋ฉด ๋ฒํผ, ํ๋ฉด ๋ฒํผ ๋ ๊ฐ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ฏ๋ก 2๋ฅผ ์ค์ ํ๋ค.
Type์ ๊ฒฝ์ฐ ๋ ๋ ํ๊ฒ ๋ทฐ๋ฅผ ๋ด์ ์์ ์ ํ์ด๋ฏ๋ก D3D12_DESCRIPTOR_HEAP_TYPE_RTV๋ฅผ ์ค์ ํ๋ค.
Flags๋ ํน๋ณํ ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก FLAG_NONE์ ์ค์ ํ๋ค.
๊น์ด/์คํ ์ค ๋ฒํผ์ ๊ฒฝ์ฐ ํ๋์ ๋ฒํผ๋ง ์ฌ์ฉํ๋ฏ๋ก NumDescriptors๋ 1๋ก ์ค์ ํ๋ค.
Type์ ๊น์ด/์คํ ์ค ๋ทฐ๋ฅผ ๋ด์ ์์ ์ ํ์ด๋ฏ๋ก D3D12_DESCRIPTOR_HEAP_TYPE_DSV๋ฅผ ์ค์ ํ๋ค.
[ ๋ ๋ํ๊ฒ ๋ฒํผ ๋ทฐ(View) ์์ฑ ]
๋ฆฌ์์ค์ ๋ํ ๋ทฐ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด, CreateOOOView() ํจ์๋ฅผ ํตํด์ ๋ง๋ค๋ฉด ๋๋ค.
๋ ๋ํ๊ฒ ๋ทฐ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด? CreateRenderTargetView() ํจ์๋ฅผ ํตํด ์์ฑํ๊ณ ,
๊น์ด/์คํ ์ค ๋ทฐ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด? CreateDepthStencilView()๋ฅผ ํตํด ์์ฑํ๋ฉด ๋๋ค.
๋จผ์ ๋ฆฌ์์ค์ ๋ํ ๋ทฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์ค๋ช ํ๋ค.
ํ์ง๋ง ๋ ๋ํ๊ฒ์ ๊ฒฝ์ฐ์๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๋๋ก ๋ง๋ค ํ์๊ฐ ์๋ค.
IDXGISwapChain์ ํตํด์ ์ค์ ์ฒด์ธ์ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฏธ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ํ๋ฉด ๋ฒํผ๊ฐ ๋ง๋ค์ด์ ธ ์๋ค.
๋ฐ๋ผ์ ๋ ๋ํ๊ฒ์ ๊ฒฝ์ฐ ๋ฐ๋ก ๋ ๋ํ๊ฒ ๋ทฐ๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.
m_arrSwapChainBuffer๋ ID3D12Resource* ๋ฐฐ์ด์ด๋ค. ๋ฒํผ 2๊ฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 2์ด๋ค.
IDXGISwapChain์ GetBuffer()ํตํด์ ๋ฒํผ์ ์ ๋ณด๋ฅผ ์ป์ด์ ๋ด์์ค๋ค.
์์ ์ ํ์ ์์ ์ง์ ๋ถํฐ ํ๋ฉด ๋ฒํผ์ ๋ํ ๋ทฐ(View)๋ฅผ ๋ง๋ค์ด์ค๋ค.
IncrementSize๋งํผ Offset์ ํตํด ์์ ์ ํ์ ๋ค์ Index๋ก ์ด๋ํ์ฌ ์ด 2๊ฐ์ ๋ทฐ(View)๋ฅผ ๋ง๋ค์ด์ฃผ์.
๋ ๋ํ๊ฒ ๋ทฐ๋ ๋ณ๋์ ๋ฆฌ์์ค ์์ฑ ์์ด ๊ฐ๋จํ๊ฒ ๋ง๋ค ์ ์๋ค.
๋ ๋ฒ์งธ ์ธ์์ nullptr์ ๋ฃ์ผ๋ฉด ๋ฆฌ์์ค ํ์๊ณผ ๋๊ฐ์ ๋ทฐ(View)๋ฅผ ๋ง๋ค์ด์ค๋ค.
[ ๊น์ด/์คํ ์ค ๋ฒํผ ๋ทฐ(View) ์์ฑ ]
๊น์ด/์คํ ์ค ๋ทฐ์ ๊ฒฝ์ฐ์๋ ์ฐ๋ฆฌ๊ฐ ๋ณ๋๋ก ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
CreateCommittedResource() ํจ์๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋
D3D12_HEAP_PROPERTIES ๊ตฌ์กฐ์ฒด์ D3D12_RESOURCE_DESC ๊ตฌ์กฐ์ฒด,
D3D12_CLEAR_VALUE ๊ตฌ์กฐ์ฒด ์ ๋ณด๋ฅผ ์ฑ์์ผ ํ๋ค.
Heap์ Type์ D3D12_HEAP_TYPE_DEFAULT์ผ๋ก ์ค์ ํ๋ค.
D3D12_HEAP_TYPE_DEFAULT์ ๋ํด์ ๋ถ๊ฐ์ ์ธ ์ค๋ช ์ ํ์๋ฉด,
D3D12_HEAP_TYPE_DEFAULT๋ CPU๋ ์ ๊ทผํ ์ ์๊ณ GPU๋ ์ฝ๊ณ ์ฐ๊ธฐ ๊ฐ๋ฅํ ํ์ ์ด๋ค.
๋ฐ๋ผ์ ํ์ ์ค ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋์ํ๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ๋ง๋ค์ด์ง๋ค.
๋ชจ๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ๋ฆฌ์์ค ๋ฐ์ดํฐ๋ DEFAULT_HEAP์ ๋ง๋ค์ด์ง๋ ๊ฒ์ด ๋ง๋ค.
ํ์ง๋ง ์ด๋ ์๊ธฐ๋ ๋ฌธ์ ๋ ๋ชจ๋ธ ๋ฐ์ดํฐ๋ CPU๊ฐ ๊ฐ๊ณ ์์ง๋ง
CPU๋ DEFAULT_HEAP์ ์ ๊ทผํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ DEFAULT_HEAP์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด์ฃผ๋ ค๊ณ ํ๋ฉด, ์ค๊ฐ์ ์ถ๊ฐ์ ์ธ ๋ฆฌ์์ค ํ์ด ์์ด์ผ ํ๋ค.
์ด๋ ํ์ํ ๊ฒ์ด ๋ฐ๋ก UploadHeap์ด๋ค.
UploadHeap์๋ CPU๊ฐ ์ ๊ทผํ ์ ์๊ณ , GPU๋ ์ฝ๊ณ ์ธ ์ ์๋ค.
๋ฐ๋ผ์ DEFAULT_HEAP์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด CPU๊ฐ ์ ๊ทผํ ์ ์๋ UploadHeap์ด ํ์ํ๋ค.
CPU๊ฐ UploadHeap์ ๋ฆฌ์์ค๋ฅผ WRITE ํ๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ UploadHeap์ GPU ๋ฉ๋ชจ๋ฆฌ์ ์๊ณ , ๋ฆฌ์์ค๋ GPU ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋ฏ๋ก
GPU ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ด์ฉ๋ค์ COPY ํ๋ฉด ๋๋ค. (CommandList์ CopyResource() ํจ์)
Copy๋ฅผ ํ๊ณ ๋๋ฉด UploadHeap์ ๋ด์ฉ์ด GPU DefaultHeap์ ๋ณต์ฌ๋๋ค.
๋ณต์ฌ๊ฐ ๋ ํ์๋ UploadHeap์ด ํ์ ์์ด์ง๋ฏ๋ก ํด์ ํด์ค๋ ๋๋ค.
์ฆ, ์ ๋ฆฌํ์๋ฉด DEFAULT_HEAP์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ ค๋ฉด ์ค๊ฐ์ ๋ฐ๋์ UploadHeap์ด ํ์ํ๋ค.
(CPU์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ฃผ๊ณ , Copy ๋ช ๋ น์ ํตํด DefaultHeap์ ๋ณต์ฌ ํ UploadHeap ํด์ )
๊ทธ๋ฐ๋ฐ, Copy ๋ช ๋ น์ ํ ์๊ฐ ๋ฐ๋ก ๋ด์ฉ์ด ์ฎ๊ฒจ์ง๊น? NO
์คํ์ GPU Queue์์ ์คํ์ด ๋ ๋์ด๊ณ ์ธ์ ์ธ์ง๋ ์ ํํ ์ฐ๋ฆฌ๊ฐ ์ ์ ์๋ค.
๋ฐ๋ผ์ Copy๊ฐ ๊ณง๋ฐ๋ก ์คํ๋์ง ์๋๋ค๋ ์ ์ ์ ์ํ์.
๊น์ด/์คํ ์ค ๋ฆฌ์์ค์ ๊ฒฝ์ฐ CPU์์ ๋ฐ๋ก WRITE ํ ๋ด์ฉ์ด ์์ผ๋ฏ๋ก UplaodHeap์ ๋ง๋ค์ง ์์๋ ๋๋ค.
ํ์ง๋ง Vertex/Index ๋ฒํผ๋ ํ ์ค์ฒ์ ๊ฒฝ์ฐ UploadHeap์ด ํ์ํ๋ค.
Dimension์ 2D ํ ์ค์ฒ๋ฅผ ์์ฑํ ๊ฒ์ด๋ฏ๋ก D3D12_RESOURCE_DIMENSION_TEXTURE2D๋ฅผ ์ค์ ํ๋ค.
Width์ Height๋ ์์ฑํ๋ ค๋ ์๋์ฐ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค.
Flags๋ ๊น์ด/์คํ ์ค ๊ฐ์ ๊ธฐ๋กํ ๊ฒ์ด๋ฏ๋ก D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL๋ฅผ ์ค์ ํ๋ค.
Format์ D3D12_RESOURCE_DESC์ ํ์๊ณผ ๋์ผํ๊ฒ ์ค์ ํ๋ค.
Depth์ Stencil ๊ฐ์ Clear์์ ์ด๋ค ๊ฐ์ผ๋ก ์ด๊ธฐํํ ๊ฒ์ธ์ง ์ค์ ํ๋ ๊ฐ์ด๋ค.
๋ณดํต ์ผ๋ฐ์ ์ผ๋ก 1๊ณผ 0์ผ๋ก ์ด๊ธฐํํ๋ค.
์์ ๊ตฌ์กฐ์ฒด๋ค์ ์ ๋ณด๋ฅผ ์ค์ ํ๋ค๋ฉด ์ด์ ๊น์ด/์คํ ์ค ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
ID3D12Resource* ๋ฒํผ ๋ด์ฉ์ ์์ฑํด์ฃผ๋๋ก ํ์.
๊น์ด/์คํ ์ค ๋ฒํผ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์์ผ๋ฉด ์์ ์ ํ์ ๋ง๋๋ ๊ฒ์ ๊ฐ๋จํ๋ค.๊น์ด/์คํ ์ค ์์ ์ ํ์ ์์ ๋ฒ์ง๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ๊น์ด/์คํ ์ค ๋ฒํผ์ ๋ํ ๋ทฐ๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.๋ ๋ฒ์งธ ์ธ์์ nullptr์ ๋ฃ์ผ๋ฉด ๋ฆฌ์์ค ํ์๊ณผ ๋๊ฐ์ ๋ทฐ(View)๋ฅผ ๋ง๋ค์ด์ค๋ค.
'PROGRAMMING > DirectX 12' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DirectX 12 ๋ฆฌ์์ค ์ฅ๋ฒฝ(Resource Barrier) (0) | 2020.07.29 |
---|---|
DirectX 12 ๋ทฐ ํฌํธ(Viewprot)์ ์์ ์ฌ๊ฐํ(ScissorRect) (0) | 2020.07.28 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (5) - part 1 (3) | 2020.07.25 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (4) (0) | 2020.07.16 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (3) (1) | 2020.07.15 |