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

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

 

 

 

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

 

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

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

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

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

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

 

 


 

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

 

CommandQueue์™€ CommandList๋Š” DirectX 12 ๊ทธ๋ž˜ํ”ฝ ๋ Œ๋”๋ง์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•˜๋Š” COM๊ฐ์ฒด์ด๋‹ค.

CommandList๋Š” ๋ช…๋ น(Command)๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์ด๋‹ค. (์ฃผ๋กœ ๊ทธ๋ž˜ํ”ฝ ๋ Œ๋”๋ง ๋ช…๋ น๋“ค์„ ๋‹ด๋Š”๋‹ค.)

CommandQueue๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํ ํ˜•ํƒœ์˜ ๋™์ž‘์„ ํ•˜๋Š” COM๊ฐ์ฒด์ด๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ CommandList๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ , CommandList์— ๋‹ด๊ธด ๋ช…๋ น์„ GPU์— ์ œ์ถœํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

GPU๋Š” ๋ช…๋ น ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ํ์˜ GPU ๋ช…๋ น๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค.

 

CommandQueue์˜ ExcuteCommandList()๋ฅผ ํ†ตํ•ด์„œ GPU์— ๋ช…๋ น(Command)๋“ค์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ CommandQueue๋ฅผ ํ†ตํ•ด ExcuteCommandList()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด์„œ

์ œ์ถœํ•œ ๋ช…๋ น๋“ค์ด ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. GPU์—์„œ ๋•Œ๊ฐ€ ๋˜๋ฉด ๋ช…๋ น๋“ค์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 


 

[ 1. CommandQueue ์ƒ์„ฑ ]

 

 

 

CreateCommandQueue

CommandQueue์˜ ์ƒ์„ฑ์€ ID3D12CommandQueue* ์ปด๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ ,

ID3D12Device(๋””๋ฐ”์ด์Šค)์˜ CreateCommandQueue()๋ฅผ ํ†ตํ•ด์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

CreateCommandQueue()์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ D3D12_COMMAND_QUEUE_DESC๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

D3D12_COMMAND_QUEUE_DESC

- ์ฒซ ๋ฒˆ์งธ D3D12_COMMAND_LIST_TYPE

CommandQueue์˜ ํƒ€์ž…์„ ์„ค์ •ํ•˜๋Š” ์—ด๊ฑฐ์ฒด์ด๋‹ค. 

D3D12_COMMAND_LIST_TYPE_DIRECT : GPU๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น ๋ฒ„ํผ(๋ฆฌ์ŠคํŠธ).

D3D12_COMMAND_LIST_TYPE_BUNDLE : GPU๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Œ. (Direct ๋ช…๋ น ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”).

D3D12_COMMAND_LIST_TYPE_COMPUTE : Compute Shader๋ฅผ ์œ„ํ•œ ๋ช…๋ น ๋ฒ„ํผ(๋ฆฌ์ŠคํŠธ).

D3D12_COMMAND_LIST_TYPE_COPY : ๋ณต์‚ฌ (Copy)๋ฅผ ์œ„ํ•œ ๋ช…๋ น ๋ฒ„ํผ(๋ฆฌ์ŠคํŠธ).

์šฐ๋ฆฌ๋Š” GPU๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” CommandList๋ฅผ ๋‹ด์€ CommandQueue๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํƒ€์ž… ์ธ์ž๋Š”

D3D12_COMMAND_LIST_TYPE_DIRECT๋กœ ์„ค์ •ํ•œ๋‹ค.

 

- ๋‘ ๋ฒˆ์งธ Priority๋Š” ๋ช…๋ น ํ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ๊ฐ’์ด ์ž‘์„์ˆ˜๋ก ๋†’๋‹ค.

D3D12_COMMAND_QUEUE_PRIORITY_NORMAL : ๋ณดํ†ต ์šฐ์„ ์ˆœ์œ„๋ฅผ ์˜๋ฏธ.

D3D12_COMMAND_QUEUE_PRIORITY_HIGH : ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์˜๋ฏธ.

๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋ณดํ†ต ์šฐ์„  ์ˆœ์œ„๋กœ ์ง€์ •ํ•˜์—ฌ ์„ค์ •ํ•œ๋‹ค.

 

- ์„ธ ๋ฒˆ์งธ D3D12_COMMAND_QUEUE_FLAGS

CommandQueue์˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

D3D12_COMMAND_QUEUE_FLAG_NONE : ๊ธฐ๋ณธ ๋ช…๋ น ํ

D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT : ๋ช…๋ น ํ์— ๋Œ€ํ•˜์—ฌ GPU ํƒ€์ž„์•„์›ƒ์„ ๋น„ํ™œ์„ฑํ™”.

