2020. 8. 1. 17:19ใPROGRAMMING/DirectX 12
[ ๋ฃจํธ ์๋ช (Root Signature) ]
๋ฃจํธ ์๋ช (Root Signature)๋ ์ด๋ค ๋ฆฌ์์ค(๋ฐ์ดํฐ)๋ค์ด ๊ทธ๋ํฝ์ค ํ์ดํ๋ผ์ธ์ ์ ฐ์ด๋์
์ฐ๊ฒฐ๋๋ ๊ฐ๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค.
์ฆ, ๋จ์ด ๊ทธ๋๋ก ์์ฑํ ์ ฐ์ด๋๋ฅผ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์๋ง๊ฒ ์์ฑํ๋๊ฐ์ ๋ํด
ํ์ธํ๊ณ ์ธ์ธ์ ๋ฐ๋ ๊ณผ์ ์ด๋ผ๊ณ ์ดํดํ๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
๋ฐ๋ผ์ ๋ฃจํธ ์๋ช (Root Siganture)์ ๋ฐ๋์ ๊ทธ๋ฆฌ๊ธฐ ํธ์ถ์ ์ฐ์ด๋ ์ ฐ์ด๋๋ค๊ณผ
ํธํ๋์ด์ผ ํ๋ค.
(๊ทธ๋ฆฌ๊ธฐ ํธ์ถ ์ ์ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ๋ฌถ์๋ค๊ณ ๊ธฐ๋๋๋ ๋ชจ๋ ์์์ ์ ๊ณตํด์ผ ํ๋ค)
๋ ๋๋ง ํธ์ถ๋ง๋ค ์๋ก ๋ค๋ฅธ ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ๋ค์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ,
๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ๋ฃจํธ ์๋ช (Root Signature)๋ ๋ฌ๋ผ์ผ ํ๋ค.
Direct3D์์ ๋ฃจํธ ์๋ช (Root Signature)์ ๋ํํ๋ ์ธํฐํ์ด์ค๋
ID3D12RootSignature ์ด๋ค.
๋ฃจํธ ์๋ช (Root Signature)์ ๊ทธ๋ฆฌ๊ธฐ ํธ์ถ์์ ์ ฐ์ด๋๊ฐ ๊ธฐ๋ํ๋ ์์๋ค์
์์ ํ๋ ๋ฃจํธ ๋งค๊ฐ๋ณ์๋ค์ ๋ฐฐ์ด๋ก ์ ์๋๋ค.
์ฌ๊ธฐ์ ์ ฐ์ด๋๊ฐ ๊ธฐ๋ํ๋ ์์๋ค์ด๋ ์์ ๋ฒํผ, ํ ์ค์ฒ, ํ ์ค์ฒ ์ํ๋ฌ๋ค์ ๋งํ๋ค.
์์ ๋ฒํผ์ ๋ ์ง์คํฐ ๋ฒํธ๋ b, ํ ์ค์ฒ๋ t, ์ํ๋ฌ๋ s๋ก ์ค์ ํ๋ค.
๊ฐ๋จํ ColorShader์ ๋ฃจํธ ์๋ช (Root Signature)์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ก ๋ค์ด ๋ณด๊ฒ ๋ค.
ColorShader๋ 2๊ฐ์ ์์ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
์ด ์ ๋ณด๋ค์ D3D12_ROOT_SIGNATURE_DESC ๊ตฌ์กฐ์ฒด์ ๋ฌถ์ด์ค์ผ ํ๋ค.
GPU๋ ๋ฆฌ์์ค(๋ฒํผ ํน์ ํ ์ค์ฒ)๋ฅผ ํญ์ ๋ทฐ(View)๋ฅผ ํตํด ์ฐธ์กฐํ๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ColorShader๋ 2๊ฐ์ ์์ ๋ฒํผ ๋ทฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ์ค์ ํด์ค๋ค.
์ธ์๋ก ๋ค์ด๊ฐ๋ ์ซ์๋ ๋ ์ง์คํฐ ๋ฒํธ์ด๋ค.
๋ฃจํธ ํ๋ผ๋ฏธํฐ๋ฅผ ์์ฑํ๋ค๋ฉด D3D12_ROOT_SIGNATURE_DESC ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ฃจํธ ํ๋ผ๋ฏธํฐ์ ๊ฐ์์ด๋ค.
์ธ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ์ธ์๋ ๊ฐ๊ฐ ์ํ๋ฌ์ ๊ฐ์์ ์ํ๋ฌ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์ฃผ์์ด๋ค.
ColorShader๋ ํ ์ค์ฒ์ ์ํ๋ฌ๊ฐ ์์ผ๋ฏ๋ก ๊ฐ๊ฐ 0๊ณผ nullptr์ ์ค์ ํ๋ค.
์๋ง๊ฒ D3D12_ROOT_PARAMETER ๊ตฌ์กฐ์ฒด์
D3D12_ROOT_SIGNATURE_DESC ๊ตฌ์กฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด
๋๋ฐ์ด์ค์ CreateRootSignature() ํจ์๋ฅผ ํตํด ๋ฃจํธ ์๋ช (RootSignature)์ด ์์ฑ๋ ๊ฒ์ด๋ค.
[ ํ์ดํ๋ผ์ธ ์ํ(Pipeline State) ]
ํ์ดํ๋ผ์ธ ์ํ(Pipeline State)๋ ๋ง ๊ทธ๋๋ก ๊ฐ์ฒด(Object)๋ฅผ
๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ํตํด ๊ทธ๋ฆด ๋ ์ด๋ ํ ์ํ๋ก ๊ทธ๋ฆด ๊ฒ์ธ๊ฐ๋ฅผ ์ค์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
DirectX 9์ ์ ฐ์ด๋์์ pass์ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
์ฆ, ๊น์ด ๊ฐ์ WRITE ํ ๊ฒ์ธ๊ฐ?
์ํ ๋ธ๋๋ฉ์ ์ํํ ๊ฒ์ธ๊ฐ?
์ํ ๋ธ๋๋ฉ์ ํ๋ค๋ฉด ์ด๋ค ์ต์ ์ผ๋ก ๋ธ๋๋ฉ ํ ๊ฒ์ธ๊ฐ?
์ ฐ์ด๋ ์ปดํ์ผ ๋ฒ์ ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?
์์ ์ค์ ๋ค์ DirectX 12๋ ํ์ดํ๋ผ์ธ ์ํ(Pipeline State) COM ๊ฐ์ฒด๋ฅผ ํตํด ์ค์ ํ๋ค.
ID3D12PipelineState ๊ฐ ๋ํ ์ธํฐํ์ด์ค์ด๊ณ ,
๋๋ฐ์ด์ค์ CreateGraphicsPipelineState() ํจ์๋ฅผ ํตํด ์์ฑํ ์ ์๋ค.
ํ์ดํ๋ผ์ธ ์ํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ D3D12_GRAPHICS_PIPELINE_STATE_DESC ๊ตฌ์กฐ์ฒด
์ ๋ณด๋ฅผ ์์ฑํด์ผ ํ๋ค.
1. D3D12_GRAPHICS_PIPELINE_STATE_DESC - pRootSignature
์ฌ์ฉํ ์ ฐ์ด๋์ ๋ฃจํธ ์๋ช ์ ์ค์ ํด์ค๋ค.
2. D3D12_GRAPHICS_PIPELINE_STATE_DESC - PrimitiveTopologyType
์ ์ ๋ค์ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ ๊ฒ์ธ์ง ์ค์ ํด์ค๋ค.
3. D3D12_GRAPHICS_PIPELINE_STATE_DESC - NumRenderTargets
๋ช ๊ฐ์ ๋ ๋ํ๊ฒ์ ๊ทธ๋ฆด ๊ฒ์ธ์ง ์ค์ ํด์ค๋ค.
DirectX 12๋ ๋์์ 8๊ฐ์ ํ๊ฒ์ ์ฅ๋ฉด์ ๊ทธ๋ฆด ์ ์๋ค.
4. D3D12_GRAPHICS_PIPELINE_STATE_DESC - RTVFormats[0]
๋ ๋ํ๊ฒ์ ํฌ๋งท์ ์ค์ ํด์ค๋ค.
๋ง์ฝ ๋์์ 4๊ฐ์ ํ๊ฒ์ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ๊ฐ [1], [2], [3]์ ๋ํด์๋
์ค์ ํด์ค์ผ ํ๋ค.
5. D3D12_GRAPHICS_PIPELINE_STATE_DESC - InputLayout
์ฌ์ฉํ ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ํ, VertexShader์ Input์ผ๋ก ๋ค์ด๊ฐ
๊ตฌ์กฐ์ฒด ์ ๋ณด๋ฅผ ์ค์ ํด์ค๋ค.
6. D3D12_GRAPHICS_PIPELINE_STATE_DESC - VS, PS
InputLayout์ ์ค์ ํ๋ฉด์ ์ ฐ์ด๋ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ๋ ์์ฑ๋
VertexShader์ PixelShader์ ์ฝ๋๋ฅผ ์ค์ ํด์ค๋ค.
7. D3D12_GRAPHICS_PIPELINE_STATE_DESC - BlendState
๋ธ๋๋ฉ์ ์ํํ ๊ฒ์ธ์ง, ๋ธ๋๋ฉ ์ต์ ์ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง ์ค์ ํด์ค๋ค.
8. D3D12_GRAPHICS_PIPELINE_STATE_DESC - DepthStencilState
๊น์ด/์คํ ์ค์ ๋ํ ์ค์ ์ ํด์ค๋ค.
๋ณดํต ๊น์ด ๊ฐ์ WRITE ํ ๊ฒ์ธ์ง์ ๋ํ ์ฌ๋ถ๋ง ์ค์ ํด์ค๋ค.
๊ธฐ๋ณธ์ DepthEnable์ true์ด๋ค.
9. D3D12_GRAPHICS_PIPELINE_STATE_DESC - RasterizerState
๋ ์คํฐ๋ผ์ด์ ๋ฅผ ์ค์ ํด์ค๋ค.
๋ณดํต D3D12_FILL_MODE์ D3D12_CULL_MODE์ ๋ํ ์ค์ ๋ง๊ณ ๋
ํฌ๊ฒ ๋ณ๊ฒฝํ ์ผ์ด ๋ง์ด ์๋ค.
ํ์ดํ๋ผ์ธ ์ํ(Pipeline Stae)๋ ํ์์ ๋ฐ๋ผ ์์ฑํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์์ ํ์ดํ๋ผ์ธ ์ํ๋ Color ๋ฒํผ๋ฅผ D3D12_FILL_MODE_SOLID๋ก ๊ทธ๋ฆฌ๊ธฐ ์ํ
ํ์ดํ๋ผ์ธ ์ํ์ด๋ค. ์ด๋ฅผ WIREFRAME์ผ๋ก ๊ทธ๋ฆฌ๊ณ ์ถ๋ค๋ฉด?
๋ ์คํฐ๋ผ์ด์ ์ํ์์ FILL_MODE๋ฅผ WIREFRAME์ผ๋ก ์ค์ ํ ํ
ํ์ดํ๋ผ์ธ ์ํ ๊ฐ์ฒด๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์ค ํ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํ์ดํ๋ผ์ธ ์ํ(Pipeline State)๋ฅผ ์ค์ ํ ๋ ์ฃผ์ํด์ผ ํ ์ ์
์ฑ๋ฅ์ ์ํด์ ํ์ดํ๋ผ์ธ ์ํ ๋ณ๊ฒฝ์ ์ต์ํํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ฆ, SetPipelineState() ํจ์ ํธ์ถ์ ์ต์ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
์๋ฅผ ๋ค๋ฉด ์ค๋ธ์ ํธ๋ฅผ D3D12_FILL_MODE_SOLID๋ก 100๊ฐ ๋ ๋๋ง์ ํ ๋
100๊ฐ์ ๊ฐ์ฒด๋ ๊ฐ์ ํ์ดํ๋ผ์ธ ์ํ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก
100๋ฒ SetPipelineState()๋ฅผ ํธ์ถํ ํ์๊ฐ ์๋ค๋ ๋ง์ด๋ค.
์ฒซ ๋ฒ์งธ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆด ๋ ํ ๋ฒ ํ์ดํ๋ผ์ธ ์ํ๋ฅผ ์ค์ ํ๋ฉด ๋ค์ ๊ทธ๋ฆด ๊ฐ์ฒด๋ค์
์ค์ ๋ ํ์ดํ๋ผ์ธ ์ํ๋ก ์์์ ๊ทธ๋ ค์ง๋ค.
๋ฐ๋ผ์ ํ์ดํ๋ผ์ธ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ๋ ๊ทธ๋ฆฌ๊ธฐ ํธ์ถ๋ง๋ค
SetPipelineState()๋ฅผ ํธ์ถํ๋ ์ผ์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ์ผํค๋ ํ๋์ด๋ค.
'PROGRAMMING > DirectX 12' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DirectX 12 ๋ฉํฐ ์ค๋ ๋ ๋ ๋๋ง(Multi-Thread Rendering) (3) | 2020.08.01 |
---|---|
DirectX 12 ๋ฆฌ์์ค ์ฅ๋ฒฝ(Resource Barrier) (0) | 2020.07.29 |
DirectX 12 ๋ทฐ ํฌํธ(Viewprot)์ ์์ ์ฌ๊ฐํ(ScissorRect) (0) | 2020.07.28 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (5) - part 2 (0) | 2020.07.27 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (5) - part 1 (3) | 2020.07.25 |