DirectX 11.2 Tiled Resources Enables Optimized PC Gaming Experiences
In this blog post, Matt Sandy from the Direct3D team explains how new PC games for Windows 8.1 will get better and more efficiently utilize GPU resources because of a new feature in DirectX 11.2 called Tiled Resources. As part of Windows 8.1, the latest ve
blogs.windows.com
GPU의 메모리는 CPU 메모리에 비해 더 한정 적인다. 그렇기에 GPU 메모리를 줄이기 위해 텍스처를 압축하여 사용하는등 여러 방식으로 개발이 되어왔다. 하지만 그럼에도 2K, 4K 텍스처를 남발 할 수 없다.
DIrectx11에서 지원하는 Texture2D의 경우 최대 16284 픽셀의 높이와 넓이를 지원한다. 이 텍스처를 GPU에 로딩을 하는것 만으로도 1GB의 메모리를 할당 해야한다. 그런데 생각을 해보면 이 16K 텍스처를 모두 GPU 메모리에 올릴 필요는 없다.
먼저 한 장면을 그린다고 가정을 해보자. 그 중에는 실제로 사용이 되지 않는 텍스처가 있거나 장면에서 보이는 텍스처라도 텍스처의 모든 구역이 보이지 않는것이 태반이다. 그렇기에 텍스처를 여러 블록으로 나누고 현재 장면에서 보이는 블록을 어딘가에 기록을 해놓은 다음 cpu에서 필요한 텍스처와 필요한 블록만 알아 낼 수만 있다면 해당 블록을 GPU메모리에 올리면된다.
GPU 메모리에 올려야하는 텍스처를 고르기 위해서는 일단 한번 렌더링을 해야 텍스처를 고를 수가 있는데 그런데 만약 아직 GPU 메모리에 올라오지 않은 텍스처 블록을 그리게 될 경우가 문제가 된다. 이를 보완하기 위해 타일형 텍스처의 경우에는 비매핑된 구역을 셰이더에서 Page Fault 상태를 알 수 있다. 샘플링을 하게 되면 SRV의 경우에는 필터링 작업에 형식의 모든 누락되지 않은 구성 요소에 대해 0 기여한다.
타일형 리소스 기능 계층 - Win32 apps | Microsoft Learn
타일형 리소스 기능 계층 - Win32 apps
Direct3D 11.2는 D3D11\_TILED\_RESOURCES\_TIER 값을 사용하여 두 계층에서 타일화된 리소스 지원을 노출합니다.
learn.microsoft.com
기능 수준에 따른 설명은 MSDN에 잘 나와있다.
Tier 1의 경우에는 동작이 정의 되어있지 않고
Tier 2의 경우에는 검은색으로 나온다.
타일형 리소스를 만드는 방법은 텍스처를 만들때 Misc flag에 타일형 리소스를 사용하겠다고 옵션을 주면 된다.
D3D11_RESOURCE_MISC_TILED
타일 풀에서 사용되는 한 타일의 크기는 64kb를 매핑 할 수 있다. R8G8B8A8_FLOAT를 사용한다고하면 128 x 128 이 한 블록의 크기가 된다. 블록 압축을 한 BC3 포맷을 사용한다고 하면 256 x 256 이 한 블록의 크기가 된다.
비트 / 픽셀 | 타일 크기 |
8 | 256x256 |
16 | 256x128 |
32 | 128x128 |
64 | 128x64 |
128 | 64x64 |
BC1, BC4 | 512x256 |
BC2, BC3, BC5, BC6, BC7 | 256x256 |
BC3 포맷을 기준으로 보면 512 해상도를 0 밉맵 레벨로 생성한 텍스처의 경우 4개의 블록를 가지게 된다. 그리고 1 밉맵 레벨은 1개의 블록가진다, 그런데 만약 128 x 128 해상도 아래의 밉맵의 경우에는 64kb의 크기의 타일에 넣어도 공간이 많이 남게된다. 그렇기에 2~9의 밉맵 레벨은 하나의 블록에 다 들어갈 수 있다. 이를 Packing 된 밉맵으로 패킹된 밉맵의 타일을 업데이트 할경우에는 타일풀을 할당 한 후에 UpdateSubresource를 사용하여 일반 텍스처와 동일한 방식으로 데이터를 전송한다.
'DirectX11' 카테고리의 다른 글
Tiled Resources (2) (0) | 2023.07.11 |
---|---|
Texture Compression(Block Compression) (0) | 2023.06.27 |
GPU Instancing (0) | 2023.06.22 |
Voxel GI - Cone Tracing (0) | 2023.05.25 |
Voxel GI - Voxelize (0) | 2023.05.25 |