ReactOS  0.4.13-dev-79-gcd489d8
adapter.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS ReactX
4  * FILE: dll/directx/d3d9/adapter.c
5  * PURPOSE: d3d9.dll adapter info functions
6  * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se>
7  */
8 
9 #include "d3d9_common.h"
10 #include <d3d9.h>
11 #include <ddraw.h>
12 #include <debug.h>
13 #include <d3dhal.h>
14 #include "d3d9_private.h"
15 #include "d3d9_helpers.h"
16 #include "adapter.h"
17 
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)
29 
30 #define D3DCAPS2_PRESENT_INTERVAL_SEVERAL 0x00200000
31 #define D3DCAPS2_PRESENT_INTERVAL_IMMEDIATE 0x00400000
32 
33 #define D3DVTXPCAPS_FOGVERTEX 0x00000004
34 
38 
39 
40 typedef struct _ADAPTERMONITOR
41 {
45 
46 
47 static BOOL GetDriverName(LPDISPLAY_DEVICEA pDisplayDevice, D3DADAPTER_IDENTIFIER9* pIdentifier)
48 {
49  HKEY hKey;
50  BOOL bResult = FALSE;
51 
52  if (ERROR_SUCCESS == RegOpenKeyExA(HKEY_LOCAL_MACHINE, pDisplayDevice->DeviceKey + strlen("\\Registry\\Machine\\"), 0, KEY_QUERY_VALUE, &hKey))
53  {
54  DWORD DriverNameLength = MAX_DEVICE_IDENTIFIER_STRING - (DWORD)strlen(".dll");
55  DWORD Type = 0;
56 
57  if (ERROR_SUCCESS == RegQueryValueExA(hKey, "InstalledDisplayDrivers", 0, &Type, (LPBYTE)pIdentifier->Driver, &DriverNameLength))
58  {
59  pIdentifier->Driver[DriverNameLength] = '\0';
61  bResult = TRUE;
62  }
63 
64  RegCloseKey(hKey);
65  }
66 
67  return bResult;
68 }
69 
70 static void GetDriverVersion(LPDISPLAY_DEVICEA pDisplayDevice, D3DADAPTER_IDENTIFIER9* pIdentifier)
71 {
73  LPFN_ISWOW64PROCESS fnIsWow64Process;
74  BOOL bIsWow64 = FALSE;
75  PVOID OldWow64RedirectValue;
76  UINT DriverFileSize;
77 
78  hModule = GetModuleHandleA("KERNEL32");
79  fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(hModule, "IsWow64Process");
80  if (fnIsWow64Process)
81  {
82  fnIsWow64Process(GetCurrentProcess(), &bIsWow64);
83  if (bIsWow64)
84  {
85  LPFN_DISABLEWOW64FSREDIRECTION fnDisableWow64FsRedirection;
86  fnDisableWow64FsRedirection = (LPFN_DISABLEWOW64FSREDIRECTION)GetProcAddress(hModule, "Wow64DisableWow64FsRedirection");
87  fnDisableWow64FsRedirection(&OldWow64RedirectValue);
88  }
89  }
90 
91  DriverFileSize = GetFileVersionInfoSizeA(pIdentifier->Driver, NULL);
92  if (DriverFileSize > 0)
93  {
94  VS_FIXEDFILEINFO* FixedFileInfo = NULL;
95  LPVOID pBlock = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, DriverFileSize);
96 
97  if (TRUE == GetFileVersionInfoA(pIdentifier->Driver, 0, DriverFileSize, pBlock))
98  {
99  if (TRUE == VerQueryValueA(pBlock, "\\", (LPVOID*)&FixedFileInfo, &DriverFileSize))
100  {
101  pIdentifier->DriverVersion.HighPart = FixedFileInfo->dwFileVersionMS;
102  pIdentifier->DriverVersion.LowPart = FixedFileInfo->dwFileVersionLS;
103  }
104  }
105 
106  HeapFree(GetProcessHeap(), 0, pBlock);
107  }
108 
109  if (bIsWow64)
110  {
111  LPFN_REVERTWOW64FSREDIRECTION fnRevertWow64FsRedirection;
112  fnRevertWow64FsRedirection = (LPFN_REVERTWOW64FSREDIRECTION)GetProcAddress(hModule, "Wow64RevertWow64FsRedirection");
113  fnRevertWow64FsRedirection(&OldWow64RedirectValue);
114  }
115 }
116 
117 
118 static void ParseField(LPCSTR lpszDeviceKey, LPDWORD pField, LPCSTR lpszSubString)
119 {
120  const char* ResultStr;
121  ResultStr = strstr(lpszDeviceKey, lpszSubString);
122  if (ResultStr != NULL)
123  {
124  *pField = strtol(ResultStr + strlen(lpszSubString), NULL, 16);
125  }
126 }
127 
128 static void GetDeviceId(LPCSTR lpszDeviceKey, D3DADAPTER_IDENTIFIER9* pIdentifier)
129 {
130  ParseField(lpszDeviceKey, &pIdentifier->VendorId, "VEN_");
131  ParseField(lpszDeviceKey, &pIdentifier->DeviceId, "DEV_");
132  ParseField(lpszDeviceKey, &pIdentifier->SubSysId, "SUBSYS_");
133  ParseField(lpszDeviceKey, &pIdentifier->Revision, "REV_");
134 }
135 
137 {
138  DWORD* dwIdentifier = (DWORD*)&pIdentifier->DeviceIdentifier;
139 
140  pIdentifier->DeviceIdentifier = CLSID_DirectDraw;
141 
142  dwIdentifier[0] ^= pIdentifier->VendorId;
143  dwIdentifier[1] ^= pIdentifier->DeviceId;
144  dwIdentifier[2] ^= pIdentifier->SubSysId;
145  dwIdentifier[3] ^= pIdentifier->Revision;
146  dwIdentifier[2] ^= pIdentifier->DriverVersion.LowPart;
147  dwIdentifier[3] ^= pIdentifier->DriverVersion.HighPart;
148 }
149 
150 BOOL GetAdapterInfo(LPCSTR lpszDeviceName, D3DADAPTER_IDENTIFIER9* pIdentifier)
151 {
152  DISPLAY_DEVICEA DisplayDevice;
153  DWORD AdapterIndex;
154  BOOL FoundDisplayDevice;
155 
156  memset(&DisplayDevice, 0, sizeof(DISPLAY_DEVICEA));
157  DisplayDevice.cb = sizeof(DISPLAY_DEVICEA);
158 
159  AdapterIndex = 0;
160  FoundDisplayDevice = FALSE;
161  while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) != FALSE)
162  {
163  if (_stricmp(lpszDeviceName, DisplayDevice.DeviceName) == 0)
164  {
165  FoundDisplayDevice = TRUE;
166  break;
167  }
168 
169  ++AdapterIndex;
170  }
171 
172  /* No matching display device found? */
173  if (FALSE == FoundDisplayDevice)
174  return FALSE;
175 
176  lstrcpynA(pIdentifier->Description, DisplayDevice.DeviceString, MAX_DEVICE_IDENTIFIER_STRING);
177  lstrcpynA(pIdentifier->DeviceName, DisplayDevice.DeviceName, CCHDEVICENAME);
178 
179  if (GetDriverName(&DisplayDevice, pIdentifier) != FALSE)
180  GetDriverVersion(&DisplayDevice, pIdentifier);
181 
182  GetDeviceId(DisplayDevice.DeviceID, pIdentifier);
183 
184  GenerateDeviceIdentifier(pIdentifier);
185 
186  return TRUE;
187 }
188 
189 
190 
192 {
194 
195  ZeroMemory(&osvi, sizeof(OSVERSIONINFOA));
197 
198  if (GetVersionExA(&osvi) != 0)
199  {
200  return ( (osvi.dwMajorVersion > 5) ||
201  ( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) ));
202  }
203 
204  return FALSE;
205 }
206 
207 static void CopyDriverCaps(const D3DCAPS9* pSrcCaps, D3DCAPS9* pDstCaps)
208 {
209  *pDstCaps = *pSrcCaps;
210 
211  pDstCaps->Caps = pSrcCaps->Caps & D3D9_CAPS1;
212 
213  /* TODO: Fit in D3DCAPS2_CANCALIBRATEGAMMA somewhere here */
215  pDstCaps->Caps2 = pSrcCaps->Caps2 & D3D9_XP_OR_LATER_CAPS2;
216  else
217  pDstCaps->Caps2 = pSrcCaps->Caps2 & D3D9_PRE_XP_CAPS2;
218 
219  pDstCaps->Caps3 = pSrcCaps->Caps3 & D3D9_CAPS3;
220  pDstCaps->DevCaps = pSrcCaps->DevCaps & D3D9_DEVCAPS;
221 
227 
228  pDstCaps->PrimitiveMiscCaps = pSrcCaps->PrimitiveMiscCaps & ~D3DPMISCCAPS_FOGINFVF;
229 
231  {
234  }
235 
236  if (pSrcCaps->MaxPointSize < 0.0f)
237  pDstCaps->MaxPointSize = 1.0f;
238 }
239 
241 {
242  HRESULT hResult = D3DERR_INVALIDDEVICE;
243  D3DCAPS9* pDriverCaps = NULL;
244 
245  ZeroMemory(pDstCaps, sizeof(D3DCAPS9));
246 
247  switch (DeviceType)
248  {
249  case D3DDEVTYPE_HAL:
250  pDriverCaps = &pDisplayAdapter->DriverCaps.DriverCaps9;
251  hResult = D3D_OK;
252  break;
253 
254  case D3DDEVTYPE_REF:
255  case D3DDEVTYPE_SW:
256  case D3DDEVTYPE_NULLREF:
258  hResult = D3D_OK;
259  break;
260 
261  default:
262  DPRINT1("Unknown DeviceType argument");
263  break;
264  }
265 
266  if (pDriverCaps != NULL)
267  {
268  CopyDriverCaps(pDriverCaps, pDstCaps);
269  }
270 
271  if (SUCCEEDED(hResult))
272  {
273  pDstCaps->DeviceType = DeviceType;
274  pDstCaps->MasterAdapterOrdinal = pDisplayAdapter->MasterAdapterIndex;
275  pDstCaps->AdapterOrdinalInGroup = pDisplayAdapter->AdapterIndexInGroup;
276  pDstCaps->NumberOfAdaptersInGroup = pDisplayAdapter->NumAdaptersInGroup;
277  }
278 
279  return hResult;
280 }
281 
282 
283 
284 static D3DFORMAT Get16BitD3DFormat(LPCSTR lpszDeviceName)
285 {
286  HDC hDC;
288  LPBITMAPINFO pBitmapInfo;
290 
291  if (NULL == (hDC = CreateDCA(NULL, lpszDeviceName, NULL, NULL)))
292  {
293  return Format;
294  }
295 
296  if (NULL == (hBitmap = CreateCompatibleBitmap(hDC, 1, 1)))
297  {
298  DeleteDC(hDC);
299  return Format;
300  }
301 
302  pBitmapInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + 4 * sizeof(RGBQUAD));
303  if (NULL == pBitmapInfo)
304  {
306  DeleteDC(hDC);
307  return Format;
308  }
309 
310  pBitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
311  if (GetDIBits(hDC, hBitmap, 0, 0, NULL, pBitmapInfo, DIB_RGB_COLORS) > 0)
312  {
313  if (pBitmapInfo->bmiHeader.biCompression == BI_BITFIELDS)
314  {
315  if (GetDIBits(hDC, hBitmap, 0, pBitmapInfo->bmiHeader.biHeight, NULL, pBitmapInfo, DIB_RGB_COLORS) > 0)
316  {
317  /* Check if the green field is 6 bits long */
318  if (*(DWORD*)(&pBitmapInfo->bmiColors[1]) == 0x000003E0)
319  {
321  }
322  }
323  }
324  }
325 
326  HeapFree(GetProcessHeap(), 0, pBitmapInfo);
328  DeleteDC(hDC);
329 
330  return Format;
331 }
332 
333 BOOL GetAdapterMode(LPCSTR lpszDeviceName, D3DDISPLAYMODE* pMode)
334 {
335  DEVMODEA DevMode;
336 
337  memset(&DevMode, 0, sizeof(DEVMODEA));
338  DevMode.dmSize = sizeof(DEVMODEA);
339  if (FALSE == EnumDisplaySettingsA(lpszDeviceName, ENUM_CURRENT_SETTINGS, &DevMode))
340  return FALSE;
341 
342  pMode->Width = DevMode.dmPelsWidth;
343  pMode->Height = DevMode.dmPelsHeight;
344  pMode->RefreshRate = DevMode.dmDisplayFrequency;
345 
346  switch (DevMode.dmBitsPerPel)
347  {
348  case 8:
349  pMode->Format = D3DFMT_P8;
350  break;
351 
352  case 16:
353  pMode->Format = Get16BitD3DFormat(lpszDeviceName);
354  break;
355 
356  case 24:
357  pMode->Format = D3DFMT_R8G8B8;
358  break;
359 
360  case 32:
361  pMode->Format = D3DFMT_X8R8G8B8;
362  break;
363 
364  default:
365  pMode->Format = D3DFMT_UNKNOWN;
366  break;
367  }
368 
369  return TRUE;
370 }
371 
372 
373 
374 static BOOL CALLBACK AdapterMonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
375 {
376  MONITORINFOEXA MonitorInfoEx;
377  LPADAPTERMONITOR lpAdapterMonitor = (LPADAPTERMONITOR)dwData;
378 
379  memset(&MonitorInfoEx, 0, sizeof(MONITORINFOEXA));
380  MonitorInfoEx.cbSize = sizeof(MONITORINFOEXA);
381 
382  GetMonitorInfoA(hMonitor, (LPMONITORINFO)&MonitorInfoEx);
383 
384  if (_stricmp(lpAdapterMonitor->lpszDeviceName, MonitorInfoEx.szDevice) == 0)
385  {
386  lpAdapterMonitor->hMonitor = hMonitor;
387  return FALSE;
388  }
389 
390  return TRUE;
391 }
392 
394 {
395  ADAPTERMONITOR AdapterMonitor;
396  AdapterMonitor.lpszDeviceName = lpszDeviceName;
397  AdapterMonitor.hMonitor = NULL;
398 
400 
401  return AdapterMonitor.hMonitor;
402 }
403 
404 
405 
406 UINT GetDisplayFormatCount(D3DFORMAT Format, const D3DDISPLAYMODE* pSupportedDisplayModes, UINT NumDisplayModes)
407 {
408  UINT DisplayModeIndex;
409  UINT FormatIndex = 0;
410 
411  for (DisplayModeIndex = 0; DisplayModeIndex < NumDisplayModes; DisplayModeIndex++)
412  {
413  if (pSupportedDisplayModes[DisplayModeIndex].Format == Format)
414  {
415  ++FormatIndex;
416  }
417  }
418 
419  return FormatIndex;
420 }
421 
422 const D3DDISPLAYMODE* FindDisplayFormat(D3DFORMAT Format, UINT ModeIndex, const D3DDISPLAYMODE* pSupportedDisplayModes, UINT NumDisplayModes)
423 {
424  UINT DisplayModeIndex;
425  UINT FormatIndex = 0;
426 
427  for (DisplayModeIndex = 0; DisplayModeIndex < NumDisplayModes; DisplayModeIndex++)
428  {
429  if (pSupportedDisplayModes[DisplayModeIndex].Format == Format)
430  {
431  if (ModeIndex == FormatIndex)
432  return &pSupportedDisplayModes[DisplayModeIndex];
433 
434  ++FormatIndex;
435  }
436  }
437 
438  if (FormatIndex == 0)
439  {
440  DPRINT1("No modes with the specified format found");
441  }
442  else if (FormatIndex < ModeIndex)
443  {
444  DPRINT1("Invalid mode index");
445  }
446 
447  return NULL;
448 }
#define D3DPRESENT_INTERVAL_TWO
Definition: d3d8caps.h:30
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4041
#define D3DPRESENT_INTERVAL_THREE
Definition: d3d8caps.h:31
#define TRUE
Definition: types.h:120
#define D3DPRESENT_INTERVAL_ONE
Definition: d3d8caps.h:29
ULONG dwMajorVersion
Definition: rtltypes.h:234
#define D3DPRASTERCAPS_FOGVERTEX
Definition: d3d8caps.h:75
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1454
LPCSTR lpszDeviceName
Definition: adapter.c:42
Type
Definition: Type.h:6
#define ERROR_SUCCESS
Definition: deptool.c:10
BOOL WINAPI EnumDisplayMonitors(_In_opt_ HDC, _In_opt_ LPCRECT, _In_ MONITORENUMPROC, _In_ LPARAM)
OSVERSIONINFO osvi
Definition: ver.c:28
WORD dmSize
Definition: wingdi.h:1546
CHAR DeviceString[128]
Definition: wingdi.h:2789
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
static void ParseField(LPCSTR lpszDeviceKey, LPDWORD pField, LPCSTR lpszSubString)
Definition: adapter.c:118
BOOL(WINAPI * LPFN_REVERTWOW64FSREDIRECTION)(PVOID)
Definition: adapter.c:37
HMONITOR GetAdapterMonitor(LPCSTR lpszDeviceName)
Definition: adapter.c:393
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
DeviceType
Definition: mmdrv.h:41
DWORD dmDisplayFrequency
Definition: wingdi.h:1580
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:27
struct _ADAPTERMONITOR * LPADAPTERMONITOR
static HANDLE ULONG_PTR dwData
Definition: file.c:35
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3346
#define ZeroMemory
Definition: winbase.h:1635
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
UINT NumberOfAdaptersInGroup
Definition: d3d9caps.h:322
#define D3DCAPS2_PRESENT_INTERVAL_SEVERAL
Definition: adapter.c:30
CHAR DeviceName[32]
Definition: wingdi.h:2788
char Description[MAX_DEVICE_IDENTIFIER_STRING]
Definition: d3d9types.h:1230
BOOL WINAPI VerQueryValueA(LPCVOID pBlock, LPCSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen)
Definition: version.c:998
LARGE_INTEGER DriverVersion
Definition: d3d9types.h:1232
const D3DDISPLAYMODE * FindDisplayFormat(D3DFORMAT Format, UINT ModeIndex, const D3DDISPLAYMODE *pSupportedDisplayModes, UINT NumDisplayModes)
Definition: adapter.c:422
static void GenerateDeviceIdentifier(D3DADAPTER_IDENTIFIER9 *pIdentifier)
Definition: adapter.c:136
#define D3DERR_INVALIDDEVICE
Definition: d3d8.h:86
#define BOOL
Definition: nt_native.h:43
struct tagMONITORINFOEXA MONITORINFOEXA
#define _stricmp
Definition: cat.c:22
#define DWORD
Definition: nt_native.h:44
#define BI_BITFIELDS
Definition: mmreg.h:507
#define D3DCAPS2_PRESENT_INTERVAL_IMMEDIATE
Definition: adapter.c:31
#define ENUM_CURRENT_SETTINGS
Definition: winuser.h:179
UINT AdapterOrdinalInGroup
Definition: d3d9caps.h:321
DWORD Caps3
Definition: d3d9caps.h:268
#define D3D9_CAPS1
Definition: adapter.c:18
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
#define MAX_DEVICE_IDENTIFIER_STRING
Definition: d3d8types.h:109
unsigned int BOOL
Definition: ntddk_ex.h:94
struct _ADAPTERMONITOR ADAPTERMONITOR
CHAR DeviceKey[128]
Definition: wingdi.h:2792
DWORD biCompression
Definition: amvideo.idl:35
BOOL GetAdapterInfo(LPCSTR lpszDeviceName, D3DADAPTER_IDENTIFIER9 *pIdentifier)
Definition: adapter.c:150
BOOL WINAPI EnumDisplayDevicesA(LPCSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEA lpDisplayDevice, DWORD dwFlags)
Definition: display.c:23
static BOOL GetDriverName(LPDISPLAY_DEVICEA pDisplayDevice, D3DADAPTER_IDENTIFIER9 *pIdentifier)
Definition: adapter.c:47
smooth NULL
Definition: ftsmooth.c:416
#define D3D9_PRE_XP_CAPS2
Definition: adapter.c:19
#define D3D9_CAPS3
Definition: adapter.c:21
LONG_PTR LPARAM
Definition: windef.h:208
#define D3DPRESENT_INTERVAL_IMMEDIATE
Definition: d3d8caps.h:33
struct _DISPLAY_DEVICEA DISPLAY_DEVICEA
static void GetDeviceId(LPCSTR lpszDeviceKey, D3DADAPTER_IDENTIFIER9 *pIdentifier)
Definition: adapter.c:128
DWORD VertexProcessingCaps
Definition: d3d9caps.h:303
enum _D3DFORMAT D3DFORMAT
const char * LPCSTR
Definition: xmlstorage.h:183
void * PVOID
Definition: retypes.h:9
BOOL * PBOOL
Definition: windef.h:161
ULONG dwOSVersionInfoSize
Definition: rtltypes.h:233
BOOL WINAPI GetVersionExA(IN LPOSVERSIONINFOA lpVersionInformation)
Definition: version.c:69
DWORD PresentationIntervals
Definition: d3d9caps.h:269
static D3DFORMAT Get16BitD3DFormat(LPCSTR lpszDeviceName)
Definition: adapter.c:284
#define D3DVTXPCAPS_FOGVERTEX
Definition: adapter.c:33
DWORD Caps2
Definition: d3d9caps.h:267
#define GetProcessHeap()
Definition: compat.h:395
D3DDEVTYPE DeviceType
Definition: d3d9caps.h:264
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
RGBQUAD bmiColors[1]
Definition: wingdi.h:1455
BOOL WINAPI EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEA lpDevMode)
Definition: display.c:312
LONG HRESULT
Definition: typedefs.h:77
DWORD WINAPI GetFileVersionInfoSizeA(LPCSTR filename, LPDWORD handle)
Definition: version.c:624
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1168
#define D3DPRESENT_INTERVAL_FOUR
Definition: d3d8caps.h:32
#define WINAPI
Definition: msvc.h:8
enum _D3DDEVTYPE D3DDEVTYPE
unsigned long DWORD
Definition: ntddk_ex.h:95
PVOID HANDLE
Definition: typedefs.h:71
DWORD DevCaps
Definition: d3d9caps.h:271
DWORD Caps
Definition: d3d9caps.h:266
DWORD dmPelsHeight
Definition: wingdi.h:1575
BOOL WINAPI GetFileVersionInfoA(LPCSTR filename, DWORD handle, DWORD datasize, LPVOID data)
Definition: version.c:858
UINT GetDisplayFormatCount(D3DFORMAT Format, const D3DDISPLAYMODE *pSupportedDisplayModes, UINT NumDisplayModes)
Definition: adapter.c:406
ULONG LowPart
Definition: typedefs.h:104
ULONG dwMinorVersion
Definition: rtltypes.h:235
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:819
BOOL GetAdapterMode(LPCSTR lpszDeviceName, D3DDISPLAYMODE *pMode)
Definition: adapter.c:333
static void CopyDriverCaps(const D3DCAPS9 *pSrcCaps, D3DCAPS9 *pDstCaps)
Definition: adapter.c:207
HMONITOR hMonitor
Definition: adapter.c:43
UINT MasterAdapterOrdinal
Definition: d3d9caps.h:320
D3DCAPS9 DriverCaps9
Definition: d3d9_private.h:68
DWORD dmBitsPerPel
Definition: wingdi.h:1573
D3DFORMAT Format
Definition: d3d8types.h:1042
static HDC hDC
Definition: 3dtext.c:33
struct _devicemodeA DEVMODEA
BOOL WINAPI GetMonitorInfoA(_In_ HMONITOR, _Inout_ LPMONITORINFO)
#define D3D_OK
Definition: d3d.h:106
struct _OSVERSIONINFOA OSVERSIONINFOA
#define CCHDEVICENAME
Definition: ddrawi.h:63
BOOL WINAPI DeleteDC(_In_ HDC)
HRESULT GetAdapterCaps(const LPDIRECT3D9_DISPLAYADAPTER pDisplayAdapter, D3DDEVTYPE DeviceType, D3DCAPS9 *pDstCaps)
Definition: adapter.c:240
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
DWORD PrimitiveMiscCaps
Definition: d3d9caps.h:272
CHAR DeviceID[128]
Definition: wingdi.h:2791
float MaxPointSize
Definition: d3d9caps.h:308
#define D3D9_XP_OR_LATER_CAPS2
Definition: adapter.c:20
unsigned int UINT
Definition: ndis.h:50
#define lstrcpynA
Definition: compat.h:408
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
HRESULT SafeAppendString(IN OUT LPSTR Dst, IN DWORD DstSize, IN LPCSTR Src)
Definition: d3d9_helpers.c:83
char Driver[MAX_DEVICE_IDENTIFIER_STRING]
Definition: d3d9types.h:1229
#define DPRINT1
Definition: precomp.h:8
#define D3D9_DEVCAPS
Definition: adapter.c:22
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)
_Check_return_ long __cdecl strtol(_In_z_ const char *_Str, _Out_opt_ _Deref_post_z_ char **_EndPtr, _In_ int _Radix)
static void GetDriverVersion(LPDISPLAY_DEVICEA pDisplayDevice, D3DADAPTER_IDENTIFIER9 *pIdentifier)
Definition: adapter.c:70
uint32_t * LPDWORD
Definition: typedefs.h:57
#define UNIMPLEMENTED
Definition: debug.h:114
#define GetProcAddress(x, y)
Definition: compat.h:410
BOOL(WINAPI * LPFN_ISWOW64PROCESS)(HANDLE, PBOOL)
Definition: adapter.c:35
BOOL(WINAPI * LPFN_DISABLEWOW64FSREDIRECTION)(PVOID *)
Definition: adapter.c:36
static HBITMAP
Definition: button.c:44
DWORD RasterCaps
Definition: d3d9caps.h:273
static BOOL IsWindowsXPorLaterCompatible()
Definition: adapter.c:191
#define DIB_RGB_COLORS
Definition: wingdi.h:366
HDC WINAPI CreateDCA(_In_opt_ LPCSTR pszDriver, _In_opt_ LPCSTR pszDevice, _In_opt_ LPCSTR pszOutput, _In_opt_ const DEVMODEA *pdmInit)
#define memset(x, y, z)
Definition: compat.h:39
static HBITMAP hBitmap
Definition: timezone.c:35
#define HeapFree(x, y, z)
Definition: compat.h:394
static BOOL CALLBACK AdapterMonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
Definition: adapter.c:374
#define SUCCEEDED(hr)
Definition: intsafe.h:57
HMODULE hModule
Definition: animate.c:44
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char * Format
Definition: acpixf.h:1194
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
DWORD dmPelsWidth
Definition: wingdi.h:1574