이전 내용은 DirectX11 기반 내용을 현재 DirectX12에 맞게 검색한 뒤 작성한 내용입니다.
이후 DirectX12 책을 구매하였고, 몇가지 내용이 추가되어 그 내용을 우선 작성합니다.
---------------------------------------------------------------------------------------------------
DXGI(DirectX Graphics Infrastructure)
-
DirectX3D와 함께 쓰이는 API로 여러 그래픽 API들에 공통인 그래픽 관련 작업들이 존재한다.
-
예를 들어 SwapChain을 위한 대표적인 Interface인 IDXGISwapShain은 사실 DXGI API일부이다.
-
그 밖에 Graphic System Data의 Enumeration. 그리고 지원되는 표현 형식들도 DXGI가 제공한다.
-
IDXGIFactory
-
주로 IDXGISwapChain Interface 생성과 Display Adapter Enumeration에 쓰인다.
IDXGIAdapter
-
Display Adapter를 대표하는 Interface
Display Adapter
-
그래픽 기능성을 구현하며, 일반적으로 하드웨어 장치(ex. Graphic Card)이다.
-
하지만 하드웨어 그래픽 기능성을 흉내내는 소프트웨어 디스플레이 기능성도 존재한다.
-
-
하나의 시스템은 여러개의 Adpater를 가질 수 있다.
IDXGIOutput
-
Display Output을 담당하는 Interface.
-
DXGI_MODE_DESC 구조체에는 하나의 Display Mode를 서술하는 여러 멤버들이 있다.
typedef struct DXGI_MODE_DESC {
UINT Width;
UINT Height;
DXGI_RATIONAL RefreshRate;
DXGI_FORMAT Format;
DXGI_MODE_SCANLINE_ORDER ScanlineOrdering;
DXGI_MODE_SCALING Scaling;
} DXGI_MODE_DESC;
typedef struct DXGI_RATIONAL {
UINT Numerator;
UINT Denominator;
} DXGI_RATIONAL;
typedef enum DXGI_MODE_SCANLINE_ORDER {
DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED = 0,
DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE = 1,
DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST = 2,
DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST = 3
} DXGI_MODE_SCANLINE_ORDER;
typedef enum DXGI_MODE_SCALING {
DXGI_MODE_SCALING_UNSPECIFIED = 0,
DXGI_MODE_SCALING_CENTERED = 1,
DXGI_MODE_SCALING_STRETCHED = 2
} DXGI_MODE_SCALING;
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/bb173064(v=vs.85)
DXGI_MODE_DESC structure (Windows)
DXGI_MODE_DESC structure 05/18/2018 2 minutes to read In this article --> Describes a display mode. Syntax typedef struct DXGI_MODE_DESC { UINT Width; UINT Height; DXGI_RATIONA
docs.microsoft.com
-
이러한 Display Mode Enumeration은 전체 화면 모드로 갈 때 특히 중요하다.
-
성능을 극대화 하려면 지정된 Display Mode가 반드시 모니터가 지원하는 Display Mode와 일치해야 한다.
-
모니터가 지원하는 Display Mode들을 열거해 그 중 하나를 지정하면 이러한 일치성이 보장된다.
-
Display Output
-
모니터와 같이 화면을 출력하는 장치.
기능 지원 점검
-
ID3D12Device::CheckFeatureSupport 메서드는 Graphic Driver의 MultiSampling 지원 여부를
점검할 수 있다고 소개했다.
-
하지만 이는 CheckFeatureSupport가 확인할 수 있는 수 많은 기능들 중 하나일 뿐이다.
-
-
CheckFeatureSupport의 서명은 다음과 같다.
HRESULT CheckFeatureSupport(
D3D12_FEATURE Feature,
void *pFeatureSupportData,
UINT FeatureSupportDataSize
);
-
Feature는 이 메서드로 지원 여부를 점검할 기능들의 종류를 나타낸다.
-
pFeatureSupportData는 기능 지원 정보가 설정될 구조체를 가르키는 포인터이다.
-
이는 Feature 값에 따라 구체적인 형식이 다르다.
-
-
FeatureSupportDataSize는 pFeatureSupportData에 전달한 구조체의 크기를 나타낸다.
D3D12_FEATURE_D3D12_OPTIONS
-
Direct3D 12의 여러 기능들을 점검한다.
-
pFeatureSupportData에는 D3D12_FEATURE_DATA_D3D12_OPTIONS 인스턴스를 가르키는 포인터를 넣어야 한다.
DED12_FEATURE_ARCHITECTURE
-
Hardware Architecture 기능들을 점검한다.
-
pFeatureSupportData에 D3D12_FEATURE_DATA_ARCHITECTURE 인스턴스를 가르키는 포인터를 넣어야 한다.
D3D12_FEATURE_FEATURE_LEVELS
-
기능 수준들을 점검한다.
-
D3D12_FEATURE_DATA_FEATURE_LEVELS 인스턴스를 가리키는 포인터를 넣어야 한다.
D3D12_FEATURE_FORMAT_SUPPORT
-
주어진 Texture 형식에 대한 기능들을 점검한다.
-
D3D12_FEATURE_DATA_FORMAT_SUPPORT 인스턴스를 가르키는 포인터를 넣어야 한다.
D3D12_FEATURE_MULTICAMPLE_QUALITY_LEVELS
-
MultiSampling 기능들을 점검한다.
-
D3D12_FEATURE_DATA_MULTISAMPLING_QUALITY_LEVELS 인스턴스를 가르키는 포인터를 넣어야 한다.
상주성(Residency)
-
게임에 사용되는 모든 자원이 GPU를 필요로 하는 것은 아니다.
-
때문에 Direct3D 12의 Application은 Resource를 GPU 메모리로부터 내리거나 올려서
Residency를 관리한다.-
이러한 작업의 핵심은 GPU Memory 점유율을 최소화 하는 것이다.
-
-
성능적 측면에서 한가지 주의해야 할 점이 있다.
-
Application은 같은 자원을 짧은 시간에 GPU Memory에 넣었다 뺐다 하는 상황을 피해야 한다.
-
이러한 활동에는 비용이 따르기 때문이다.
-
-
이상적으로, 한동안 사용하지 않는 Resource들만 GPU Memory에서 내려야 한다.
-
Residency을 변경하는 대표적인 예로는 Level이나 Area가 바뀌는 시점을 들 수 있다.
-
보통은 Resource를 생성하면 GPU Memory에 올라가고, 파괴되면 Memory에서 내려간다.
-
하지만 다음 메서드들을 이용해 Application이 직접 Residency를 제어할 수 있다.
-
HRESULT ID3D12Device::MakeResident(
UINT NumObjects,
ID3D12Pageable * const *ppObjects
);
HRESULT ID3D12Device::Evict(
UINT NumObjects,
ID3D12Pageable * const *ppObjects
);
https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12device-makeresident
ID3D12Device::MakeResident (d3d12.h) - Win32 apps
Makes objects resident for the device.
docs.microsoft.com
https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12device-evict
ID3D12Device::Evict (d3d12.h) - Win32 apps
Enables the page-out of data, which precludes GPU access of that data.
docs.microsoft.com
'내용정리 > DirectX12' 카테고리의 다른 글
20.07.24 일지 (0) | 2020.07.24 |
---|---|
08. Direct3D의 초기화 - CPU와 GPU의 상호작용 (0) | 2020.07.24 |
09. 렌더링 파이프라인 2 (1) | 2020.07.14 |
09. 렌더링 파이프라인 1 (0) | 2020.07.14 |
08. Direct3D의 초기화 - 기본지식 1 (0) | 2020.07.13 |