๊ธฐ๋ณธ ๋ช…๋ น ํ์ธ FLAG_NONE์„ ์„ค์ •ํ•œ๋‹ค.

 

- ๋„ค ๋ฒˆ์งธ NodeMask.

๋งŒ์•ฝ ์–ด๋–ค ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์— GPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ์œผ๋ฉด, ๊ฐ๊ฐ์˜ GPU๋“ค์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์ด๋‹ค.

๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ํ•œ ๊ฐœ๋งŒ ์žˆ๋Š” ๋‹จ์ผ GPU์— ๋Œ€ํ•ด์„œ๋Š” ํ•ญ์ƒ 0์„ ์“ด๋‹ค.

 

 


 

[ 2. CommandAllocator์™€ CommandList ์ƒ์„ฑ ]

 

๋ช…๋ น ํ• ๋‹น์ž(CommandAllocator)๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ž์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

(GPU ๋ช…๋ น์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.)

๊ทธ๋ž˜ํ”ฝ ๋ช…๋ น๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” COM๊ฐ์ฒด์ด๋‹ค. ์‹ค์ œ ๋ช…๋ น์–ด๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

CommandList๋Š” ์ด ๋ฉ”๋ชจ๋ฆฌ๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ช…๋ น ๋ฆฌ์ŠคํŠธ๋Š” ๋ช…๋ น ํ• ๋‹น์ž์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ์ด ๋œ๋‹ค.

๊ฐ™์€ CommandAllocator์—์„œ ๋™์‹œ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ CommandList๋Š” Open์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

์ฆ‰, 1 CommandAllocator : 1 CommandList ์ด๋‹ค.

 

 

CommandList

CommandList๋Š” ๋ Œ๋”๋ง ๋ช…๋ น๋“ค์„ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

CommandList์— ์žˆ๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๋“ค์€ Set(์ƒํƒœ๋ณ€๊ฒฝ) & Draw(๊ทธ๋ฆฌ๊ธฐ ํ˜ธ์ถœ)์ด๋‹ค.

CommandList๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” CommandAllocator ์ธํ„ฐํŽ˜์ด์Šค ํฌ์ธํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

(์ด CommandList๊ฐ€ ์–ด๋””์— ์žˆ๋Š” ๋ช…๋ น์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ๊ฑด์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ).

CommandList๋Š” ์ƒ์„ฑ๋˜๋ฉด Open(๋ช…๋ น์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”) ์ƒํƒœ์ด๋‹ค.

CommandList๋ฅผ Close ํ•˜๋ฉด ๋” ์ด์ƒ ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค.

CommandAllocator์™€ CommandList์˜ ์œ ํ˜•์€ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.

 

ID3D12GraphicsCommandList ์ธํ„ฐํŽ˜์ด์Šค

ID3D12GraphicsCommandList๋Š” ๋ Œ๋”๋ง์„ ์œ„ํ•œ ๊ทธ๋ž˜ํ”ฝ ๋ช…๋ น๋“ค์˜ ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

ClearDepthStencilView, Close, Reset... ๋“ฑ๋“ฑ ๋ชจ๋“  ๋ช…๋ น๋“ค์ด Command์ด๋‹ค.

Setํ•จ์ˆ˜๋“ค์„ ์ ์ ˆํžˆ ํ˜ธ์ถœํ•˜๊ณ , Draw๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚œ๋‹ค.

์ด ํ•จ์ˆ˜๋“ค์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ „๋ถ€ ๋‹ค Command๋“ค์ด ๋œ๋‹ค.

Command๋“ค์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น CommandList์™€ ๋งค์นญ๋œ CommandAllocator์— ๋ช…๋ น๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.

GPU๋Š” ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ Command๋“ค์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์ถ”๊ฐ€ํ•œ ๋ช…๋ น๋“ค์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด CommandList๋ฅผ Close() ํ•œ ํ›„,

CommandQueue์˜ ExcuteCommandList() ํ˜ธ์ถœ์„ ํ†ตํ•ด ํ์— ๋ช…๋ น๋“ค์„ ๋‹ด์•„์ค€๋‹ค.

 

์•ž์—์„œ๋„ ๋งํ–ˆ์ง€๋งŒ, Excute๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•ด์„œ Command๋“ค์ด GPU์—์„œ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

GPU ํ์— ๋ช…๋ น๋“ค์„ ์ง‘์–ด๋„ฃ๋Š” ๊ฒƒ๋ฟ์ด๋‹ค. ๋ช…๋ น๋“ค์˜ ์‹คํ–‰๊ณผ๋Š” ๋ณ„๊ฐœ์ด๋‹ค.

