1 //--------------------------------------------------------------------------------------
\r
2 // File: DXUTDevice11.h
\r
4 // Enumerates D3D adapters, devices, modes, etc.
\r
6 // Copyright (c) Microsoft Corporation. All rights reserved.
\r
7 //--------------------------------------------------------------------------------------
\r
9 #ifndef DXUT_DEVICE11_H
\r
10 #define DXUT_DEVICE11_H
\r
12 void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings);
\r
14 //--------------------------------------------------------------------------------------
\r
15 // Functions to get bit depth from formats
\r
16 //--------------------------------------------------------------------------------------
\r
17 HRESULT WINAPI DXUTGetD3D11AdapterDisplayMode( UINT AdapterOrdinal, UINT Output, DXGI_MODE_DESC* pModeDesc );
\r
22 //--------------------------------------------------------------------------------------
\r
23 // Optional memory create/destory functions. If not call, these will be called automatically
\r
24 //--------------------------------------------------------------------------------------
\r
25 HRESULT WINAPI DXUTCreateD3D11Enumeration();
\r
26 void WINAPI DXUTDestroyD3D11Enumeration();
\r
31 //--------------------------------------------------------------------------------------
\r
32 // Forward declarations
\r
33 //--------------------------------------------------------------------------------------
\r
34 class CD3D11EnumAdapterInfo;
\r
35 class CD3D11EnumDeviceInfo;
\r
36 class CD3D11EnumOutputInfo;
\r
37 struct CD3D11EnumDeviceSettingsCombo;
\r
41 //--------------------------------------------------------------------------------------
\r
42 // Enumerates available Direct3D10 adapters, devices, modes, etc.
\r
43 // Use DXUTGetD3D9Enumeration() to access global instance
\r
44 //--------------------------------------------------------------------------------------
\r
45 class CD3D11Enumeration
\r
48 // These should be called before Enumerate().
\r
50 // Use these calls and the IsDeviceAcceptable to control the contents of
\r
51 // the enumeration object, which affects the device selection and the device settings dialog.
\r
52 void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight );
\r
53 void SetRefreshMinMax( UINT nMin, UINT nMax );
\r
54 void SetForceFeatureLevel( D3D_FEATURE_LEVEL forceFL) {
\r
55 g_forceFL = forceFL;
\r
57 void SetMultisampleQualityMax( UINT nMax );
\r
58 CGrowableArray<D3DFORMAT>* GetPossibleDepthStencilFormatList();
\r
59 void ResetPossibleDepthStencilFormats();
\r
60 void SetEnumerateAllAdapterFormats( bool bEnumerateAllAdapterFormats );
\r
62 // Call Enumerate() to enumerate available D3D11 adapters, devices, modes, etc.
\r
63 bool HasEnumerated() { return m_bHasEnumerated; }
\r
64 HRESULT Enumerate( LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE IsD3D11DeviceAcceptableFunc,
\r
65 void* pIsD3D11DeviceAcceptableFuncUserContext );
\r
67 // These should be called after Enumerate() is called
\r
68 CGrowableArray<CD3D11EnumAdapterInfo*>* GetAdapterInfoList();
\r
69 CD3D11EnumAdapterInfo* GetAdapterInfo( UINT AdapterOrdinal );
\r
70 CD3D11EnumDeviceInfo* GetDeviceInfo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType );
\r
71 CD3D11EnumOutputInfo* GetOutputInfo( UINT AdapterOrdinal, UINT Output );
\r
72 CD3D11EnumDeviceSettingsCombo* GetDeviceSettingsCombo( DXUTD3D11DeviceSettings* pDeviceSettings ) { return GetDeviceSettingsCombo( pDeviceSettings->AdapterOrdinal, pDeviceSettings->DriverType, pDeviceSettings->Output, pDeviceSettings->sd.BufferDesc.Format, pDeviceSettings->sd.Windowed ); }
\r
73 CD3D11EnumDeviceSettingsCombo* GetDeviceSettingsCombo( UINT AdapterOrdinal, D3D_DRIVER_TYPE DeviceType, UINT Output, DXGI_FORMAT BackBufferFormat, BOOL Windowed );
\r
75 ~CD3D11Enumeration();
\r
78 friend HRESULT WINAPI DXUTCreateD3D11Enumeration();
\r
80 // Use DXUTGetD3D11Enumeration() to access global instance
\r
81 CD3D11Enumeration();
\r
83 bool m_bHasEnumerated;
\r
84 LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE m_IsD3D11DeviceAcceptableFunc;
\r
85 void* m_pIsD3D11DeviceAcceptableFuncUserContext;
\r
87 CGrowableArray<DXGI_FORMAT> m_DepthStencilPossibleList;
\r
95 UINT m_nMultisampleQualityMax;
\r
96 bool m_bEnumerateAllAdapterFormats;
\r
97 D3D_FEATURE_LEVEL g_forceFL;
\r
99 // Array of CD3D9EnumAdapterInfo* with unique AdapterOrdinals
\r
100 CGrowableArray<CD3D11EnumAdapterInfo*> m_AdapterInfoList;
\r
102 HRESULT EnumerateOutputs( CD3D11EnumAdapterInfo *pAdapterInfo );
\r
103 HRESULT EnumerateDevices( CD3D11EnumAdapterInfo *pAdapterInfo );
\r
104 HRESULT EnumerateDeviceCombos( IDXGIFactory1 *pFactory, CD3D11EnumAdapterInfo* pAdapterInfo );
\r
105 HRESULT EnumerateDeviceCombosNoAdapter( CD3D11EnumAdapterInfo* pAdapterInfo );
\r
107 HRESULT EnumerateDisplayModes( CD3D11EnumOutputInfo *pOutputInfo );
\r
108 void BuildMultiSampleQualityList( DXGI_FORMAT fmt, CD3D11EnumDeviceSettingsCombo* pDeviceCombo );
\r
109 void ClearAdapterInfoList();
\r
112 CD3D11Enumeration* WINAPI DXUTGetD3D11Enumeration(bool bForceEnumerate = false, bool EnumerateAllAdapterFormats = false, D3D_FEATURE_LEVEL forceFL = ((D3D_FEATURE_LEVEL )0) );
\r
115 #define DXGI_MAX_DEVICE_IDENTIFIER_STRING 128
\r
117 //--------------------------------------------------------------------------------------
\r
118 // A class describing an adapter which contains a unique adapter ordinal
\r
119 // that is installed on the system
\r
120 //--------------------------------------------------------------------------------------
\r
121 class CD3D11EnumAdapterInfo
\r
123 const CD3D11EnumAdapterInfo &operator = ( const CD3D11EnumAdapterInfo &rhs );
\r
126 ~CD3D11EnumAdapterInfo();
\r
128 UINT AdapterOrdinal;
\r
129 DXGI_ADAPTER_DESC AdapterDesc;
\r
130 WCHAR szUniqueDescription[DXGI_MAX_DEVICE_IDENTIFIER_STRING];
\r
131 IDXGIAdapter *m_pAdapter;
\r
132 bool bAdapterUnavailable;
\r
134 CGrowableArray<CD3D11EnumOutputInfo*> outputInfoList; // Array of CD3D11EnumOutputInfo*
\r
135 CGrowableArray<CD3D11EnumDeviceInfo*> deviceInfoList; // Array of CD3D11EnumDeviceInfo*
\r
136 // List of CD3D11EnumDeviceSettingsCombo* with a unique set
\r
137 // of BackBufferFormat, and Windowed
\r
138 CGrowableArray<CD3D11EnumDeviceSettingsCombo*> deviceSettingsComboList;
\r
142 class CD3D11EnumOutputInfo
\r
144 const CD3D11EnumOutputInfo &operator = ( const CD3D11EnumOutputInfo &rhs );
\r
147 ~CD3D11EnumOutputInfo();
\r
149 UINT AdapterOrdinal;
\r
151 IDXGIOutput* m_pOutput;
\r
152 DXGI_OUTPUT_DESC Desc;
\r
154 CGrowableArray <DXGI_MODE_DESC> displayModeList; // Array of supported D3DDISPLAYMODEs
\r
158 //--------------------------------------------------------------------------------------
\r
159 // A class describing a Direct3D10 device that contains a
\r
160 // unique supported driver type
\r
161 //--------------------------------------------------------------------------------------
\r
162 class CD3D11EnumDeviceInfo
\r
164 const CD3D11EnumDeviceInfo& operator =( const CD3D11EnumDeviceInfo& rhs );
\r
167 ~CD3D11EnumDeviceInfo();
\r
169 UINT AdapterOrdinal;
\r
170 D3D_DRIVER_TYPE DeviceType;
\r
171 D3D_FEATURE_LEVEL SelectedLevel;
\r
172 D3D_FEATURE_LEVEL MaxLevel;
\r
173 BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x;
\r
177 //--------------------------------------------------------------------------------------
\r
178 // A struct describing device settings that contains a unique combination of
\r
179 // adapter format, back buffer format, and windowed that is compatible with a
\r
180 // particular Direct3D device and the app.
\r
181 //--------------------------------------------------------------------------------------
\r
182 struct CD3D11EnumDeviceSettingsCombo
\r
184 UINT AdapterOrdinal;
\r
185 D3D_DRIVER_TYPE DeviceType;
\r
186 DXGI_FORMAT BackBufferFormat;
\r
190 CGrowableArray <UINT> multiSampleCountList; // List of valid sampling counts (multisampling)
\r
191 CGrowableArray <UINT> multiSampleQualityList; // List of number of quality levels for each multisample count
\r
193 CD3D11EnumAdapterInfo* pAdapterInfo;
\r
194 CD3D11EnumDeviceInfo* pDeviceInfo;
\r
195 CD3D11EnumOutputInfo* pOutputInfo;
\r
198 float DXUTRankD3D11DeviceCombo( CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo,
\r
199 DXUTD3D11DeviceSettings* pOptimalDeviceSettings,
\r
200 DXGI_MODE_DESC* pAdapterDisplayMode,
\r
201 int &bestModeIndex,
\r