memcpy(&pDriverCaps->DriverCaps9, &DriverCaps8, sizeof(D3DCAPS8));
pDriverCaps->DriverCaps9.Caps = HalInfo.ddCaps.dwCaps;
+ pDriverCaps->dwDriverCaps |= D3D9_INT_D3DCAPS8_VALID;
}
}
pDriverCaps->DriverCaps9 = DriverCaps9;
pDriverCaps->DriverCaps9.Caps = HalInfo.ddCaps.dwCaps;
+ pDriverCaps->dwDriverCaps |= D3D9_INT_D3DCAPS9_VALID;
}
AdapterIndex = 0;
while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE &&
- pDirect3D9->NumDisplayAdapters < DX_D3D9_MAX_NUM_ADAPTERS)
+ pDirect3D9->NumDisplayAdapters < D3D9_INT_MAX_NUM_ADAPTERS)
{
if ((DisplayDevice.StateFlags & (DISPLAY_DEVICE_DISCONNECT | DISPLAY_DEVICE_MIRRORING_DRIVER)) == 0 &&
(DisplayDevice.StateFlags & (DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) != 0)
AdapterIndex = 0;
while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE &&
- pDirect3D9->NumDisplayAdapters < DX_D3D9_MAX_NUM_ADAPTERS)
+ pDirect3D9->NumDisplayAdapters < D3D9_INT_MAX_NUM_ADAPTERS)
{
if ((DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) != 0 &&
(DisplayDevice.StateFlags & (DISPLAY_DEVICE_MIRRORING_DRIVER | DISPLAY_DEVICE_PRIMARY_DEVICE)) == 0)
pDirect3D9->dwProcessId = GetCurrentThreadId();
pDirect3D9->dwRefCnt = 1;
- pDirect3D9->unknown004576 = 0;
- pDirect3D9->unknown004578 = 0;
- pDirect3D9->unknown004579 = 0;
- pDirect3D9->unknown004580 = 0;
- pDirect3D9->unknown004581 = 0;
- pDirect3D9->unknown004582 = 0;
- pDirect3D9->unknown004583 = 0;
pDirect3D9->SDKVersion = SDKVersion;
pDirect3D9->lpInt = pDirect3D9;
InitializeCriticalSection(&pDirect3D9->d3d9_cs);
- memset(pDirect3D9->DisplayAdapters, 0, sizeof(pDirect3D9->DisplayAdapters));
GetDisplayDeviceInfo(pDirect3D9);
*ppDirect3D9 = (LPDIRECT3D9)&pDirect3D9->lpVtbl;
D3DPRESENT_PARAMETERS* pPresentationParameters,
struct IDirect3DDevice9** ppReturnedDeviceInterface)
{
+ DWORD NumAdaptersToCreate;
+
+ LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
+ LOCK_D3D9();
+
+ if (Adapter >= This->NumDisplayAdapters)
+ {
+ DPRINT1("Invalid Adapter number specified");
+ UNLOCK_D3D9();
+ return D3DERR_INVALIDCALL;
+ }
+
+ if (DeviceType != D3DDEVTYPE_HAL &&
+ DeviceType != D3DDEVTYPE_REF &&
+ DeviceType != D3DDEVTYPE_SW)
+ {
+ DPRINT1("Invalid DeviceType specified");
+ UNLOCK_D3D9();
+ return D3DERR_INVALIDCALL;
+ }
+
+ if (DeviceType != D3DDEVTYPE_HAL)
+ {
+ UNIMPLEMENTED
+ DPRINT1("Sorry, only D3DDEVTYPE_HAL is implemented at this time...");
+ return D3DERR_INVALIDCALL;
+ }
+
+ if (hFocusWindow != NULL && FALSE == IsWindow(hFocusWindow))
+ {
+ DPRINT1("Invalid hFocusWindow parameter specified");
+ UNLOCK_D3D9();
+ return D3DERR_INVALIDCALL;
+ }
+
+ if (IsBadWritePtr(ppReturnedDeviceInterface, sizeof(IDirect3DDevice9*)))
+ {
+ DPRINT1("Invalid ppReturnedDeviceInterface parameter specified");
+ UNLOCK_D3D9();
+ return D3DERR_INVALIDCALL;
+ }
+
+ if ((BehaviourFlags & D3DCREATE_ADAPTERGROUP_DEVICE) != 0)
+ NumAdaptersToCreate = This->DisplayAdapters[Adapter].NumAdaptersInGroup;
+ else
+ NumAdaptersToCreate = 1;
+
+ *ppReturnedDeviceInterface = 0;
+
UNIMPLEMENTED
return D3D_OK;
#include <windows.h>
#include <ddraw.h>
-#define DX_D3D9_MAX_NUM_ADAPTERS 12
+#define D3D9_INT_MAX_NUM_ADAPTERS 12
+
+#define D3D9_INT_D3DCAPS8_VALID 1
+#define D3D9_INT_D3DCAPS9_VALID 2
typedef struct _D3D9Unknown6BC_INT_
{
/* 0x0148 */ DWORD dwSVBCaps;
/* 0x014c */ DWORD dwVSBCaps;
/* 0x0150 */ DWORD dwSVBCaps2;
-/* 0x0154 */ DWORD unknown0085;
+/* 0x0154 */ DWORD dwDriverCaps;
/* 0x0158 */ DWORD NumSupportedFormatOps;
/* 0x015c */ LPDDSURFACEDESC pSupportedFormatOps;
/* 0x0160 */ DWORD unknown0088;
/* 0x0024 */ struct _tagDIRECT3D9_INT_ *lpInt;
/* 0x0028 */ LONG dwRefCnt; /* Increases and decreases by AddRef() and Release() */
/* 0x002c */ UINT NumDisplayAdapters;
-/* 0x0030 */ Direct3D9DisplayAdapterInfo_INT DisplayAdapters[DX_D3D9_MAX_NUM_ADAPTERS];
+/* 0x0030 */ Direct3D9DisplayAdapterInfo_INT DisplayAdapters[D3D9_INT_MAX_NUM_ADAPTERS];
/* 0x2100 */ DWORD unknown002112;
/* 0x2104 */ DWORD unknown002113;
/* 0x2108 */ DWORD unknown002114;