DirectX 12 ์žฅ์น˜ ์ดˆ๊ธฐํ™” ์ดํ•ดํ•˜๊ธฐ (1)

2020. 7. 13. 01:00ใ†PROGRAMMING/DirectX 12

 

 

 

 

 

 

[ DirectX 12 ์žฅ์น˜ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ ]

 

1 ๋‹จ๊ณ„ Device(๊ทธ๋ž˜ํ”ฝ ๋””๋ฐ”์ด์Šค) ์ƒ์„ฑ.

2 ๋‹จ๊ณ„ CommandQueue์™€ CommandList ์ƒ์„ฑ.

3 ๋‹จ๊ณ„ SwapChain ์ƒ์„ฑ.

4 ๋‹จ๊ณ„ FenceObject ์ƒ์„ฑ.

5 ๋‹จ๊ณ„ ๋ Œ๋”ํƒ€๊ฒŸ(RenderTarget)๊ณผ ๊นŠ์ด/์Šคํ…์‹ค(Depth/Stencil) ๋ฒ„ํผ ์ƒ์„ฑ.

 

 


 

[ 1 ๋‹จ๊ณ„ Device ์ƒ์„ฑ ]

 

DXGI

Device๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” IDXGIFactory๋ผ๋Š” ์ปด๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

DXGI (DirectX Graphics Infrastructure)๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

- Direct3D ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

- DirectX ๊ทธ๋ž˜ํ”ฝ ๋Ÿฐํƒ€์ž„์— ๋…๋ฆฝ์ ์ธ ์ € ์ˆ˜์ค€(Low-Level)์˜ ์ž‘์—…๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.

(๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ์—ด๊ฑฐ, ๋ชจ๋‹ˆํ„ฐ ์—ด๊ฑฐ, ํ”„๋ฆฌ์  ํŠธ, ์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ ์ „ํ™˜ ๋“ฑ๋“ฑ)

- Direct 3D๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ DXGI๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

- Direct 3D๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€์ด ๋˜์–ด์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณ„์ธต์ด๋‹ค.

- Direct 3D๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด DXGI๋ฅผ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.

- DXGI๋ฅผ ๋งŒ๋“  ์ด์œ ๋Š” ๊ทธ๋ž˜ํ”ฝ ์ถœ๋ ฅ์„ ํ•˜๋‹ค ๋ณด๋‹ˆ SwapChain, Present ๋“ฑ๋“ฑ ์˜ ๊ฐœ๋…์ด ํ•„์š”ํ•œ๋ฐ,

์ด ๊ฐœ๋…๋“ค์€ ์‹ค์ œ 3D๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‚ด์šฉ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.

์ฐฝ ๋ชจ๋“œ? ์ „์ฒด ํ™”๋ฉด ๋ชจ๋“œ? ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ๋ช‡ ๊ฐœ ์—ฐ๊ฒฐ? ํ˜น์€ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๊ฐ€ ๋ช‡ ๊ฐœ ์—ฐ๊ฒฐ?

์ด ๋‚ด์šฉ๋“ค์€ Direct3D์™€๋Š” ๊ด€๋ จ์ด ์—†๋‹ค.

DXGI ๋ฒ„์ „

- IDXGIFactory1, IDXGIFactory2, 3, 4์˜ ์ˆซ์ž๋Š” DXGI์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

- DXGI๋ฒ„์ „์€ ์ƒ์†๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ์ƒ์œ„ ๋ฒ„์ „์€ ํ•˜์œ„ ๋ฒ„์ „์˜ ๋‚ด์šฉ์„ ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

 

 

IDXGIFactory

DXGI์˜ ๊ฐœ๋…์„ ์•Œ์•˜์œผ๋‹ˆ ์ด์ œ IDXGIFactory์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

IDXGIFactory๋Š” ์–ด๋Œ‘ํ„ฐ(Adapter), ์ถœ๋ ฅ์žฅ์น˜(Output), ๋””๋ฐ”์ด์Šค(Device)๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ปด๊ฐ์ฒด์ด๋‹ค. 

์–ด๋Œ‘ํ„ฐ๋ž€ ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋Šฅ๋ ฅ์„ ์ถ”์ƒํ™”ํ•œ ๊ฐ์ฒด, ์ฆ‰ ๋น„๋””์˜ค ์นด๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ถœ๋ ฅ์žฅ์น˜๋ž€ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๊ณ , ๋””๋ฐ”์ด์Šค๋Š” ์ปดํ“จํ„ฐ์— ์žฅ์ฐฉ๋œ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

IDXGIFactory๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ๋ช‡ ๊ฐœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€, ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๊ฐ€ ๋ช‡ ๊ฐœ ์žฅ์ฐฉ๋˜์–ด ์žˆ๋Š”์ง€ ๋“ฑ์˜

์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

IDXGIFactory ์ƒ์„ฑ

 IDXGIFactory4* m_pFactory๋ฅผ ์„ ์–ธํ•˜๊ณ , CreateDXGIFactory1() ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ทธ๋ž˜ํ”ฝ ๋””๋ฐ”์ด์Šค ์—ด๊ฑฐ
Slot0 ๋‚ด์žฅ๊ทธ๋ž˜ํ”ฝ์นด๋“œ & Slot1 ์™ธ์žฅ๊ทธ๋ž˜ํ”ฝ์นด๋“œ

IDXGIFactory๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๋ฉด ์ด์ œ IDXGIFactory์˜ ๋‚ด์žฅ ํ•จ์ˆ˜์ธ EnumAdapters1๋ฅผ ํ†ตํ•ด

์ปดํ“จํ„ฐ์— ์žฅ์ฐฉ๋œ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋“ค์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

EnumAdpaters๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” IDXGIAdapter ์ปด๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ฐพ์€ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์˜ ์ •๋ณด๋Š” DXGI_ADAPTER_DESC์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๋ณดํ†ต 0๋ฒˆ ์Šฌ๋กฏ์— ์„ฑ๋Šฅ์ด ์ข‹์€ ๋””๋ฐ”์ด์Šค๊ฐ€ ์žฅ์ฐฉ๋˜์–ด ์žˆ์ง€๋งŒ,

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ํ†ตํ•ด ์ฐพ์•„์„œ ์—ฐ๊ฒฐํ•ด ์ค€๋‹ค.

 

 

๊ทธ๋ž˜ํ”ฝ ๋””๋ฐ”์ด์Šค ์ƒ์„ฑ

๋””๋ฐ”์ด์Šค ์–ด๋Œ‘ํ„ฐ ์ •๋ณด๋ฅผ ์–ป์—ˆ๋‹ค๋ฉด ์ด์ œ ๊ทธ๋ž˜ํ”ฝ ๋””๋ฐ”์ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

๋””๋ฐ”์ด์Šค ์ƒ์„ฑ์€ ID3D12Device* ๋””๋ฐ”์ด์Šค ์ปด๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ ,

D3D12CreateDevice() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ์žฅ์ฐฉ๋œ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๊ฐ€ DirectX 12๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, DirectX 11 ์ˆ˜์ค€ ๋ ˆ๋ฒจ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค.