2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS ReactX
4 * FILE: dll/directx/d3d9/d3d9_impl.c
5 * PURPOSE: IDirect3D9 implementation
6 * PROGRAMERS: Gregor Brunmar <gregor (dot) brunmar (at) home (dot) se>
8 #include "d3d9_helpers.h"
12 /* IDirect3D9: IUnknown implementation */
13 static HRESULT WINAPI
IDirect3D9Impl_QueryInterface(LPDIRECT3D9 iface
, REFIID riid
, LPVOID
* ppvObject
)
15 LPDIRECT3D9_INT This
= impl_from_IDirect3D9(iface
);
17 if (IsEqualGUID(riid
, &IID_IUnknown
) || IsEqualGUID(riid
, &IID_IDirect3D9
))
19 IUnknown_AddRef(iface
);
20 *ppvObject
= &This
->lpVtbl
;
28 static ULONG WINAPI
IDirect3D9Impl_AddRef(LPDIRECT3D9 iface
)
30 LPDIRECT3D9_INT This
= impl_from_IDirect3D9(iface
);
31 ULONG ref
= InterlockedIncrement(&This
->dwRefCnt
);
36 static ULONG WINAPI
IDirect3D9Impl_Release(LPDIRECT3D9 iface
)
38 LPDIRECT3D9_INT This
= impl_from_IDirect3D9(iface
);
39 ULONG ref
= InterlockedDecrement(&This
->dwRefCnt
);
43 EnterCriticalSection(&This
->d3d9_cs
);
44 /* TODO: Free resources here */
45 LeaveCriticalSection(&This
->d3d9_cs
);
52 /* IDirect3D9 interface */
53 static HRESULT WINAPI
IDirect3D9Impl_RegisterSoftwareDevice(LPDIRECT3D9 iface
, void* pInitializeFunction
)
60 static UINT WINAPI
IDirect3D9Impl_GetAdapterCount(LPDIRECT3D9 iface
)
67 static HRESULT WINAPI
IDirect3D9Impl_GetAdapterIdentifier(LPDIRECT3D9 iface
, UINT Adapter
, DWORD Flags
,
68 D3DADAPTER_IDENTIFIER9
* pIdentifier
)
75 static UINT WINAPI
IDirect3D9Impl_GetAdapterModeCount(LPDIRECT3D9 iface
, UINT Adapter
, D3DFORMAT Format
)
82 static HRESULT WINAPI
IDirect3D9Impl_EnumAdapterModes(LPDIRECT3D9 iface
, UINT Adapter
, D3DFORMAT Format
,
83 UINT Mode
, D3DDISPLAYMODE
* pMode
)
90 static HRESULT WINAPI
IDirect3D9Impl_GetAdapterDisplayMode(LPDIRECT3D9 iface
, UINT Adapter
, D3DDISPLAYMODE
* pMode
)
97 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceType(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE CheckType
,
98 D3DFORMAT DisplayFormat
, D3DFORMAT BackBufferFormat
, BOOL Windowed
)
105 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceFormat(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
106 D3DFORMAT AdapterFormat
, DWORD Usage
, D3DRESOURCETYPE RType
,
107 D3DFORMAT CheckFormat
)
114 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceMultiSampleType(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
115 D3DFORMAT SurfaceFormat
, BOOL Windowed
,
116 D3DMULTISAMPLE_TYPE MultiSampleType
, DWORD
* pQualityLevels
)
123 static HRESULT WINAPI
IDirect3D9Impl_CheckDepthStencilMatch(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
124 D3DFORMAT AdapterFormat
, D3DFORMAT RenderTargetFormat
,
125 D3DFORMAT DepthStencilFormat
)
132 static HRESULT WINAPI
IDirect3D9Impl_CheckDeviceFormatConversion(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
133 D3DFORMAT SourceFormat
, D3DFORMAT TargetFormat
)
140 static HRESULT WINAPI
IDirect3D9Impl_GetDeviceCaps(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
, D3DCAPS9
* pCaps
)
147 static HMONITOR WINAPI
IDirect3D9Impl_GetAdapterMonitor(LPDIRECT3D9 iface
, UINT Adapter
)
154 static HRESULT WINAPI
IDirect3D9Impl_CreateDevice(LPDIRECT3D9 iface
, UINT Adapter
, D3DDEVTYPE DeviceType
,
155 HWND hFocusWindow
, DWORD BehaviourFlags
,
156 D3DPRESENT_PARAMETERS
* pPresentationParameters
,
157 struct IDirect3DDevice9
** ppReturnedDeviceInterface
)
164 const IDirect3D9Vtbl Direct3D9_Vtbl
=
167 IDirect3D9Impl_QueryInterface
,
168 IDirect3D9Impl_AddRef
,
169 IDirect3D9Impl_Release
,
172 IDirect3D9Impl_RegisterSoftwareDevice
,
173 IDirect3D9Impl_GetAdapterCount
,
174 IDirect3D9Impl_GetAdapterIdentifier
,
175 IDirect3D9Impl_GetAdapterModeCount
,
176 IDirect3D9Impl_EnumAdapterModes
,
177 IDirect3D9Impl_GetAdapterDisplayMode
,
178 IDirect3D9Impl_CheckDeviceType
,
179 IDirect3D9Impl_CheckDeviceFormat
,
180 IDirect3D9Impl_CheckDeviceMultiSampleType
,
181 IDirect3D9Impl_CheckDepthStencilMatch
,
182 IDirect3D9Impl_CheckDeviceFormatConversion
,
183 IDirect3D9Impl_GetDeviceCaps
,
184 IDirect3D9Impl_GetAdapterMonitor
,
185 IDirect3D9Impl_CreateDevice