fdopen: don't rewind the file after creating the FILE* handle. Added
[wine] / dlls / ddraw / d3ddevice / main.c
1 /* Direct3D Device
2  * Copyright (c) 1998 Lionel ULMER
3  *
4  * This file contains all the common stuff for D3D devices.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #include "config.h"
22
23 #include <string.h>
24
25 #include "windef.h"
26 #include "winerror.h"
27 #include "objbase.h"
28 #include "ddraw.h"
29 #include "d3d.h"
30 #include "wine/debug.h"
31
32 #include "d3d_private.h"
33 #include "main.h"
34
35 WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
36
37 HRESULT WINAPI
38 Main_IDirect3DDeviceImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3DDEVICE7 iface,
39                                                    REFIID riid,
40                                                    LPVOID* obp)
41 {
42     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
43     TRACE("(%p/%p)->(%s,%p): stub!\n", This, iface, debugstr_guid(riid), obp);
44
45     *obp = NULL;
46
47     if ( IsEqualGUID( &IID_IUnknown,  riid ) ) {
48         IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
49         *obp = iface;
50         TRACE("  Creating IUnknown interface at %p.\n", *obp);
51         return S_OK;
52     }
53     if ( IsEqualGUID( &IID_IDirect3DDevice, riid ) ) {
54         IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
55         *obp = ICOM_INTERFACE(This, IDirect3DDevice);
56         TRACE("  Creating IDirect3DDevice interface %p\n", *obp);
57         return S_OK;
58     }
59     if ( IsEqualGUID( &IID_IDirect3DDevice2, riid ) ) {
60         IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
61         *obp = ICOM_INTERFACE(This, IDirect3DDevice2);
62         TRACE("  Creating IDirect3DDevice2 interface %p\n", *obp);
63         return S_OK;
64     }
65     if ( IsEqualGUID( &IID_IDirect3DDevice3, riid ) ) {
66         IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
67         *obp = ICOM_INTERFACE(This, IDirect3DDevice3);
68         TRACE("  Creating IDirect3DDevice3 interface %p\n", *obp);
69         return S_OK;
70     }
71     if ( IsEqualGUID( &IID_IDirect3DDevice7, riid ) ) {
72         IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
73         *obp = ICOM_INTERFACE(This, IDirect3DDevice7);
74         TRACE("  Creating IDirect3DDevice7 interface %p\n", *obp);
75         return S_OK;
76     }
77     FIXME("(%p): interface for IID %s NOT found!\n", This, debugstr_guid(riid));
78     return OLE_E_ENUM_NOMORE;
79 }
80
81 ULONG WINAPI
82 Main_IDirect3DDeviceImpl_7_3T_2T_1T_AddRef(LPDIRECT3DDEVICE7 iface)
83 {
84     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
85     TRACE("(%p/%p)->() incrementing from %lu.\n", This, iface, This->ref);
86     return ++(This->ref);
87 }
88
89 ULONG WINAPI
90 Main_IDirect3DDeviceImpl_7_3T_2T_1T_Release(LPDIRECT3DDEVICE7 iface)
91 {
92     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
93     TRACE("(%p/%p)->() decrementing from %lu.\n", This, iface, This->ref);
94     if (!--(This->ref)) {
95         int i;
96         /* Release texture associated with the device */
97         for (i = 0; i < MAX_TEXTURES; i++) {
98             if (This->current_texture[i] != NULL)
99                 IDirect3DTexture2_Release(ICOM_INTERFACE(This->current_texture[i], IDirect3DTexture2));
100         }
101                   
102         HeapFree(GetProcessHeap(), 0, This);
103         return 0;
104     }
105     return This->ref;
106 }
107
108 HRESULT WINAPI
109 Main_IDirect3DDeviceImpl_7_GetCaps(LPDIRECT3DDEVICE7 iface,
110                                    LPD3DDEVICEDESC7 lpD3DHELDevDesc)
111 {
112     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
113     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DHELDevDesc);
114     return DD_OK;
115 }
116
117 HRESULT WINAPI
118 Main_IDirect3DDeviceImpl_7_3T_EnumTextureFormats(LPDIRECT3DDEVICE7 iface,
119                                                  LPD3DENUMPIXELFORMATSCALLBACK lpD3DEnumPixelProc,
120                                                  LPVOID lpArg)
121 {
122     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
123     FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DEnumPixelProc, lpArg);
124     return DD_OK;
125 }
126
127 HRESULT WINAPI
128 Main_IDirect3DDeviceImpl_7_3T_2T_1T_BeginScene(LPDIRECT3DDEVICE7 iface)
129 {
130     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
131     FIXME("(%p/%p)->(): stub!\n", This, iface);
132     return DD_OK;
133 }
134
135 HRESULT WINAPI
136 Main_IDirect3DDeviceImpl_7_3T_2T_1T_EndScene(LPDIRECT3DDEVICE7 iface)
137 {
138     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
139     FIXME("(%p/%p)->(): stub!\n", This, iface);
140     return DD_OK;
141 }
142
143 HRESULT WINAPI
144 Main_IDirect3DDeviceImpl_7_3T_2T_1T_GetDirect3D(LPDIRECT3DDEVICE7 iface,
145                                                 LPDIRECT3D7* lplpDirect3D3)
146 {
147     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
148     TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3D3);
149
150     *lplpDirect3D3 = ICOM_INTERFACE(This->d3d, IDirect3D7);
151     IDirect3D7_AddRef(ICOM_INTERFACE(This->d3d, IDirect3D7));
152     
153     TRACE(" returning interface %p\n", *lplpDirect3D3);
154     return DD_OK;
155 }
156
157 HRESULT WINAPI
158 Main_IDirect3DDeviceImpl_7_3T_2T_SetRenderTarget(LPDIRECT3DDEVICE7 iface,
159                                                  LPDIRECTDRAWSURFACE7 lpNewRenderTarget,
160                                                  DWORD dwFlags)
161 {
162     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
163     FIXME("(%p/%p)->(%p,%08lx): stub!\n", This, iface, lpNewRenderTarget, dwFlags);
164     return DD_OK;
165 }
166
167 HRESULT WINAPI
168 Main_IDirect3DDeviceImpl_7_3T_2T_GetRenderTarget(LPDIRECT3DDEVICE7 iface,
169                                                  LPDIRECTDRAWSURFACE7* lplpRenderTarget)
170 {
171     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
172     TRACE("(%p/%p)->(%p)\n", This, iface, lplpRenderTarget);
173
174     *lplpRenderTarget = ICOM_INTERFACE(This->surface, IDirectDrawSurface7);
175     IDirectDrawSurface7_AddRef(ICOM_INTERFACE(This->surface, IDirectDrawSurface7));
176     
177     TRACE(" returning surface at %p.\n", *lplpRenderTarget);
178     
179     return DD_OK;
180 }
181
182 HRESULT WINAPI
183 Main_IDirect3DDeviceImpl_7_Clear(LPDIRECT3DDEVICE7 iface,
184                                  DWORD dwCount,
185                                  LPD3DRECT lpRects,
186                                  DWORD dwFlags,
187                                  D3DCOLOR dwColor,
188                                  D3DVALUE dvZ,
189                                  DWORD dwStencil)
190 {
191     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
192     FIXME("(%p/%p)->(%08lx,%p,%08lx,%08lx,%f,%08lx): stub!\n", This, iface, dwCount, lpRects, dwFlags, (DWORD) dwColor, dvZ, dwStencil);
193     return DD_OK;
194 }
195
196 HRESULT WINAPI
197 Main_IDirect3DDeviceImpl_7_3T_2T_SetTransform(LPDIRECT3DDEVICE7 iface,
198                                               D3DTRANSFORMSTATETYPE dtstTransformStateType,
199                                               LPD3DMATRIX lpD3DMatrix)
200 {
201     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
202     FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dtstTransformStateType, lpD3DMatrix);
203     return DD_OK;
204 }
205
206 HRESULT WINAPI
207 Main_IDirect3DDeviceImpl_7_3T_2T_GetTransform(LPDIRECT3DDEVICE7 iface,
208                                               D3DTRANSFORMSTATETYPE dtstTransformStateType,
209                                               LPD3DMATRIX lpD3DMatrix)
210 {
211     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
212     FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dtstTransformStateType, lpD3DMatrix);
213     return DD_OK;
214 }
215
216 HRESULT WINAPI
217 Main_IDirect3DDeviceImpl_7_SetViewport(LPDIRECT3DDEVICE7 iface,
218                                        LPD3DVIEWPORT7 lpData)
219 {
220     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
221     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpData);
222     return DD_OK;
223 }
224
225 HRESULT WINAPI
226 Main_IDirect3DDeviceImpl_7_3T_2T_MultiplyTransform(LPDIRECT3DDEVICE7 iface,
227                                                    D3DTRANSFORMSTATETYPE dtstTransformStateType,
228                                                    LPD3DMATRIX lpD3DMatrix)
229 {
230     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
231     FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dtstTransformStateType, lpD3DMatrix);
232     return DD_OK;
233 }
234
235 HRESULT WINAPI
236 Main_IDirect3DDeviceImpl_7_GetViewport(LPDIRECT3DDEVICE7 iface,
237                                        LPD3DVIEWPORT7 lpData)
238 {
239     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
240     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpData);
241     return DD_OK;
242 }
243
244 HRESULT WINAPI
245 Main_IDirect3DDeviceImpl_7_SetMaterial(LPDIRECT3DDEVICE7 iface,
246                                        LPD3DMATERIAL7 lpMat)
247 {
248     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
249     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpMat);
250     return DD_OK;
251 }
252
253 HRESULT WINAPI
254 Main_IDirect3DDeviceImpl_7_GetMaterial(LPDIRECT3DDEVICE7 iface,
255                                        LPD3DMATERIAL7 lpMat)
256 {
257     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
258     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpMat);
259     return DD_OK;
260 }
261
262 HRESULT WINAPI
263 Main_IDirect3DDeviceImpl_7_SetLight(LPDIRECT3DDEVICE7 iface,
264                                     DWORD dwLightIndex,
265                                     LPD3DLIGHT7 lpLight)
266 {
267     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
268     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwLightIndex, lpLight);
269     return DD_OK;
270 }
271
272 HRESULT WINAPI
273 Main_IDirect3DDeviceImpl_7_GetLight(LPDIRECT3DDEVICE7 iface,
274                                     DWORD dwLightIndex,
275                                     LPD3DLIGHT7 lpLight)
276 {
277     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
278     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwLightIndex, lpLight);
279     return DD_OK;
280 }
281
282 HRESULT WINAPI
283 Main_IDirect3DDeviceImpl_7_3T_2T_SetRenderState(LPDIRECT3DDEVICE7 iface,
284                                                 D3DRENDERSTATETYPE dwRenderStateType,
285                                                 DWORD dwRenderState)
286 {
287     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
288     FIXME("(%p/%p)->(%08x,%08lx): stub!\n", This, iface, dwRenderStateType, dwRenderState);
289     return DD_OK;
290 }
291
292 HRESULT WINAPI
293 Main_IDirect3DDeviceImpl_7_3T_2T_GetRenderState(LPDIRECT3DDEVICE7 iface,
294                                                 D3DRENDERSTATETYPE dwRenderStateType,
295                                                 LPDWORD lpdwRenderState)
296 {
297     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
298     FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dwRenderStateType, lpdwRenderState);
299     return DD_OK;
300 }
301
302 HRESULT WINAPI
303 Main_IDirect3DDeviceImpl_7_BeginStateBlock(LPDIRECT3DDEVICE7 iface)
304 {
305     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
306     FIXME("(%p/%p)->(): stub!\n", This, iface);
307     return DD_OK;
308 }
309
310 HRESULT WINAPI
311 Main_IDirect3DDeviceImpl_7_EndStateBlock(LPDIRECT3DDEVICE7 iface,
312                                          LPDWORD lpdwBlockHandle)
313 {
314     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
315     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpdwBlockHandle);
316     return DD_OK;
317 }
318
319 HRESULT WINAPI
320 Main_IDirect3DDeviceImpl_7_PreLoad(LPDIRECT3DDEVICE7 iface,
321                                    LPDIRECTDRAWSURFACE7 lpddsTexture)
322 {
323     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
324     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpddsTexture);
325     return DD_OK;
326 }
327
328 HRESULT WINAPI
329 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitive(LPDIRECT3DDEVICE7 iface,
330                                             D3DPRIMITIVETYPE d3dptPrimitiveType,
331                                             DWORD d3dvtVertexType,
332                                             LPVOID lpvVertices,
333                                             DWORD dwVertexCount,
334                                             DWORD dwFlags)
335 {
336     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
337     FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
338     return DD_OK;
339 }
340
341 HRESULT WINAPI
342 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitive(LPDIRECT3DDEVICE7 iface,
343                                                    D3DPRIMITIVETYPE d3dptPrimitiveType,
344                                                    DWORD d3dvtVertexType,
345                                                    LPVOID lpvVertices,
346                                                    DWORD dwVertexCount,
347                                                    LPWORD dwIndices,
348                                                    DWORD dwIndexCount,
349                                                    DWORD dwFlags)
350 {
351     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
352     FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
353     return DD_OK;
354 }
355
356 HRESULT WINAPI
357 Main_IDirect3DDeviceImpl_7_3T_2T_SetClipStatus(LPDIRECT3DDEVICE7 iface,
358                                                LPD3DCLIPSTATUS lpD3DClipStatus)
359 {
360     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
361     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DClipStatus);
362     return DD_OK;
363 }
364
365 HRESULT WINAPI
366 Main_IDirect3DDeviceImpl_7_3T_2T_GetClipStatus(LPDIRECT3DDEVICE7 iface,
367                                                LPD3DCLIPSTATUS lpD3DClipStatus)
368 {
369     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
370     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DClipStatus);
371     return DD_OK;
372 }
373
374 HRESULT WINAPI
375 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitiveStrided(LPDIRECT3DDEVICE7 iface,
376                                                    D3DPRIMITIVETYPE d3dptPrimitiveType,
377                                                    DWORD dwVertexType,
378                                                    LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
379                                                    DWORD dwVertexCount,
380                                                    DWORD dwFlags)
381 {
382     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
383     FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, dwFlags);
384     return DD_OK;
385 }
386
387 HRESULT WINAPI
388 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitiveStrided(LPDIRECT3DDEVICE7 iface,
389                                                           D3DPRIMITIVETYPE d3dptPrimitiveType,
390                                                           DWORD dwVertexType,
391                                                           LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
392                                                           DWORD dwVertexCount,
393                                                           LPWORD lpIndex,
394                                                           DWORD dwIndexCount,
395                                                           DWORD dwFlags)
396 {
397     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
398     FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, lpIndex, dwIndexCount, dwFlags);
399     return DD_OK;
400 }
401
402 HRESULT WINAPI
403 Main_IDirect3DDeviceImpl_7_DrawPrimitiveVB(LPDIRECT3DDEVICE7 iface,
404                                            D3DPRIMITIVETYPE d3dptPrimitiveType,
405                                            LPDIRECT3DVERTEXBUFFER7 lpD3DVertexBuf,
406                                            DWORD dwStartVertex,
407                                            DWORD dwNumVertices,
408                                            DWORD dwFlags)
409 {
410     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
411     FIXME("(%p/%p)->(%08x,%p,%08lx,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, dwFlags);
412     return DD_OK;
413 }
414
415 HRESULT WINAPI
416 Main_IDirect3DDeviceImpl_7_DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE7 iface,
417                                                   D3DPRIMITIVETYPE d3dptPrimitiveType,
418                                                   LPDIRECT3DVERTEXBUFFER7 lpD3DVertexBuf,
419                                                   DWORD dwStartVertex,
420                                                   DWORD dwNumVertices,
421                                                   LPWORD lpwIndices,
422                                                   DWORD dwIndexCount,
423                                                   DWORD dwFlags)
424 {
425     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
426     FIXME("(%p/%p)->(%08x,%p,%08lx,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, lpwIndices, dwIndexCount, dwFlags);
427     return DD_OK;
428 }
429
430 HRESULT WINAPI
431 Main_IDirect3DDeviceImpl_7_3T_ComputeSphereVisibility(LPDIRECT3DDEVICE7 iface,
432                                                       LPD3DVECTOR lpCenters,
433                                                       LPD3DVALUE lpRadii,
434                                                       DWORD dwNumSpheres,
435                                                       DWORD dwFlags,
436                                                       LPDWORD lpdwReturnValues)
437 {
438     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
439     FIXME("(%p/%p)->(%p,%p,%08lx,%08lx,%p): stub!\n", This, iface, lpCenters, lpRadii, dwNumSpheres, dwFlags, lpdwReturnValues);
440     return DD_OK;
441 }
442
443 HRESULT WINAPI
444 Main_IDirect3DDeviceImpl_7_GetTexture(LPDIRECT3DDEVICE7 iface,
445                                       DWORD dwStage,
446                                       LPDIRECTDRAWSURFACE7* lpTexture)
447 {
448     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
449     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwStage, lpTexture);
450     return DD_OK;
451 }
452
453 HRESULT WINAPI
454 Main_IDirect3DDeviceImpl_7_SetTexture(LPDIRECT3DDEVICE7 iface,
455                                       DWORD dwStage,
456                                       LPDIRECTDRAWSURFACE7 lpTexture)
457 {
458     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
459     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwStage, lpTexture);
460     return DD_OK;
461 }
462
463 HRESULT WINAPI
464 Main_IDirect3DDeviceImpl_7_3T_GetTextureStageState(LPDIRECT3DDEVICE7 iface,
465                                                    DWORD dwStage,
466                                                    D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
467                                                    LPDWORD lpdwState)
468 {
469     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
470     FIXME("(%p/%p)->(%08lx,%08x,%p): stub!\n", This, iface, dwStage, d3dTexStageStateType, lpdwState);
471     return DD_OK;
472 }
473
474 HRESULT WINAPI
475 Main_IDirect3DDeviceImpl_7_3T_SetTextureStageState(LPDIRECT3DDEVICE7 iface,
476                                                    DWORD dwStage,
477                                                    D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
478                                                    DWORD dwState)
479 {
480     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
481     FIXME("(%p/%p)->(%08lx,%08x,%08lx): stub!\n", This, iface, dwStage, d3dTexStageStateType, dwState);
482     return DD_OK;
483 }
484
485 HRESULT WINAPI
486 Main_IDirect3DDeviceImpl_7_3T_ValidateDevice(LPDIRECT3DDEVICE7 iface,
487                                              LPDWORD lpdwPasses)
488 {
489     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
490     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpdwPasses);
491     return DD_OK;
492 }
493
494 HRESULT WINAPI
495 Main_IDirect3DDeviceImpl_7_ApplyStateBlock(LPDIRECT3DDEVICE7 iface,
496                                            DWORD dwBlockHandle)
497 {
498     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
499     FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
500     return DD_OK;
501 }
502
503 HRESULT WINAPI
504 Main_IDirect3DDeviceImpl_7_CaptureStateBlock(LPDIRECT3DDEVICE7 iface,
505                                              DWORD dwBlockHandle)
506 {
507     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
508     FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
509     return DD_OK;
510 }
511
512 HRESULT WINAPI
513 Main_IDirect3DDeviceImpl_7_DeleteStateBlock(LPDIRECT3DDEVICE7 iface,
514                                             DWORD dwBlockHandle)
515 {
516     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
517     FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
518     return DD_OK;
519 }
520
521 HRESULT WINAPI
522 Main_IDirect3DDeviceImpl_7_CreateStateBlock(LPDIRECT3DDEVICE7 iface,
523                                             D3DSTATEBLOCKTYPE d3dsbType,
524                                             LPDWORD lpdwBlockHandle)
525 {
526     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
527     FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, d3dsbType, lpdwBlockHandle);
528     return DD_OK;
529 }
530
531 HRESULT WINAPI
532 Main_IDirect3DDeviceImpl_7_Load(LPDIRECT3DDEVICE7 iface,
533                                 LPDIRECTDRAWSURFACE7 lpDestTex,
534                                 LPPOINT lpDestPoint,
535                                 LPDIRECTDRAWSURFACE7 lpSrcTex,
536                                 LPRECT lprcSrcRect,
537                                 DWORD dwFlags)
538 {
539     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
540     FIXME("(%p/%p)->(%p,%p,%p,%p,%08lx): stub!\n", This, iface, lpDestTex, lpDestPoint, lpSrcTex, lprcSrcRect, dwFlags);
541     return DD_OK;
542 }
543
544 HRESULT WINAPI
545 Main_IDirect3DDeviceImpl_7_LightEnable(LPDIRECT3DDEVICE7 iface,
546                                        DWORD dwLightIndex,
547                                        BOOL bEnable)
548 {
549     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
550     FIXME("(%p/%p)->(%08lx,%d): stub!\n", This, iface, dwLightIndex, bEnable);
551     return DD_OK;
552 }
553
554 HRESULT WINAPI
555 Main_IDirect3DDeviceImpl_7_GetLightEnable(LPDIRECT3DDEVICE7 iface,
556                                           DWORD dwLightIndex,
557                                           BOOL* pbEnable)
558 {
559     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
560     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwLightIndex, pbEnable);
561     return DD_OK;
562 }
563
564 HRESULT WINAPI
565 Main_IDirect3DDeviceImpl_7_SetClipPlane(LPDIRECT3DDEVICE7 iface,
566                                         DWORD dwIndex,
567                                         D3DVALUE* pPlaneEquation)
568 {
569     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
570     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwIndex, pPlaneEquation);
571     return DD_OK;
572 }
573
574 HRESULT WINAPI
575 Main_IDirect3DDeviceImpl_7_GetClipPlane(LPDIRECT3DDEVICE7 iface,
576                                         DWORD dwIndex,
577                                         D3DVALUE* pPlaneEquation)
578 {
579     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
580     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwIndex, pPlaneEquation);
581     return DD_OK;
582 }
583
584 HRESULT WINAPI
585 Main_IDirect3DDeviceImpl_7_GetInfo(LPDIRECT3DDEVICE7 iface,
586                                    DWORD dwDevInfoID,
587                                    LPVOID pDevInfoStruct,
588                                    DWORD dwSize)
589 {
590     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
591     FIXME("(%p/%p)->(%08lx,%p,%08lx): stub!\n", This, iface, dwDevInfoID, pDevInfoStruct, dwSize);
592     return DD_OK;
593 }
594
595 HRESULT WINAPI
596 Main_IDirect3DDeviceImpl_3_2T_1T_GetCaps(LPDIRECT3DDEVICE3 iface,
597                                          LPD3DDEVICEDESC lpD3DHWDevDesc,
598                                          LPD3DDEVICEDESC lpD3DHELDevDesc)
599 {
600     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
601     FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
602     return DD_OK;
603 }
604
605 HRESULT WINAPI
606 Main_IDirect3DDeviceImpl_3_2T_1T_GetStats(LPDIRECT3DDEVICE3 iface,
607                                           LPD3DSTATS lpD3DStats)
608 {
609     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
610     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DStats);
611     return DD_OK;
612 }
613
614 HRESULT WINAPI
615 Main_IDirect3DDeviceImpl_3_2T_1T_AddViewport(LPDIRECT3DDEVICE3 iface,
616                                              LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
617 {
618     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
619     IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
620     
621     TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
622
623     lpDirect3DViewportImpl->next = This->viewport_list;
624     This->viewport_list = lpDirect3DViewportImpl;
625     
626     return DD_OK;
627 }
628
629 HRESULT WINAPI
630 Main_IDirect3DDeviceImpl_3_2T_1T_DeleteViewport(LPDIRECT3DDEVICE3 iface,
631                                                 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
632 {
633     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
634     IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
635     IDirect3DViewportImpl *cur_viewport, *prev_viewport = NULL;
636   
637     TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
638
639     cur_viewport = This->viewport_list;
640     while (cur_viewport != NULL) {
641         if (cur_viewport == lpDirect3DViewportImpl) {
642             if (prev_viewport == NULL) This->viewport_list = cur_viewport->next;
643             else prev_viewport->next = cur_viewport->next;
644             /* TODO : add desactivate of the viewport and all associated lights... */
645             return DD_OK;
646         }
647         prev_viewport = cur_viewport;
648         cur_viewport = cur_viewport->next;
649     }
650     
651     return DDERR_INVALIDPARAMS;
652 }
653
654 HRESULT WINAPI
655 Main_IDirect3DDeviceImpl_3_2T_1T_NextViewport(LPDIRECT3DDEVICE3 iface,
656                                               LPDIRECT3DVIEWPORT3 lpDirect3DViewport3,
657                                               LPDIRECT3DVIEWPORT3* lplpDirect3DViewport3,
658                                               DWORD dwFlags)
659 {
660     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
661     IDirect3DViewportImpl *res = NULL;
662
663     TRACE("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpDirect3DViewport3, lplpDirect3DViewport3, dwFlags);
664     
665     switch (dwFlags) {
666         case D3DNEXT_NEXT: {
667             IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
668             res = lpDirect3DViewportImpl->next;
669         } break;
670         case D3DNEXT_HEAD: {
671             res = This->viewport_list;
672         } break;
673         case D3DNEXT_TAIL: {
674             IDirect3DViewportImpl *cur_viewport = This->viewport_list;
675             if (cur_viewport != NULL) {
676                 while (cur_viewport->next != NULL) cur_viewport = cur_viewport->next;
677             }
678             res = cur_viewport;
679         } break;
680         default:
681             *lplpDirect3DViewport3 = NULL;
682             return DDERR_INVALIDPARAMS;
683     }
684     *lplpDirect3DViewport3 = ICOM_INTERFACE(res, IDirect3DViewport3);
685     return DD_OK;
686 }
687
688 HRESULT WINAPI
689 Main_IDirect3DDeviceImpl_3_2T_SetCurrentViewport(LPDIRECT3DDEVICE3 iface,
690                                                  LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
691 {
692     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
693     TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
694
695     /* Should check if the viewport was added or not */
696
697     /* Set this viewport as the current viewport */
698     This->current_viewport = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
699
700     /* Activate this viewport */
701     This->current_viewport->active_device = This;
702     This->current_viewport->activate(This->current_viewport);    
703     
704     return DD_OK;
705 }
706
707 HRESULT WINAPI
708 Main_IDirect3DDeviceImpl_3_2T_GetCurrentViewport(LPDIRECT3DDEVICE3 iface,
709                                                  LPDIRECT3DVIEWPORT3* lplpDirect3DViewport3)
710 {
711     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
712     TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3DViewport3);
713
714     *lplpDirect3DViewport3 = ICOM_INTERFACE(This->current_viewport, IDirect3DViewport3);
715     TRACE(" returning interface %p\n", *lplpDirect3DViewport3);
716     
717     return DD_OK;
718 }
719
720 HRESULT WINAPI
721 Main_IDirect3DDeviceImpl_3_Begin(LPDIRECT3DDEVICE3 iface,
722                                  D3DPRIMITIVETYPE d3dptPrimitiveType,
723                                  DWORD dwVertexTypeDesc,
724                                  DWORD dwFlags)
725 {
726     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
727     FIXME("(%p/%p)->(%08x,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexTypeDesc, dwFlags);
728     return DD_OK;
729 }
730
731 HRESULT WINAPI
732 Main_IDirect3DDeviceImpl_3_BeginIndexed(LPDIRECT3DDEVICE3 iface,
733                                         D3DPRIMITIVETYPE d3dptPrimitiveType,
734                                         DWORD d3dvtVertexType,
735                                         LPVOID lpvVertices,
736                                         DWORD dwNumVertices,
737                                         DWORD dwFlags)
738 {
739     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
740     FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwNumVertices, dwFlags);
741     return DD_OK;
742 }
743
744 HRESULT WINAPI
745 Main_IDirect3DDeviceImpl_3_2T_Vertex(LPDIRECT3DDEVICE3 iface,
746                                      LPVOID lpVertexType)
747 {
748     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
749     FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpVertexType);
750     return DD_OK;
751 }
752
753 HRESULT WINAPI
754 Main_IDirect3DDeviceImpl_3_2T_Index(LPDIRECT3DDEVICE3 iface,
755                                     WORD wVertexIndex)
756 {
757     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
758     FIXME("(%p/%p)->(%04x): stub!\n", This, iface, wVertexIndex);
759     return DD_OK;
760 }
761
762 HRESULT WINAPI
763 Main_IDirect3DDeviceImpl_3_2T_End(LPDIRECT3DDEVICE3 iface,
764                                   DWORD dwFlags)
765 {
766     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
767     FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwFlags);
768     return DD_OK;
769 }
770
771 HRESULT WINAPI
772 Main_IDirect3DDeviceImpl_3_2T_GetLightState(LPDIRECT3DDEVICE3 iface,
773                                             D3DLIGHTSTATETYPE dwLightStateType,
774                                             LPDWORD lpdwLightState)
775 {
776     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
777     FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dwLightStateType, lpdwLightState);
778     return DD_OK;
779 }
780
781 HRESULT WINAPI
782 Main_IDirect3DDeviceImpl_3_2T_SetLightState(LPDIRECT3DDEVICE3 iface,
783                                             D3DLIGHTSTATETYPE dwLightStateType,
784                                             DWORD dwLightState)
785 {
786     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
787     FIXME("(%p/%p)->(%08x,%08lx): stub!\n", This, iface, dwLightStateType, dwLightState);
788     return DD_OK;
789 }
790
791 HRESULT WINAPI
792 Main_IDirect3DDeviceImpl_3_DrawPrimitiveVB(LPDIRECT3DDEVICE3 iface,
793                                            D3DPRIMITIVETYPE d3dptPrimitiveType,
794                                            LPDIRECT3DVERTEXBUFFER lpD3DVertexBuf,
795                                            DWORD dwStartVertex,
796                                            DWORD dwNumVertices,
797                                            DWORD dwFlags)
798 {
799     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
800     FIXME("(%p/%p)->(%08x,%p,%08lx,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, dwFlags);
801     return DD_OK;
802 }
803
804 HRESULT WINAPI
805 Main_IDirect3DDeviceImpl_3_DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE3 iface,
806                                                   D3DPRIMITIVETYPE d3dptPrimitiveType,
807                                                   LPDIRECT3DVERTEXBUFFER lpD3DVertexBuf,
808                                                   LPWORD lpwIndices,
809                                                   DWORD dwIndexCount,
810                                                   DWORD dwFlags)
811 {
812     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
813     FIXME("(%p/%p)->(%08x,%p,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, lpwIndices, dwIndexCount, dwFlags);
814     return DD_OK;
815 }
816
817 HRESULT WINAPI
818 Main_IDirect3DDeviceImpl_3_GetTexture(LPDIRECT3DDEVICE3 iface,
819                                       DWORD dwStage,
820                                       LPDIRECT3DTEXTURE2* lplpTexture2)
821 {
822     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
823     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwStage, lplpTexture2);
824     return DD_OK;
825 }
826
827 HRESULT WINAPI
828 Main_IDirect3DDeviceImpl_3_SetTexture(LPDIRECT3DDEVICE3 iface,
829                                       DWORD dwStage,
830                                       LPDIRECT3DTEXTURE2 lpTexture2)
831 {
832     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
833     FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwStage, lpTexture2);
834     return DD_OK;
835 }
836
837 HRESULT WINAPI
838 Main_IDirect3DDeviceImpl_2_SwapTextureHandles(LPDIRECT3DDEVICE2 iface,
839                                               LPDIRECT3DTEXTURE2 lpD3DTex1,
840                                               LPDIRECT3DTEXTURE2 lpD3DTex2)
841 {
842     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
843     FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DTex1, lpD3DTex2);
844     return DD_OK;
845 }
846
847 HRESULT WINAPI
848 Main_IDirect3DDeviceImpl_2_NextViewport(LPDIRECT3DDEVICE2 iface,
849                                         LPDIRECT3DVIEWPORT2 lpDirect3DViewport2,
850                                         LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2,
851                                         DWORD dwFlags)
852 {
853     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
854     FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpDirect3DViewport2, lplpDirect3DViewport2, dwFlags);
855     return DD_OK;
856 }
857
858 HRESULT WINAPI
859 Main_IDirect3DDeviceImpl_2_1T_EnumTextureFormats(LPDIRECT3DDEVICE2 iface,
860                                                  LPD3DENUMTEXTUREFORMATSCALLBACK lpD3DEnumTextureProc,
861                                                  LPVOID lpArg)
862 {
863     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
864     FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DEnumTextureProc, lpArg);
865     return DD_OK;
866 }
867
868 HRESULT WINAPI
869 Main_IDirect3DDeviceImpl_2_Begin(LPDIRECT3DDEVICE2 iface,
870                                  D3DPRIMITIVETYPE d3dpt,
871                                  D3DVERTEXTYPE dwVertexTypeDesc,
872                                  DWORD dwFlags)
873 {
874     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
875     FIXME("(%p/%p)->(%08x,%08x,%08lx): stub!\n", This, iface, d3dpt, dwVertexTypeDesc, dwFlags);
876     return DD_OK;
877 }
878
879 HRESULT WINAPI
880 Main_IDirect3DDeviceImpl_2_BeginIndexed(LPDIRECT3DDEVICE2 iface,
881                                         D3DPRIMITIVETYPE d3dptPrimitiveType,
882                                         D3DVERTEXTYPE d3dvtVertexType,
883                                         LPVOID lpvVertices,
884                                         DWORD dwNumVertices,
885                                         DWORD dwFlags)
886 {
887     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
888     FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwNumVertices, dwFlags);
889     return DD_OK;
890 }
891
892 HRESULT WINAPI
893 Main_IDirect3DDeviceImpl_2_DrawPrimitive(LPDIRECT3DDEVICE2 iface,
894                                          D3DPRIMITIVETYPE d3dptPrimitiveType,
895                                          D3DVERTEXTYPE d3dvtVertexType,
896                                          LPVOID lpvVertices,
897                                          DWORD dwVertexCount,
898                                          DWORD dwFlags)
899 {
900     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
901     FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
902     return DD_OK;
903 }
904
905 HRESULT WINAPI
906 Main_IDirect3DDeviceImpl_2_DrawIndexedPrimitive(LPDIRECT3DDEVICE2 iface,
907                                                 D3DPRIMITIVETYPE d3dptPrimitiveType,
908                                                 D3DVERTEXTYPE d3dvtVertexType,
909                                                 LPVOID lpvVertices,
910                                                 DWORD dwVertexCount,
911                                                 LPWORD dwIndices,
912                                                 DWORD dwIndexCount,
913                                                 DWORD dwFlags)
914 {
915     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
916     FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
917     return DD_OK;
918 }
919
920 HRESULT WINAPI
921 Main_IDirect3DDeviceImpl_1_Initialize(LPDIRECT3DDEVICE iface,
922                                       LPDIRECT3D lpDirect3D,
923                                       LPGUID lpGUID,
924                                       LPD3DDEVICEDESC lpD3DDVDesc)
925 {
926     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
927     FIXME("(%p/%p)->(%p,%p,%p): stub!\n", This, iface, lpDirect3D, lpGUID, lpD3DDVDesc);
928     return DD_OK;
929 }
930
931 HRESULT WINAPI
932 Main_IDirect3DDeviceImpl_1_SwapTextureHandles(LPDIRECT3DDEVICE iface,
933                                               LPDIRECT3DTEXTURE lpD3Dtex1,
934                                               LPDIRECT3DTEXTURE lpD3DTex2)
935 {
936     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
937     FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3Dtex1, lpD3DTex2);
938     return DD_OK;
939 }
940
941 HRESULT WINAPI
942 Main_IDirect3DDeviceImpl_1_CreateExecuteBuffer(LPDIRECT3DDEVICE iface,
943                                                LPD3DEXECUTEBUFFERDESC lpDesc,
944                                                LPDIRECT3DEXECUTEBUFFER* lplpDirect3DExecuteBuffer,
945                                                IUnknown* pUnkOuter)
946 {
947     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
948     FIXME("(%p/%p)->(%p,%p,%p): stub!\n", This, iface, lpDesc, lplpDirect3DExecuteBuffer, pUnkOuter);
949     return DD_OK;
950 }
951
952 HRESULT WINAPI
953 Main_IDirect3DDeviceImpl_1_Execute(LPDIRECT3DDEVICE iface,
954                                    LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
955                                    LPDIRECT3DVIEWPORT lpDirect3DViewport,
956                                    DWORD dwFlags)
957 {
958     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
959     IDirect3DExecuteBufferImpl *lpDirect3DExecuteBufferImpl = ICOM_OBJECT(IDirect3DExecuteBufferImpl, IDirect3DExecuteBuffer, lpDirect3DExecuteBuffer);
960     IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport);
961     
962     TRACE("(%p/%p)->(%p,%p,%08lx)\n", This, iface, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags);
963
964     /* Put this as the default context */
965
966     /* Execute... */
967     lpDirect3DExecuteBufferImpl->execute(lpDirect3DExecuteBufferImpl, This, lpDirect3DViewportImpl);
968
969     return DD_OK;
970 }
971
972 HRESULT WINAPI
973 Main_IDirect3DDeviceImpl_1_NextViewport(LPDIRECT3DDEVICE iface,
974                                         LPDIRECT3DVIEWPORT lpDirect3DViewport,
975                                         LPDIRECT3DVIEWPORT* lplpDirect3DViewport,
976                                         DWORD dwFlags)
977 {
978     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
979     FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpDirect3DViewport, lplpDirect3DViewport, dwFlags);
980     return DD_OK;
981 }
982
983 HRESULT WINAPI
984 Main_IDirect3DDeviceImpl_1_Pick(LPDIRECT3DDEVICE iface,
985                                 LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
986                                 LPDIRECT3DVIEWPORT lpDirect3DViewport,
987                                 DWORD dwFlags,
988                                 LPD3DRECT lpRect)
989 {
990     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
991     FIXME("(%p/%p)->(%p,%p,%08lx,%p): stub!\n", This, iface, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags, lpRect);
992     return DD_OK;
993 }
994
995 HRESULT WINAPI
996 Main_IDirect3DDeviceImpl_1_GetPickRecords(LPDIRECT3DDEVICE iface,
997                                           LPDWORD lpCount,
998                                           LPD3DPICKRECORD lpD3DPickRec)
999 {
1000     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1001     FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpCount, lpD3DPickRec);
1002     return DD_OK;
1003 }
1004
1005 HRESULT WINAPI
1006 Main_IDirect3DDeviceImpl_1_CreateMatrix(LPDIRECT3DDEVICE iface,
1007                                         LPD3DMATRIXHANDLE lpD3DMatHandle)
1008 {
1009     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1010     TRACE("(%p/%p)->(%p)\n", This, iface, lpD3DMatHandle);
1011
1012     *lpD3DMatHandle = (D3DMATRIXHANDLE) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(D3DMATRIX));
1013     TRACE(" returning matrix handle %p\n", (void *) *lpD3DMatHandle);
1014     
1015     return DD_OK;
1016 }
1017
1018 HRESULT WINAPI
1019 Main_IDirect3DDeviceImpl_1_SetMatrix(LPDIRECT3DDEVICE iface,
1020                                      D3DMATRIXHANDLE D3DMatHandle,
1021                                      LPD3DMATRIX lpD3DMatrix)
1022 {
1023     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1024     TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, (DWORD) D3DMatHandle, lpD3DMatrix);
1025
1026     dump_mat(lpD3DMatrix);
1027     *((D3DMATRIX *) D3DMatHandle) = *lpD3DMatrix;   
1028     
1029     return DD_OK;
1030 }
1031
1032 HRESULT WINAPI
1033 Main_IDirect3DDeviceImpl_1_GetMatrix(LPDIRECT3DDEVICE iface,
1034                                      D3DMATRIXHANDLE D3DMatHandle,
1035                                      LPD3DMATRIX lpD3DMatrix)
1036 {
1037     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1038     TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, (DWORD) D3DMatHandle, lpD3DMatrix);
1039
1040     *lpD3DMatrix = *((D3DMATRIX *) D3DMatHandle);
1041     
1042     return DD_OK;
1043 }
1044
1045 HRESULT WINAPI
1046 Main_IDirect3DDeviceImpl_1_DeleteMatrix(LPDIRECT3DDEVICE iface,
1047                                         D3DMATRIXHANDLE D3DMatHandle)
1048 {
1049     ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1050     TRACE("(%p/%p)->(%08lx)\n", This, iface, (DWORD) D3DMatHandle);
1051
1052     HeapFree(GetProcessHeap(), 0, (void *) D3DMatHandle);
1053     
1054     return DD_OK;
1055 }
1056
1057 HRESULT WINAPI
1058 Thunk_IDirect3DDeviceImpl_3_QueryInterface(LPDIRECT3DDEVICE3 iface,
1059                                            REFIID riid,
1060                                            LPVOID* obp)
1061 {
1062     TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1063     return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1064                                            riid,
1065                                            obp);
1066 }
1067
1068 HRESULT WINAPI
1069 Thunk_IDirect3DDeviceImpl_2_QueryInterface(LPDIRECT3DDEVICE2 iface,
1070                                            REFIID riid,
1071                                            LPVOID* obp)
1072 {
1073     TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1074     return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1075                                            riid,
1076                                            obp);
1077 }
1078
1079 HRESULT WINAPI
1080 Thunk_IDirect3DDeviceImpl_1_QueryInterface(LPDIRECT3DDEVICE iface,
1081                                            REFIID riid,
1082                                            LPVOID* obp)
1083 {
1084     TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1085     return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface),
1086                                            riid,
1087                                            obp);
1088 }
1089
1090 ULONG WINAPI
1091 Thunk_IDirect3DDeviceImpl_3_AddRef(LPDIRECT3DDEVICE3 iface)
1092 {
1093     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1094     return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1095 }
1096
1097 ULONG WINAPI
1098 Thunk_IDirect3DDeviceImpl_2_AddRef(LPDIRECT3DDEVICE2 iface)
1099 {
1100     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1101     return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1102 }
1103
1104 ULONG WINAPI
1105 Thunk_IDirect3DDeviceImpl_1_AddRef(LPDIRECT3DDEVICE iface)
1106 {
1107     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1108     return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1109 }
1110
1111 ULONG WINAPI
1112 Thunk_IDirect3DDeviceImpl_3_Release(LPDIRECT3DDEVICE3 iface)
1113 {
1114     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1115     return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1116 }
1117
1118 ULONG WINAPI
1119 Thunk_IDirect3DDeviceImpl_2_Release(LPDIRECT3DDEVICE2 iface)
1120 {
1121     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1122     return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1123 }
1124
1125 ULONG WINAPI
1126 Thunk_IDirect3DDeviceImpl_1_Release(LPDIRECT3DDEVICE iface)
1127 {
1128     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1129     return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1130 }
1131
1132 HRESULT WINAPI
1133 Thunk_IDirect3DDeviceImpl_2_AddViewport(LPDIRECT3DDEVICE2 iface,
1134                                         LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1135 {
1136     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1137     return IDirect3DDevice3_AddViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1138                                         (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1139 }
1140
1141 HRESULT WINAPI
1142 Thunk_IDirect3DDeviceImpl_1_AddViewport(LPDIRECT3DDEVICE iface,
1143                                         LPDIRECT3DVIEWPORT lpDirect3DViewport)
1144 {
1145     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport);
1146     return IDirect3DDevice3_AddViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1147                                         (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */);
1148 }
1149
1150 HRESULT WINAPI
1151 Thunk_IDirect3DDeviceImpl_2_DeleteViewport(LPDIRECT3DDEVICE2 iface,
1152                                            LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1153 {
1154     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1155     return IDirect3DDevice3_DeleteViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1156                                            (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1157 }
1158
1159 HRESULT WINAPI
1160 Thunk_IDirect3DDeviceImpl_1_DeleteViewport(LPDIRECT3DDEVICE iface,
1161                                            LPDIRECT3DVIEWPORT lpDirect3DViewport)
1162 {
1163     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport);
1164     return IDirect3DDevice3_DeleteViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1165                                            (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */);
1166 }
1167
1168 HRESULT WINAPI
1169 Thunk_IDirect3DDeviceImpl_2_NextViewport(LPDIRECT3DDEVICE3 iface,
1170                                          LPDIRECT3DVIEWPORT2 lpDirect3DViewport2,
1171                                          LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2,
1172                                          DWORD dwFlags)
1173 {
1174     TRACE("(%p)->(%p,%p,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2, lplpDirect3DViewport2, dwFlags);
1175     return IDirect3DDevice3_NextViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1176                                          (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */,
1177                                          (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport2,
1178                                          dwFlags);
1179 }
1180
1181 HRESULT WINAPI
1182 Thunk_IDirect3DDeviceImpl_1_NextViewport(LPDIRECT3DDEVICE3 iface,
1183                                          LPDIRECT3DVIEWPORT lpDirect3DViewport,
1184                                          LPDIRECT3DVIEWPORT* lplpDirect3DViewport,
1185                                          DWORD dwFlags)
1186 {
1187     TRACE("(%p)->(%p,%p,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport, lplpDirect3DViewport, dwFlags);
1188     return IDirect3DDevice3_NextViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1189                                          (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */,
1190                                          (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport,
1191                                          dwFlags);
1192 }
1193
1194 HRESULT WINAPI
1195 Thunk_IDirect3DDeviceImpl_3_GetDirect3D(LPDIRECT3DDEVICE3 iface,
1196                                         LPDIRECT3D3* lplpDirect3D3)
1197 {
1198     HRESULT ret;
1199     LPDIRECT3D7 ret_ptr;
1200   
1201     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D3);
1202     ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1203                                        &ret_ptr);
1204     *lplpDirect3D3 = COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D7, IDirect3D3, ret_ptr);
1205     TRACE(" returning interface %p\n", *lplpDirect3D3);
1206     return ret;
1207 }
1208
1209 HRESULT WINAPI
1210 Thunk_IDirect3DDeviceImpl_2_GetDirect3D(LPDIRECT3DDEVICE2 iface,
1211                                         LPDIRECT3D2* lplpDirect3D2)
1212 {
1213     HRESULT ret;
1214     LPDIRECT3D7 ret_ptr;
1215   
1216     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D2);
1217     ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1218                                        &ret_ptr);
1219     *lplpDirect3D2 = COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D7, IDirect3D2, ret_ptr);
1220     TRACE(" returning interface %p\n", *lplpDirect3D2);
1221     return ret;
1222 }
1223
1224 HRESULT WINAPI
1225 Thunk_IDirect3DDeviceImpl_1_GetDirect3D(LPDIRECT3DDEVICE iface,
1226                                         LPDIRECT3D* lplpDirect3D)
1227 {
1228     HRESULT ret;
1229     LPDIRECT3D7 ret_ptr;
1230   
1231     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D);
1232     ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface),
1233                                        &ret_ptr);
1234     *lplpDirect3D = COM_INTERFACE_CAST(IDirect3DImpl, IDirect3D7, IDirect3D, ret_ptr);
1235     TRACE(" returning interface %p\n", *lplpDirect3D);
1236     return ret;
1237 }
1238
1239 HRESULT WINAPI
1240 Thunk_IDirect3DDeviceImpl_2_SetCurrentViewport(LPDIRECT3DDEVICE2 iface,
1241                                                LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1242 {
1243     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1244     return IDirect3DDevice3_SetCurrentViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1245                                                (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1246 }
1247
1248 HRESULT WINAPI
1249 Thunk_IDirect3DDeviceImpl_2_GetCurrentViewport(LPDIRECT3DDEVICE2 iface,
1250                                                LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2)
1251 {
1252     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lplpDirect3DViewport2);
1253     return IDirect3DDevice3_GetCurrentViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1254                                                (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1255 }
1256
1257 HRESULT WINAPI
1258 Thunk_IDirect3DDeviceImpl_3_EnumTextureFormats(LPDIRECT3DDEVICE3 iface,
1259                                                LPD3DENUMPIXELFORMATSCALLBACK lpD3DEnumPixelProc,
1260                                                LPVOID lpArg)
1261 {
1262     TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DEnumPixelProc, lpArg);
1263     return IDirect3DDevice7_EnumTextureFormats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1264                                                lpD3DEnumPixelProc,
1265                                                lpArg);
1266 }
1267
1268 HRESULT WINAPI
1269 Thunk_IDirect3DDeviceImpl_3_BeginScene(LPDIRECT3DDEVICE3 iface)
1270 {
1271     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1272     return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1273 }
1274
1275 HRESULT WINAPI
1276 Thunk_IDirect3DDeviceImpl_2_BeginScene(LPDIRECT3DDEVICE2 iface)
1277 {
1278     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1279     return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1280 }
1281
1282 HRESULT WINAPI
1283 Thunk_IDirect3DDeviceImpl_1_BeginScene(LPDIRECT3DDEVICE iface)
1284 {
1285     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1286     return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1287 }
1288
1289 HRESULT WINAPI
1290 Thunk_IDirect3DDeviceImpl_3_EndScene(LPDIRECT3DDEVICE3 iface)
1291 {
1292     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1293     return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1294 }
1295
1296 HRESULT WINAPI
1297 Thunk_IDirect3DDeviceImpl_2_EndScene(LPDIRECT3DDEVICE2 iface)
1298 {
1299     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1300     return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1301 }
1302
1303 HRESULT WINAPI
1304 Thunk_IDirect3DDeviceImpl_1_EndScene(LPDIRECT3DDEVICE iface)
1305 {
1306     TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1307     return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1308 }
1309
1310 HRESULT WINAPI
1311 Thunk_IDirect3DDeviceImpl_3_SetTransform(LPDIRECT3DDEVICE3 iface,
1312                                          D3DTRANSFORMSTATETYPE dtstTransformStateType,
1313                                          LPD3DMATRIX lpD3DMatrix)
1314 {
1315     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1316     return IDirect3DDevice7_SetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1317                                          dtstTransformStateType,
1318                                          lpD3DMatrix);
1319 }
1320
1321 HRESULT WINAPI
1322 Thunk_IDirect3DDeviceImpl_2_SetTransform(LPDIRECT3DDEVICE2 iface,
1323                                          D3DTRANSFORMSTATETYPE dtstTransformStateType,
1324                                          LPD3DMATRIX lpD3DMatrix)
1325 {
1326     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1327     return IDirect3DDevice7_SetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1328                                          dtstTransformStateType,
1329                                          lpD3DMatrix);
1330 }
1331
1332 HRESULT WINAPI
1333 Thunk_IDirect3DDeviceImpl_3_GetTransform(LPDIRECT3DDEVICE3 iface,
1334                                          D3DTRANSFORMSTATETYPE dtstTransformStateType,
1335                                          LPD3DMATRIX lpD3DMatrix)
1336 {
1337     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1338     return IDirect3DDevice7_GetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1339                                          dtstTransformStateType,
1340                                          lpD3DMatrix);
1341 }
1342
1343 HRESULT WINAPI
1344 Thunk_IDirect3DDeviceImpl_2_GetTransform(LPDIRECT3DDEVICE2 iface,
1345                                          D3DTRANSFORMSTATETYPE dtstTransformStateType,
1346                                          LPD3DMATRIX lpD3DMatrix)
1347 {
1348     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1349     return IDirect3DDevice7_GetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1350                                          dtstTransformStateType,
1351                                          lpD3DMatrix);
1352 }
1353
1354 HRESULT WINAPI
1355 Thunk_IDirect3DDeviceImpl_3_MultiplyTransform(LPDIRECT3DDEVICE3 iface,
1356                                               D3DTRANSFORMSTATETYPE dtstTransformStateType,
1357                                               LPD3DMATRIX lpD3DMatrix)
1358 {
1359     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1360     return IDirect3DDevice7_MultiplyTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1361                                               dtstTransformStateType,
1362                                               lpD3DMatrix);
1363 }
1364
1365 HRESULT WINAPI
1366 Thunk_IDirect3DDeviceImpl_2_MultiplyTransform(LPDIRECT3DDEVICE2 iface,
1367                                               D3DTRANSFORMSTATETYPE dtstTransformStateType,
1368                                               LPD3DMATRIX lpD3DMatrix)
1369 {
1370     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1371     return IDirect3DDevice7_MultiplyTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1372                                               dtstTransformStateType,
1373                                               lpD3DMatrix);
1374 }
1375
1376 HRESULT WINAPI
1377 Thunk_IDirect3DDeviceImpl_3_SetRenderState(LPDIRECT3DDEVICE3 iface,
1378                                            D3DRENDERSTATETYPE dwRenderStateType,
1379                                            DWORD dwRenderState)
1380 {
1381     TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, dwRenderState);
1382     return IDirect3DDevice7_SetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1383                                            dwRenderStateType,
1384                                            dwRenderState);
1385 }
1386
1387 HRESULT WINAPI
1388 Thunk_IDirect3DDeviceImpl_2_SetRenderState(LPDIRECT3DDEVICE2 iface,
1389                                            D3DRENDERSTATETYPE dwRenderStateType,
1390                                            DWORD dwRenderState)
1391 {
1392     TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, dwRenderState);
1393     return IDirect3DDevice7_SetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1394                                            dwRenderStateType,
1395                                            dwRenderState);
1396 }
1397
1398 HRESULT WINAPI
1399 Thunk_IDirect3DDeviceImpl_3_GetRenderState(LPDIRECT3DDEVICE3 iface,
1400                                            D3DRENDERSTATETYPE dwRenderStateType,
1401                                            LPDWORD lpdwRenderState)
1402 {
1403     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, lpdwRenderState);
1404     return IDirect3DDevice7_GetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1405                                            dwRenderStateType,
1406                                            lpdwRenderState);
1407 }
1408
1409 HRESULT WINAPI
1410 Thunk_IDirect3DDeviceImpl_2_GetRenderState(LPDIRECT3DDEVICE2 iface,
1411                                            D3DRENDERSTATETYPE dwRenderStateType,
1412                                            LPDWORD lpdwRenderState)
1413 {
1414     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, lpdwRenderState);
1415     return IDirect3DDevice7_GetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1416                                            dwRenderStateType,
1417                                            lpdwRenderState);
1418 }
1419
1420 HRESULT WINAPI
1421 Thunk_IDirect3DDeviceImpl_3_DrawPrimitive(LPDIRECT3DDEVICE3 iface,
1422                                           D3DPRIMITIVETYPE d3dptPrimitiveType,
1423                                           DWORD d3dvtVertexType,
1424                                           LPVOID lpvVertices,
1425                                           DWORD dwVertexCount,
1426                                           DWORD dwFlags)
1427 {
1428     TRACE("(%p)->(%08x,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
1429     return IDirect3DDevice7_DrawPrimitive(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1430                                           d3dptPrimitiveType,
1431                                           d3dvtVertexType,
1432                                           lpvVertices,
1433                                           dwVertexCount,
1434                                           dwFlags);
1435 }
1436
1437 HRESULT WINAPI
1438 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitive(LPDIRECT3DDEVICE3 iface,
1439                                                  D3DPRIMITIVETYPE d3dptPrimitiveType,
1440                                                  DWORD d3dvtVertexType,
1441                                                  LPVOID lpvVertices,
1442                                                  DWORD dwVertexCount,
1443                                                  LPWORD dwIndices,
1444                                                  DWORD dwIndexCount,
1445                                                  DWORD dwFlags)
1446 {
1447     TRACE("(%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
1448     return IDirect3DDevice7_DrawIndexedPrimitive(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1449                                                  d3dptPrimitiveType,
1450                                                  d3dvtVertexType,
1451                                                  lpvVertices,
1452                                                  dwVertexCount,
1453                                                  dwIndices,
1454                                                  dwIndexCount,
1455                                                  dwFlags);
1456 }
1457
1458 HRESULT WINAPI
1459 Thunk_IDirect3DDeviceImpl_3_SetClipStatus(LPDIRECT3DDEVICE3 iface,
1460                                           LPD3DCLIPSTATUS lpD3DClipStatus)
1461 {
1462     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1463     return IDirect3DDevice7_SetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1464                                           lpD3DClipStatus);
1465 }
1466
1467 HRESULT WINAPI
1468 Thunk_IDirect3DDeviceImpl_2_SetClipStatus(LPDIRECT3DDEVICE2 iface,
1469                                           LPD3DCLIPSTATUS lpD3DClipStatus)
1470 {
1471     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1472     return IDirect3DDevice7_SetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1473                                           lpD3DClipStatus);
1474 }
1475
1476 HRESULT WINAPI
1477 Thunk_IDirect3DDeviceImpl_3_GetClipStatus(LPDIRECT3DDEVICE3 iface,
1478                                           LPD3DCLIPSTATUS lpD3DClipStatus)
1479 {
1480     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1481     return IDirect3DDevice7_GetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1482                                           lpD3DClipStatus);
1483 }
1484
1485 HRESULT WINAPI
1486 Thunk_IDirect3DDeviceImpl_2_GetClipStatus(LPDIRECT3DDEVICE2 iface,
1487                                           LPD3DCLIPSTATUS lpD3DClipStatus)
1488 {
1489     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1490     return IDirect3DDevice7_GetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1491                                           lpD3DClipStatus);
1492 }
1493
1494 HRESULT WINAPI
1495 Thunk_IDirect3DDeviceImpl_3_DrawPrimitiveStrided(LPDIRECT3DDEVICE3 iface,
1496                                                  D3DPRIMITIVETYPE d3dptPrimitiveType,
1497                                                  DWORD dwVertexType,
1498                                                  LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
1499                                                  DWORD dwVertexCount,
1500                                                  DWORD dwFlags)
1501 {
1502     TRACE("(%p)->(%08x,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, dwFlags);
1503     return IDirect3DDevice7_DrawPrimitiveStrided(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1504                                                  d3dptPrimitiveType,
1505                                                  dwVertexType,
1506                                                  lpD3DDrawPrimStrideData,
1507                                                  dwVertexCount,
1508                                                  dwFlags);
1509 }
1510
1511 HRESULT WINAPI
1512 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitiveStrided(LPDIRECT3DDEVICE3 iface,
1513                                                         D3DPRIMITIVETYPE d3dptPrimitiveType,
1514                                                         DWORD dwVertexType,
1515                                                         LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
1516                                                         DWORD dwVertexCount,
1517                                                         LPWORD lpIndex,
1518                                                         DWORD dwIndexCount,
1519                                                         DWORD dwFlags)
1520 {
1521     TRACE("(%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, lpIndex, dwIndexCount, dwFlags);
1522     return IDirect3DDevice7_DrawIndexedPrimitiveStrided(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1523                                                         d3dptPrimitiveType,
1524                                                         dwVertexType,
1525                                                         lpD3DDrawPrimStrideData,
1526                                                         dwVertexCount,
1527                                                         lpIndex,
1528                                                         dwIndexCount,
1529                                                         dwFlags);
1530 }
1531
1532 HRESULT WINAPI
1533 Thunk_IDirect3DDeviceImpl_3_ComputeSphereVisibility(LPDIRECT3DDEVICE3 iface,
1534                                                     LPD3DVECTOR lpCenters,
1535                                                     LPD3DVALUE lpRadii,
1536                                                     DWORD dwNumSpheres,
1537                                                     DWORD dwFlags,
1538                                                     LPDWORD lpdwReturnValues)
1539 {
1540     TRACE("(%p)->(%p,%p,%08lx,%08lx,%p) thunking to IDirect3DDevice7 interface.\n", iface, lpCenters, lpRadii, dwNumSpheres, dwFlags, lpdwReturnValues);
1541     return IDirect3DDevice7_ComputeSphereVisibility(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1542                                                     lpCenters,
1543                                                     lpRadii,
1544                                                     dwNumSpheres,
1545                                                     dwFlags,
1546                                                     lpdwReturnValues);
1547 }
1548
1549 HRESULT WINAPI
1550 Thunk_IDirect3DDeviceImpl_3_GetTextureStageState(LPDIRECT3DDEVICE3 iface,
1551                                                  DWORD dwStage,
1552                                                  D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
1553                                                  LPDWORD lpdwState)
1554 {
1555     TRACE("(%p)->(%08lx,%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, d3dTexStageStateType, lpdwState);
1556     return IDirect3DDevice7_GetTextureStageState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1557                                                  dwStage,
1558                                                  d3dTexStageStateType,
1559                                                  lpdwState);
1560 }
1561
1562 HRESULT WINAPI
1563 Thunk_IDirect3DDeviceImpl_3_SetTextureStageState(LPDIRECT3DDEVICE3 iface,
1564                                                  DWORD dwStage,
1565                                                  D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
1566                                                  DWORD dwState)
1567 {
1568     TRACE("(%p)->(%08lx,%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, d3dTexStageStateType, dwState);
1569     return IDirect3DDevice7_SetTextureStageState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1570                                                  dwStage,
1571                                                  d3dTexStageStateType,
1572                                                  dwState);
1573 }
1574
1575 HRESULT WINAPI
1576 Thunk_IDirect3DDeviceImpl_3_ValidateDevice(LPDIRECT3DDEVICE3 iface,
1577                                            LPDWORD lpdwPasses)
1578 {
1579     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpdwPasses);
1580     return IDirect3DDevice7_ValidateDevice(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1581                                            lpdwPasses);
1582 }
1583
1584 HRESULT WINAPI
1585 Thunk_IDirect3DDeviceImpl_2_GetCaps(LPDIRECT3DDEVICE2 iface,
1586                                     LPD3DDEVICEDESC lpD3DHWDevDesc,
1587                                     LPD3DDEVICEDESC lpD3DHELDevDesc)
1588 {
1589     TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1590     return IDirect3DDevice3_GetCaps(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1591                                     lpD3DHWDevDesc,
1592                                     lpD3DHELDevDesc);
1593 }
1594
1595 HRESULT WINAPI
1596 Thunk_IDirect3DDeviceImpl_1_GetCaps(LPDIRECT3DDEVICE iface,
1597                                     LPD3DDEVICEDESC lpD3DHWDevDesc,
1598                                     LPD3DDEVICEDESC lpD3DHELDevDesc)
1599 {
1600     TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1601     return IDirect3DDevice3_GetCaps(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1602                                     lpD3DHWDevDesc,
1603                                     lpD3DHELDevDesc);
1604 }
1605
1606 HRESULT WINAPI
1607 Thunk_IDirect3DDeviceImpl_2_GetStats(LPDIRECT3DDEVICE2 iface,
1608                                      LPD3DSTATS lpD3DStats)
1609 {
1610     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DStats);
1611     return IDirect3DDevice3_GetStats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1612                                      lpD3DStats);
1613 }
1614
1615 HRESULT WINAPI
1616 Thunk_IDirect3DDeviceImpl_1_GetStats(LPDIRECT3DDEVICE iface,
1617                                      LPD3DSTATS lpD3DStats)
1618 {
1619     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DStats);
1620     return IDirect3DDevice3_GetStats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1621                                      lpD3DStats);
1622 }
1623
1624 HRESULT WINAPI
1625 Thunk_IDirect3DDeviceImpl_3_SetRenderTarget(LPDIRECT3DDEVICE3 iface,
1626                                             LPDIRECTDRAWSURFACE4 lpNewRenderTarget,
1627                                             DWORD dwFlags)
1628 {
1629     TRACE("(%p)->(%p,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, lpNewRenderTarget, dwFlags);
1630     return IDirect3DDevice7_SetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1631                                             (LPDIRECTDRAWSURFACE7) lpNewRenderTarget /* No cast needed as DSurf4 == DSurf7 */,
1632                                             dwFlags);
1633 }
1634
1635 HRESULT WINAPI
1636 Thunk_IDirect3DDeviceImpl_3_GetRenderTarget(LPDIRECT3DDEVICE3 iface,
1637                                             LPDIRECTDRAWSURFACE4* lplpRenderTarget)
1638 {
1639     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpRenderTarget);
1640     return IDirect3DDevice7_GetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1641                                             (LPDIRECTDRAWSURFACE7*) lplpRenderTarget /* No cast needed as DSurf4 == DSurf7 */);
1642 }
1643
1644 HRESULT WINAPI
1645 Thunk_IDirect3DDeviceImpl_2_SetRenderTarget(LPDIRECT3DDEVICE2 iface,
1646                                             LPDIRECTDRAWSURFACE lpNewRenderTarget,
1647                                             DWORD dwFlags)
1648 {
1649     TRACE("(%p)->(%p,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, lpNewRenderTarget, dwFlags);
1650     return IDirect3DDevice7_SetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1651                                             COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface3, IDirectDrawSurface7, lpNewRenderTarget),
1652                                             dwFlags);
1653 }
1654
1655 HRESULT WINAPI
1656 Thunk_IDirect3DDeviceImpl_2_GetRenderTarget(LPDIRECT3DDEVICE2 iface,
1657                                             LPDIRECTDRAWSURFACE* lplpRenderTarget)
1658 {
1659     HRESULT ret;
1660     LPDIRECTDRAWSURFACE7 ret_val;
1661   
1662     TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpRenderTarget);
1663     ret = IDirect3DDevice7_GetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1664                                            &ret_val);
1665     *lplpRenderTarget = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirectDrawSurface3, ret_val);
1666     TRACE(" returning interface %p\n", *lplpRenderTarget);
1667     return ret;
1668 }
1669
1670 HRESULT WINAPI
1671 Thunk_IDirect3DDeviceImpl_2_Vertex(LPDIRECT3DDEVICE2 iface,
1672                                    LPVOID lpVertexType)
1673 {
1674     TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpVertexType);
1675     return IDirect3DDevice3_Vertex(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1676                                    lpVertexType);
1677 }
1678
1679 HRESULT WINAPI
1680 Thunk_IDirect3DDeviceImpl_2_Index(LPDIRECT3DDEVICE2 iface,
1681                                   WORD wVertexIndex)
1682 {
1683     TRACE("(%p)->(%04x) thunking to IDirect3DDevice3 interface.\n", iface, wVertexIndex);
1684     return IDirect3DDevice3_Index(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1685                                   wVertexIndex);
1686 }
1687
1688 HRESULT WINAPI
1689 Thunk_IDirect3DDeviceImpl_2_End(LPDIRECT3DDEVICE2 iface,
1690                                 DWORD dwFlags)
1691 {
1692     TRACE("(%p)->(%08lx) thunking to IDirect3DDevice3 interface.\n", iface, dwFlags);
1693     return IDirect3DDevice3_End(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1694                                 dwFlags);
1695 }
1696
1697 HRESULT WINAPI
1698 Thunk_IDirect3DDeviceImpl_2_GetLightState(LPDIRECT3DDEVICE2 iface,
1699                                           D3DLIGHTSTATETYPE dwLightStateType,
1700                                           LPDWORD lpdwLightState)
1701 {
1702     TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice3 interface.\n", iface, dwLightStateType, lpdwLightState);
1703     return IDirect3DDevice3_GetLightState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1704                                           dwLightStateType,
1705                                           lpdwLightState);
1706 }
1707
1708 HRESULT WINAPI
1709 Thunk_IDirect3DDeviceImpl_2_SetLightState(LPDIRECT3DDEVICE2 iface,
1710                                           D3DLIGHTSTATETYPE dwLightStateType,
1711                                           DWORD dwLightState)
1712 {
1713     TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, dwLightStateType, dwLightState);
1714     return IDirect3DDevice3_SetLightState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1715                                           dwLightStateType,
1716                                           dwLightState);
1717 }
1718
1719 HRESULT WINAPI
1720 Thunk_IDirect3DDeviceImpl_1_EnumTextureFormats(LPDIRECT3DDEVICE iface,
1721                                                LPD3DENUMTEXTUREFORMATSCALLBACK lpD3DEnumTextureProc,
1722                                                LPVOID lpArg)
1723 {
1724     TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice2 interface.\n", iface, lpD3DEnumTextureProc, lpArg);
1725     return IDirect3DDevice2_EnumTextureFormats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice2, iface),
1726                                                lpD3DEnumTextureProc,
1727                                                lpArg);
1728 }