summaryrefslogtreecommitdiff
path: root/demo/common/DXUTDevice9.h
diff options
context:
space:
mode:
authorJason Maskell <[email protected]>2016-05-09 10:39:54 +0200
committerJason Maskell <[email protected]>2016-05-09 10:39:54 +0200
commit79b3462799c28af8ba586349bd671b1b56e72353 (patch)
tree3b06e36c390254c0dc7f3733a0d32af213d87293 /demo/common/DXUTDevice9.h
downloadwaveworks_archive-79b3462799c28af8ba586349bd671b1b56e72353.tar.xz
waveworks_archive-79b3462799c28af8ba586349bd671b1b56e72353.zip
Initial commit with PS4 and XBone stuff trimmed.
Diffstat (limited to 'demo/common/DXUTDevice9.h')
-rw-r--r--demo/common/DXUTDevice9.h207
1 files changed, 207 insertions, 0 deletions
diff --git a/demo/common/DXUTDevice9.h b/demo/common/DXUTDevice9.h
new file mode 100644
index 0000000..26b6d5d
--- /dev/null
+++ b/demo/common/DXUTDevice9.h
@@ -0,0 +1,207 @@
+//--------------------------------------------------------------------------------------
+// File: DXUTDevice9.h
+//
+// Enumerates D3D adapters, devices, modes, etc.
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//--------------------------------------------------------------------------------------
+#pragma once
+#ifndef DXUT_DEVICE9_H
+#define DXUT_DEVICE9_H
+
+//void DXUTApplyDefaultDeviceSettings(DXUTDeviceSettings *modifySettings);
+
+//--------------------------------------------------------------------------------------
+// Functions to get bit depth from formats
+//--------------------------------------------------------------------------------------
+UINT WINAPI DXUTGetD3D9ColorChannelBits( D3DFORMAT fmt );
+UINT WINAPI DXUTGetAlphaChannelBits( D3DFORMAT fmt );
+UINT WINAPI DXUTGetStencilBits( D3DFORMAT fmt );
+UINT WINAPI DXUTGetDepthBits( D3DFORMAT fmt );
+UINT WINAPI DXUTGetDXGIColorChannelBits( DXGI_FORMAT fmt );
+
+
+//--------------------------------------------------------------------------------------
+// Forward declarations
+//--------------------------------------------------------------------------------------
+
+class CD3D9EnumAdapterInfo;
+class CD3D9EnumDeviceInfo;
+struct CD3D9EnumDeviceSettingsCombo;
+struct CD3D9EnumDSMSConflict;
+
+
+
+
+
+//--------------------------------------------------------------------------------------
+// Optional memory create/destory functions. If not call, these will be called automatically
+//--------------------------------------------------------------------------------------
+HRESULT WINAPI DXUTCreateD3D9Enumeration();
+void WINAPI DXUTDestroyD3D9Enumeration();
+
+
+
+//--------------------------------------------------------------------------------------
+// Enumerates available Direct3D9 adapters, devices, modes, etc.
+// Use DXUTGetD3D9Enumeration() to access global instance
+//--------------------------------------------------------------------------------------
+class CD3D9Enumeration
+{
+public:
+ // These should be called before Enumerate().
+ //
+ // Use these calls and the IsDeviceAcceptable to control the contents of
+ // the enumeration object, which affects the device selection and the device settings dialog.
+ void SetRequirePostPixelShaderBlending( bool bRequire ) { m_bRequirePostPixelShaderBlending = bRequire; }
+ void SetResolutionMinMax( UINT nMinWidth, UINT nMinHeight, UINT nMaxWidth, UINT nMaxHeight );
+ void SetRefreshMinMax( UINT nMin, UINT nMax );
+ void SetMultisampleQualityMax( UINT nMax );
+ void GetPossibleVertexProcessingList( bool* pbSoftwareVP, bool* pbHardwareVP, bool* pbPureHarewareVP, bool* pbMixedVP );
+ void SetPossibleVertexProcessingList( bool bSoftwareVP, bool bHardwareVP, bool bPureHarewareVP, bool bMixedVP );
+ CGrowableArray<D3DFORMAT>* GetPossibleDepthStencilFormatList();
+ CGrowableArray<D3DMULTISAMPLE_TYPE>* GetPossibleMultisampleTypeList();
+ CGrowableArray<UINT>* GetPossiblePresentIntervalList();
+ void ResetPossibleDepthStencilFormats();
+ void ResetPossibleMultisampleTypeList();
+ void ResetPossiblePresentIntervalList();
+
+ // Call Enumerate() to enumerate available D3D adapters, devices, modes, etc.
+ bool HasEnumerated() { return m_bHasEnumerated; }
+ HRESULT Enumerate( LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE IsD3D9DeviceAcceptableFunc = NULL,
+ void* pIsD3D9DeviceAcceptableFuncUserContext = NULL );
+
+ // These should be called after Enumerate() is called
+ CGrowableArray<CD3D9EnumAdapterInfo*>* GetAdapterInfoList();
+ CD3D9EnumAdapterInfo* GetAdapterInfo( UINT AdapterOrdinal );
+ CD3D9EnumDeviceInfo* GetDeviceInfo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType );
+ CD3D9EnumDeviceSettingsCombo* GetDeviceSettingsCombo( DXUTD3D9DeviceSettings* pD3D9DeviceSettings ) { return GetDeviceSettingsCombo( pD3D9DeviceSettings->AdapterOrdinal, pD3D9DeviceSettings->DeviceType, pD3D9DeviceSettings->AdapterFormat, pD3D9DeviceSettings->pp.BackBufferFormat, pD3D9DeviceSettings->pp.Windowed ); }
+ CD3D9EnumDeviceSettingsCombo* GetDeviceSettingsCombo( UINT AdapterOrdinal, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL Windowed );
+
+ ~CD3D9Enumeration();
+
+private:
+ friend HRESULT WINAPI DXUTCreateD3D9Enumeration();
+
+ // Use DXUTGetD3D9Enumeration() to access global instance
+ CD3D9Enumeration();
+
+ bool m_bHasEnumerated;
+ IDirect3D9* m_pD3D;
+ LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE m_IsD3D9DeviceAcceptableFunc;
+ void* m_pIsD3D9DeviceAcceptableFuncUserContext;
+ bool m_bRequirePostPixelShaderBlending;
+ CGrowableArray<D3DFORMAT> m_DepthStencilPossibleList;
+ CGrowableArray<D3DMULTISAMPLE_TYPE> m_MultiSampleTypeList;
+ CGrowableArray<UINT> m_PresentIntervalList;
+
+ bool m_bSoftwareVP;
+ bool m_bHardwareVP;
+ bool m_bPureHarewareVP;
+ bool m_bMixedVP;
+
+ UINT m_nMinWidth;
+ UINT m_nMaxWidth;
+ UINT m_nMinHeight;
+ UINT m_nMaxHeight;
+ UINT m_nRefreshMin;
+ UINT m_nRefreshMax;
+ UINT m_nMultisampleQualityMax;
+
+ // Array of CD3D9EnumAdapterInfo* with unique AdapterOrdinals
+ CGrowableArray<CD3D9EnumAdapterInfo*> m_AdapterInfoList;
+
+ HRESULT EnumerateDevices( CD3D9EnumAdapterInfo* pAdapterInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList );
+ HRESULT EnumerateDeviceCombos( CD3D9EnumAdapterInfo* pAdapterInfo, CD3D9EnumDeviceInfo* pDeviceInfo, CGrowableArray<D3DFORMAT>* pAdapterFormatList );
+ void BuildDepthStencilFormatList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo );
+ void BuildMultiSampleTypeList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo );
+ void BuildDSMSConflictList( CD3D9EnumDeviceSettingsCombo* pDeviceCombo );
+ void BuildPresentIntervalList( CD3D9EnumDeviceInfo* pDeviceInfo, CD3D9EnumDeviceSettingsCombo* pDeviceCombo );
+ void ClearAdapterInfoList();
+};
+
+CD3D9Enumeration* WINAPI DXUTGetD3D9Enumeration( bool bForceEnumerate = false );
+
+
+//--------------------------------------------------------------------------------------
+// A class describing an adapter which contains a unique adapter ordinal
+// that is installed on the system
+//--------------------------------------------------------------------------------------
+class CD3D9EnumAdapterInfo
+{
+public:
+ ~CD3D9EnumAdapterInfo();
+
+ UINT AdapterOrdinal;
+ D3DADAPTER_IDENTIFIER9 AdapterIdentifier;
+ WCHAR szUniqueDescription[256];
+
+ CGrowableArray <D3DDISPLAYMODE> displayModeList; // Array of supported D3DDISPLAYMODEs
+ CGrowableArray <CD3D9EnumDeviceInfo*> deviceInfoList; // Array of CD3D9EnumDeviceInfo* with unique supported DeviceTypes
+};
+
+
+//--------------------------------------------------------------------------------------
+// A class describing a Direct3D device that contains a
+// unique supported device type
+//--------------------------------------------------------------------------------------
+class CD3D9EnumDeviceInfo
+{
+public:
+ ~CD3D9EnumDeviceInfo();
+
+ UINT AdapterOrdinal;
+ D3DDEVTYPE DeviceType;
+ D3DCAPS9 Caps;
+
+ // List of CD3D9EnumDeviceSettingsCombo* with a unique set
+ // of AdapterFormat, BackBufferFormat, and Windowed
+ CGrowableArray <CD3D9EnumDeviceSettingsCombo*> deviceSettingsComboList;
+};
+
+
+//--------------------------------------------------------------------------------------
+// A struct describing device settings that contains a unique combination of
+// adapter format, back buffer format, and windowed that is compatible with a
+// particular Direct3D device and the app.
+//--------------------------------------------------------------------------------------
+struct CD3D9EnumDeviceSettingsCombo
+{
+ UINT AdapterOrdinal;
+ D3DDEVTYPE DeviceType;
+ D3DFORMAT AdapterFormat;
+ D3DFORMAT BackBufferFormat;
+ BOOL Windowed;
+
+ CGrowableArray <D3DFORMAT> depthStencilFormatList; // List of D3DFORMATs
+ CGrowableArray <D3DMULTISAMPLE_TYPE> multiSampleTypeList; // List of D3DMULTISAMPLE_TYPEs
+ CGrowableArray <DWORD> multiSampleQualityList; // List of number of quality levels for each multisample type
+ CGrowableArray <UINT> presentIntervalList; // List of D3DPRESENT flags
+ CGrowableArray <CD3D9EnumDSMSConflict> DSMSConflictList; // List of CD3D9EnumDSMSConflict
+
+ CD3D9EnumAdapterInfo* pAdapterInfo;
+ CD3D9EnumDeviceInfo* pDeviceInfo;
+};
+
+
+//--------------------------------------------------------------------------------------
+// A depth/stencil buffer format that is incompatible with a
+// multisample type.
+//--------------------------------------------------------------------------------------
+struct CD3D9EnumDSMSConflict
+{
+ D3DFORMAT DSFormat;
+ D3DMULTISAMPLE_TYPE MSType;
+};
+
+
+
+float DXUTRankD3D9DeviceCombo( CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo,
+ DXUTD3D9DeviceSettings* pOptimalDeviceSettings,
+ D3DDISPLAYMODE* pAdapterDesktopDisplayMode,
+ int &bestModeIndex,
+ int &bestMSAAIndex
+ );
+
+
+#endif