Removed W->A from DEFWND_ImmIsUIMessageW.
[wine] / dlls / d3d9 / device.c
1 /*
2  * IDirect3DDevice9 implementation
3  *
4  * Copyright 2002-2003 Jason Edmeades
5  *                     Raphael Junqueira
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  */
21
22 #include "config.h"
23 #include "d3d9_private.h"
24
25 /** currently desactiving 1_4 support as mesa doesn't implement all 1_4 support while defining it */
26 #undef GL_VERSION_1_4
27
28 WINE_DEFAULT_DEBUG_CHANNEL(d3d);
29 WINE_DECLARE_DEBUG_CHANNEL(d3d_shader);
30
31
32 /* IDirect3D IUnknown parts follow: */
33 HRESULT WINAPI IDirect3DDevice9Impl_QueryInterface(LPDIRECT3DDEVICE9 iface, REFIID riid, LPVOID* ppobj) {
34     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
35
36     if (IsEqualGUID(riid, &IID_IUnknown)
37         || IsEqualGUID(riid, &IID_IDirect3DDevice9)) {
38         IDirect3DDevice9Impl_AddRef(iface);
39         *ppobj = This;
40         return D3D_OK;
41     }
42
43     WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
44     return E_NOINTERFACE;
45 }
46
47 ULONG WINAPI IDirect3DDevice9Impl_AddRef(LPDIRECT3DDEVICE9 iface) {
48     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
49     TRACE("(%p) : AddRef from %ld\n", This, This->ref);
50     return ++(This->ref);
51 }
52
53 ULONG WINAPI IDirect3DDevice9Impl_Release(LPDIRECT3DDEVICE9 iface) {
54     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
55     ULONG ref = --This->ref;
56     TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
57     if (ref == 0) {
58       IDirect3D9_Release((LPDIRECT3D9) This->direct3d);
59       IWineD3DDevice_Release(This->WineD3DDevice);
60       HeapFree(GetProcessHeap(), 0, This);
61     }
62     return ref;
63 }
64
65 /* IDirect3DDevice Interface follow: */
66 HRESULT  WINAPI  IDirect3DDevice9Impl_TestCooperativeLevel(LPDIRECT3DDEVICE9 iface) {
67     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
68     TRACE("(%p) : stub\n", This);    /* No way of notifying yet! */
69     return D3D_OK;
70 }
71
72 UINT     WINAPI  IDirect3DDevice9Impl_GetAvailableTextureMem(LPDIRECT3DDEVICE9 iface) {
73     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
74     TRACE("(%p) : stub, emulating 32Mb for now\n", This);
75     /*
76      * pretend we have 32MB of any type of memory queried.
77      */
78     return (1024*1024*32);
79 }
80
81 HRESULT  WINAPI  IDirect3DDevice9Impl_EvictManagedRessources(LPDIRECT3DDEVICE9 iface) {
82     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
83     FIXME("(%p) : stub\n", This);    
84     return D3D_OK;
85 }
86
87 HRESULT  WINAPI  IDirect3DDevice9Impl_GetDirect3D(LPDIRECT3DDEVICE9 iface, IDirect3D9** ppD3D9) {
88     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
89     TRACE("(%p) : returning %p\n", This, This->direct3d);
90     /* Inc ref count */
91     *ppD3D9 = (IDirect3D9*) This->direct3d;
92     IDirect3D9_AddRef(*ppD3D9);
93     return D3D_OK;
94 }
95
96 HRESULT  WINAPI  IDirect3DDevice9Impl_GetDeviceCaps(LPDIRECT3DDEVICE9 iface, D3DCAPS9* pCaps) {
97     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
98     FIXME("(%p) : stub, calling idirect3d for now\n", This);
99     IDirect3D9Impl_GetDeviceCaps((LPDIRECT3D9) This->direct3d, This->adapterNo, This->devType, pCaps);
100     return D3D_OK;
101 }
102
103 HRESULT  WINAPI  IDirect3DDevice9Impl_GetDisplayMode(LPDIRECT3DDEVICE9 iface, UINT iSwapChain, D3DDISPLAYMODE* pMode) {
104     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
105     FIXME("(%p) : stub\n", This);
106     return D3D_OK;
107 }
108
109 HRESULT  WINAPI  IDirect3DDevice9Impl_GetCreationParameters(LPDIRECT3DDEVICE9 iface, D3DDEVICE_CREATION_PARAMETERS *pParameters) {
110     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
111     TRACE("(%p) copying to %p\n", This, pParameters);    
112     memcpy(pParameters, &This->CreateParms, sizeof(D3DDEVICE_CREATION_PARAMETERS));
113     return D3D_OK;
114 }
115
116 HRESULT  WINAPI  IDirect3DDevice9Impl_SetCursorProperties(LPDIRECT3DDEVICE9 iface, UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) {
117     IDirect3DSurface9Impl* pSur = (IDirect3DSurface9Impl*) pCursorBitmap;
118     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
119     TRACE("(%p) : Spot Pos(%u,%u)\n", This, XHotSpot, YHotSpot);
120
121     if (D3DFMT_A8R8G8B8 != pSur->myDesc.Format) {
122       ERR("(%p) : surface(%p) have a invalid format\n", This, pCursorBitmap);
123       return D3DERR_INVALIDCALL;
124     }
125     if (32 != pSur->myDesc.Height || 32 != pSur->myDesc.Width) {
126       ERR("(%p) : surface(%p) have a invalid size\n", This, pCursorBitmap);
127       return D3DERR_INVALIDCALL;
128     }
129
130     This->xHotSpot = XHotSpot;
131     This->yHotSpot = YHotSpot;
132     return D3D_OK;
133 }
134
135 void     WINAPI  IDirect3DDevice9Impl_SetCursorPosition(LPDIRECT3DDEVICE9 iface, int XScreenSpace, int YScreenSpace, DWORD Flags) {
136     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
137     TRACE("(%p) : SetPos to (%u,%u)\n", This, XScreenSpace, YScreenSpace);
138     This->xScreenSpace = XScreenSpace;
139     This->yScreenSpace = YScreenSpace;
140     return;
141 }
142
143 BOOL     WINAPI  IDirect3DDevice9Impl_ShowCursor(LPDIRECT3DDEVICE9 iface, BOOL bShow) {
144     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
145     TRACE("(%p) : visible(%d)\n", This, bShow); 
146     This->bCursorVisible = bShow;
147     return D3D_OK;
148 }
149
150 HRESULT  WINAPI  IDirect3DDevice9Impl_Reset(LPDIRECT3DDEVICE9 iface, D3DPRESENT_PARAMETERS* pPresentationParameters) {
151     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
152     FIXME("(%p) : stub\n", This);
153     return D3D_OK;
154 }
155
156 HRESULT  WINAPI  IDirect3DDevice9Impl_Present(LPDIRECT3DDEVICE9 iface, CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) {
157     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
158     TRACE("(%p) : stub!\n", This);
159     return D3D_OK;
160 }
161
162 HRESULT  WINAPI  IDirect3DDevice9Impl_GetBackBuffer(LPDIRECT3DDEVICE9 iface, UINT iSwapChain, UINT BackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) {
163     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
164     *ppBackBuffer = (LPDIRECT3DSURFACE9) This->backBuffer;
165     TRACE("(%p) : BackBuf %d Type %d returning %p\n", This, BackBuffer, Type, *ppBackBuffer);
166     if (BackBuffer > This->PresentParms.BackBufferCount - 1) {
167         FIXME("Only one backBuffer currently supported\n");
168         return D3DERR_INVALIDCALL;
169     }
170     /* Note inc ref on returned surface */
171     IDirect3DSurface9Impl_AddRef((LPDIRECT3DSURFACE9) *ppBackBuffer);
172     return D3D_OK;
173 }
174
175 HRESULT  WINAPI  IDirect3DDevice9Impl_GetRasterStatus(LPDIRECT3DDEVICE9 iface, UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) {
176     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
177     FIXME("(%p) : stub\n", This);    
178     return D3D_OK;
179 }
180
181 HRESULT WINAPI IDirect3DDevice9Impl_SetDialogBoxMode(LPDIRECT3DDEVICE9 iface, BOOL bEnableDialogs) {
182     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
183     FIXME("(%p) : stub\n", This);    
184     return D3D_OK;
185 }
186
187 void WINAPI IDirect3DDevice9Impl_SetGammaRamp(LPDIRECT3DDEVICE9 iface, UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) {
188     HDC hDC;
189     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
190
191     FIXME("(%p) : pRamp@%p\n", This, pRamp);
192     hDC = GetDC(This->win_handle);
193     SetDeviceGammaRamp(hDC, (LPVOID) pRamp);
194     ReleaseDC(This->win_handle, hDC);
195     return;
196 }
197
198 void WINAPI IDirect3DDevice9Impl_GetGammaRamp(LPDIRECT3DDEVICE9 iface, UINT iSwapChain, D3DGAMMARAMP* pRamp) {
199     HDC hDC;
200     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
201
202     FIXME("(%p) : pRamp@%p\n", This, pRamp);
203     hDC = GetDC(This->win_handle);
204     GetDeviceGammaRamp(hDC, pRamp);
205     ReleaseDC(This->win_handle, hDC);
206     return;
207 }
208
209 HRESULT  WINAPI  IDirect3DDevice9Impl_CreateRenderTarget(LPDIRECT3DDEVICE9 iface, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) {
210     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
211     FIXME("(%p) : stub\n", This);    
212     return D3D_OK;
213 }
214
215 HRESULT  WINAPI  IDirect3DDevice9Impl_CreateDepthStencilSurface(LPDIRECT3DDEVICE9 iface, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) {
216     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
217     FIXME("(%p) : stub\n", This);    
218     return D3D_OK;
219 }
220
221 HRESULT  WINAPI  IDirect3DDevice9Impl_UpdateSurface(LPDIRECT3DDEVICE9 iface, IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) {
222     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
223     FIXME("(%p) : stub\n", This);
224     return D3D_OK;
225 }
226
227 HRESULT  WINAPI  IDirect3DDevice9Impl_UpdateTexture(LPDIRECT3DDEVICE9 iface, IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) {
228     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
229     FIXME("(%p) : stub\n", This);
230     return D3D_OK;
231 }
232
233 HRESULT  WINAPI  IDirect3DDevice9Impl_GetFrontBuffer(LPDIRECT3DDEVICE9 iface, IDirect3DSurface9* pDestSurface) {
234     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
235     FIXME("(%p) : stub\n", This);
236     return D3D_OK;
237 }
238
239 HRESULT  WINAPI  IDirect3DDevice9Impl_GetRenderTargetData(LPDIRECT3DDEVICE9 iface, IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) {
240     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
241     FIXME("(%p) : stub\n", This);
242     return D3D_OK;
243 }
244
245 HRESULT  WINAPI  IDirect3DDevice9Impl_GetFrontBufferData(LPDIRECT3DDEVICE9 iface, UINT iSwapChain, IDirect3DSurface9* pDestSurface) {
246     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
247     FIXME("(%p) : stub\n", This);
248     return D3D_OK;
249 }
250
251 HRESULT  WINAPI  IDirect3DDevice9Impl_StretchRects(LPDIRECT3DDEVICE9 iface, IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) {
252     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
253     FIXME("(%p) : stub\n", This);
254     return D3D_OK;
255 }
256
257 HRESULT  WINAPI  IDirect3DDevice9Impl_ColorFill(LPDIRECT3DDEVICE9 iface, IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) {
258     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
259     FIXME("(%p) : stub\n", This);
260     return D3D_OK;
261 }
262
263 HRESULT  WINAPI  IDirect3DDevice9Impl_CreateOffscreenPlainSurface(LPDIRECT3DDEVICE9 iface, UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) {
264     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
265     FIXME("(%p) : stub\n", This);
266     return D3D_OK;
267 }
268
269 HRESULT  WINAPI  IDirect3DDevice9Impl_SetRenderTarget(LPDIRECT3DDEVICE9 iface, DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) {
270     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
271     FIXME("(%p) : stub\n", This);
272     return D3D_OK;
273 }
274
275 HRESULT  WINAPI  IDirect3DDevice9Impl_GetRenderTarget(LPDIRECT3DDEVICE9 iface, DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) {
276     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
277     FIXME("(%p) : stub\n", This);
278     return D3D_OK;
279 }
280
281 HRESULT  WINAPI  IDirect3DDevice9Impl_SetDepthStencilSurface(LPDIRECT3DDEVICE9 iface, IDirect3DSurface9* pZStencilSurface) {
282     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
283     FIXME("(%p) : stub\n", This);
284     return D3D_OK;
285 }
286
287 HRESULT  WINAPI  IDirect3DDevice9Impl_GetDepthStencilSurface(LPDIRECT3DDEVICE9 iface, IDirect3DSurface9** ppZStencilSurface) {
288     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
289     FIXME("(%p) : stub\n", This);
290     return D3D_OK;
291 }
292
293 HRESULT  WINAPI  IDirect3DDevice9Impl_BeginScene(LPDIRECT3DDEVICE9 iface) {
294     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
295     TRACE("(%p) : stub\n", This);
296     return D3D_OK;
297 }
298
299 HRESULT  WINAPI  IDirect3DDevice9Impl_EndScene(LPDIRECT3DDEVICE9 iface) {
300     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
301     FIXME("(%p) : stub\n", This);
302     return D3D_OK;
303 }
304
305 HRESULT  WINAPI  IDirect3DDevice9Impl_Clear(LPDIRECT3DDEVICE9 iface, DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) {
306     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
307     FIXME("(%p) : stub\n", This);
308     return D3D_OK;
309 }
310
311 HRESULT  WINAPI  IDirect3DDevice9Impl_SetTransform(LPDIRECT3DDEVICE9 iface, D3DTRANSFORMSTATETYPE d3dts, CONST D3DMATRIX* lpmatrix) {
312     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
313     FIXME("(%p) : stub\n", This);
314     return D3D_OK;
315 }
316
317 HRESULT  WINAPI  IDirect3DDevice9Impl_GetTransform(LPDIRECT3DDEVICE9 iface, D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) {
318     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
319     TRACE("(%p) : for State %d\n", This, State);
320     memcpy(pMatrix, &This->StateBlock->transforms[State], sizeof(D3DMATRIX));
321     return D3D_OK;
322 }
323
324 HRESULT  WINAPI  IDirect3DDevice9Impl_MultiplyTransform(LPDIRECT3DDEVICE9 iface, D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) {
325     D3DMATRIX *mat = NULL;
326     D3DMATRIX temp;
327
328     /* Note: Using UpdateStateBlock means it would be recorded in a state block change,
329         but works regardless of recording being on. 
330         If this is found to be wrong, change to StateBlock.                             */
331     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
332     TRACE("(%p) : For state %u\n", This, State);
333
334     if (State < HIGHEST_TRANSFORMSTATE) {
335         mat = &This->UpdateStateBlock->transforms[State];
336     } else {
337         FIXME("Unhandled transform state!!\n");
338     }
339
340     /* Copied from ddraw code:  */
341     temp.u.s._11 = (mat->u.s._11 * pMatrix->u.s._11) + (mat->u.s._21 * pMatrix->u.s._12) + (mat->u.s._31 * pMatrix->u.s._13) + (mat->u.s._41 * pMatrix->u.s._14);
342     temp.u.s._21 = (mat->u.s._11 * pMatrix->u.s._21) + (mat->u.s._21 * pMatrix->u.s._22) + (mat->u.s._31 * pMatrix->u.s._23) + (mat->u.s._41 * pMatrix->u.s._24);
343     temp.u.s._31 = (mat->u.s._11 * pMatrix->u.s._31) + (mat->u.s._21 * pMatrix->u.s._32) + (mat->u.s._31 * pMatrix->u.s._33) + (mat->u.s._41 * pMatrix->u.s._34);
344     temp.u.s._41 = (mat->u.s._11 * pMatrix->u.s._41) + (mat->u.s._21 * pMatrix->u.s._42) + (mat->u.s._31 * pMatrix->u.s._43) + (mat->u.s._41 * pMatrix->u.s._44);
345
346     temp.u.s._12 = (mat->u.s._12 * pMatrix->u.s._11) + (mat->u.s._22 * pMatrix->u.s._12) + (mat->u.s._32 * pMatrix->u.s._13) + (mat->u.s._42 * pMatrix->u.s._14);
347     temp.u.s._22 = (mat->u.s._12 * pMatrix->u.s._21) + (mat->u.s._22 * pMatrix->u.s._22) + (mat->u.s._32 * pMatrix->u.s._23) + (mat->u.s._42 * pMatrix->u.s._24);
348     temp.u.s._32 = (mat->u.s._12 * pMatrix->u.s._31) + (mat->u.s._22 * pMatrix->u.s._32) + (mat->u.s._32 * pMatrix->u.s._33) + (mat->u.s._42 * pMatrix->u.s._34);
349     temp.u.s._42 = (mat->u.s._12 * pMatrix->u.s._41) + (mat->u.s._22 * pMatrix->u.s._42) + (mat->u.s._32 * pMatrix->u.s._43) + (mat->u.s._42 * pMatrix->u.s._44);
350
351     temp.u.s._13 = (mat->u.s._13 * pMatrix->u.s._11) + (mat->u.s._23 * pMatrix->u.s._12) + (mat->u.s._33 * pMatrix->u.s._13) + (mat->u.s._43 * pMatrix->u.s._14);
352     temp.u.s._23 = (mat->u.s._13 * pMatrix->u.s._21) + (mat->u.s._23 * pMatrix->u.s._22) + (mat->u.s._33 * pMatrix->u.s._23) + (mat->u.s._43 * pMatrix->u.s._24);
353     temp.u.s._33 = (mat->u.s._13 * pMatrix->u.s._31) + (mat->u.s._23 * pMatrix->u.s._32) + (mat->u.s._33 * pMatrix->u.s._33) + (mat->u.s._43 * pMatrix->u.s._34);
354     temp.u.s._43 = (mat->u.s._13 * pMatrix->u.s._41) + (mat->u.s._23 * pMatrix->u.s._42) + (mat->u.s._33 * pMatrix->u.s._43) + (mat->u.s._43 * pMatrix->u.s._44);
355
356     temp.u.s._14 = (mat->u.s._14 * pMatrix->u.s._11) + (mat->u.s._24 * pMatrix->u.s._12) + (mat->u.s._34 * pMatrix->u.s._13) + (mat->u.s._44 * pMatrix->u.s._14);
357     temp.u.s._24 = (mat->u.s._14 * pMatrix->u.s._21) + (mat->u.s._24 * pMatrix->u.s._22) + (mat->u.s._34 * pMatrix->u.s._23) + (mat->u.s._44 * pMatrix->u.s._24);
358     temp.u.s._34 = (mat->u.s._14 * pMatrix->u.s._31) + (mat->u.s._24 * pMatrix->u.s._32) + (mat->u.s._34 * pMatrix->u.s._33) + (mat->u.s._44 * pMatrix->u.s._34);
359     temp.u.s._44 = (mat->u.s._14 * pMatrix->u.s._41) + (mat->u.s._24 * pMatrix->u.s._42) + (mat->u.s._34 * pMatrix->u.s._43) + (mat->u.s._44 * pMatrix->u.s._44);
360
361     /* Apply change via set transform - will reapply to eg. lights this way */
362     IDirect3DDevice9Impl_SetTransform(iface, State, &temp);
363     return D3D_OK;
364 }
365
366 HRESULT  WINAPI  IDirect3DDevice9Impl_SetViewport(LPDIRECT3DDEVICE9 iface, CONST D3DVIEWPORT9* pViewport) {
367     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
368     FIXME("(%p) : stub\n", This);
369     return D3D_OK;
370 }
371
372 HRESULT  WINAPI  IDirect3DDevice9Impl_GetViewport(LPDIRECT3DDEVICE9 iface, D3DVIEWPORT9* pViewport) {
373     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
374     TRACE("(%p)\n", This);
375     memcpy(pViewport, &This->StateBlock->viewport, sizeof(D3DVIEWPORT9));
376     return D3D_OK;
377 }
378
379 HRESULT  WINAPI  IDirect3DDevice9Impl_SetMaterial(LPDIRECT3DDEVICE9 iface, CONST D3DMATERIAL9* pMaterial) {
380     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
381     FIXME("(%p) : stub\n", This);
382     return D3D_OK;
383 }
384
385 HRESULT  WINAPI  IDirect3DDevice9Impl_GetMaterial(LPDIRECT3DDEVICE9 iface, D3DMATERIAL9* pMaterial) {
386     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
387     memcpy(pMaterial, &This->UpdateStateBlock->material, sizeof (D3DMATERIAL9));
388     TRACE("(%p) : Diffuse (%f,%f,%f,%f)\n", This, pMaterial->Diffuse.r, pMaterial->Diffuse.g, pMaterial->Diffuse.b, pMaterial->Diffuse.a);
389     TRACE("(%p) : Ambient (%f,%f,%f,%f)\n", This, pMaterial->Ambient.r, pMaterial->Ambient.g, pMaterial->Ambient.b, pMaterial->Ambient.a);
390     TRACE("(%p) : Specular (%f,%f,%f,%f)\n", This, pMaterial->Specular.r, pMaterial->Specular.g, pMaterial->Specular.b, pMaterial->Specular.a);
391     TRACE("(%p) : Emissive (%f,%f,%f,%f)\n", This, pMaterial->Emissive.r, pMaterial->Emissive.g, pMaterial->Emissive.b, pMaterial->Emissive.a);
392     TRACE("(%p) : Power (%f)\n", This, pMaterial->Power);
393     return D3D_OK;
394 }
395
396 HRESULT  WINAPI  IDirect3DDevice9Impl_SetLight(LPDIRECT3DDEVICE9 iface, DWORD Index, CONST D3DLIGHT9* pLight) {
397     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
398     FIXME("(%p) : stub\n", This);
399     return D3D_OK;
400 }
401
402 HRESULT  WINAPI  IDirect3DDevice9Impl_GetLight(LPDIRECT3DDEVICE9 iface, DWORD Index,D3DLIGHT9* pLight) {
403     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
404     FIXME("(%p) : stub\n", This);
405     return D3D_OK;
406 }
407
408 HRESULT  WINAPI  IDirect3DDevice9Impl_LightEnable(LPDIRECT3DDEVICE9 iface, DWORD Index, BOOL Enable) {
409     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
410     FIXME("(%p) : stub\n", This);
411     return D3D_OK;
412 }
413
414 HRESULT  WINAPI  IDirect3DDevice9Impl_GetLightEnable(LPDIRECT3DDEVICE9 iface, DWORD Index, BOOL* pEnable) {
415     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
416     FIXME("(%p) : stub\n", This);
417     return D3D_OK;
418 }
419
420 HRESULT  WINAPI  IDirect3DDevice9Impl_SetClipPlane(LPDIRECT3DDEVICE9 iface, DWORD Index, CONST float* pPlane) {
421     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
422     FIXME("(%p) : stub\n", This);
423     return D3D_OK;
424 }
425
426 HRESULT  WINAPI  IDirect3DDevice9Impl_GetClipPlane(LPDIRECT3DDEVICE9 iface, DWORD Index, float* pPlane) {
427     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
428     FIXME("(%p) : stub\n", This);
429     return D3D_OK;
430 }
431
432 HRESULT  WINAPI  IDirect3DDevice9Impl_SetRenderState(LPDIRECT3DDEVICE9 iface, D3DRENDERSTATETYPE State, DWORD Value) {
433     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
434     FIXME("(%p) : stub\n", This);
435     return D3D_OK;
436 }
437
438 HRESULT  WINAPI  IDirect3DDevice9Impl_GetRenderState(LPDIRECT3DDEVICE9 iface, D3DRENDERSTATETYPE State, DWORD* pValue) {
439     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
440     TRACE("(%p) for State %d = %ld\n", This, State, This->UpdateStateBlock->renderstate[State]);
441     *pValue = This->StateBlock->renderstate[State];
442     return D3D_OK;
443 }
444
445 HRESULT  WINAPI  IDirect3DDevice9Impl_SetClipStatus(LPDIRECT3DDEVICE9 iface, CONST D3DCLIPSTATUS9* pClipStatus) {
446     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
447     FIXME("(%p) : stub\n", This);
448     return D3D_OK;
449 }
450
451 HRESULT  WINAPI  IDirect3DDevice9Impl_GetClipStatus(LPDIRECT3DDEVICE9 iface, D3DCLIPSTATUS9* pClipStatus) {
452     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
453     FIXME("(%p) : stub\n", This);
454     return D3D_OK;
455 }
456
457 HRESULT  WINAPI  IDirect3DDevice9Impl_GetTexture(LPDIRECT3DDEVICE9 iface, DWORD Stage, IDirect3DBaseTexture9** ppTexture) {
458     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
459     TRACE("(%p) : returning %p for stage %ld\n", This, This->UpdateStateBlock->textures[Stage], Stage);
460     *ppTexture = (LPDIRECT3DBASETEXTURE9) This->UpdateStateBlock->textures[Stage];
461     IDirect3DBaseTexture9Impl_AddRef(*ppTexture);
462     return D3D_OK;
463 }
464
465 HRESULT  WINAPI  IDirect3DDevice9Impl_SetTexture(LPDIRECT3DDEVICE9 iface, DWORD Stage, IDirect3DBaseTexture9* pTexture) {
466     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
467     FIXME("(%p) : stub\n", This);
468     return D3D_OK;
469 }
470
471 HRESULT  WINAPI  IDirect3DDevice9Impl_GetTextureStageState(LPDIRECT3DDEVICE9 iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) {
472     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
473     TRACE("(%p) : requesting Stage %ld, Type %d getting %ld\n", This, Stage, Type, This->UpdateStateBlock->texture_state[Stage][Type]);
474     *pValue = This->UpdateStateBlock->texture_state[Stage][Type];
475     return D3D_OK;
476 }
477
478 HRESULT  WINAPI  IDirect3DDevice9Impl_SetTextureStageState(LPDIRECT3DDEVICE9 iface, DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) {
479     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
480     FIXME("(%p) : stub\n", This);
481     return D3D_OK;
482 }
483
484 HRESULT  WINAPI  IDirect3DDevice9Impl_GetSamplerState(LPDIRECT3DDEVICE9 iface, DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) {
485     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
486     FIXME("(%p) : stub\n", This);
487     return D3D_OK;
488 }
489
490 HRESULT  WINAPI  IDirect3DDevice9Impl_SetSamplerState(LPDIRECT3DDEVICE9 iface, DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) {
491     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
492     FIXME("(%p) : stub\n", This);
493     return D3D_OK;
494 }
495
496 HRESULT  WINAPI  IDirect3DDevice9Impl_ValidateDevice(LPDIRECT3DDEVICE9 iface, DWORD* pNumPasses) {
497     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
498     TRACE("(%p) : stub\n", This);
499     return D3D_OK;
500 }
501
502 HRESULT  WINAPI  IDirect3DDevice9Impl_SetPaletteEntries(LPDIRECT3DDEVICE9 iface, UINT PaletteNumber, CONST PALETTEENTRY* pEntries) {
503     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
504     FIXME("(%p) : setting p[%u] <= RGBA(%02x,%02x,%02x,%02x)\n", This, PaletteNumber, pEntries->peRed, pEntries->peGreen, pEntries->peBlue, pEntries->peFlags);
505     memcpy(This->palettes[PaletteNumber], pEntries, 256 * sizeof(PALETTEENTRY));
506     return D3D_OK;
507 }
508
509 HRESULT  WINAPI  IDirect3DDevice9Impl_GetPaletteEntries(LPDIRECT3DDEVICE9 iface, UINT PaletteNumber, PALETTEENTRY* pEntries) {
510     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
511     memcpy(pEntries, This->palettes[PaletteNumber], 256 * sizeof(PALETTEENTRY));
512     FIXME("(%p) : returning p[%u] => RGBA(%02x,%02x,%02x,%02x)\n", This, PaletteNumber, pEntries->peRed, pEntries->peGreen, pEntries->peBlue, pEntries->peFlags);
513     return D3D_OK;
514 }
515
516 HRESULT  WINAPI  IDirect3DDevice9Impl_SetCurrentTexturePalette(LPDIRECT3DDEVICE9 iface, UINT PaletteNumber) {
517     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
518     TRACE("(%p) : stub\n", This);
519     return D3D_OK;
520 }
521
522 HRESULT  WINAPI  IDirect3DDevice9Impl_GetCurrentTexturePalette(LPDIRECT3DDEVICE9 iface, UINT* PaletteNumber) {
523     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
524     *PaletteNumber = This->currentPalette;
525     FIXME("(%p) : Returning (%u)\n", This, *PaletteNumber);
526     return D3D_OK;
527 }
528
529 HRESULT  WINAPI  IDirect3DDevice9Impl_SetScissorRect(LPDIRECT3DDEVICE9 iface, CONST RECT* pRect) {
530     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
531     FIXME("(%p) : stub\n", This);
532     return D3D_OK;
533 }
534
535 HRESULT  WINAPI  IDirect3DDevice9Impl_GetScissorRect(LPDIRECT3DDEVICE9 iface, RECT* pRect) {
536     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
537     FIXME("(%p) : stub\n", This);
538     return D3D_OK;
539 }
540
541 HRESULT  WINAPI  IDirect3DDevice9Impl_SetSoftwareVertexProcessing(LPDIRECT3DDEVICE9 iface, BOOL bSoftware) {
542     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
543     FIXME("(%p) : stub\n", This);
544     return D3D_OK;
545 }
546
547 BOOL     WINAPI  IDirect3DDevice9Impl_GetSoftwareVertexProcessing(LPDIRECT3DDEVICE9 iface) {
548     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
549     FIXME("(%p) : stub\n", This);
550     return D3D_OK;
551 }
552
553 HRESULT  WINAPI  IDirect3DDevice9Impl_SetNPatchMode(LPDIRECT3DDEVICE9 iface, float nSegments) {
554     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
555     FIXME("(%p) : stub\n", This);
556     return D3D_OK;
557 }
558
559 float    WINAPI  IDirect3DDevice9Impl_GetNPatchMode(LPDIRECT3DDEVICE9 iface) {
560     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
561     FIXME("(%p) : stub\n", This);
562     return 0.0f;
563 }
564
565 HRESULT  WINAPI  IDirect3DDevice9Impl_DrawPrimitive(LPDIRECT3DDEVICE9 iface, D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) {
566     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
567     FIXME("(%p) : stub\n", This);
568     return D3D_OK;
569 }
570
571 HRESULT  WINAPI  IDirect3DDevice9Impl_DrawIndexedPrimitive(LPDIRECT3DDEVICE9 iface, D3DPRIMITIVETYPE PrimitiveType,
572                                                            INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) {
573     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
574     FIXME("(%p) : stub\n", This);
575     return D3D_OK;
576 }
577
578 HRESULT  WINAPI  IDirect3DDevice9Impl_DrawPrimitiveUP(LPDIRECT3DDEVICE9 iface, D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) {
579     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
580     FIXME("(%p) : stub\n", This);
581     return D3D_OK;
582 }
583
584 HRESULT  WINAPI  IDirect3DDevice9Impl_DrawIndexedPrimitiveUP(LPDIRECT3DDEVICE9 iface, D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex,
585                                                              UINT NumVertexIndices, UINT PrimitiveCount, CONST void* pIndexData,
586                                                              D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) {
587     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
588     FIXME("(%p) : stub\n", This);
589     return D3D_OK;
590 }
591
592 HRESULT  WINAPI  IDirect3DDevice9Impl_ProcessVertices(LPDIRECT3DDEVICE9 iface, UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) {
593     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
594     FIXME("(%p) : stub\n", This);
595     return D3D_OK;
596 }
597
598 HRESULT  WINAPI  IDirect3DDevice9Impl_SetFVF(LPDIRECT3DDEVICE9 iface, DWORD FVF) {
599     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
600     return IWineD3DDevice_SetFVF(This->WineD3DDevice, FVF);
601 }
602
603 HRESULT  WINAPI  IDirect3DDevice9Impl_GetFVF(LPDIRECT3DDEVICE9 iface, DWORD* pFVF) {
604     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
605     return IWineD3DDevice_GetFVF(This->WineD3DDevice, pFVF);
606 }
607
608 HRESULT  WINAPI  IDirect3DDevice9Impl_SetStreamSource(LPDIRECT3DDEVICE9 iface, UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) {
609     IDirect3DVertexBuffer9 *oldSrc;
610     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
611
612     oldSrc = This->StateBlock->stream_source[StreamNumber];
613     TRACE("(%p) : StreamNo: %d, OldStream (%p), NewStream (%p), NewStride %d\n", This, StreamNumber, oldSrc, pStreamData, Stride);
614
615     This->UpdateStateBlock->Changed.stream_source[StreamNumber] = TRUE;
616     This->UpdateStateBlock->Set.stream_source[StreamNumber] = TRUE;
617     This->UpdateStateBlock->stream_stride[StreamNumber] = Stride;
618     This->UpdateStateBlock->stream_source[StreamNumber] = pStreamData;
619
620     /* Handle recording of state blocks */
621     if (This->isRecordingState) {
622         TRACE("Recording... not performing anything\n");
623         return D3D_OK;
624     }
625
626     if (oldSrc != NULL) IDirect3DVertexBuffer9Impl_Release(oldSrc);
627     if (pStreamData != NULL) IDirect3DVertexBuffer9Impl_AddRef(pStreamData);
628     return D3D_OK;
629 }
630
631 HRESULT  WINAPI  IDirect3DDevice9Impl_GetStreamSource(LPDIRECT3DDEVICE9 iface, UINT StreamNumber, IDirect3DVertexBuffer9** pStream, UINT* OffsetInBytes, UINT* pStride) {
632     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
633     TRACE("(%p) : StreamNo: %d, Stream (%p), Stride %d\n", This, StreamNumber, This->StateBlock->stream_source[StreamNumber], This->StateBlock->stream_stride[StreamNumber]);
634     *pStream = This->StateBlock->stream_source[StreamNumber];
635     *pStride = This->StateBlock->stream_stride[StreamNumber];
636     IDirect3DVertexBuffer9Impl_AddRef((LPDIRECT3DVERTEXBUFFER9) *pStream);
637     return D3D_OK;
638 }
639
640 HRESULT  WINAPI  IDirect3DDevice9Impl_SetStreamSourceFreq(LPDIRECT3DDEVICE9 iface, UINT StreamNumber, UINT Divider) {
641     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
642     FIXME("(%p) : stub\n", This); 
643     return D3D_OK;
644 }
645
646 HRESULT  WINAPI  IDirect3DDevice9Impl_GetStreamSourceFreq(LPDIRECT3DDEVICE9 iface, UINT StreamNumber, UINT* Divider) {
647     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
648     FIXME("(%p) : stub\n", This); 
649     return D3D_OK;
650 }
651
652 HRESULT  WINAPI  IDirect3DDevice9Impl_SetIndices(LPDIRECT3DDEVICE9 iface, IDirect3DIndexBuffer9* pIndexData) {
653     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
654     IDirect3DIndexBuffer9 *oldIdxs;
655
656     TRACE("(%p) : Setting to %p\n", This, pIndexData);
657     oldIdxs = This->StateBlock->pIndexData;
658
659     This->UpdateStateBlock->Changed.Indices = TRUE;
660     This->UpdateStateBlock->Set.Indices = TRUE;
661     This->UpdateStateBlock->pIndexData = pIndexData;
662
663     /* Handle recording of state blocks */
664     if (This->isRecordingState) {
665         TRACE("Recording... not performing anything\n");
666         return D3D_OK;
667     }
668
669     if (oldIdxs) IDirect3DIndexBuffer9Impl_Release(oldIdxs);
670     if (pIndexData) IDirect3DIndexBuffer9Impl_AddRef(This->StateBlock->pIndexData);
671     return D3D_OK;
672 }
673
674 HRESULT  WINAPI  IDirect3DDevice9Impl_GetIndices(LPDIRECT3DDEVICE9 iface, IDirect3DIndexBuffer9** ppIndexData) {
675     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
676     FIXME("(%p) : stub\n", This);
677
678     *ppIndexData = This->StateBlock->pIndexData;
679     /* up ref count on ppindexdata */
680     if (*ppIndexData) IDirect3DIndexBuffer9Impl_AddRef(*ppIndexData);
681
682     return D3D_OK;
683 }
684
685 HRESULT  WINAPI  IDirect3DDevice9Impl_DrawRectPatch(LPDIRECT3DDEVICE9 iface, UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) {
686     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
687     FIXME("(%p) : stub\n", This);    
688     return D3D_OK;
689 }
690
691 HRESULT  WINAPI  IDirect3DDevice9Impl_DrawTriPatch(LPDIRECT3DDEVICE9 iface, UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) {
692     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
693     FIXME("(%p) : stub\n", This);    
694     return D3D_OK;
695 }
696
697 HRESULT  WINAPI  IDirect3DDevice9Impl_DeletePatch(LPDIRECT3DDEVICE9 iface, UINT Handle) {
698     IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
699     FIXME("(%p) : stub\n", This);
700     return D3D_OK;
701 }
702
703
704 IDirect3DDevice9Vtbl Direct3DDevice9_Vtbl =
705 {
706     IDirect3DDevice9Impl_QueryInterface,
707     IDirect3DDevice9Impl_AddRef,
708     IDirect3DDevice9Impl_Release,
709     IDirect3DDevice9Impl_TestCooperativeLevel,
710     IDirect3DDevice9Impl_GetAvailableTextureMem,
711     IDirect3DDevice9Impl_EvictManagedRessources,
712     IDirect3DDevice9Impl_GetDirect3D,
713     IDirect3DDevice9Impl_GetDeviceCaps,
714     IDirect3DDevice9Impl_GetDisplayMode,
715     IDirect3DDevice9Impl_GetCreationParameters,
716     IDirect3DDevice9Impl_SetCursorProperties,
717     IDirect3DDevice9Impl_SetCursorPosition,
718     IDirect3DDevice9Impl_ShowCursor,
719     IDirect3DDevice9Impl_CreateAdditionalSwapChain,
720     IDirect3DDevice9Impl_GetSwapChain,
721     IDirect3DDevice9Impl_GetNumberOfSwapChains,
722     IDirect3DDevice9Impl_Reset,
723     IDirect3DDevice9Impl_Present,
724     IDirect3DDevice9Impl_GetBackBuffer,
725     IDirect3DDevice9Impl_GetRasterStatus,
726     IDirect3DDevice9Impl_SetDialogBoxMode,
727     IDirect3DDevice9Impl_SetGammaRamp,
728     IDirect3DDevice9Impl_GetGammaRamp,
729     IDirect3DDevice9Impl_CreateTexture,
730     IDirect3DDevice9Impl_CreateVolumeTexture,
731     IDirect3DDevice9Impl_CreateCubeTexture,
732     IDirect3DDevice9Impl_CreateVertexBuffer,
733     IDirect3DDevice9Impl_CreateIndexBuffer,
734     IDirect3DDevice9Impl_CreateRenderTarget,
735     IDirect3DDevice9Impl_CreateDepthStencilSurface,
736     IDirect3DDevice9Impl_UpdateSurface,
737     IDirect3DDevice9Impl_UpdateTexture,
738     IDirect3DDevice9Impl_GetRenderTargetData,
739     IDirect3DDevice9Impl_GetFrontBufferData,
740     IDirect3DDevice9Impl_StretchRects,
741     IDirect3DDevice9Impl_ColorFill,
742     IDirect3DDevice9Impl_CreateOffscreenPlainSurface,
743     IDirect3DDevice9Impl_SetRenderTarget,
744     IDirect3DDevice9Impl_GetRenderTarget,
745     IDirect3DDevice9Impl_SetDepthStencilSurface,
746     IDirect3DDevice9Impl_GetDepthStencilSurface,
747     IDirect3DDevice9Impl_BeginScene,
748     IDirect3DDevice9Impl_EndScene,
749     IDirect3DDevice9Impl_Clear,
750     IDirect3DDevice9Impl_SetTransform,
751     IDirect3DDevice9Impl_GetTransform,
752     IDirect3DDevice9Impl_MultiplyTransform,
753     IDirect3DDevice9Impl_SetViewport,
754     IDirect3DDevice9Impl_GetViewport,
755     IDirect3DDevice9Impl_SetMaterial,
756     IDirect3DDevice9Impl_GetMaterial,
757     IDirect3DDevice9Impl_SetLight,
758     IDirect3DDevice9Impl_GetLight,
759     IDirect3DDevice9Impl_LightEnable,
760     IDirect3DDevice9Impl_GetLightEnable,
761     IDirect3DDevice9Impl_SetClipPlane,
762     IDirect3DDevice9Impl_GetClipPlane,
763     IDirect3DDevice9Impl_SetRenderState,
764     IDirect3DDevice9Impl_GetRenderState,
765     IDirect3DDevice9Impl_CreateStateBlock,
766     IDirect3DDevice9Impl_BeginStateBlock,
767     IDirect3DDevice9Impl_EndStateBlock,
768     IDirect3DDevice9Impl_SetClipStatus,
769     IDirect3DDevice9Impl_GetClipStatus,
770     IDirect3DDevice9Impl_GetTexture,
771     IDirect3DDevice9Impl_SetTexture,
772     IDirect3DDevice9Impl_GetTextureStageState,
773     IDirect3DDevice9Impl_SetTextureStageState,
774     IDirect3DDevice9Impl_GetSamplerState,
775     IDirect3DDevice9Impl_SetSamplerState,
776     IDirect3DDevice9Impl_ValidateDevice,
777     IDirect3DDevice9Impl_SetPaletteEntries,
778     IDirect3DDevice9Impl_GetPaletteEntries,
779     IDirect3DDevice9Impl_SetCurrentTexturePalette,
780     IDirect3DDevice9Impl_GetCurrentTexturePalette,
781     IDirect3DDevice9Impl_SetScissorRect,
782     IDirect3DDevice9Impl_GetScissorRect,
783     IDirect3DDevice9Impl_SetSoftwareVertexProcessing,
784     IDirect3DDevice9Impl_GetSoftwareVertexProcessing,
785     IDirect3DDevice9Impl_SetNPatchMode,
786     IDirect3DDevice9Impl_GetNPatchMode,
787     IDirect3DDevice9Impl_DrawPrimitive,
788     IDirect3DDevice9Impl_DrawIndexedPrimitive,
789     IDirect3DDevice9Impl_DrawPrimitiveUP,
790     IDirect3DDevice9Impl_DrawIndexedPrimitiveUP,
791     IDirect3DDevice9Impl_ProcessVertices,
792     IDirect3DDevice9Impl_CreateVertexDeclaration,
793     IDirect3DDevice9Impl_SetVertexDeclaration,
794     IDirect3DDevice9Impl_GetVertexDeclaration,
795     IDirect3DDevice9Impl_SetFVF,
796     IDirect3DDevice9Impl_GetFVF,
797     IDirect3DDevice9Impl_CreateVertexShader,
798     IDirect3DDevice9Impl_SetVertexShader,
799     IDirect3DDevice9Impl_GetVertexShader,
800     IDirect3DDevice9Impl_SetVertexShaderConstantF,
801     IDirect3DDevice9Impl_GetVertexShaderConstantF,
802     IDirect3DDevice9Impl_SetVertexShaderConstantI,
803     IDirect3DDevice9Impl_GetVertexShaderConstantI,
804     IDirect3DDevice9Impl_SetVertexShaderConstantB,
805     IDirect3DDevice9Impl_GetVertexShaderConstantB,
806     IDirect3DDevice9Impl_SetStreamSource,
807     IDirect3DDevice9Impl_GetStreamSource,
808     IDirect3DDevice9Impl_SetStreamSourceFreq,
809     IDirect3DDevice9Impl_GetStreamSourceFreq,
810     IDirect3DDevice9Impl_SetIndices,
811     IDirect3DDevice9Impl_GetIndices,
812     IDirect3DDevice9Impl_CreatePixelShader,
813     IDirect3DDevice9Impl_SetPixelShader,
814     IDirect3DDevice9Impl_GetPixelShader,
815     IDirect3DDevice9Impl_SetPixelShaderConstantF,
816     IDirect3DDevice9Impl_GetPixelShaderConstantF,
817     IDirect3DDevice9Impl_SetPixelShaderConstantI,
818     IDirect3DDevice9Impl_GetPixelShaderConstantI,
819     IDirect3DDevice9Impl_SetPixelShaderConstantB,
820     IDirect3DDevice9Impl_GetPixelShaderConstantB,
821     IDirect3DDevice9Impl_DrawRectPatch,
822     IDirect3DDevice9Impl_DrawTriPatch,
823     IDirect3DDevice9Impl_DeletePatch,
824     IDirect3DDevice9Impl_CreateQuery
825 };