ํŠนํžˆ CopyResource() ๋ช…๋ น์„ ์˜ˆ๋กœ ๋“ค๋ฉด, ์ด ๋ช…๋ น์„ ๋‹ด์•˜๋‹ค๊ณ  ํ•ด์„œ GPU๊ฐ€ Resource๋ฅผ ์ฆ‰์‹œ Copy ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. (์ด ๋ถ€๋ถ„์—์„œ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.)

 

 

CreateCommandAllocator & CreateCommandList

CommandAllocator๋Š” ID3D12CommandAllocator*๋ฅผ ์„ ์–ธํ•˜๊ณ 

Device์— ๋‚ด์žฅ๋œ CreateCommandAllocator() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ ,

CommandList๋Š” CreateCommandList() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋ Œ๋”๋ง ๋ช…๋ น์„ ๋‹ด๊ธฐ ์œ„ํ•ด ID3D12GraphicsCommandList*๋ฅผ ์„ ์–ธ ํ›„ CommandList๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๊ฐ๊ฐ์˜ ํƒ€์ž…์€ CommandQueue์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ

GPU๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” D3D12_COMMAND_LIST_TYPE_DIRECT์œผ๋กœ ์„ค์ •ํ•œ ํ›„ ์ƒ์„ฑํ•œ๋‹ค.

CommandList๋Š” ๋ฐ˜๋“œ์‹œ CommandAllocator์™€ 1:1 ๋งค์นญ์ด ๋œ ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

CommandList๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๋ Œ๋”๋ง์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์ƒ CommandList๋Š” ํ•˜๋‚˜๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€

์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ํ•˜๋‚˜์˜ CommandList๋ฅผ ๋™์‹œ์— ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด CommandList ํ•˜๋‚˜๋ฅผ ์“ฐ๋ ˆ๋“œ0, ์“ฐ๋ ˆ๋“œ1์—์„œ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. 

์ฆ‰, 1์“ฐ๋ ˆ๋“œ : 1CommandList๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

CommandList - Reset (RenderBegin)

CommandList์— ๋ Œ๋”๋ง Command๋“ค์„ ๋‹ด๊ธฐ ์ „์—

๋ฐ˜๋“œ์‹œ Reset()์„ ํ˜ธ์ถœํ•˜์—ฌ CommandList๋ฅผ Open ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค.

Open ์ƒํƒœ๊ฐ€ ๋˜์–ด์•ผ๋งŒ Command๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

CommandList - Close & ExcuteCommandList (RenderEnd)

์‹คํ–‰ํ•  Command๋“ค์„ ๋‹ด์•˜๋‹ค๋ฉด, Command๋“ค์„ GPU์— ์ œ์ถœํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ CommandList๋ฅผ Closeํ•ด์ค˜์•ผ ํ•œ๋‹ค.

Closeํ•˜์ง€ ์•Š์œผ๋ฉด ExcuteCommandList๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ CommandList๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ CommandList์˜ ์‹คํ–‰ ์ˆœ์„œ์ด๋‹ค.

์ผ๋‹จ CommandList์— ๋‹ด๊ธด Command๋“ค์€ ๋‹ด์€ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ CommandList๋ฅผ ๋‹ด์•„์„œ ํ•œ ๋ฒˆ์— ExcuteCommandList๋ฅผ ํ•  ๊ฒฝ์šฐ

CommandList๋“ค ๊ฐ„์˜ ์‹คํ–‰ ์ˆœ์„œ๋Š” ์ง€์ผœ์ง€์ง€ ์•Š๋Š”๋‹ค.

GPU์˜ ํŒ๋‹จํ•˜์— ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ž‘์—…๋“ค์ด ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด CommandList๋ฅผ Excute์‹œํ‚ค๊ณ ์ž ํ•  ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž.

ID3D12CommandList* ppCommandLists[] = { CommandListA, CommandListB };

m_pCommandQueue->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists);

 

ppCommandLists[0]์—๋Š” CommandListA๊ฐ€ ๋“ค์–ด์žˆ๊ณ , [1]์—๋Š” CommandListB๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.

CommandList A์— (1, 2, 3) ๋ช…๋ น์ด ๋“ค์–ด์žˆ๊ณ  CommandList B์— (4, 5, 6)๋ช…๋ น์ด ๋“ค์–ด์žˆ์„ ๋•Œ

1, 2, 3, 4, 5, 6 ์ˆœ์„œ๋กœ ์‹คํ–‰๋  ์ˆ˜๋„ ์žˆ๊ณ , 4, 5, 6, 1, 2, 3 ์ˆœ์„œ๋กœ ์‹คํ–‰๋  ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์™€ ๋”๋ถˆ์–ด ExcuteCommandList ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ƒ๋‹นํžˆ ๋ฌด๊ฒ๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต ํ•˜๋‚˜์˜ CommandList๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.