Initialize libbullet git in 2.0_beta.
[platform/upstream/libbullet.git] / Demos / DX11ClothDemo / DXUT / Core / DXUTDevice11.h
1 //--------------------------------------------------------------------------------------\r
2 // File: DXUTDevice11.h\r
3 //\r
4 // Enumerates D3D adapters, devices, modes, etc.\r
5 //\r
6 // Copyright (c) Microsoft Corporation. All rights reserved.\r
7 //--------------------------------------------------------------------------------------\r
8 #pragma once\r
9 #ifndef DXUT_DEVICE11_H\r
10 #define DXUT_DEVICE11_H\r
11 \r
12 void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings);\r
13 \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
18 \r
19 \r
20 \r
21 \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
27 \r
28 \r
29 \r
30 \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
38 \r
39 \r
40 \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
46 {\r
47 public:\r
48     // These should be called before Enumerate(). \r
49     //\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
56     };\r
57     void SetMultisampleQualityMax( UINT nMax );\r
58     CGrowableArray<D3DFORMAT>* GetPossibleDepthStencilFormatList();\r
59     void ResetPossibleDepthStencilFormats();\r
60     void SetEnumerateAllAdapterFormats( bool bEnumerateAllAdapterFormats );\r
61     \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
66 \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
74 \r
75     ~CD3D11Enumeration();\r
76 \r
77 private:\r
78     friend HRESULT WINAPI DXUTCreateD3D11Enumeration();\r
79 \r
80     // Use DXUTGetD3D11Enumeration() to access global instance\r
81     CD3D11Enumeration();\r
82 \r
83     bool m_bHasEnumerated;\r
84     LPDXUTCALLBACKISD3D11DEVICEACCEPTABLE m_IsD3D11DeviceAcceptableFunc;\r
85     void* m_pIsD3D11DeviceAcceptableFuncUserContext;\r
86 \r
87     CGrowableArray<DXGI_FORMAT> m_DepthStencilPossibleList;\r
88 \r
89     UINT m_nMinWidth;\r
90     UINT m_nMaxWidth;\r
91     UINT m_nMinHeight;\r
92     UINT m_nMaxHeight;\r
93     UINT m_nRefreshMin;\r
94     UINT m_nRefreshMax;\r
95     UINT m_nMultisampleQualityMax;\r
96     bool m_bEnumerateAllAdapterFormats;\r
97     D3D_FEATURE_LEVEL g_forceFL;\r
98 \r
99     // Array of CD3D9EnumAdapterInfo* with unique AdapterOrdinals\r
100     CGrowableArray<CD3D11EnumAdapterInfo*> m_AdapterInfoList;\r
101 \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
106     \r
107     HRESULT EnumerateDisplayModes( CD3D11EnumOutputInfo *pOutputInfo );\r
108     void BuildMultiSampleQualityList( DXGI_FORMAT fmt, CD3D11EnumDeviceSettingsCombo* pDeviceCombo );\r
109     void ClearAdapterInfoList();\r
110 };\r
111 \r
112 CD3D11Enumeration* WINAPI DXUTGetD3D11Enumeration(bool bForceEnumerate = false, bool EnumerateAllAdapterFormats = false, D3D_FEATURE_LEVEL forceFL = ((D3D_FEATURE_LEVEL )0)  );\r
113 \r
114 \r
115 #define DXGI_MAX_DEVICE_IDENTIFIER_STRING 128\r
116 \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
122 {\r
123     const CD3D11EnumAdapterInfo &operator = ( const CD3D11EnumAdapterInfo &rhs );\r
124 \r
125 public:\r
126     ~CD3D11EnumAdapterInfo();\r
127 \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
133 \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
139 };\r
140 \r
141 \r
142 class CD3D11EnumOutputInfo\r
143 {\r
144     const CD3D11EnumOutputInfo &operator = ( const CD3D11EnumOutputInfo &rhs );\r
145 \r
146 public:\r
147     ~CD3D11EnumOutputInfo();\r
148 \r
149     UINT AdapterOrdinal;\r
150     UINT Output;\r
151     IDXGIOutput* m_pOutput;\r
152     DXGI_OUTPUT_DESC Desc;\r
153 \r
154     CGrowableArray <DXGI_MODE_DESC> displayModeList; // Array of supported D3DDISPLAYMODEs\r
155 };\r
156 \r
157 \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
163 {\r
164     const CD3D11EnumDeviceInfo& operator =( const CD3D11EnumDeviceInfo& rhs );\r
165 \r
166 public:\r
167     ~CD3D11EnumDeviceInfo();\r
168 \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
174 };\r
175 \r
176 \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
183 {\r
184     UINT AdapterOrdinal;\r
185     D3D_DRIVER_TYPE DeviceType;\r
186     DXGI_FORMAT BackBufferFormat;\r
187     BOOL Windowed;\r
188     UINT Output;\r
189 \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
192 \r
193     CD3D11EnumAdapterInfo* pAdapterInfo;\r
194     CD3D11EnumDeviceInfo* pDeviceInfo;\r
195     CD3D11EnumOutputInfo* pOutputInfo;\r
196 };\r
197 \r
198 float   DXUTRankD3D11DeviceCombo( CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo, \r
199                                  DXUTD3D11DeviceSettings* pOptimalDeviceSettings, \r
200                                  DXGI_MODE_DESC* pAdapterDisplayMode, \r
201                                  int &bestModeIndex,\r
202                                  int &bestMSAAIndex\r
203                                  );\r
204 \r
205 \r
206 \r
207 \r
208 #endif\r
209 \r
210 \r