7 #ifndef _INC_cDXEnumeration_H
8 #define _INC_cDXEnumeration_H
34 enum VertexProcessing_TYPE
38 VertexProcessing_SOFTWARE,
39 VertexProcessing_MIXED,
40 VertexProcessing_HARDWARE,
41 VertexProcessing_PURE_HARDWARE,
54 static DWORD
GRAYCALL GetDeviceCreateFlags(VertexProcessing_TYPE eVertexProcessingType);
57 static const D3DFORMAT k_aeFormatAllowedAdapterList[];
61 typedef cPair<D3DFORMAT, D3DMULTISAMPLE_TYPE> cDXEnumDSMSConflict;
64 class GRAY3D_LINK cDXEnumCombo :
public cRefBase,
public cDXEnumBase
71 cDXEnumDevice*
const m_pDevice;
74 bool m_bFullScreenMode;
76 cArrayVal<D3DFORMAT> m_aDepthStencilFormatList;
77 cArrayVal<D3DMULTISAMPLE_TYPE> m_aMultiSampleTypeList;
78 cArrayVal<DWORD> m_aMultiSampleQualityList;
79 cArrayVal<cDXEnumDSMSConflict> m_aDSMSConflictList;
80 cArrayVal<VertexProcessing_TYPE> m_aVertexProcessingTypeList;
81 cArrayVal<UINT> m_aPresentIntervalList;
84 cDXEnumCombo(cDXEnumDevice* pDevice,
D3DFORMAT eFormatAdapter,
D3DFORMAT eFormatBackBuffer,
bool bFullScreenMode);
87 cDXEnumDevice* get_Device() const noexcept
91 cDXEnumAdapter* get_Adapter()
const;
92 UINT get_AdapterOrdinal()
const;
94 bool isFullscreen() const noexcept
96 return m_bFullScreenMode;
99 void BuildDSMSConflictList(IDirect3D9* pD3D);
100 void BuildMultiSampleTypeList(IDirect3D9* pD3D);
101 void BuildDepthStencilFormatList(
const cDXEnumeration& rEnum);
103 void BuildVertexProcessingTypeList(
const cDXEnumeration& rEnum,
const D3DCAPS9& Caps);
104 void BuildPresentIntervalList(
const D3DCAPS9& Caps);
107 typedef cRefPtr<cDXEnumCombo> cDXEnumComboPtr;
110 class GRAY3D_LINK cDXEnumDevice :
public cRefBase,
public cDXEnumBase
116 cDXEnumAdapter*
const m_pAdapter;
119 cArrayRef<cDXEnumCombo> m_aDeviceComboList;
122 cDXEnumDevice(cDXEnumAdapter* pAdapter,
D3DDEVTYPE eDevType,
const D3DCAPS9& Caps);
123 ~cDXEnumDevice(
void);
125 cDXEnumAdapter* get_Adapter() const noexcept
130 UINT get_AdapterOrdinal()
const;
131 bool isPureHardware()
const;
132 HRESULT EnumerateDeviceCombos(
const cDXEnumeration& rEnum,
const cArrayVal<D3DFORMAT>& aAdapterFormats);
135 typedef cRefPtr<cDXEnumDevice> cDXEnumDevicePtr;
138 class GRAY3D_LINK cDXEnumAdapter :
public cRefBase,
public cDXEnumBase
144 const UINT m_nAdapterOrdinal;
145 D3DADAPTER_IDENTIFIER9 m_AdapterIdentifier;
146 cArraySortVal<D3DDISPLAYMODE> m_aDisplayModes;
147 cRefPtr<cDXEnumDevice> m_aDeviceInfoList[VertexProcessing_QTY];
150 cDXEnumAdapter(UINT nAdapterOrdinal,
const D3DADAPTER_IDENTIFIER9& AdapterIdentifier);
151 ~cDXEnumAdapter(
void);
153 void EnumerateAdapterFormats(
const cDXEnumeration& rEnum, cArrayVal<D3DFORMAT>& aAdapterFormats);
154 HRESULT EnumerateDevices(
const cDXEnumeration& rEnum,
const cArrayVal<D3DFORMAT>& aAdapterFormats);
158 return cString(this->m_AdapterIdentifier.Description,
STRMAX(this->m_AdapterIdentifier.Description));
162 typedef cRefPtr<cDXEnumAdapter> cDXEnumAdapterPtr;
171 cIUnkPtr<IDirect3D9> m_pD3D;
177 UINT m_AppMinDepthBits;
178 UINT m_AppMinStencilBits;
179 bool m_bEnableAutoDepthStencil;
180 bool m_AppUsesMixedVP;
182 bool m_AppRequiresWindowed;
183 bool m_AppRequiresFullScreen;
185 UINT m_AppMinFullScreenWidth;
186 UINT m_AppMinFullScreenHeight;
187 UINT m_AppMinColorChannelBits;
188 UINT m_AppMinAlphaChannelBits;
191 cArrayRef<cDXEnumAdapter> m_aAdapterInfoList;
192 bool m_bDetectedNVidia;
193 bool m_bDetectedNVidiaDebug;
196 cDXEnumeration(IDirect3D9* pD3D =
nullptr);
199 cDXEnumComboPtr FindWindowedCombo(
const D3DDISPLAYMODE& DisplayMode,
bool bRequireREF =
false)
const;
201 virtual bool IsVertexProcessingAllowed(VertexProcessing_TYPE eVertexProcessingType,
const D3DCAPS9& Caps,
const cDXEnumCombo* pDeviceCombo)
const;
203 HRESULT EnumerateAdapter(UINT nAdapterOrdinal = 0);
#define GRAY3D_LINK
Definition: Gray3D.h:15
#define GRAYCALL
declare calling convention for static functions so everyone knows the arg passing scheme....
Definition: GrayCore.h:36
#define STRMAX(x)
Get Max size of static string space. minus the '\0' terminator character.
Definition: StrConst.h:33
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
D3DDEVTYPE
Definition: UseDX.h:318
enum _D3DFORMAT D3DFORMAT
int COMPARE_t
Definition: cKernel.h:38
#define UNITTEST_FRIEND(n)
Define this in the class body to be unit tested. Allow the unit test to access private/protected stuf...
Definition: cUnitTestDecl.h:17
Definition: Gray3D.cpp:12
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
cStringT< GChar_t > cString
Definition: cString.h:636