18#define D3D9_CAPS1 (D3DCAPS_READ_SCANLINE)
19#define D3D9_PRE_XP_CAPS2 (D3DCAPS2_CANAUTOGENMIPMAP | D3DCAPS2_DYNAMICTEXTURES | D3DCAPS2_RESERVED | D3DCAPS2_FULLSCREENGAMMA)
20#define D3D9_XP_OR_LATER_CAPS2 (D3D9_PRE_XP_CAPS2 | D3DCAPS2_CANMANAGERESOURCE)
21#define D3D9_CAPS3 (D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD | D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION | D3DCAPS3_COPY_TO_VIDMEM | D3DCAPS3_COPY_TO_SYSTEMMEM)
22#define D3D9_DEVCAPS (D3DDEVCAPS_EXECUTESYSTEMMEMORY | D3DDEVCAPS_EXECUTEVIDEOMEMORY | D3DDEVCAPS_TLVERTEXSYSTEMMEMORY \
23 | D3DDEVCAPS_TLVERTEXVIDEOMEMORY | D3DDEVCAPS_TEXTURESYSTEMMEMORY | D3DDEVCAPS_TEXTUREVIDEOMEMORY \
24 | D3DDEVCAPS_DRAWPRIMTLVERTEX | D3DDEVCAPS_CANRENDERAFTERFLIP | D3DDEVCAPS_TEXTURENONLOCALVIDMEM \
25 | D3DDEVCAPS_DRAWPRIMITIVES2 | D3DDEVCAPS_SEPARATETEXTUREMEMORIES | D3DDEVCAPS_DRAWPRIMITIVES2EX \
26 | D3DDEVCAPS_HWTRANSFORMANDLIGHT | D3DDEVCAPS_CANBLTSYSTONONLOCAL | D3DDEVCAPS_HWRASTERIZATION \
27 | D3DDEVCAPS_PUREDEVICE | D3DDEVCAPS_QUINTICRTPATCHES | D3DDEVCAPS_RTPATCHES | D3DDEVCAPS_RTPATCHHANDLEZERO \
28 | D3DDEVCAPS_NPATCHES)
30#define D3DCAPS2_PRESENT_INTERVAL_SEVERAL 0x00200000
31#define D3DCAPS2_PRESENT_INTERVAL_IMMEDIATE 0x00400000
33#define D3DVTXPCAPS_FOGVERTEX 0x00000004
59 pIdentifier->
Driver[DriverNameLength] =
'\0';
75 PVOID OldWow64RedirectValue;
87 fnDisableWow64FsRedirection(&OldWow64RedirectValue);
92 if (DriverFileSize > 0)
113 fnRevertWow64FsRedirection(&OldWow64RedirectValue);
120 const char* ResultStr;
121 ResultStr =
strstr(lpszDeviceKey, lpszSubString);
122 if (ResultStr !=
NULL)
142 dwIdentifier[0] ^= pIdentifier->
VendorId;
143 dwIdentifier[1] ^= pIdentifier->
DeviceId;
144 dwIdentifier[2] ^= pIdentifier->
SubSysId;
145 dwIdentifier[3] ^= pIdentifier->
Revision;
154 BOOL FoundDisplayDevice;
160 FoundDisplayDevice =
FALSE;
165 FoundDisplayDevice =
TRUE;
173 if (
FALSE == FoundDisplayDevice)
209 *pDstCaps = *pSrcCaps;
262 DPRINT1(
"Unknown DeviceType argument");
266 if (pDriverCaps !=
NULL)
303 if (
NULL == pBitmapInfo)
386 lpAdapterMonitor->
hMonitor = hMonitor;
408 UINT DisplayModeIndex;
409 UINT FormatIndex = 0;
411 for (DisplayModeIndex = 0; DisplayModeIndex < NumDisplayModes; DisplayModeIndex++)
413 if (pSupportedDisplayModes[DisplayModeIndex].
Format ==
Format)
424 UINT DisplayModeIndex;
425 UINT FormatIndex = 0;
427 for (DisplayModeIndex = 0; DisplayModeIndex < NumDisplayModes; DisplayModeIndex++)
429 if (pSupportedDisplayModes[DisplayModeIndex].
Format ==
Format)
431 if (ModeIndex == FormatIndex)
432 return &pSupportedDisplayModes[DisplayModeIndex];
438 if (FormatIndex == 0)
440 DPRINT1(
"No modes with the specified format found");
442 else if (FormatIndex < ModeIndex)
char * strstr(char *String1, char *String2)
ACPI_SIZE strlen(const char *String)
#define RegCloseKey(hKey)
#define D3DPRESENT_INTERVAL_THREE
#define D3DPRESENT_INTERVAL_TWO
#define D3DPRESENT_INTERVAL_FOUR
#define D3DPRESENT_INTERVAL_IMMEDIATE
#define D3DPRESENT_INTERVAL_ONE
#define D3DPRASTERCAPS_FOGVERTEX
enum _D3DDEVTYPE D3DDEVTYPE
#define MAX_DEVICE_IDENTIFIER_STRING
enum _D3DFORMAT D3DFORMAT
HRESULT SafeAppendString(IN OUT LPSTR Dst, IN DWORD DstSize, IN LPCSTR Src)
BOOL GetAdapterInfo(LPCSTR lpszDeviceName, D3DADAPTER_IDENTIFIER9 *pIdentifier)
static BOOL CALLBACK AdapterMonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
BOOL GetAdapterMode(LPCSTR lpszDeviceName, D3DDISPLAYMODE *pMode)
BOOL(WINAPI * LPFN_REVERTWOW64FSREDIRECTION)(PVOID)
static BOOL GetDriverName(LPDISPLAY_DEVICEA pDisplayDevice, D3DADAPTER_IDENTIFIER9 *pIdentifier)
#define D3DCAPS2_PRESENT_INTERVAL_IMMEDIATE
const D3DDISPLAYMODE * FindDisplayFormat(D3DFORMAT Format, UINT ModeIndex, const D3DDISPLAYMODE *pSupportedDisplayModes, UINT NumDisplayModes)
static void ParseField(LPCSTR lpszDeviceKey, LPDWORD pField, LPCSTR lpszSubString)
static void GenerateDeviceIdentifier(D3DADAPTER_IDENTIFIER9 *pIdentifier)
struct _ADAPTERMONITOR ADAPTERMONITOR
static void GetDriverVersion(LPDISPLAY_DEVICEA pDisplayDevice, D3DADAPTER_IDENTIFIER9 *pIdentifier)
BOOL(WINAPI * LPFN_ISWOW64PROCESS)(HANDLE, PBOOL)
#define D3DVTXPCAPS_FOGVERTEX
HRESULT GetAdapterCaps(const LPDIRECT3D9_DISPLAYADAPTER pDisplayAdapter, D3DDEVTYPE DeviceType, D3DCAPS9 *pDstCaps)
#define D3D9_XP_OR_LATER_CAPS2
static BOOL IsWindowsXPorLaterCompatible()
static void CopyDriverCaps(const D3DCAPS9 *pSrcCaps, D3DCAPS9 *pDstCaps)
static void GetDeviceId(LPCSTR lpszDeviceKey, D3DADAPTER_IDENTIFIER9 *pIdentifier)
UINT GetDisplayFormatCount(D3DFORMAT Format, const D3DDISPLAYMODE *pSupportedDisplayModes, UINT NumDisplayModes)
#define D3D9_PRE_XP_CAPS2
BOOL(WINAPI * LPFN_DISABLEWOW64FSREDIRECTION)(PVOID *)
HMONITOR GetAdapterMonitor(LPCSTR lpszDeviceName)
struct _ADAPTERMONITOR * LPADAPTERMONITOR
#define D3DCAPS2_PRESENT_INTERVAL_SEVERAL
static D3DFORMAT Get16BitD3DFormat(LPCSTR lpszDeviceName)
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
#define GetProcAddress(x, y)
#define GetCurrentProcess()
#define HeapFree(x, y, z)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
BOOL WINAPI GetVersionExA(IN LPOSVERSIONINFOA lpVersionInformation)
DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR filename, LPDWORD handle)
BOOL WINAPI VerQueryValueA(LPCVOID pBlock, LPCSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
BOOL WINAPI GetFileVersionInfoA(LPCSTR filename, DWORD handle, DWORD datasize, LPVOID data)
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
static HANDLE ULONG_PTR dwData
#define D3DERR_INVALIDDEVICE
char Driver[MAX_DEVICE_IDENTIFIER_STRING]
char Description[MAX_DEVICE_IDENTIFIER_STRING]
LARGE_INTEGER DriverVersion
DWORD VertexProcessingCaps
UINT MasterAdapterOrdinal
UINT AdapterOrdinalInGroup
DWORD PresentationIntervals
UINT NumberOfAdaptersInGroup
DWORD AdapterIndexInGroup
D3D9_DRIVERCAPS DriverCaps
ULONG dwOSVersionInfoSize
BITMAPINFOHEADER bmiHeader
CHAR szDevice[CCHDEVICENAME]
BOOL WINAPI EnumDisplayDevicesA(LPCSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEA lpDisplayDevice, DWORD dwFlags)
BOOL WINAPI EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEA lpDevMode)
int WINAPI GetDIBits(_In_ HDC hdc, _In_ HBITMAP hbm, _In_ UINT start, _In_ UINT cLines, _Out_opt_ LPVOID lpvBits, _At_((LPBITMAPINFOHEADER) lpbmi, _Inout_) LPBITMAPINFO lpbmi, _In_ UINT usage)
HDC WINAPI CreateDCA(_In_opt_ LPCSTR pszDriver, _In_opt_ LPCSTR pszDevice, _In_opt_ LPCSTR pszOutput, _In_opt_ const DEVMODEA *pdmInit)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
struct _DISPLAY_DEVICEA DISPLAY_DEVICEA
struct _devicemodeA DEVMODEA
BOOL WINAPI DeleteDC(_In_ HDC)
#define HKEY_LOCAL_MACHINE
struct tagMONITORINFOEXA MONITORINFOEXA
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
#define ENUM_CURRENT_SETTINGS
BOOL WINAPI GetMonitorInfoA(_In_ HMONITOR, _Inout_ LPMONITORINFO)
struct _OSVERSIONINFOA OSVERSIONINFOA