2020. 7. 29. 01:00ใPROGRAMMING/DirectX 12
[ ๋ฆฌ์์ค ์ฅ๋ฒฝ(Resource Barrier ]
์ ๊ธ์์ ์์ฑํ ๋ฆฌ์์ค๋ฅผ ํตํด์ ์ด๋ค ๋ช ๋ น์ ์คํํ๊ธฐ ์ํด์๋
๋ฆฌ์์ค๊ฐ ํน์ ํ ์ํ์ ์์ ๋ ๊ฐ๋ฅํ๋ค๊ณ ์ค๋ช ํ๋ค.
๋ฆฌ์์ค๊ฐ ๊ฐ์ง ์ ์๋ ์ํ๋ ๊ต์ฅํ ๋ง๊ณ , ์ด๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๊ด๋ฆฌํด์ค์ผ ํ๋ค.
๊ฐ ๊ทธ๋ํฝ ๋ช ๋ น์ด ์คํ๋๊ธฐ ์ํ์ฌ ์ฌ์ฉ๋๋ ๋ฆฌ์์ค๋ ์ ์ ํ ์ํ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
๋ฆฌ์์ค ์ฅ๋ฒฝ(Resource Barrier)์ ๋ฆฌ์์ค์ ๋ํ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ์ฒด์ด๋ค.
๋ฒ ๋ฆฌ์ด(Barrier)๋ ๋ง ๊ทธ๋๋ก ์ ๋ง ์ฅ๋ฒฝ์ ์๋ฏธํ๋ค.
์ด๋ค ๋ฆฌ์์ค์ ๋ํด ์ํ๋ ์ํ๊ฐ ๋๊ธฐ ์ ๊น์ง๋ ์ด ๋ฆฌ์์ค๋ฅผ ์คํํ ์ ์๋๋ก ๋ง์์ค๋ค.
๋ฆฌ์์ค ์ฅ๋ฒฝ์ ID3D12GraphicsCommandList::ResourceBarrier() ํจ์์
D3D12_RESOURCE_BARRIER ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ ํ ์ ์๋ค.
๋ชจ๋ ๋ฆฌ์์ค๋ค์ ์ด๋ ํ์๊ฐ์๋ ํ๋์ ์ํ(STATE)๋ฅผ ๊ผญ ๊ฐ์ง๋๋ก ๋์ด์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ค ๊ทธ๋ํฝ ๋ช ๋ น์ด ๊ทธ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด์ ์คํ์ด ๋๊ธฐ ์ํด์๋
๊ทธ ๋ช ๋ น์ ํ์ํ ์ํ๋ก ๋ฆฌ์์ค์ ์ํ๊ฐ ๋ฐ๋์ด์์ด์ผ ํ๋ค.
๋ฆฌ์์ค์ ์ํ๋ผ ํ๋ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์์ค๊ฐ READ์ ๋์์ธ์ง, WRITE์ ๋์์ธ์ง
๋ฑ๋ฑ์ผ๋ก ๊ตฌ๋ถ์ด ๋ ์ ์๋ค.
๋ง์ฝ์ DEFAULT_HEAP์ ๋ง๋ค์ด์ง๋ ๋ฆฌ์์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ์ ํ์.
๊ทธ๋ ๋ค๋ฉด CPU๋ ์ ๊ทผ ๋ถ๊ฐํ๋ค. GPU๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฆฌ์์ค์ด๋ค.
๊ทธ๋ฌ๋ฉด, ์ฌ๊ธฐ์ ์๋ ๋ฆฌ์์ค์ ์ด๊ธฐ ์ํ๋ ๋ฆฌ์์ค ์ํ ์ค์ COPY_DEST์ ์๋ฏธ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
์ COPY_DEST ์ผ๊น?
๋ฐ๋ก CPU๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ UPLOAD_HEAP์ผ๋ก COPY ํ๊ธฐ ์ํด์์ด๋ค.
๋ฐ๋ผ์ DEFAULT_HEAP์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค๋ฉด
๊ธฐ๋ณธ์ ์ผ๋ก COPY_DEST์ํ๋ก ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
UPLOAD_HEAP์ ๋ง๋ค์ด์ง๋ ๋ฆฌ์์ค๋? GPU๊ฐ ์ฝ๊ธฐ ์ํ ์ฉ๋์ด๋ค.
GPU ์ ์ฅ์์ GPU๊ฐ ์ด ๋ด์ฉ์ ๋ฐ๊ฟ ๊ฒ์์ ๋ดํฌํ๊ณ ์๋ค.
์ด๋ฒ์๋ ์ค์์ฒด์ธ์ ํ๋ฉด ๋ฒํผ์ธ ๋ ๋ํ๊ฒ ๋ฆฌ์์ค์ ๋ํด ์๊ฐํด๋ณด์.
์ด ๋ฆฌ์์ค๋ READ ์ฉ๋์ผ๊น? WRTIE ์ฉ๋์ผ๊น?
GPU ์ ์ฅ์์๋ ๋ ๋ํ๊ฒ์ WRITE๋ฅผ ํ๋ค.
์ค์ ์ฒด์ธ์ ํ๋ฉด๋ฒํผ๊ฐ READ์ ๋์์ด ๋๋ ๊ฒฝ์ฐ๋?
๋ฐ๋ก Present๋ฅผ ํ ๋์ด๋ค. Present ํ ๋๋ ๋ ๋ํ๊ฒ์ด READ ๊ฐ๋ฅํด์ผ ํ๋ค.
์ฆ, ๋ ๋ํ๊ฒ์ WRITE ์ํ๋ D3D12_RESOURCE_STATE_RENDER_TARGET ์ด๊ณ
๋ ๋ํ๊ฒ์ READ ์ํ๋ D3D12_RESOURCE_STATE_PRESENT ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๊น์ด/์คํ ์ค์ ์ํ๋?
GPU๊ฐ ๊น์ด์ ์คํ ์ค ๊ฐ์ WRTIE ํด์ผ ํ๋ฏ๋ก
D3D12_RESOURCE_STATE_DEPTH_WRITE๋ก ๋ฆฌ์์ค์ ์ํ๋ฅผ ๋ฐ๊ฟ์ค๋ค.
์ด์ ์ํ๊ฐ READ๋ ์๋๊ณ WRITE๋ ์๋ ์ํ๋ D3D12_RESOURCE_STATE_COMMON ์ด๋ค.
๋ฐ๋ผ์ ์ฒ์์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ๋ ๋ช ํํ ์ด๋ค ์ฉ๋์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด COMMON ์ํ๋ก ๋ง๋ ๋ค.
๊ทธ๋ฆฌ๊ณ ์ดํ ๋ฆฌ์์ค ์ฅ๋ฒฝ(Resource Barrier)์ ํตํด ๋ฆฌ์์ค์ ์ํ๋ฅผ ์ํฉ์ ๋ฐ๋ผ ๋ฐ๊ฟ์ฃผ์.
๋ฆฌ์์ค ์ํ๊ฐ COMMON ์ํ์์๋ ์ด๋ค GPU ๋ช ๋ น์ ์ฐ๋ฉด
์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ํ๋ก ๊ทธ ๋ช ๋ น์ด ์คํ๋๊ธฐ ์ ์ ์๋์ผ๋ก ์ํ๊ฐ ๋ฐ๋ ์ ์๋ค.
์ด๋ฅผ ์์์ ์ธ ์ํ ์ ์ด๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์ ์ด๋ค ์ฉ๋๋ก ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ์ํ ์ ์ด๋ฅผ ๋ช ํํ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
'PROGRAMMING > DirectX 12' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DirectX 12 ๋ฉํฐ ์ค๋ ๋ ๋ ๋๋ง(Multi-Thread Rendering) (3) | 2020.08.01 |
---|---|
DirectX 12 ๋ฃจํธ ์๋ช (Root Signature)๊ณผ ํ์ดํ๋ผ์ธ ์ํ(Pipeline State) (0) | 2020.08.01 |
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 |