mirror of
https://github.com/reactos/reactos.git
synced 2025-02-20 15:35:04 +00:00
* Refactored D3D9 structures a bit
* Started implementing IDirect3D9::CreateDevice() svn path=/trunk/; revision=35563
This commit is contained in:
parent
94c1c807bc
commit
ce56b08815
12 changed files with 503 additions and 183 deletions
|
@ -15,10 +15,13 @@
|
|||
<file>d3d9.c</file>
|
||||
<file>d3d9_helpers.c</file>
|
||||
<file>d3d9_impl.c</file>
|
||||
<file>d3d9_baseobject.c</file>
|
||||
<file>d3d9_create.c</file>
|
||||
<file>d3d9_caps.c</file>
|
||||
<file>d3d9_device.c</file>
|
||||
<file>d3d9_swapchain.c</file>
|
||||
<file>adapter.c</file>
|
||||
<file>device.c</file>
|
||||
<file>format.c</file>
|
||||
<file>d3d9.rc</file>
|
||||
<file>d3d9.spec</file>
|
||||
|
|
36
reactos/dll/directx/d3d9/d3d9_baseobject.c
Normal file
36
reactos/dll/directx/d3d9/d3d9_baseobject.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "d3d9_baseobject.h"
|
||||
#include "d3d9_device.h"
|
||||
|
||||
#include <debug.h>
|
||||
|
||||
VOID D3D9BaseObject_Destroy()
|
||||
{
|
||||
}
|
||||
|
||||
ID3D9BaseObjectVtbl D3D9BaseObject_Vtbl =
|
||||
{
|
||||
/* D3D9BaseObject */
|
||||
D3D9BaseObject_Destroy
|
||||
};
|
||||
|
||||
VOID InitD3D9BaseObject(D3D9BaseObject* pBaseObject, enum REF_TYPE RefType, struct _Direct3DDevice9_INT* pBaseDevice)
|
||||
{
|
||||
// TODO: Add dtor to vtbl
|
||||
pBaseObject->lpVtbl = &D3D9BaseObject_Vtbl;
|
||||
pBaseObject->RefType = RefType;
|
||||
pBaseObject->pBaseDevice = pBaseDevice;
|
||||
}
|
||||
|
||||
ULONG D3D9BaseObject_AddRef(D3D9BaseObject* pBaseObject)
|
||||
{
|
||||
// TODO: Implement ref counting
|
||||
UNIMPLEMENTED
|
||||
return 1;
|
||||
}
|
||||
|
||||
ULONG D3D9BaseObject_Release(D3D9BaseObject* pBaseObject)
|
||||
{
|
||||
// TODO: Implement ref counting
|
||||
UNIMPLEMENTED
|
||||
return 0;
|
||||
}
|
35
reactos/dll/directx/d3d9/d3d9_baseobject.h
Normal file
35
reactos/dll/directx/d3d9/d3d9_baseobject.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
#ifndef _D3D9_BASEOBJECT_H_
|
||||
#define _D3D9_BASEOBJECT_H_
|
||||
|
||||
#include "d3d9_common.h"
|
||||
|
||||
enum REF_TYPE
|
||||
{
|
||||
RT_EXTERNAL,
|
||||
RT_BUILTIN,
|
||||
RT_INTERNAL,
|
||||
};
|
||||
|
||||
typedef struct _D3D9BaseObjectVtbl
|
||||
{
|
||||
VOID (*Destroy)();
|
||||
} ID3D9BaseObjectVtbl;
|
||||
|
||||
typedef struct _D3D9BaseObject
|
||||
{
|
||||
/* 0x0000 */ ID3D9BaseObjectVtbl* lpVtbl;
|
||||
/* 0x0004 */ DWORD dwUnknown0004;
|
||||
/* 0x0008 */ DWORD dwUnknown0008;
|
||||
/* 0x000c */ struct _Direct3DDevice9_INT* pBaseDevice;
|
||||
/* 0x0010 */ DWORD dwUnknown0010; // Index? Unique id?
|
||||
/* 0x0014 */ HANDLE hKernelHandle;
|
||||
/* 0x0018 */ LPDWORD dwUnknown0018;
|
||||
/* 0x001c */ enum REF_TYPE RefType;
|
||||
} D3D9BaseObject;
|
||||
|
||||
VOID InitD3D9BaseObject(D3D9BaseObject* pBaseObject, enum REF_TYPE RefType, struct _Direct3DDevice9_INT* pBaseDevice);
|
||||
|
||||
ULONG D3D9BaseObject_AddRef(D3D9BaseObject* pBaseObject);
|
||||
ULONG D3D9BaseObject_Release(D3D9BaseObject* pBaseObject);
|
||||
|
||||
#endif // _D3D9_BASEOBJECT_H_
|
|
@ -11,83 +11,32 @@
|
|||
#include "d3d9_common.h"
|
||||
#include <d3d9.h>
|
||||
#include "d3d9_private.h"
|
||||
#include "d3d9_swapchain.h"
|
||||
#include "d3d9_surface.h"
|
||||
|
||||
extern struct IDirect3DDevice9Vtbl Direct3DDevice9_Vtbl;
|
||||
|
||||
enum REF_TYPE
|
||||
typedef struct _D3D9HeapTexture
|
||||
{
|
||||
RT_EXTERNAL,
|
||||
RT_BUILTIN,
|
||||
RT_INTERNAL,
|
||||
};
|
||||
/* 0x0000 */ DWORD dwUnknown00;
|
||||
/* 0x0004 */ DWORD dwUnknown04;
|
||||
/* 0x0008 */ LPDWORD pUnknown08;
|
||||
} D3D9HeapTexture;
|
||||
|
||||
typedef struct _tagD3D9BaseObject_
|
||||
{
|
||||
/* 0x0000 */ LPDWORD lpVtbl;
|
||||
/* 0x0004 */ DWORD dwUnknown0004;
|
||||
/* 0x0008 */ DWORD dwUnknown0008;
|
||||
/* 0x000c */ struct _tagDirect3DDevice9_INT_* pBaseDevice;
|
||||
/* 0x0010 */ DWORD dwUnknown0010; // Index? Unique id?
|
||||
/* 0x0014 */ HANDLE hKernelHandle;
|
||||
/* 0x0018 */ LPDWORD dwUnknown0018;
|
||||
/* 0x001c */ enum REF_TYPE RefType;
|
||||
} D3D9BaseObject;
|
||||
|
||||
typedef struct _tagD3D9BaseSurface_
|
||||
{
|
||||
/* 0x0000 */ LPDWORD lpVtbl;
|
||||
/* 0x0024 */ D3DFORMAT DisplayFormat2; // Back buffer format?
|
||||
/* 0x0028 */ DWORD dwUnknown0028; // Constant/ref count? (1)
|
||||
/* 0x002c */ DWORD dwUnknown002c; // Refresh rate?
|
||||
/* 0x0030 */ D3DPOOL SurfacePool;
|
||||
/* 0x0034 */ DWORD dwUnknown0034;
|
||||
/* 0x0038 */ DWORD dwUnknown0038;
|
||||
/* 0x003c */ DWORD dwWidth;
|
||||
/* 0x0040 */ DWORD dwHeight;
|
||||
/* 0x0044 */ D3DPOOL ResourcePool;
|
||||
/* 0x0048 */ D3DFORMAT DisplayFormat;
|
||||
/* 0x004c */ DWORD dwUnknown004c;
|
||||
/* 0x0050 */ DWORD dwUnknown0050;
|
||||
/* 0x0054 */ DWORD dwUnknown0054;
|
||||
/* 0x0058 */ DWORD dwBpp;
|
||||
} D3D9BaseSurface;
|
||||
|
||||
typedef struct _tagD3D9Surface_
|
||||
{
|
||||
/* 0x0000 */ D3D9BaseObject BaseObject;
|
||||
/* 0x0020 */ D3D9BaseSurface BaseSurface;
|
||||
} D3D9Surface;
|
||||
|
||||
typedef struct _tagD3D9DriverSurface_
|
||||
{
|
||||
/* 0x0000 */ D3D9Surface BaseD3D9Surface;
|
||||
/* 0x005c */ DWORD dwUnknown5c;
|
||||
/* 0x0060 */ DWORD dwUnknown60;
|
||||
/* 0x0064 */ struct _tagD3D9DriverSurface_* pPreviousDriverSurface;
|
||||
/* 0x0068 */ struct _tagD3D9DriverSurface_* pNextDriverSurface;
|
||||
/* 0x006c */ DWORD dwUnknown6c[8];
|
||||
} D3D9DriverSurface;
|
||||
|
||||
typedef struct _tagD3D9TextureHeap_
|
||||
{
|
||||
/* 0x0000 */ DWORD NumTextures;
|
||||
/* 0x0004 */ LPDWORD pFirstTexture;
|
||||
} D3D9TextureHeap;
|
||||
|
||||
typedef struct _tagD3D9ResourceManager_
|
||||
typedef struct _D3D9ResourceManager
|
||||
{
|
||||
#ifdef D3D_DEBUG_INFO
|
||||
/* N/A - 0x0000 */ DDSURFACEDESC SurfaceDesc[8];
|
||||
#endif
|
||||
/* 0x0000 - 0x0160 */ struct _tagDirect3DDevice9_INT_* pBaseDevice;
|
||||
/* 0x0000 - 0x0160 */ struct _Direct3DDevice9_INT* pBaseDevice;
|
||||
/* 0x0004 - 0x0164 */ DWORD dwUnknown0004;
|
||||
/* 0x0008 - 0x0168 */ DWORD dwUnknown0008;
|
||||
/* 0x000c - 0x016c */ DWORD MaxSimultaneousTextures;
|
||||
/* 0x0010 - 0x0170 */ DWORD dwUnknown0010;
|
||||
/* 0x0014 - 0x0174 */ LPDWORD pFirstHeapTexture;
|
||||
/* 0x0014 - 0x0174 */ D3D9HeapTexture* pTextureHeap;
|
||||
} D3D9ResourceManager;
|
||||
|
||||
typedef struct _tagDirect3D9Cursor_
|
||||
typedef struct _D3D9Cursor
|
||||
{
|
||||
/* 0x0000 */ DWORD dwUnknown0000;
|
||||
/* 0x0004 */ DWORD dwUnknown0004;
|
||||
|
@ -98,71 +47,15 @@ typedef struct _tagDirect3D9Cursor_
|
|||
/* 0x0018 */ DWORD dwWidth;
|
||||
/* 0x001c */ DWORD dwHeight;
|
||||
/* 0x0020 */ DWORD dwUnknown0020[18];
|
||||
/* 0x0070 */ struct _tagD3D9BaseDevice_* pBaseDevice;
|
||||
/* 0x0074 */ struct _tagD3D9SwapChain_* pSwapChain;
|
||||
/* 0x0070 */ struct _Direct3DDevice9_INT* pBaseDevice;
|
||||
/* 0x0074 */ struct _Direct3DSwapChain9_INT* pSwapChain;
|
||||
/* 0x0078 */ DWORD dwUnknown0078;
|
||||
/* 0x007c */ DWORD dwMonitorVirtualX;
|
||||
/* 0x0080 */ DWORD dwMonitorVirtualY;
|
||||
/* 0x0084 */ DWORD dwUnknown0084;
|
||||
} D3D9Cursor;
|
||||
|
||||
typedef struct _tagDirect3DSwapChain9_INT_
|
||||
{
|
||||
/* 0x0000 */ D3D9BaseObject BaseObject;
|
||||
/* 0x0020 */ struct IDirect3DSwapChain9Vtbl* lpVtbl;
|
||||
/* 0x0024 */ DWORD dwUnknown0024;
|
||||
/* 0x0028 */ D3D9Surface* pPrimarySurface;
|
||||
/* 0x002c */ D3D9Surface* pExtendedPrimarySurface;
|
||||
/* 0x0030 */ DWORD dwUnknown0030;
|
||||
/* 0x0034 */ D3D9DriverSurface** ppBackBufferList;
|
||||
/* 0x0038 */ DWORD dwNumBackBuffers;
|
||||
/* 0x003c */ DWORD ChainIndex;
|
||||
/* 0x0040 */ DWORD AdapterGroupIndex;
|
||||
/* 0x0044 */ D3DPRESENT_PARAMETERS PresentParameters;
|
||||
/* 0x007c */ DWORD dwUnknown007c;
|
||||
/* 0x0080 */ DWORD dwUnknown0080[2]; /* Extended format? */
|
||||
/* 0x0088 */ D3D9Cursor* pCursor;
|
||||
/* 0x008c */ DWORD dwUnknown008c[4];
|
||||
/* 0x009c */ D3D9_Unknown6BC* pUnknown6BC;
|
||||
/* 0x00a0 */ LPDWORD dwUnknown00a0;
|
||||
/* 0x00a4 */ DWORD dwUnknown00a4;
|
||||
/* 0x00a8 */ DWORD dwUnknown00a8;
|
||||
/* 0x00ac */ DWORD dwWidth;
|
||||
/* 0x00b0 */ DWORD dwHeight;
|
||||
/* 0x00b4 */ DWORD dwUnknown00b4;
|
||||
/* 0x00b8 */ DWORD dwUnknown00b8;
|
||||
/* 0x00bc */ DWORD dwUnknown00bc;
|
||||
/* 0x00c0 */ DWORD dwWidth2;
|
||||
/* 0x00c4 */ DWORD dwHeight2;
|
||||
/* 0x00c8 */ DWORD dwUnknown00c8;
|
||||
/* 0x00cc */ DWORD dwUnknown00cc;
|
||||
/* 0x00d0 */ DWORD dwUnknown00d0;
|
||||
/* 0x00d4 */ DWORD dwUnknown00d4;
|
||||
/* 0x00d8 */ DWORD dwUnknown00d8;
|
||||
/* 0x00dc */ DWORD dwUnknown00dc;
|
||||
/* 0x00e0 */ DWORD dwDevModeScale;
|
||||
/* 0x00e4 */ DWORD dwUnknown00e4;
|
||||
/* 0x00e8 */ DWORD dwUnknown00e8;
|
||||
/* 0x00ec */ DWORD dwUnknown00ec;
|
||||
/* 0x00f0 */ DWORD dwUnknown00f0[27];
|
||||
|
||||
/* 0x015c */ LPDWORD pUnknown015c;
|
||||
/* 0x0160 */ DWORD dwUnknown0160[4];
|
||||
/* 0x0170 */ HRESULT hResult;
|
||||
|
||||
/* 0x0174 */ DWORD dwUnknown0174[26];
|
||||
|
||||
/* 0x01DC */ DWORD dwUnknownFlags; /* 1 = Show frame rate, 2 = Flip without vsync */
|
||||
/* 0x01E0 */ BOOL bForceRefreshRate;
|
||||
/* 0x01E4 */ DWORD dwUnknown01dc[4];
|
||||
|
||||
/* 0x01f4 */ D3DSWAPEFFECT SwapEffect;
|
||||
/* 0x01f8 */ DWORD dwUnknown01f8;
|
||||
/* 0x01fc */ DWORD dwUnknown01fc;
|
||||
/* 0x0200 */ DDGAMMARAMP GammaRamp;
|
||||
} Direct3DSwapChain9_INT, FAR* LPDIRECT3DSWAPCHAIN9_INT;
|
||||
|
||||
typedef struct _tagDirect3DDevice9_INT_
|
||||
typedef struct _Direct3DDevice9_INT
|
||||
{
|
||||
/* 0x0000 */ struct IDirect3DDevice9Vtbl* lpVtbl;
|
||||
/* 0x0004 */ CRITICAL_SECTION CriticalSection;
|
||||
|
@ -184,7 +77,7 @@ typedef struct _tagDirect3DDevice9_INT_
|
|||
#endif
|
||||
/* 0x001c - 0x0054 */ BOOL bLockDevice;
|
||||
/* 0x0020 - 0x0058 */ DWORD dwProcessId;
|
||||
/* 0x0024 - 0x005c */ struct _tagD3D9PUREDEVICE_* lpThis;
|
||||
/* 0x0024 - 0x005c */ struct _D3D9PUREDEVICE* lpThis;
|
||||
/* 0x0028 - 0x0060 */ DWORD dwDXVersion;
|
||||
/* 0x002c - 0x0064 */ DWORD unknown000011;
|
||||
/* 0x0030 - 0x0068 */ LONG lRefCnt;
|
||||
|
@ -195,51 +88,7 @@ typedef struct _tagDirect3DDevice9_INT_
|
|||
/* 0x0044 - 0x007c */ DWORD BehaviourFlags;
|
||||
/* 0x0048 - 0x0080 */ D3D9BaseSurface* pUnknown0010;
|
||||
/* 0x004c - 0x0084 */ DWORD NumAdaptersInDevice;
|
||||
/* 0x0050 - 0x0088 */ D3DDISPLAYMODE CurrentDisplayMode;
|
||||
/* 0x0060 - 0x0098 */ DWORD unknown000024;
|
||||
/* 0x0064 - 0x009c */ DWORD unknown000025;
|
||||
/* 0x0068 - 0x00a0 */ DWORD unknown000026;
|
||||
/* 0x006c - 0x00a4 */ DWORD unknown000027;
|
||||
/* 0x0070 - 0x00a8 */ DWORD unknown000028;
|
||||
/* 0x0074 - 0x00ac */ DWORD unknown000029;
|
||||
/* 0x0078 - 0x00b0 */ DWORD unknown000030;
|
||||
/* 0x007c - 0x00b4 */ DWORD unknown000031;
|
||||
/* 0x0080 - 0x00b8 */ DWORD unknown000032;
|
||||
/* 0x0084 - 0x00bc */ DWORD unknown000033;
|
||||
/* 0x0088 - 0x00c0 */ DWORD unknown000034;
|
||||
/* 0x008c - 0x00c4 */ DWORD unknown000035;
|
||||
/* 0x0090 - 0x00c8 */ DWORD unknown000036;
|
||||
/* 0x0094 - 0x00cc */ DWORD unknown000037;
|
||||
/* 0x0098 - 0x00d0 */ DWORD unknown000038;
|
||||
/* 0x009c - 0x00d4 */ DWORD unknown000039;
|
||||
/* 0x00a0 - 0x00d8 */ DWORD unknown000040;
|
||||
/* 0x00a4 - 0x00dc */ DWORD unknown000041;
|
||||
/* 0x00a8 - 0x00e0 */ DWORD unknown000042;
|
||||
/* 0x00ac - 0x00e4 */ DWORD unknown000043;
|
||||
/* 0x00b0 - 0x00e8 */ DWORD unknown000044;
|
||||
/* 0x00b4 - 0x00ec */ DWORD unknown000045;
|
||||
/* 0x00b8 - 0x00f0 */ DWORD unknown000046;
|
||||
/* 0x00bc - 0x00f4 */ DWORD unknown000047;
|
||||
/* 0x00c0 - 0x00f8 */ DWORD unknown000048;
|
||||
/* 0x00c4 - 0x00fc */ DWORD unknown000049;
|
||||
/* 0x00c8 - 0x0100 */ DWORD unknown000050;
|
||||
/* 0x00cc - 0x0104 */ DWORD unknown000051;
|
||||
/* 0x00d0 - 0x0108 */ DWORD unknown000052;
|
||||
/* 0x00d4 - 0x010c */ DWORD unknown000053;
|
||||
/* 0x00d8 - 0x0110 */ DWORD unknown000054;
|
||||
/* 0x00dc - 0x0114 */ DWORD unknown000055;
|
||||
/* 0x00e0 - 0x0118 */ DWORD unknown000056;
|
||||
/* 0x00e4 - 0x011c */ DWORD unknown000057;
|
||||
/* 0x00e8 - 0x0120 */ DWORD unknown000058;
|
||||
/* 0x00ec - 0x0124 */ DWORD unknown000059;
|
||||
/* 0x00f0 - 0x0128 */ DWORD unknown000060;
|
||||
/* 0x00f4 - 0x012c */ DWORD unknown000061;
|
||||
/* 0x00f8 - 0x0130 */ DWORD unknown000062;
|
||||
/* 0x00fc - 0x0134 */ DWORD unknown000063;
|
||||
/* 0x0100 - 0x0138 */ DWORD unknown000064;
|
||||
/* 0x0104 - 0x013c */ DWORD unknown000065;
|
||||
/* 0x0108 - 0x0140 */ DWORD unknown000066;
|
||||
/* 0x010c - 0x0144 */ DWORD unknown000067;
|
||||
/* 0x0050 - 0x0088 */ D3DDISPLAYMODE CurrentDisplayMode[D3D9_INT_MAX_NUM_ADAPTERS];
|
||||
/* 0x0110 - 0x0148 */ DWORD AdapterIndexInGroup[D3D9_INT_MAX_NUM_ADAPTERS];
|
||||
/* 0x0140 - 0x0178 */ D3D9_DEVICEDATA DeviceData[D3D9_INT_MAX_NUM_ADAPTERS];
|
||||
/* 0x1df0 - 0x1e28 */ LPDIRECT3DSWAPCHAIN9_INT pSwapChains[D3D9_INT_MAX_NUM_ADAPTERS];
|
||||
|
@ -308,7 +157,7 @@ typedef struct _tagDirect3DDevice9_INT_
|
|||
/* 0x1f44 */ DWORD unknown002001;
|
||||
} DIRECT3DDEVICE9_INT, FAR* LPDIRECT3DDEVICE9_INT;
|
||||
|
||||
typedef struct _tagD3D9PUREDEVICE_
|
||||
typedef struct _D3D9PUREDEVICE
|
||||
{
|
||||
/* 0x0000 - 0x0000 */ DIRECT3DDEVICE9_INT BaseDevice;
|
||||
/* 0x1f48 */ DWORD unknown002002;
|
||||
|
@ -392,7 +241,7 @@ typedef struct _tagD3D9PUREDEVICE_
|
|||
/* 0x2080 */ DWORD unknown002080;
|
||||
/* 0x2084 */ DWORD unknown002081;
|
||||
/* 0x2088 */ DWORD unknown002082;
|
||||
/* 0x208c */ DWORD unknown002083;
|
||||
/* 0x208c */ DWORD unknown002083;
|
||||
/* 0x2090 */ DWORD unknown002084;
|
||||
/* 0x2094 */ DWORD unknown002085;
|
||||
/* 0x2098 */ DWORD unknown002086;
|
||||
|
@ -409,7 +258,7 @@ typedef struct _tagD3D9PUREDEVICE_
|
|||
/* 0x20c4 */ DWORD unknown002097;
|
||||
/* 0x20c8 */ DWORD unknown002098;
|
||||
/* 0x20cc */ DWORD unknown002099;
|
||||
/* 0x20d0 */ DWORD unknown002100;
|
||||
/* 0x20d0 */ DWORD unknown002100;
|
||||
/* 0x20d4 */ DWORD unknown002101;
|
||||
/* 0x20d8 */ DWORD unknown002102;
|
||||
/* 0x20dc */ DWORD unknown002103;
|
||||
|
@ -629,7 +478,7 @@ typedef struct _tagD3D9PUREDEVICE_
|
|||
/* 0x2434 */ DWORD unknown002317;
|
||||
} D3D9PUREDEVICE, FAR *LPD3D9PUREDEVICE;
|
||||
|
||||
typedef struct _tagD3D9HALDEVICE_
|
||||
typedef struct _D3D9HALDEVICE
|
||||
{
|
||||
/* 0x0000 */ D3D9PUREDEVICE PureDevice;
|
||||
#ifdef D3D_DEBUG_INFO
|
||||
|
|
|
@ -81,7 +81,7 @@ HRESULT SafeCopyString(OUT LPSTR Dst, IN DWORD DstSize, IN LPCSTR Src)
|
|||
|
||||
HRESULT SafeAppendString(IN OUT LPSTR Dst, IN DWORD DstSize, IN LPCSTR Src)
|
||||
{
|
||||
DWORD CurrentDstLength;
|
||||
size_t CurrentDstLength;
|
||||
|
||||
if (Dst == NULL || DstSize == 0)
|
||||
return DDERR_INVALIDPARAMS;
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <debug.h>
|
||||
#include "d3d9_helpers.h"
|
||||
#include "adapter.h"
|
||||
#include "device.h"
|
||||
#include "format.h"
|
||||
|
||||
#define LOCK_D3D9() EnterCriticalSection(&This->d3d9_cs);
|
||||
|
@ -894,6 +895,7 @@ static HRESULT WINAPI IDirect3D9Impl_CreateDevice(LPDIRECT3D9 iface, UINT Adapte
|
|||
struct IDirect3DDevice9** ppReturnedDeviceInterface)
|
||||
{
|
||||
DWORD NumAdaptersToCreate;
|
||||
HRESULT Ret;
|
||||
|
||||
LPDIRECT3D9_INT This = impl_from_IDirect3D9(iface);
|
||||
LOCK_D3D9();
|
||||
|
@ -977,9 +979,10 @@ static HRESULT WINAPI IDirect3D9Impl_CreateDevice(LPDIRECT3D9 iface, UINT Adapte
|
|||
|
||||
*ppReturnedDeviceInterface = 0;
|
||||
|
||||
UNIMPLEMENTED
|
||||
Ret = CreateD3D9HalDevice(This, Adapter, hFocusWindow, BehaviourFlags, pPresentationParameters, NumAdaptersToCreate, ppReturnedDeviceInterface);
|
||||
|
||||
return D3D_OK;
|
||||
UNLOCK_D3D9();
|
||||
return Ret;
|
||||
}
|
||||
|
||||
IDirect3D9Vtbl Direct3D9_Vtbl =
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#ifndef _D3D9_PRIVATE_H_
|
||||
#define _D3D9_PRIVATE_H_
|
||||
|
||||
#include <windows.h>
|
||||
#include "d3d9_common.h"
|
||||
#include <ddraw.h>
|
||||
|
||||
#define D3D9_INT_MAX_NUM_ADAPTERS 12
|
||||
|
@ -25,14 +25,14 @@ typedef enum _D3D9_GETAVAILDRIVERMEMORY_TYPE
|
|||
|
||||
typedef struct _D3D9_GETAVAILDRIVERMEMORYDATA
|
||||
{
|
||||
/* 0x0000 */ struct _D3D9Unknown6BC_* pUnknown6BC;
|
||||
/* 0x0000 */ struct _D3D9_Unknown6BC* pUnknown6BC;
|
||||
/* 0x0004 */ D3D9_GETAVAILDRIVERMEMORY_TYPE dwMemoryType;
|
||||
/* 0x0008 */ DWORD dwTextureType;
|
||||
/* 0x000c */ DWORD dwFree;
|
||||
} D3D9_GETAVAILDRIVERMEMORYDATA, FAR* LPD3D9_GETAVAILDRIVERMEMORYDATA;
|
||||
typedef BOOL (WINAPI FAR* LPD3D9_GETAVAILDRIVERMEMORY)(LPD3D9_GETAVAILDRIVERMEMORYDATA);
|
||||
|
||||
typedef struct _D3D9Unknown6BC_
|
||||
typedef struct _D3D9_Unknown6BC
|
||||
{
|
||||
/* 0x0000 */ HANDLE hDirectDrawLocal;
|
||||
/* 0x0004 */ LPDWORD pUnknown0004;
|
||||
|
@ -78,7 +78,7 @@ typedef struct _D3D9Unknown6BC_
|
|||
/* 0x00BC */ DDGAMMARAMP GammaRamp;
|
||||
} D3D9_Unknown6BC;
|
||||
|
||||
typedef struct _tagD3D9_DRIVERCAPS
|
||||
typedef struct _D3D9_DRIVERCAPS
|
||||
{
|
||||
/* 0x0000 */ D3DCAPS9 DriverCaps9;
|
||||
/* 0x0130 */ DWORD dwDisplayWidth;
|
||||
|
@ -147,20 +147,20 @@ typedef struct _tagD3D9_CALLBACKS
|
|||
/* 0x00a4 */ D3DDEVTYPE DeviceType;
|
||||
} D3D9_CALLBACKS;
|
||||
|
||||
typedef struct _tagD3D9_DEVICEDATA_
|
||||
typedef struct _D3D9_DEVICEDATA
|
||||
{
|
||||
/* 0x0000 */ D3D9_DRIVERCAPS DriverCaps;
|
||||
/* 0x0178 */ D3D9_CALLBACKS D3D9Callbacks;
|
||||
/* 0x0220 */ CHAR szDeviceName[CCHDEVICENAME];
|
||||
/* 0x0240 */ HDC hDC;
|
||||
/* 0x0244 */ GUID DisplayGuid;
|
||||
/* 0x0254 */ D3D9_Unknown6BC* pUnknown6BC;
|
||||
/* 0x0254 */ struct _D3D9_Unknown6BC* pUnknown6BC;
|
||||
/* 0x0258 */ D3DDEVTYPE DeviceType;
|
||||
/* 0x025c */ HMODULE hD3DRefDll;
|
||||
/* 0x0260 */ DWORD unknown0152;
|
||||
} D3D9_DEVICEDATA, FAR *LPD3D9_DEVICEDATA;
|
||||
|
||||
typedef struct _tagDIRECT3D9DisplayAdapterInfo_
|
||||
typedef struct _Direct3D9DisplayAdapterInfo
|
||||
{
|
||||
/* 0x0000 */ GUID DisplayGuid;
|
||||
/* 0x0010 */ CHAR szDeviceName[MAX_PATH];
|
||||
|
@ -179,13 +179,13 @@ typedef struct _tagDIRECT3D9DisplayAdapterInfo_
|
|||
/* 0x02b8 */ DWORD unknown000105;
|
||||
} Direct3D9DisplayAdapterInfo, FAR* LPDIRECT3D9_DISPLAYADAPTER;
|
||||
|
||||
typedef struct _tagDIRECT3D9_INT_
|
||||
typedef struct _DIRECT3D9_INT
|
||||
{
|
||||
/* 0x0000 */ struct IDirect3D9Vtbl *lpVtbl; /* LPDIRECTD3D9 function table */
|
||||
/* 0x0004 */ CRITICAL_SECTION d3d9_cs;
|
||||
/* 0x001c */ DWORD unknown000007; /* 0x00000001 */
|
||||
/* 0x0020 */ DWORD dwProcessId;
|
||||
/* 0x0024 */ struct _tagDIRECT3D9_INT_ *lpInt;
|
||||
/* 0x0024 */ struct _DIRECT3D9_INT *lpInt;
|
||||
/* 0x0028 */ LONG lRefCnt; /* Increases and decreases by AddRef() and Release() */
|
||||
/* 0x002c */ UINT NumDisplayAdapters;
|
||||
/* 0x0030 */ Direct3D9DisplayAdapterInfo DisplayAdapters[D3D9_INT_MAX_NUM_ADAPTERS];
|
||||
|
|
41
reactos/dll/directx/d3d9/d3d9_surface.h
Normal file
41
reactos/dll/directx/d3d9/d3d9_surface.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
#ifndef _D3D9_SURFACE_H_
|
||||
#define _D3D9_SURFACE_H_
|
||||
|
||||
#include "d3d9_baseobject.h"
|
||||
|
||||
typedef struct _D3D9BaseSurface
|
||||
{
|
||||
/* 0x0000 */ LPDWORD lpVtbl;
|
||||
/* 0x0024 */ D3DFORMAT DisplayFormat2; // Back buffer format?
|
||||
/* 0x0028 */ DWORD dwUnknown0028; // Constant/ref count? (1)
|
||||
/* 0x002c */ DWORD dwUnknown002c; // Refresh rate?
|
||||
/* 0x0030 */ D3DPOOL SurfacePool;
|
||||
/* 0x0034 */ DWORD dwUnknown0034;
|
||||
/* 0x0038 */ DWORD dwUnknown0038;
|
||||
/* 0x003c */ DWORD dwWidth;
|
||||
/* 0x0040 */ DWORD dwHeight;
|
||||
/* 0x0044 */ D3DPOOL ResourcePool;
|
||||
/* 0x0048 */ D3DFORMAT DisplayFormat;
|
||||
/* 0x004c */ DWORD dwUnknown004c;
|
||||
/* 0x0050 */ DWORD dwUnknown0050;
|
||||
/* 0x0054 */ DWORD dwUnknown0054;
|
||||
/* 0x0058 */ DWORD dwBpp;
|
||||
} D3D9BaseSurface;
|
||||
|
||||
typedef struct _D3D9Surface
|
||||
{
|
||||
/* 0x0000 */ D3D9BaseObject BaseObject;
|
||||
/* 0x0020 */ D3D9BaseSurface BaseSurface;
|
||||
} D3D9Surface;
|
||||
|
||||
typedef struct _D3D9DriverSurface
|
||||
{
|
||||
/* 0x0000 */ D3D9Surface BaseD3D9Surface;
|
||||
/* 0x005c */ DWORD dwUnknown5c;
|
||||
/* 0x0060 */ DWORD dwUnknown60;
|
||||
/* 0x0064 */ struct _D3D9DriverSurface* pPreviousDriverSurface;
|
||||
/* 0x0068 */ struct _D3D9DriverSurface* pNextDriverSurface;
|
||||
/* 0x006c */ DWORD dwUnknown6c[8];
|
||||
} D3D9DriverSurface;
|
||||
|
||||
#endif // _D3D9_SURFACE_H_
|
153
reactos/dll/directx/d3d9/d3d9_swapchain.c
Normal file
153
reactos/dll/directx/d3d9/d3d9_swapchain.c
Normal file
|
@ -0,0 +1,153 @@
|
|||
#include "d3d9_swapchain.h"
|
||||
|
||||
#include <debug.h>
|
||||
#include <ddraw.h>
|
||||
|
||||
#include "d3d9_helpers.h"
|
||||
#include "d3d9_device.h"
|
||||
|
||||
/* Convert a IDirect3DSwapChain9 pointer safely to the internal implementation struct */
|
||||
static LPDIRECT3DSWAPCHAIN9_INT IDirect3DSwapChain9ToImpl(LPDIRECT3DSWAPCHAIN9 iface)
|
||||
{
|
||||
if (IsBadWritePtr(iface, sizeof(LPDIRECT3DSWAPCHAIN9_INT)))
|
||||
return NULL;
|
||||
|
||||
return (LPDIRECT3DSWAPCHAIN9_INT)((ULONG_PTR)iface - FIELD_OFFSET(Direct3DSwapChain9_INT, lpVtbl));
|
||||
}
|
||||
|
||||
/* IDirect3DSwapChain9: IUnknown implementation */
|
||||
static HRESULT WINAPI Direct3DSwapChain9_QueryInterface(LPDIRECT3DSWAPCHAIN9 iface, REFIID riid, void** ppvObject)
|
||||
{
|
||||
LPDIRECT3DSWAPCHAIN9_INT This = IDirect3DSwapChain9ToImpl(iface);
|
||||
|
||||
if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirect3DSwapChain9))
|
||||
{
|
||||
IUnknown_AddRef(iface);
|
||||
*ppvObject = &This->lpVtbl;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
*ppvObject = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI Direct3DSwapChain9_AddRef(LPDIRECT3DSWAPCHAIN9 iface)
|
||||
{
|
||||
LPDIRECT3DSWAPCHAIN9_INT This = IDirect3DSwapChain9ToImpl(iface);
|
||||
D3D9BaseObject* BaseObject = (D3D9BaseObject*)((ULONG_PTR)This - FIELD_OFFSET(Direct3DSwapChain9_INT, lpVtbl) - FIELD_OFFSET(Direct3DSwapChain9_INT, BaseObject));
|
||||
return D3D9BaseObject_AddRef(BaseObject);
|
||||
}
|
||||
|
||||
static ULONG WINAPI Direct3DSwapChain9_Release(LPDIRECT3DSWAPCHAIN9 iface)
|
||||
{
|
||||
LPDIRECT3DSWAPCHAIN9_INT This = IDirect3DSwapChain9ToImpl(iface);
|
||||
D3D9BaseObject* BaseObject = (D3D9BaseObject*)((ULONG_PTR)This - FIELD_OFFSET(Direct3DSwapChain9_INT, lpVtbl) - FIELD_OFFSET(Direct3DSwapChain9_INT, BaseObject));
|
||||
return D3D9BaseObject_Release(BaseObject);
|
||||
}
|
||||
|
||||
/* IDirect3DSwapChain9 interface */
|
||||
static HRESULT WINAPI Direct3DSwapChain9_Present(LPDIRECT3DSWAPCHAIN9 iface, CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Direct3DSwapChain9_GetFrontBufferData(LPDIRECT3DSWAPCHAIN9 iface, IDirect3DSurface9* pDestSurface)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Direct3DSwapChain9_GetBackBuffer(LPDIRECT3DSWAPCHAIN9 iface, UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Direct3DSwapChain9_GetRasterStatus(LPDIRECT3DSWAPCHAIN9 iface, D3DRASTER_STATUS* pRasterStatus)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Direct3DSwapChain9_GetDisplayMode(LPDIRECT3DSWAPCHAIN9 iface, D3DDISPLAYMODE* pMode)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Direct3DSwapChain9_GetDevice(LPDIRECT3DSWAPCHAIN9 iface, IDirect3DDevice9** ppDevice)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI Direct3DSwapChain9_GetPresentParameters(LPDIRECT3DSWAPCHAIN9 iface, D3DPRESENT_PARAMETERS* pPresentationParameters)
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
static IDirect3DSwapChain9Vtbl Direct3DSwapChain9_Vtbl =
|
||||
{
|
||||
/* IUnknown */
|
||||
Direct3DSwapChain9_QueryInterface,
|
||||
Direct3DSwapChain9_AddRef,
|
||||
Direct3DSwapChain9_Release,
|
||||
|
||||
/* IDirect3DSwapChain9 */
|
||||
Direct3DSwapChain9_Present,
|
||||
Direct3DSwapChain9_GetFrontBufferData,
|
||||
Direct3DSwapChain9_GetBackBuffer,
|
||||
Direct3DSwapChain9_GetRasterStatus,
|
||||
Direct3DSwapChain9_GetDisplayMode,
|
||||
Direct3DSwapChain9_GetDevice,
|
||||
Direct3DSwapChain9_GetPresentParameters,
|
||||
};
|
||||
|
||||
Direct3DSwapChain9_INT* CreateDirect3DSwapChain9(enum REF_TYPE RefType, struct _Direct3DDevice9_INT* pBaseDevice, DWORD ChainIndex)
|
||||
{
|
||||
Direct3DSwapChain9_INT* pThisSwapChain;
|
||||
if (FAILED(AlignedAlloc((LPVOID *)&pThisSwapChain, sizeof(Direct3DSwapChain9_INT))))
|
||||
{
|
||||
DPRINT1("Could not create Direct3DSwapChain9_INT");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
InitD3D9BaseObject(&pThisSwapChain->BaseObject, RefType, pBaseDevice);
|
||||
|
||||
pThisSwapChain->lpVtbl = &Direct3DSwapChain9_Vtbl;
|
||||
|
||||
pThisSwapChain->ChainIndex = ChainIndex;
|
||||
pThisSwapChain->AdapterGroupIndex = ChainIndex;
|
||||
pThisSwapChain->pUnknown6BC = pBaseDevice->DeviceData[ChainIndex].pUnknown6BC;
|
||||
pThisSwapChain->pUnknown015c = (LPVOID)0xD3D9D3D9;
|
||||
|
||||
return pThisSwapChain;
|
||||
}
|
||||
|
||||
VOID Direct3DSwapChain9_SetDisplayMode(Direct3DSwapChain9_INT* pThisSwapChain, D3DDISPLAYMODE* pMode)
|
||||
{
|
||||
pThisSwapChain->dwWidth = pMode->Width;
|
||||
pThisSwapChain->dwHeight = pMode->Height;
|
||||
}
|
||||
|
||||
HRESULT Direct3DSwapChain9_Init(Direct3DSwapChain9_INT* pThisSwapChain, D3DPRESENT_PARAMETERS* pPresentationParameters)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
pThisSwapChain->GammaRamp.red[i] =
|
||||
pThisSwapChain->GammaRamp.green[i] =
|
||||
pThisSwapChain->GammaRamp.blue[i] = i;
|
||||
}
|
||||
|
||||
return Direct3DSwapChain9_Reset(pThisSwapChain, pPresentationParameters);
|
||||
}
|
||||
|
||||
HRESULT Direct3DSwapChain9_Reset(Direct3DSwapChain9_INT* pThisSwapChain, D3DPRESENT_PARAMETERS* pPresentationParameters)
|
||||
{
|
||||
// TODO: Do all the dirty work...
|
||||
return D3D_OK;
|
||||
}
|
72
reactos/dll/directx/d3d9/d3d9_swapchain.h
Normal file
72
reactos/dll/directx/d3d9/d3d9_swapchain.h
Normal file
|
@ -0,0 +1,72 @@
|
|||
#ifndef _D3D9_SWAPCHAIN_H_
|
||||
#define _D3D9_SWAPCHAIN_H_
|
||||
|
||||
#include "d3d9_common.h"
|
||||
#include <d3d9.h>
|
||||
#include <ddraw.h>
|
||||
#include "d3d9_baseobject.h"
|
||||
|
||||
typedef struct _Direct3DSwapChain9_INT
|
||||
{
|
||||
/* 0x0000 */ D3D9BaseObject BaseObject;
|
||||
/* 0x0020 */ struct IDirect3DSwapChain9Vtbl* lpVtbl;
|
||||
/* 0x0024 */ DWORD dwUnknown0024;
|
||||
/* 0x0028 */ struct _D3D9Surface* pPrimarySurface;
|
||||
/* 0x002c */ struct _D3D9Surface* pExtendedPrimarySurface;
|
||||
/* 0x0030 */ DWORD dwUnknown0030;
|
||||
/* 0x0034 */ struct _D3D9DriverSurface** ppBackBufferList;
|
||||
/* 0x0038 */ DWORD dwNumBackBuffers;
|
||||
/* 0x003c */ DWORD ChainIndex;
|
||||
/* 0x0040 */ DWORD AdapterGroupIndex;
|
||||
/* 0x0044 */ D3DPRESENT_PARAMETERS PresentParameters;
|
||||
/* 0x007c */ DWORD dwUnknown007c;
|
||||
/* 0x0080 */ DWORD dwUnknown0080[2]; /* Extended format? */
|
||||
/* 0x0088 */ struct _D3D9Cursor* pCursor;
|
||||
/* 0x008c */ DWORD dwUnknown008c[4];
|
||||
/* 0x009c */ struct _D3D9_Unknown6BC* pUnknown6BC;
|
||||
/* 0x00a0 */ LPDWORD dwUnknown00a0;
|
||||
/* 0x00a4 */ DWORD dwUnknown00a4;
|
||||
/* 0x00a8 */ DWORD dwUnknown00a8;
|
||||
/* 0x00ac */ DWORD dwWidth;
|
||||
/* 0x00b0 */ DWORD dwHeight;
|
||||
/* 0x00b4 */ DWORD dwUnknown00b4;
|
||||
/* 0x00b8 */ DWORD dwUnknown00b8;
|
||||
/* 0x00bc */ DWORD dwUnknown00bc;
|
||||
/* 0x00c0 */ DWORD dwWidth2;
|
||||
/* 0x00c4 */ DWORD dwHeight2;
|
||||
/* 0x00c8 */ DWORD dwUnknown00c8;
|
||||
/* 0x00cc */ DWORD dwUnknown00cc;
|
||||
/* 0x00d0 */ DWORD dwUnknown00d0;
|
||||
/* 0x00d4 */ DWORD dwUnknown00d4;
|
||||
/* 0x00d8 */ DWORD dwUnknown00d8;
|
||||
/* 0x00dc */ DWORD dwUnknown00dc;
|
||||
/* 0x00e0 */ DWORD dwDevModeScale;
|
||||
/* 0x00e4 */ DWORD dwUnknown00e4;
|
||||
/* 0x00e8 */ DWORD dwUnknown00e8;
|
||||
/* 0x00ec */ DWORD dwUnknown00ec;
|
||||
/* 0x00f0 */ DWORD dwUnknown00f0[27];
|
||||
|
||||
/* 0x015c */ LPVOID pUnknown015c;
|
||||
/* 0x0160 */ DWORD dwUnknown0160[4];
|
||||
/* 0x0170 */ HRESULT hResult;
|
||||
|
||||
/* 0x0174 */ DWORD dwUnknown0174[26];
|
||||
|
||||
/* 0x01DC */ DWORD dwUnknownFlags; /* 1 = Show frame rate, 2 = Flip without vsync */
|
||||
/* 0x01E0 */ BOOL bForceRefreshRate;
|
||||
/* 0x01E4 */ DWORD dwUnknown01dc[4];
|
||||
|
||||
/* 0x01f4 */ D3DSWAPEFFECT SwapEffect;
|
||||
/* 0x01f8 */ DWORD dwUnknown01f8;
|
||||
/* 0x01fc */ DWORD dwUnknown01fc;
|
||||
/* 0x0200 */ DDGAMMARAMP GammaRamp;
|
||||
} Direct3DSwapChain9_INT, FAR* LPDIRECT3DSWAPCHAIN9_INT;
|
||||
|
||||
|
||||
Direct3DSwapChain9_INT* CreateDirect3DSwapChain9(enum REF_TYPE RefType, struct _Direct3DDevice9_INT* pBaseDevice, DWORD ChainIndex);
|
||||
|
||||
VOID Direct3DSwapChain9_SetDisplayMode(Direct3DSwapChain9_INT* pThisSwapChain, D3DDISPLAYMODE* pMode);
|
||||
HRESULT Direct3DSwapChain9_Init(Direct3DSwapChain9_INT* pThisSwapChain, D3DPRESENT_PARAMETERS* pPresentationParameters);
|
||||
HRESULT Direct3DSwapChain9_Reset(Direct3DSwapChain9_INT* pThisSwapChain, D3DPRESENT_PARAMETERS* pPresentationParameters);
|
||||
|
||||
#endif // _D3D9_SWAPCHAIN_H_
|
108
reactos/dll/directx/d3d9/device.c
Normal file
108
reactos/dll/directx/d3d9/device.c
Normal file
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS ReactX
|
||||
* FILE: dll/directx/d3d9/device.c
|
||||
* PURPOSE: Direct3D9's device creation
|
||||
* PROGRAMERS: Gregor Gullwi <gbrunmar (dot) ros (at) gmail (dot) com>
|
||||
*/
|
||||
|
||||
#include "device.h"
|
||||
#include <debug.h>
|
||||
#include "d3d9_helpers.h"
|
||||
|
||||
static HRESULT InitD3D9ResourceManager(D3D9ResourceManager* pThisResourceManager, LPDIRECT3DDEVICE9_INT pDirect3DDevice9)
|
||||
{
|
||||
DWORD MaxSimultaneousTextures;
|
||||
|
||||
MaxSimultaneousTextures = max(1, pDirect3DDevice9->DeviceData[0].DriverCaps.DriverCaps9.MaxSimultaneousTextures);
|
||||
|
||||
if (FAILED(AlignedAlloc((LPVOID *)&pThisResourceManager->pTextureHeap, sizeof(DWORD) + MaxSimultaneousTextures * sizeof(int) * 3)))
|
||||
{
|
||||
DPRINT1("Could not allocate texture heap");
|
||||
return DDERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
// TODO: Init texture heap
|
||||
|
||||
pThisResourceManager->MaxSimultaneousTextures = MaxSimultaneousTextures;
|
||||
pThisResourceManager->pBaseDevice = pDirect3DDevice9;
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
HRESULT InitD3D9BaseDevice(LPDIRECT3DDEVICE9_INT pThisBaseDevice, LPDIRECT3D9_INT pDirect3D9,
|
||||
UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviourFlags,
|
||||
D3DPRESENT_PARAMETERS* pPresentationParameters, DWORD NumAdaptersToCreate)
|
||||
{
|
||||
D3D9ResourceManager* pResourceManager;
|
||||
DWORD i;
|
||||
D3DDISPLAYMODE DisplayMode;
|
||||
|
||||
// Insert Reset/Ctor here
|
||||
|
||||
if (FAILED(AlignedAlloc((LPVOID *)&pResourceManager, sizeof(D3D9ResourceManager))) ||
|
||||
FAILED(InitD3D9ResourceManager(pResourceManager, pThisBaseDevice)))
|
||||
{
|
||||
DPRINT1("Could not create resource manager");
|
||||
return DDERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
pThisBaseDevice->pResourceManager = pResourceManager;
|
||||
|
||||
pThisBaseDevice->pDirect3D9 = pDirect3D9;
|
||||
pThisBaseDevice->DeviceType = DeviceType;
|
||||
pThisBaseDevice->hWnd = hFocusWindow;
|
||||
pThisBaseDevice->AdjustedBehaviourFlags = BehaviourFlags;
|
||||
pThisBaseDevice->BehaviourFlags = BehaviourFlags;
|
||||
pThisBaseDevice->NumAdaptersInDevice = NumAdaptersToCreate;
|
||||
|
||||
// TODO: Query driver for correct DX version
|
||||
pThisBaseDevice->dwDXVersion = 9;
|
||||
|
||||
DisplayMode = pThisBaseDevice->CurrentDisplayMode[0];
|
||||
for (i = 0; i < NumAdaptersToCreate; i++)
|
||||
{
|
||||
pThisBaseDevice->CurrentDisplayMode[i] = pThisBaseDevice->CurrentDisplayMode[0];
|
||||
pThisBaseDevice->AdapterIndexInGroup[i] = i;
|
||||
// TODO: Fill pThisBaseDevice->DeviceData[i]
|
||||
|
||||
pThisBaseDevice->pSwapChains[i] = CreateDirect3DSwapChain9(RT_BUILTIN, pThisBaseDevice, i);
|
||||
pThisBaseDevice->pSwapChains2[i] = pThisBaseDevice->pSwapChains[i];
|
||||
Direct3DSwapChain9_SetDisplayMode(pThisBaseDevice->pSwapChains[i], &DisplayMode);
|
||||
|
||||
if (FAILED(Direct3DSwapChain9_Init(pThisBaseDevice->pSwapChains[i], pPresentationParameters)))
|
||||
{
|
||||
DPRINT1("Failed to init swap chain: %d", i);
|
||||
return DDERR_GENERIC;
|
||||
}
|
||||
}
|
||||
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
HRESULT CreateD3D9HalDevice(LPDIRECT3D9_INT pDirect3D9, UINT Adapter,
|
||||
HWND hFocusWindow, DWORD BehaviourFlags,
|
||||
D3DPRESENT_PARAMETERS* pPresentationParameters,
|
||||
DWORD NumAdaptersToCreate,
|
||||
struct IDirect3DDevice9** ppReturnedDeviceInterface)
|
||||
{
|
||||
HRESULT Ret;
|
||||
|
||||
if (FAILED(AlignedAlloc((LPVOID *)ppReturnedDeviceInterface, sizeof(D3D9HALDEVICE))))
|
||||
{
|
||||
DPRINT1("Not enough memory to create HAL device");
|
||||
return DDERR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
Ret = InitD3D9BaseDevice((LPDIRECT3DDEVICE9_INT)*ppReturnedDeviceInterface, pDirect3D9, Adapter,
|
||||
D3DDEVTYPE_HAL, hFocusWindow, BehaviourFlags,
|
||||
pPresentationParameters, NumAdaptersToCreate);
|
||||
|
||||
if (FAILED(Ret))
|
||||
{
|
||||
AlignedFree((LPVOID)*ppReturnedDeviceInterface);
|
||||
return Ret;
|
||||
}
|
||||
|
||||
return D3D_OK;
|
||||
}
|
20
reactos/dll/directx/d3d9/device.h
Normal file
20
reactos/dll/directx/d3d9/device.h
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS ReactX
|
||||
* FILE: dll/directx/d3d9/device.h
|
||||
* PURPOSE: Direct3D9's device creation
|
||||
* PROGRAMERS: Gregor Gullwi <gbrunmar (dot) ros (at) gmail (dot) com>
|
||||
*/
|
||||
|
||||
#ifndef _DEVICE_H_
|
||||
#define _DEVICE_H_
|
||||
|
||||
#include "d3d9_device.h"
|
||||
|
||||
HRESULT CreateD3D9HalDevice(LPDIRECT3D9_INT pDirect3D9, UINT Adapter,
|
||||
HWND hFocusWindow, DWORD BehaviourFlags,
|
||||
D3DPRESENT_PARAMETERS* pPresentationParameters,
|
||||
DWORD NumAdaptersToCreate,
|
||||
struct IDirect3DDevice9** ppReturnedDeviceInterface);
|
||||
|
||||
#endif // _DEVICE_H_
|
Loading…
Reference in a new issue