- surface pool init fixes
[wine] / dlls / d3d8 / d3d8_private.h
1 /*
2  * Direct3D 8 private include file
3  *
4  * Copyright 2002 Jason Edmeades
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 #ifndef __WINE_D3DX8_PRIVATE_H
22 #define __WINE_D3DX8_PRIVATE_H
23
24 #ifndef __WINE_CONFIG_H
25 # error You must include config.h to use this header
26 #endif
27
28 /* THIS FILE MUST NOT CONTAIN X11 or MESA DEFINES */
29 #define XMD_H /* This is to prevent the Xmd.h inclusion bug :-/ */
30 #include <GL/gl.h>
31 #include <GL/glx.h>
32 #ifdef HAVE_GL_GLEXT_H
33 # include <GL/glext.h>
34 #endif
35 #undef  XMD_H
36
37 #undef APIENTRY
38 #undef CALLBACK
39 #undef WINAPI
40
41 /* Redefines the constants */
42 #define CALLBACK    __stdcall
43 #define WINAPI      __stdcall
44 #define APIENTRY    WINAPI
45
46 /* X11 locking */
47
48 extern void (*wine_tsx11_lock_ptr)(void);
49 extern void (*wine_tsx11_unlock_ptr)(void);
50
51 /* As GLX relies on X, this is needed */
52 #define ENTER_GL() wine_tsx11_lock_ptr()
53 #define LEAVE_GL() wine_tsx11_unlock_ptr()
54
55 #include "d3d8.h"
56
57 /* Device caps */
58 #define MAX_STREAMS       16
59 #define MAX_ACTIVE_LIGHTS 8
60 #define MAX_CLIPPLANES    D3DMAXUSERCLIPPLANES
61 #define MAX_LEVELS 256
62
63 /* Other useful values */
64 #define HIGHEST_RENDER_STATE 174
65 #define HIGHEST_TEXTURE_STATE 29
66 #define HIGHEST_TRANSFORMSTATE 512
67 #define D3DSBT_RECORDED 0xfffffffe
68
69 /* Direct3D8 Interfaces: */
70 typedef struct IDirect3DBaseTexture8Impl IDirect3DBaseTexture8Impl;
71 typedef struct IDirect3DVolumeTexture8Impl IDirect3DVolumeTexture8Impl;
72 typedef struct IDirect3D8Impl IDirect3D8Impl;
73 typedef struct IDirect3DDevice8Impl IDirect3DDevice8Impl;
74 typedef struct IDirect3DTexture8Impl IDirect3DTexture8Impl;
75 typedef struct IDirect3DCubeTexture8Impl IDirect3DCubeTexture8Impl;
76 typedef struct IDirect3DIndexBuffer8Impl IDirect3DIndexBuffer8Impl;
77 typedef struct IDirect3DSurface8Impl IDirect3DSurface8Impl;
78 typedef struct IDirect3DSwapChain8Impl IDirect3DSwapChain8Impl;
79 typedef struct IDirect3DResource8Impl IDirect3DResource8Impl;
80 typedef struct IDirect3DVolume8Impl IDirect3DVolume8Impl;
81 typedef struct IDirect3DVertexBuffer8Impl IDirect3DVertexBuffer8Impl;
82
83 /** Private Interfaces: */
84 typedef struct IDirect3DStateBlockImpl IDirect3DStateBlockImpl;
85 typedef struct IDirect3DVertexShaderImpl IDirect3DVertexShaderImpl;
86 typedef struct IDirect3DPixelShaderImpl IDirect3DPixelShaderImpl;
87 typedef struct IDirect3DVertexShaderDeclarationImpl IDirect3DVertexShaderDeclarationImpl;
88
89 typedef struct D3DSHADERVECTOR {
90   float x;
91   float y;
92   float z;
93   float w;
94 } D3DSHADERVECTOR;
95
96 typedef struct D3DSHADERSCALAR {
97   float x;
98 } D3DSHADERSCALAR;
99
100 #define D3D8_VSHADER_MAX_CONSTANTS 96
101 #define D3D8_PSHADER_MAX_CONSTANTS 96
102 typedef D3DSHADERVECTOR VSHADERCONSTANTS8[D3D8_VSHADER_MAX_CONSTANTS];
103
104 typedef struct SHADERDATA8 {
105   /** Run Time Shader Function Constants */
106   /*D3DXBUFFER* constants;*/
107   VSHADERCONSTANTS8 C;
108   /** Shader Code as char ... */
109   CONST DWORD* code;
110   UINT codeLength;
111 } SHADERDATA8;
112
113 /** temporary here waiting for buffer code */
114 typedef struct VSHADERINPUTDATA8 {
115   D3DSHADERVECTOR V[16];
116 } VSHADERINPUTDATA8;
117
118 /** temporary here waiting for buffer code */
119 typedef struct VSHADEROUTPUTDATA8 {
120   D3DSHADERVECTOR oPos;
121   D3DSHADERVECTOR oD[2];
122   D3DSHADERVECTOR oT[4];
123   D3DSHADERVECTOR oFog;
124   D3DSHADERVECTOR oPts;
125 } VSHADEROUTPUTDATA8;
126
127 /*
128  * External prototypes
129  */
130 /*BOOL D3DRAW_HAL_Init(HINSTANCE, DWORD, LPVOID); */
131 void CreateStateBlock(LPDIRECT3DDEVICE8 iface);
132
133 /*
134  * Macros
135  */
136 #define checkGLcall(A) \
137 { \
138     GLint err = glGetError();   \
139     if (err != GL_NO_ERROR) { \
140        FIXME(">>>>>>>>>>>>>>>>> %x from %s @ %s / %d\n", err, A, __FILE__, __LINE__); \
141     } else { \
142        TRACE("%s call ok %s / %d\n", A, __FILE__, __LINE__); \
143     } \
144 }
145 #define vcheckGLcall(A) \
146 { \
147     GLint err = glGetError();   \
148     if (err != GL_NO_ERROR) { \
149        FIXME(">>>>>>>>>>>>>>>>> %x from %s @ %s / %d\n", err, A, __FILE__, __LINE__); \
150     } else { \
151        VTRACE(("%s call ok %s / %d\n", A, __FILE__, __LINE__)); \
152     } \
153 }
154
155 #define checkGLSupport(ExtName)  FALSE/*(TRUE == This->direct3d8->glInfo.supported[ExtName])*/
156 #define GLExtCall(FuncName)      /*(This->direct3d8->glInfo.FuncName)*/
157
158
159 #define D3DCOLOR_R(dw) (((float) (((dw) >> 16) & 0xFF)) / 255.0f)
160 #define D3DCOLOR_G(dw) (((float) (((dw) >>  8) & 0xFF)) / 255.0f)
161 #define D3DCOLOR_B(dw) (((float) (((dw) >>  0) & 0xFF)) / 255.0f)
162 #define D3DCOLOR_A(dw) (((float) (((dw) >> 24) & 0xFF)) / 255.0f)
163
164 #define D3DCOLORTOCOLORVALUE(dw, col) \
165   (col).r = D3DCOLOR_R(dw); \
166   (col).g = D3DCOLOR_G(dw); \
167   (col).b = D3DCOLOR_B(dw); \
168   (col).a = D3DCOLOR_A(dw); 
169
170 #define D3DCOLORTOVECTOR4(dw, vec) \
171   (vec).x = D3DCOLOR_R(dw); \
172   (vec).y = D3DCOLOR_G(dw); \
173   (vec).z = D3DCOLOR_B(dw); \
174   (vec).w = D3DCOLOR_A(dw);
175
176
177
178 /* ===========================================================================
179     The interfactes themselves
180    =========================================================================== */
181
182 /* ---------- */
183 /* IDirect3D8 */
184 /* ---------- */
185
186 /*****************************************************************************
187  * Predeclare the interface implementation structures
188  */
189 extern ICOM_VTABLE(IDirect3D8) Direct3D8_Vtbl;
190 extern ICOM_VTABLE(IDirect3D8) mesa_d3d8vt;
191
192 /*****************************************************************************
193  * IDirect3D implementation structure
194  */
195 struct IDirect3D8Impl
196 {
197     /* IUnknown fields */
198     ICOM_VFIELD(IDirect3D8);
199     DWORD                   ref;
200
201     /* IDirect3D8 fields */
202 };
203
204 /* IUnknown: */
205 extern HRESULT WINAPI   IDirect3D8Impl_QueryInterface(LPDIRECT3D8 iface,REFIID refiid,LPVOID *obj);
206 extern ULONG WINAPI     IDirect3D8Impl_AddRef(LPDIRECT3D8 iface);
207 extern ULONG WINAPI     IDirect3D8Impl_Release(LPDIRECT3D8 iface);
208
209 /* IDirect3d8: */
210 extern HRESULT  WINAPI  IDirect3D8Impl_RegisterSoftwareDevice(LPDIRECT3D8 iface, void* pInitializeFunction);
211 extern UINT     WINAPI  IDirect3D8Impl_GetAdapterCount(LPDIRECT3D8 iface);
212 extern HRESULT  WINAPI  IDirect3D8Impl_GetAdapterIdentifier(LPDIRECT3D8 iface, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER8* pIdentifier);
213 extern UINT     WINAPI  IDirect3D8Impl_GetAdapterModeCount(LPDIRECT3D8 iface, UINT Adapter);
214 extern HRESULT  WINAPI  IDirect3D8Impl_EnumAdapterModes(LPDIRECT3D8 iface, UINT Adapter, UINT Mode, D3DDISPLAYMODE* pMode);
215 extern HRESULT  WINAPI  IDirect3D8Impl_GetAdapterDisplayMode(LPDIRECT3D8 iface, UINT Adapter, D3DDISPLAYMODE* pMode);
216 extern HRESULT  WINAPI  IDirect3D8Impl_CheckDeviceType(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE CheckType, D3DFORMAT DisplayFormat,
217                                                        D3DFORMAT BackBufferFormat, BOOL Windowed);
218 extern HRESULT  WINAPI  IDirect3D8Impl_CheckDeviceFormat(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat,
219                                                        DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat);
220 extern HRESULT  WINAPI  IDirect3D8Impl_CheckDeviceMultiSampleType(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat,
221                                                        BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType);
222 extern HRESULT  WINAPI  IDirect3D8Impl_CheckDepthStencilMatch(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat,
223                                                        D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat);
224 extern HRESULT  WINAPI  IDirect3D8Impl_GetDeviceCaps(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8* pCaps);
225 extern HMONITOR WINAPI  IDirect3D8Impl_GetAdapterMonitor(LPDIRECT3D8 iface, UINT Adapter);
226 extern HRESULT  WINAPI  IDirect3D8Impl_CreateDevice(LPDIRECT3D8 iface, UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow,
227                                                     DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters,
228                                                     IDirect3DDevice8** ppReturnedDeviceInterface);
229
230 /* ---------------- */
231 /* IDirect3DDevice8 */
232 /* ---------------- */
233
234 /*****************************************************************************
235  * Predeclare the interface implementation structures
236  */
237 extern ICOM_VTABLE(IDirect3DDevice8) Direct3DDevice8_Vtbl;
238
239 /*****************************************************************************
240  * IDirect3DDevice8 implementation structure
241  */
242 struct IDirect3DDevice8Impl
243 {
244     /* IUnknown fields */
245     ICOM_VFIELD(IDirect3DDevice8);
246     DWORD                         ref;
247
248     /* IDirect3DDevice8 fields */
249     IDirect3D8Impl               *direct3d8;
250     IDirect3DSurface8Impl        *frontBuffer;
251     IDirect3DSurface8Impl        *backBuffer;
252     IDirect3DSurface8Impl        *depthStencilBuffer;
253     D3DPRESENT_PARAMETERS         PresentParms;
254     D3DDEVICE_CREATION_PARAMETERS CreateParms;
255
256     UINT                          adapterNo;
257     D3DDEVTYPE                    devType;
258
259     UINT                          srcBlend;
260     UINT                          dstBlend;
261
262     /* State block related */
263     BOOL                          isRecordingState;
264     IDirect3DStateBlockImpl      *StateBlock;
265     IDirect3DStateBlockImpl      *UpdateStateBlock;
266
267     /* Other required values */
268     float                         lightPosn[MAX_ACTIVE_LIGHTS][4];
269     float                         lightDirn[MAX_ACTIVE_LIGHTS][4];
270
271     /* Optimization */
272     D3DMATRIX                     lastProj;
273     D3DMATRIX                     lastView;
274     D3DMATRIX                     lastWorld0;
275     D3DMATRIX                     lastTexTrans[8];
276
277
278     /* OpenGL related */
279     GLXContext                    glCtx;
280     XVisualInfo                  *visInfo;
281     Display                      *display;
282     Window                        win;
283
284     /* OpenGL Extension related */
285     BOOL                          isMultiTexture;
286     BOOL                          isDot3;
287     UINT                          TextureUnits;
288     UINT                          clipPlanes;
289     UINT                          maxLights;
290
291     UINT                          dummyTextureName[8];
292 };
293
294 /* IUnknown: */
295 extern HRESULT WINAPI   IDirect3DDevice8Impl_QueryInterface(LPDIRECT3DDEVICE8 iface,REFIID refiid,LPVOID *obj);
296 extern ULONG WINAPI     IDirect3DDevice8Impl_AddRef(LPDIRECT3DDEVICE8 iface);
297 extern ULONG WINAPI     IDirect3DDevice8Impl_Release(LPDIRECT3DDEVICE8 iface);
298
299 /* IDirect3DDevice8: */
300 extern HRESULT  WINAPI  IDirect3DDevice8Impl_TestCooperativeLevel(LPDIRECT3DDEVICE8 iface);
301 extern UINT     WINAPI  IDirect3DDevice8Impl_GetAvailableTextureMem(LPDIRECT3DDEVICE8 iface);
302 extern HRESULT  WINAPI  IDirect3DDevice8Impl_ResourceManagerDiscardBytes(LPDIRECT3DDEVICE8 iface, DWORD Bytes);
303 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetDirect3D(LPDIRECT3DDEVICE8 iface, IDirect3D8** ppD3D8);
304 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetDeviceCaps(LPDIRECT3DDEVICE8 iface, D3DCAPS8* pCaps);
305 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetDisplayMode(LPDIRECT3DDEVICE8 iface, D3DDISPLAYMODE* pMode);
306 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetCreationParameters(LPDIRECT3DDEVICE8 iface, D3DDEVICE_CREATION_PARAMETERS* pParameters);
307 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetCursorProperties(LPDIRECT3DDEVICE8 iface, UINT XHotSpot, UINT YHotSpot, IDirect3DSurface8* pCursorBitmap);
308 extern void     WINAPI  IDirect3DDevice8Impl_SetCursorPosition(LPDIRECT3DDEVICE8 iface, UINT XScreenSpace, UINT YScreenSpace,DWORD Flags);
309 extern BOOL     WINAPI  IDirect3DDevice8Impl_ShowCursor(LPDIRECT3DDEVICE8 iface, BOOL bShow);
310 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateAdditionalSwapChain(LPDIRECT3DDEVICE8 iface, D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain8** pSwapChain);
311 extern HRESULT  WINAPI  IDirect3DDevice8Impl_Reset(LPDIRECT3DDEVICE8 iface, D3DPRESENT_PARAMETERS* pPresentationParameters);
312 extern HRESULT  WINAPI  IDirect3DDevice8Impl_Present(LPDIRECT3DDEVICE8 iface, CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion);
313 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetBackBuffer(LPDIRECT3DDEVICE8 iface, UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer);
314 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetRasterStatus(LPDIRECT3DDEVICE8 iface, D3DRASTER_STATUS* pRasterStatus);
315 extern void     WINAPI  IDirect3DDevice8Impl_SetGammaRamp(LPDIRECT3DDEVICE8 iface, DWORD Flags,CONST D3DGAMMARAMP* pRamp);
316 extern void     WINAPI  IDirect3DDevice8Impl_GetGammaRamp(LPDIRECT3DDEVICE8 iface, D3DGAMMARAMP* pRamp);
317 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateTexture(LPDIRECT3DDEVICE8 iface, UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture8** ppTexture);
318 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateVolumeTexture(LPDIRECT3DDEVICE8 iface, UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture8** ppVolumeTexture);
319 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateCubeTexture(LPDIRECT3DDEVICE8 iface, UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture8** ppCubeTexture);
320 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateVertexBuffer(LPDIRECT3DDEVICE8 iface, UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8** ppVertexBuffer);
321 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateIndexBuffer(LPDIRECT3DDEVICE8 iface, UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer8** ppIndexBuffer);
322 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateRenderTarget(LPDIRECT3DDEVICE8 iface, UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,IDirect3DSurface8** ppSurface);
323 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateDepthStencilSurface(LPDIRECT3DDEVICE8 iface, UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,IDirect3DSurface8** ppSurface);
324 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateImageSurface(LPDIRECT3DDEVICE8 iface, UINT Width,UINT Height,D3DFORMAT Format,IDirect3DSurface8** ppSurface);
325 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CopyRects(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8* pSourceSurface,CONST RECT* pSourceRectsArray,UINT cRects,IDirect3DSurface8* pDestinationSurface,CONST POINT* pDestPointsArray);
326 extern HRESULT  WINAPI  IDirect3DDevice8Impl_UpdateTexture(LPDIRECT3DDEVICE8 iface, IDirect3DBaseTexture8* pSourceTexture,IDirect3DBaseTexture8* pDestinationTexture);
327 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetFrontBuffer(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8* pDestSurface);
328 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetRenderTarget(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8* pRenderTarget,IDirect3DSurface8* pNewZStencil);
329 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetRenderTarget(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8** ppRenderTarget);
330 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetDepthStencilSurface(LPDIRECT3DDEVICE8 iface, IDirect3DSurface8** ppZStencilSurface);
331 extern HRESULT  WINAPI  IDirect3DDevice8Impl_BeginScene(LPDIRECT3DDEVICE8 iface);
332 extern HRESULT  WINAPI  IDirect3DDevice8Impl_EndScene(LPDIRECT3DDEVICE8 iface);
333 extern HRESULT  WINAPI  IDirect3DDevice8Impl_Clear(LPDIRECT3DDEVICE8 iface, DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil);
334 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetTransform(LPDIRECT3DDEVICE8 iface, D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix);
335 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetTransform(LPDIRECT3DDEVICE8 iface, D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix);
336 extern HRESULT  WINAPI  IDirect3DDevice8Impl_MultiplyTransform(LPDIRECT3DDEVICE8 iface, D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix);
337 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetViewport(LPDIRECT3DDEVICE8 iface, CONST D3DVIEWPORT8* pViewport);
338 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetViewport(LPDIRECT3DDEVICE8 iface, D3DVIEWPORT8* pViewport);
339 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetMaterial(LPDIRECT3DDEVICE8 iface, CONST D3DMATERIAL8* pMaterial);
340 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetMaterial(LPDIRECT3DDEVICE8 iface, D3DMATERIAL8* pMaterial);
341 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetLight(LPDIRECT3DDEVICE8 iface, DWORD Index,CONST D3DLIGHT8* pLight);
342 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetLight(LPDIRECT3DDEVICE8 iface, DWORD Index,D3DLIGHT8* pLight);
343 extern HRESULT  WINAPI  IDirect3DDevice8Impl_LightEnable(LPDIRECT3DDEVICE8 iface, DWORD Index,BOOL Enable);
344 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetLightEnable(LPDIRECT3DDEVICE8 iface, DWORD Index,BOOL* pEnable);
345 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetClipPlane(LPDIRECT3DDEVICE8 iface, DWORD Index,CONST float* pPlane);
346 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetClipPlane(LPDIRECT3DDEVICE8 iface, DWORD Index,float* pPlane);
347 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetRenderState(LPDIRECT3DDEVICE8 iface, D3DRENDERSTATETYPE State,DWORD Value);
348 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetRenderState(LPDIRECT3DDEVICE8 iface, D3DRENDERSTATETYPE State,DWORD* pValue);
349 extern HRESULT  WINAPI  IDirect3DDevice8Impl_BeginStateBlock(LPDIRECT3DDEVICE8 iface);
350 extern HRESULT  WINAPI  IDirect3DDevice8Impl_EndStateBlock(LPDIRECT3DDEVICE8 iface, DWORD* pToken);
351 extern HRESULT  WINAPI  IDirect3DDevice8Impl_ApplyStateBlock(LPDIRECT3DDEVICE8 iface, DWORD Token);
352 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CaptureStateBlock(LPDIRECT3DDEVICE8 iface, DWORD Token);
353 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DeleteStateBlock(LPDIRECT3DDEVICE8 iface, DWORD Token);
354 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateStateBlock(LPDIRECT3DDEVICE8 iface, D3DSTATEBLOCKTYPE Type,DWORD* pToken);
355 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetClipStatus(LPDIRECT3DDEVICE8 iface, CONST D3DCLIPSTATUS8* pClipStatus);
356 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetClipStatus(LPDIRECT3DDEVICE8 iface, D3DCLIPSTATUS8* pClipStatus);
357 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetTexture(LPDIRECT3DDEVICE8 iface, DWORD Stage,IDirect3DBaseTexture8** ppTexture);
358 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetTexture(LPDIRECT3DDEVICE8 iface, DWORD Stage,IDirect3DBaseTexture8* pTexture);
359 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue);
360 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetTextureStageState(LPDIRECT3DDEVICE8 iface, DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value);
361 extern HRESULT  WINAPI  IDirect3DDevice8Impl_ValidateDevice(LPDIRECT3DDEVICE8 iface, DWORD* pNumPasses);
362 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetInfo(LPDIRECT3DDEVICE8 iface, DWORD DevInfoID,void* pDevInfoStruct,DWORD DevInfoStructSize);
363 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetPaletteEntries(LPDIRECT3DDEVICE8 iface, UINT PaletteNumber,CONST PALETTEENTRY* pEntries);
364 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetPaletteEntries(LPDIRECT3DDEVICE8 iface, UINT PaletteNumber,PALETTEENTRY* pEntries);
365 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetCurrentTexturePalette(LPDIRECT3DDEVICE8 iface, UINT PaletteNumber);
366 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetCurrentTexturePalette(LPDIRECT3DDEVICE8 iface, UINT *PaletteNumber);
367 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DrawPrimitive(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount);
368 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DrawIndexedPrimitive(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount);
369 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DrawPrimitiveUP(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride);
370 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DrawIndexedPrimitiveUP(LPDIRECT3DDEVICE8 iface, D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertexIndices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride);
371 extern HRESULT  WINAPI  IDirect3DDevice8Impl_ProcessVertices(LPDIRECT3DDEVICE8 iface, UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8* pDestBuffer,DWORD Flags);
372 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreateVertexShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pDeclaration,CONST DWORD* pFunction,DWORD* pHandle,DWORD Usage);
373 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetVertexShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
374 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetVertexShader(LPDIRECT3DDEVICE8 iface, DWORD* pHandle);
375 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DeleteVertexShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
376 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,CONST void* pConstantData,DWORD ConstantCount);
377 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetVertexShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,void* pConstantData,DWORD ConstantCount);
378 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetVertexShaderDeclaration(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData);
379 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetVertexShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData);
380 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetStreamSource(LPDIRECT3DDEVICE8 iface, UINT StreamNumber,IDirect3DVertexBuffer8* pStreamData,UINT Stride);
381 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetStreamSource(LPDIRECT3DDEVICE8 iface, UINT StreamNumber,IDirect3DVertexBuffer8** ppStreamData,UINT* pStride);
382 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetIndices(LPDIRECT3DDEVICE8 iface, IDirect3DIndexBuffer8* pIndexData,UINT BaseVertexIndex);
383 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetIndices(LPDIRECT3DDEVICE8 iface, IDirect3DIndexBuffer8** ppIndexData,UINT* pBaseVertexIndex);
384 extern HRESULT  WINAPI  IDirect3DDevice8Impl_CreatePixelShader(LPDIRECT3DDEVICE8 iface, CONST DWORD* pFunction,DWORD* pHandle);
385 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetPixelShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
386 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetPixelShader(LPDIRECT3DDEVICE8 iface, DWORD* pHandle);
387 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DeletePixelShader(LPDIRECT3DDEVICE8 iface, DWORD Handle);
388 extern HRESULT  WINAPI  IDirect3DDevice8Impl_SetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,CONST void* pConstantData,DWORD ConstantCount);
389 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetPixelShaderConstant(LPDIRECT3DDEVICE8 iface, DWORD Register,void* pConstantData,DWORD ConstantCount);
390 extern HRESULT  WINAPI  IDirect3DDevice8Impl_GetPixelShaderFunction(LPDIRECT3DDEVICE8 iface, DWORD Handle,void* pData,DWORD* pSizeOfData);
391 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DrawRectPatch(LPDIRECT3DDEVICE8 iface, UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo);
392 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DrawTriPatch(LPDIRECT3DDEVICE8 iface, UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo);
393 extern HRESULT  WINAPI  IDirect3DDevice8Impl_DeletePatch(LPDIRECT3DDEVICE8 iface, UINT Handle);
394
395 /* ---------------- */
396 /* IDirect3DVolume8 */
397 /* ---------------- */
398
399 /*****************************************************************************
400  * Predeclare the interface implementation structures
401  */
402 extern ICOM_VTABLE(IDirect3DVolume8) Direct3DVolume8_Vtbl;
403
404 /*****************************************************************************
405  * IDirect3DVolume8 implementation structure
406  */
407 struct IDirect3DVolume8Impl
408 {
409     /* IUnknown fields */
410     ICOM_VFIELD(IDirect3DVolume8);
411     DWORD                   ref;
412
413     /* IDirect3DVolume8 fields */
414     IDirect3DDevice8Impl   *Device;
415     D3DRESOURCETYPE         ResourceType;
416
417     IUnknown               *Container;
418     D3DVOLUME_DESC          myDesc;
419     BYTE                   *allocatedMemory;
420     UINT                    textureName;
421     UINT                    bytesPerPixel;
422 };
423
424 /* IUnknown: */
425 extern HRESULT WINAPI IDirect3DVolume8Impl_QueryInterface(LPDIRECT3DVOLUME8 iface,REFIID refiid,LPVOID *obj);
426 extern ULONG WINAPI   IDirect3DVolume8Impl_AddRef(LPDIRECT3DVOLUME8 iface);
427 extern ULONG WINAPI   IDirect3DVolume8Impl_Release(LPDIRECT3DVOLUME8 iface);
428
429 /* IDirect3DVolume8: */
430 extern HRESULT WINAPI IDirect3DVolume8Impl_GetDevice(LPDIRECT3DVOLUME8 iface, IDirect3DDevice8** ppDevice);
431 extern HRESULT WINAPI IDirect3DVolume8Impl_SetPrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
432 extern HRESULT WINAPI IDirect3DVolume8Impl_GetPrivateData(LPDIRECT3DVOLUME8 iface, REFGUID  refguid, void* pData, DWORD* pSizeOfData);
433 extern HRESULT WINAPI IDirect3DVolume8Impl_FreePrivateData(LPDIRECT3DVOLUME8 iface, REFGUID refguid);
434 extern HRESULT WINAPI IDirect3DVolume8Impl_GetContainer(LPDIRECT3DVOLUME8 iface, REFIID riid, void** ppContainer);
435 extern HRESULT WINAPI IDirect3DVolume8Impl_GetDesc(LPDIRECT3DVOLUME8 iface, D3DVOLUME_DESC* pDesc);
436 extern HRESULT WINAPI IDirect3DVolume8Impl_LockBox(LPDIRECT3DVOLUME8 iface, D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox, DWORD Flags);
437 extern HRESULT WINAPI IDirect3DVolume8Impl_UnlockBox(LPDIRECT3DVOLUME8 iface);
438
439 /* ------------------- */
440 /* IDirect3DSwapChain8 */
441 /* ------------------- */
442
443 /*****************************************************************************
444  * Predeclare the interface implementation structures
445  */
446 extern ICOM_VTABLE(IDirect3DSwapChain8) Direct3DSwapChain8_Vtbl;
447
448 /*****************************************************************************
449  * IDirect3DSwapChain8 implementation structure
450  */
451 struct IDirect3DSwapChain8Impl
452 {
453     /* IUnknown fields */
454     ICOM_VFIELD(IDirect3DSwapChain8);
455     DWORD                   ref;
456
457     /* IDirect3DSwapChain8 fields */
458     IDirect3DSurface8Impl  *frontBuffer;
459     IDirect3DSurface8Impl  *backBuffer;
460     D3DPRESENT_PARAMETERS   PresentParms;
461 };
462
463 /* IUnknown: */
464 extern HRESULT WINAPI IDirect3DSwapChain8Impl_QueryInterface(LPDIRECT3DSWAPCHAIN8 iface, REFIID refiid, LPVOID *obj);
465 extern ULONG WINAPI   IDirect3DSwapChain8Impl_AddRef(LPDIRECT3DSWAPCHAIN8 iface);
466 extern ULONG WINAPI   IDirect3DSwapChain8Impl_Release(LPDIRECT3DSWAPCHAIN8 iface);
467
468 /* IDirect3DSwapChain8: */
469 extern HRESULT WINAPI IDirect3DSwapChain8Impl_Present(LPDIRECT3DSWAPCHAIN8 iface, CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion);
470 extern HRESULT WINAPI IDirect3DSwapChain8Impl_GetBackBuffer(LPDIRECT3DSWAPCHAIN8 iface, UINT BackBuffer, D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer);
471
472 /* ----------------- */
473 /* IDirect3DSurface8 */
474 /* ----------------- */
475
476 /*****************************************************************************
477  * Predeclare the interface implementation structures
478  */
479 extern ICOM_VTABLE(IDirect3DSurface8) Direct3DSurface8_Vtbl;
480
481 /*****************************************************************************
482  * IDirect3DSurface8 implementation structure
483  */
484 struct IDirect3DSurface8Impl
485 {
486     /* IUnknown fields */
487     ICOM_VFIELD(IDirect3DSurface8);
488     DWORD                   ref;
489
490     /* IDirect3DSurface8 fields */
491     IDirect3DDevice8Impl   *Device;
492     D3DRESOURCETYPE         ResourceType;
493
494     IUnknown               *Container;
495
496     D3DSURFACE_DESC         myDesc;
497     BYTE                   *allocatedMemory;
498     UINT                    textureName;
499     UINT                    bytesPerPixel;
500     BOOL                    lockable;
501     BOOL                    locked;
502     RECT                    lockedRect;
503     BOOL                    Dirty;
504 };
505
506 /* IUnknown: */
507 extern HRESULT WINAPI IDirect3DSurface8Impl_QueryInterface(LPDIRECT3DSURFACE8 iface,REFIID refiid,LPVOID *obj);
508 extern ULONG WINAPI   IDirect3DSurface8Impl_AddRef(LPDIRECT3DSURFACE8 iface);
509 extern ULONG WINAPI   IDirect3DSurface8Impl_Release(LPDIRECT3DSURFACE8 iface);
510
511 /* IDirect3DSurface8: */
512 extern HRESULT WINAPI IDirect3DSurface8Impl_GetDevice(LPDIRECT3DSURFACE8 iface, IDirect3DDevice8** ppDevice);
513 extern HRESULT WINAPI IDirect3DSurface8Impl_SetPrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags);
514 extern HRESULT WINAPI IDirect3DSurface8Impl_GetPrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid,void* pData,DWORD* pSizeOfData);
515 extern HRESULT WINAPI IDirect3DSurface8Impl_FreePrivateData(LPDIRECT3DSURFACE8 iface, REFGUID refguid);
516 extern HRESULT WINAPI IDirect3DSurface8Impl_GetContainer(LPDIRECT3DSURFACE8 iface, REFIID riid,void** ppContainer);
517 extern HRESULT WINAPI IDirect3DSurface8Impl_GetDesc(LPDIRECT3DSURFACE8 iface, D3DSURFACE_DESC *pDesc);
518 extern HRESULT WINAPI IDirect3DSurface8Impl_LockRect(LPDIRECT3DSURFACE8 iface, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect,DWORD Flags);
519 extern HRESULT WINAPI IDirect3DSurface8Impl_UnlockRect(LPDIRECT3DSURFACE8 iface);
520
521 /* ------------------ */
522 /* IDirect3DResource8 */
523 /* ------------------ */
524
525 /*****************************************************************************
526  * Predeclare the interface implementation structures
527  */
528 extern ICOM_VTABLE(IDirect3DResource8) Direct3DResource8_Vtbl;
529
530 /*****************************************************************************
531  * IDirect3DResource8 implementation structure
532  */
533 struct IDirect3DResource8Impl
534 {
535     /* IUnknown fields */
536     ICOM_VFIELD(IDirect3DResource8);
537     DWORD                   ref;
538
539     /* IDirect3DResource8 fields */
540     IDirect3DDevice8Impl   *Device;
541     D3DRESOURCETYPE         ResourceType;
542 };
543
544 /* IUnknown: */
545 extern HRESULT WINAPI         IDirect3DResource8Impl_QueryInterface(LPDIRECT3DRESOURCE8 iface,REFIID refiid,LPVOID *obj);
546 extern ULONG WINAPI           IDirect3DResource8Impl_AddRef(LPDIRECT3DRESOURCE8 iface);
547 extern ULONG WINAPI           IDirect3DResource8Impl_Release(LPDIRECT3DRESOURCE8 iface);
548
549 /* IDirect3DResource8: */
550 extern HRESULT  WINAPI        IDirect3DResource8Impl_GetDevice(LPDIRECT3DRESOURCE8 iface, IDirect3DDevice8** ppDevice);
551 extern HRESULT  WINAPI        IDirect3DResource8Impl_SetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
552 extern HRESULT  WINAPI        IDirect3DResource8Impl_GetPrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
553 extern HRESULT  WINAPI        IDirect3DResource8Impl_FreePrivateData(LPDIRECT3DRESOURCE8 iface, REFGUID refguid);
554 extern DWORD    WINAPI        IDirect3DResource8Impl_SetPriority(LPDIRECT3DRESOURCE8 iface, DWORD PriorityNew);
555 extern DWORD    WINAPI        IDirect3DResource8Impl_GetPriority(LPDIRECT3DRESOURCE8 iface);
556 extern void     WINAPI        IDirect3DResource8Impl_PreLoad(LPDIRECT3DRESOURCE8 iface);
557 extern D3DRESOURCETYPE WINAPI IDirect3DResource8Impl_GetType(LPDIRECT3DRESOURCE8 iface);
558
559 /* ---------------------- */
560 /* IDirect3DVertexBuffer8 */
561 /* ---------------------- */
562
563 /*****************************************************************************
564  * Predeclare the interface implementation structures
565  */
566 extern ICOM_VTABLE(IDirect3DVertexBuffer8) Direct3DVertexBuffer8_Vtbl;
567
568 /*****************************************************************************
569  * IDirect3DVertexBuffer8 implementation structure
570  */
571 struct IDirect3DVertexBuffer8Impl
572 {
573     /* IUnknown fields */
574     ICOM_VFIELD(IDirect3DVertexBuffer8);
575     DWORD                   ref;
576
577     /* IDirect3DResource8 fields */
578     IDirect3DDevice8Impl   *Device;
579     D3DRESOURCETYPE         ResourceType;
580
581     /* IDirect3DVertexBuffer8 fields */
582     BYTE                   *allocatedMemory;
583     D3DVERTEXBUFFER_DESC    currentDesc;
584 };
585
586 /* IUnknown: */
587 extern HRESULT WINAPI         IDirect3DVertexBuffer8Impl_QueryInterface(LPDIRECT3DVERTEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
588 extern ULONG WINAPI           IDirect3DVertexBuffer8Impl_AddRef(LPDIRECT3DVERTEXBUFFER8 iface);
589 extern ULONG WINAPI           IDirect3DVertexBuffer8Impl_Release(LPDIRECT3DVERTEXBUFFER8 iface);
590
591 /* IDirect3DVertexBuffer8: (Inherited from IDirect3DResource8) */
592 extern HRESULT  WINAPI        IDirect3DVertexBuffer8Impl_GetDevice(LPDIRECT3DVERTEXBUFFER8 iface, IDirect3DDevice8** ppDevice);
593 extern HRESULT  WINAPI        IDirect3DVertexBuffer8Impl_SetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
594 extern HRESULT  WINAPI        IDirect3DVertexBuffer8Impl_GetPrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
595 extern HRESULT  WINAPI        IDirect3DVertexBuffer8Impl_FreePrivateData(LPDIRECT3DVERTEXBUFFER8 iface, REFGUID refguid);
596 extern DWORD    WINAPI        IDirect3DVertexBuffer8Impl_SetPriority(LPDIRECT3DVERTEXBUFFER8 iface, DWORD PriorityNew);
597 extern DWORD    WINAPI        IDirect3DVertexBuffer8Impl_GetPriority(LPDIRECT3DVERTEXBUFFER8 iface);
598 extern void     WINAPI        IDirect3DVertexBuffer8Impl_PreLoad(LPDIRECT3DVERTEXBUFFER8 iface);
599 extern D3DRESOURCETYPE WINAPI IDirect3DVertexBuffer8Impl_GetType(LPDIRECT3DVERTEXBUFFER8 iface);
600
601 /* IDirect3DVertexBuffer8: */
602 extern HRESULT  WINAPI        IDirect3DVertexBuffer8Impl_Lock(LPDIRECT3DVERTEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags);
603 extern HRESULT  WINAPI        IDirect3DVertexBuffer8Impl_Unlock(LPDIRECT3DVERTEXBUFFER8 iface);
604 extern HRESULT  WINAPI        IDirect3DVertexBuffer8Impl_GetDesc(LPDIRECT3DVERTEXBUFFER8 iface, D3DVERTEXBUFFER_DESC *pDesc);
605
606 /* --------------------- */
607 /* IDirect3DIndexBuffer8 */
608 /* --------------------- */
609
610 /*****************************************************************************
611  * Predeclare the interface implementation structures
612  */
613 extern ICOM_VTABLE(IDirect3DIndexBuffer8) Direct3DIndexBuffer8_Vtbl;
614
615 /*****************************************************************************
616  * IDirect3DIndexBuffer8 implementation structure
617  */
618 struct IDirect3DIndexBuffer8Impl
619 {
620     /* IUnknown fields */
621     ICOM_VFIELD(IDirect3DIndexBuffer8);
622     DWORD                   ref;
623
624     /* IDirect3DResource8 fields */
625     IDirect3DDevice8Impl   *Device;
626     D3DRESOURCETYPE         ResourceType;
627
628     /* IDirect3DIndexBuffer8 fields */
629     void                   *allocatedMemory;
630     D3DINDEXBUFFER_DESC     currentDesc;
631 };
632
633 /* IUnknown: */
634 extern HRESULT WINAPI         IDirect3DIndexBuffer8Impl_QueryInterface(LPDIRECT3DINDEXBUFFER8 iface,REFIID refiid,LPVOID *obj);
635 extern ULONG WINAPI           IDirect3DIndexBuffer8Impl_AddRef(LPDIRECT3DINDEXBUFFER8 iface);
636 extern ULONG WINAPI           IDirect3DIndexBuffer8Impl_Release(LPDIRECT3DINDEXBUFFER8 iface);
637
638 /* IDirect3DIndexBuffer8: (Inherited from IDirect3DResource8) */
639 extern HRESULT  WINAPI        IDirect3DIndexBuffer8Impl_GetDevice(LPDIRECT3DINDEXBUFFER8 iface, IDirect3DDevice8** ppDevice);
640 extern HRESULT  WINAPI        IDirect3DIndexBuffer8Impl_SetPrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
641 extern HRESULT  WINAPI        IDirect3DIndexBuffer8Impl_GetPrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
642 extern HRESULT  WINAPI        IDirect3DIndexBuffer8Impl_FreePrivateData(LPDIRECT3DINDEXBUFFER8 iface, REFGUID refguid);
643 extern DWORD    WINAPI        IDirect3DIndexBuffer8Impl_SetPriority(LPDIRECT3DINDEXBUFFER8 iface, DWORD PriorityNew);
644 extern DWORD    WINAPI        IDirect3DIndexBuffer8Impl_GetPriority(LPDIRECT3DINDEXBUFFER8 iface);
645 extern void     WINAPI        IDirect3DIndexBuffer8Impl_PreLoad(LPDIRECT3DINDEXBUFFER8 iface);
646 extern D3DRESOURCETYPE WINAPI IDirect3DIndexBuffer8Impl_GetType(LPDIRECT3DINDEXBUFFER8 iface);
647
648 /* IDirect3DIndexBuffer8: */
649 extern HRESULT  WINAPI        IDirect3DIndexBuffer8Impl_Lock(LPDIRECT3DINDEXBUFFER8 iface, UINT OffsetToLock, UINT SizeToLock, BYTE** ppbData, DWORD Flags);
650 extern HRESULT  WINAPI        IDirect3DIndexBuffer8Impl_Unlock(LPDIRECT3DINDEXBUFFER8 iface);
651 extern HRESULT  WINAPI        IDirect3DIndexBuffer8Impl_GetDesc(LPDIRECT3DINDEXBUFFER8 iface, D3DINDEXBUFFER_DESC *pDesc);
652
653 /* --------------------- */
654 /* IDirect3DBaseTexture8 */
655 /* --------------------- */
656
657 /*****************************************************************************
658  * Predeclare the interface implementation structures
659  */
660 extern ICOM_VTABLE(IDirect3DBaseTexture8) Direct3DBaseTexture8_Vtbl;
661
662 /*****************************************************************************
663  * IDirect3DBaseTexture8 implementation structure
664  */
665 struct IDirect3DBaseTexture8Impl
666 {
667     /* IUnknown fields */
668     ICOM_VFIELD(IDirect3DBaseTexture8);
669     DWORD                   ref;
670
671     /* IDirect3DResource8 fields */
672     IDirect3DDevice8Impl   *Device;
673     D3DRESOURCETYPE         ResourceType;
674
675     /* IDirect3DBaseTexture8 fields */
676     BOOL                    Dirty;
677
678     /*
679      *BOOL                    isManaged;
680      *DWORD                   lod;
681      */
682 };
683
684 /* IUnknown: */
685 extern HRESULT WINAPI         IDirect3DBaseTexture8Impl_QueryInterface(LPDIRECT3DBASETEXTURE8 iface,REFIID refiid,LPVOID *obj);
686 extern ULONG WINAPI           IDirect3DBaseTexture8Impl_AddRef(LPDIRECT3DBASETEXTURE8 iface);
687 extern ULONG WINAPI           IDirect3DBaseTexture8Impl_Release(LPDIRECT3DBASETEXTURE8 iface);
688
689 /* IDirect3DBaseTexture8: (Inherited from IDirect3DResource8) */
690 extern HRESULT  WINAPI        IDirect3DBaseTexture8Impl_GetDevice(LPDIRECT3DBASETEXTURE8 iface, IDirect3DDevice8** ppDevice);
691 extern HRESULT  WINAPI        IDirect3DBaseTexture8Impl_SetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
692 extern HRESULT  WINAPI        IDirect3DBaseTexture8Impl_GetPrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
693 extern HRESULT  WINAPI        IDirect3DBaseTexture8Impl_FreePrivateData(LPDIRECT3DBASETEXTURE8 iface, REFGUID refguid);
694 extern DWORD    WINAPI        IDirect3DBaseTexture8Impl_SetPriority(LPDIRECT3DBASETEXTURE8 iface, DWORD PriorityNew);
695 extern DWORD    WINAPI        IDirect3DBaseTexture8Impl_GetPriority(LPDIRECT3DBASETEXTURE8 iface);
696 extern void     WINAPI        IDirect3DBaseTexture8Impl_PreLoad(LPDIRECT3DBASETEXTURE8 iface);
697 extern D3DRESOURCETYPE WINAPI IDirect3DBaseTexture8Impl_GetType(LPDIRECT3DBASETEXTURE8 iface);
698
699 /* IDirect3DBaseTexture8: */
700 extern DWORD    WINAPI        IDirect3DBaseTexture8Impl_SetLOD(LPDIRECT3DBASETEXTURE8 iface, DWORD LODNew);
701 extern DWORD    WINAPI        IDirect3DBaseTexture8Impl_GetLOD(LPDIRECT3DBASETEXTURE8 iface);
702 extern DWORD    WINAPI        IDirect3DBaseTexture8Impl_GetLevelCount(LPDIRECT3DBASETEXTURE8 iface);
703
704 /* --------------------- */
705 /* IDirect3DCubeTexture8 */
706 /* --------------------- */
707
708 /*****************************************************************************
709  * Predeclare the interface implementation structures
710  */
711 extern ICOM_VTABLE(IDirect3DCubeTexture8) Direct3DCubeTexture8_Vtbl;
712
713 /*****************************************************************************
714  * IDirect3DCubeTexture8 implementation structure
715  */
716 struct IDirect3DCubeTexture8Impl
717 {
718     /* IUnknown fields */
719     ICOM_VFIELD(IDirect3DCubeTexture8);
720     DWORD                   ref;
721
722     /* IDirect3DResource8 fields */
723     IDirect3DDevice8Impl   *Device;
724     D3DRESOURCETYPE         ResourceType;
725
726     /* IDirect3DBaseTexture8 fields */
727     BOOL                    Dirty;
728
729     /* IDirect3DCubeTexture8 fields */
730     UINT                    edgeLength;
731     DWORD                   usage;
732     UINT                    levels;
733     D3DFORMAT               format;
734
735     IDirect3DSurface8Impl  *surfaces[6][MAX_LEVELS];
736 };
737
738 /* IUnknown: */
739 extern HRESULT WINAPI         IDirect3DCubeTexture8Impl_QueryInterface(LPDIRECT3DCUBETEXTURE8 iface,REFIID refiid,LPVOID *obj);
740 extern ULONG WINAPI           IDirect3DCubeTexture8Impl_AddRef(LPDIRECT3DCUBETEXTURE8 iface);
741 extern ULONG WINAPI           IDirect3DCubeTexture8Impl_Release(LPDIRECT3DCUBETEXTURE8 iface);
742
743 /* IDirect3DCubeTexture8: (Inherited from IDirect3DResource8) */
744 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_GetDevice(LPDIRECT3DCUBETEXTURE8 iface, IDirect3DDevice8** ppDevice);
745 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_SetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
746 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_GetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
747 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_FreePrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid);
748 extern DWORD    WINAPI        IDirect3DCubeTexture8Impl_SetPriority(LPDIRECT3DCUBETEXTURE8 iface, DWORD PriorityNew);
749 extern DWORD    WINAPI        IDirect3DCubeTexture8Impl_GetPriority(LPDIRECT3DCUBETEXTURE8 iface);
750 extern void     WINAPI        IDirect3DCubeTexture8Impl_PreLoad(LPDIRECT3DCUBETEXTURE8 iface);
751 extern D3DRESOURCETYPE WINAPI IDirect3DCubeTexture8Impl_GetType(LPDIRECT3DCUBETEXTURE8 iface);
752
753 /* IDirect3DCubeTexture8: (Inherited from IDirect3DBaseTexture8) */
754 extern DWORD    WINAPI        IDirect3DCubeTexture8Impl_SetLOD(LPDIRECT3DCUBETEXTURE8 iface, DWORD LODNew);
755 extern DWORD    WINAPI        IDirect3DCubeTexture8Impl_GetLOD(LPDIRECT3DCUBETEXTURE8 iface);
756 extern DWORD    WINAPI        IDirect3DCubeTexture8Impl_GetLevelCount(LPDIRECT3DCUBETEXTURE8 iface);
757
758 /* IDirect3DCubeTexture8 */
759 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_GetLevelDesc(LPDIRECT3DCUBETEXTURE8 iface,UINT Level,D3DSURFACE_DESC *pDesc);
760 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_GetCubeMapSurface(LPDIRECT3DCUBETEXTURE8 iface,D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8** ppCubeMapSurface);
761 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_LockRect(LPDIRECT3DCUBETEXTURE8 iface,D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags);
762 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_UnlockRect(LPDIRECT3DCUBETEXTURE8 iface,D3DCUBEMAP_FACES FaceType,UINT Level);
763 extern HRESULT  WINAPI        IDirect3DCubeTexture8Impl_AddDirtyRect(LPDIRECT3DCUBETEXTURE8 iface,D3DCUBEMAP_FACES FaceType,CONST RECT* pDirtyRect);
764
765 /* ----------------- */
766 /* IDirect3DTexture8 */
767 /* ----------------- */
768
769 /*****************************************************************************
770  * Predeclare the interface implementation structures
771  */
772 extern ICOM_VTABLE(IDirect3DTexture8) Direct3DTexture8_Vtbl;
773
774 /*****************************************************************************
775  * IDirect3DTexture8 implementation structure
776  */
777 struct IDirect3DTexture8Impl
778 {
779     /* IUnknown fields */
780     ICOM_VFIELD(IDirect3DTexture8);
781     DWORD                   ref;
782
783     /* IDirect3DResourc8 fields */
784     IDirect3DDevice8Impl   *Device;
785     D3DRESOURCETYPE         ResourceType;
786
787     /* IDirect3DBaseTexture8 fields */
788     BOOL                    Dirty;
789
790     /* IDirect3DTexture8 fields */
791     UINT                    width;
792     UINT                    height;
793     UINT                    levels;
794     DWORD                   usage;
795     D3DFORMAT               format;
796
797     IDirect3DSurface8Impl  *surfaces[MAX_LEVELS];
798 };
799
800 /* IUnknown: */
801 extern HRESULT WINAPI         IDirect3DTexture8Impl_QueryInterface(LPDIRECT3DTEXTURE8 iface,REFIID refiid,LPVOID *obj);
802 extern ULONG WINAPI           IDirect3DTexture8Impl_AddRef(LPDIRECT3DTEXTURE8 iface);
803 extern ULONG WINAPI           IDirect3DTexture8Impl_Release(LPDIRECT3DTEXTURE8 iface);
804
805 /* IDirect3DTexture8: (Inherited from IDirect3DResource8) */
806 extern HRESULT  WINAPI        IDirect3DTexture8Impl_GetDevice(LPDIRECT3DTEXTURE8 iface, IDirect3DDevice8** ppDevice);
807 extern HRESULT  WINAPI        IDirect3DTexture8Impl_SetPrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
808 extern HRESULT  WINAPI        IDirect3DTexture8Impl_GetPrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
809 extern HRESULT  WINAPI        IDirect3DTexture8Impl_FreePrivateData(LPDIRECT3DTEXTURE8 iface, REFGUID refguid);
810 extern DWORD    WINAPI        IDirect3DTexture8Impl_SetPriority(LPDIRECT3DTEXTURE8 iface, DWORD PriorityNew);
811 extern DWORD    WINAPI        IDirect3DTexture8Impl_GetPriority(LPDIRECT3DTEXTURE8 iface);
812 extern void     WINAPI        IDirect3DTexture8Impl_PreLoad(LPDIRECT3DTEXTURE8 iface);
813 extern D3DRESOURCETYPE WINAPI IDirect3DTexture8Impl_GetType(LPDIRECT3DTEXTURE8 iface);
814
815 /* IDirect3DTexture8: (Inherited from IDirect3DBaseTexture8) */
816 extern DWORD    WINAPI        IDirect3DTexture8Impl_SetLOD(LPDIRECT3DTEXTURE8 iface, DWORD LODNew);
817 extern DWORD    WINAPI        IDirect3DTexture8Impl_GetLOD(LPDIRECT3DTEXTURE8 iface);
818 extern DWORD    WINAPI        IDirect3DTexture8Impl_GetLevelCount(LPDIRECT3DTEXTURE8 iface);
819
820 /* IDirect3DTexture8: */
821 extern HRESULT  WINAPI        IDirect3DTexture8Impl_GetLevelDesc(LPDIRECT3DTEXTURE8 iface, UINT Level,D3DSURFACE_DESC* pDesc);
822 extern HRESULT  WINAPI        IDirect3DTexture8Impl_GetSurfaceLevel(LPDIRECT3DTEXTURE8 iface, UINT Level,IDirect3DSurface8** ppSurfaceLevel);
823 extern HRESULT  WINAPI        IDirect3DTexture8Impl_LockRect(LPDIRECT3DTEXTURE8 iface, UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags);
824 extern HRESULT  WINAPI        IDirect3DTexture8Impl_UnlockRect(LPDIRECT3DTEXTURE8 iface, UINT Level);
825 extern HRESULT  WINAPI        IDirect3DTexture8Impl_AddDirtyRect(LPDIRECT3DTEXTURE8 iface, CONST RECT* pDirtyRect);
826
827 /* ----------------------- */
828 /* IDirect3DVolumeTexture8 */
829 /* ----------------------- */
830
831 /*****************************************************************************
832  * Predeclare the interface implementation structures
833  */
834 extern ICOM_VTABLE(IDirect3DVolumeTexture8) Direct3DVolumeTexture8_Vtbl;
835
836 /*****************************************************************************
837  * IDirect3DVolumeTexture8 implementation structure
838  */
839 struct IDirect3DVolumeTexture8Impl
840 {
841     /* IUnknown fields */
842     ICOM_VFIELD(IDirect3DVolumeTexture8);
843     DWORD                   ref;
844
845     /* IDirect3DResource8 fields */
846     IDirect3DDevice8Impl   *Device;
847     D3DRESOURCETYPE         ResourceType;
848
849     /* IDirect3DBaseTexture8 fields */
850     BOOL                    Dirty;
851
852     /* IDirect3DVolumeTexture8 fields */
853     UINT                    width;
854     UINT                    height;
855     UINT                    depth;
856     UINT                    levels;
857     DWORD                   usage;
858     D3DFORMAT               format;
859
860     IDirect3DVolume8Impl   *volumes[MAX_LEVELS];
861 };
862
863 /* IUnknown: */
864 extern HRESULT WINAPI         IDirect3DVolumeTexture8Impl_QueryInterface(LPDIRECT3DVOLUMETEXTURE8 iface,REFIID refiid,LPVOID *obj);
865 extern ULONG WINAPI           IDirect3DVolumeTexture8Impl_AddRef(LPDIRECT3DVOLUMETEXTURE8 iface);
866 extern ULONG WINAPI           IDirect3DVolumeTexture8Impl_Release(LPDIRECT3DVOLUMETEXTURE8 iface);
867
868 /* IDirect3DVolumeTexture8: (Inherited from IDirect3DResource8) */
869 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_GetDevice(LPDIRECT3DVOLUMETEXTURE8 iface, IDirect3DDevice8** ppDevice);
870 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_SetPrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags);
871 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_GetPrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid, void* pData, DWORD* pSizeOfData);
872 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_FreePrivateData(LPDIRECT3DVOLUMETEXTURE8 iface, REFGUID refguid);
873 extern DWORD    WINAPI        IDirect3DVolumeTexture8Impl_SetPriority(LPDIRECT3DVOLUMETEXTURE8 iface, DWORD PriorityNew);
874 extern DWORD    WINAPI        IDirect3DVolumeTexture8Impl_GetPriority(LPDIRECT3DVOLUMETEXTURE8 iface);
875 extern void     WINAPI        IDirect3DVolumeTexture8Impl_PreLoad(LPDIRECT3DVOLUMETEXTURE8 iface);
876 extern D3DRESOURCETYPE WINAPI IDirect3DVolumeTexture8Impl_GetType(LPDIRECT3DVOLUMETEXTURE8 iface);
877
878 /* IDirect3DVolumeTexture8: (Inherited from IDirect3DBaseTexture8) */
879 extern DWORD    WINAPI        IDirect3DVolumeTexture8Impl_SetLOD(LPDIRECT3DVOLUMETEXTURE8 iface, DWORD LODNew);
880 extern DWORD    WINAPI        IDirect3DVolumeTexture8Impl_GetLOD(LPDIRECT3DVOLUMETEXTURE8 iface);
881 extern DWORD    WINAPI        IDirect3DVolumeTexture8Impl_GetLevelCount(LPDIRECT3DVOLUMETEXTURE8 iface);
882
883 /* IDirect3DVolumeTexture8: */
884 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_GetLevelDesc(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level,D3DVOLUME_DESC *pDesc);
885 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_GetVolumeLevel(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level,IDirect3DVolume8** ppVolumeLevel);
886 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_LockBox(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level,D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox,DWORD Flags);
887 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_UnlockBox(LPDIRECT3DVOLUMETEXTURE8 iface, UINT Level);
888 extern HRESULT  WINAPI        IDirect3DVolumeTexture8Impl_AddDirtyBox(LPDIRECT3DVOLUMETEXTURE8 iface, CONST D3DBOX* pDirtyBox);
889
890 /* ==============================================================================
891     Private interfactes: beginning of cleaning/splitting for HAL and d3d9 support
892    ============================================================================== */
893
894 /* State Block for Begin/End/Capture/Create/Apply State Block   */
895 /*   Note: Very long winded but I do not believe gl Lists will  */
896 /*   resolve everything we need, so doing it manually for now   */
897 typedef struct SAVEDSTATES {
898         BOOL                      lightEnable[MAX_ACTIVE_LIGHTS];
899         BOOL                      Indices;
900         BOOL                      lights[MAX_ACTIVE_LIGHTS];
901         BOOL                      material;
902         BOOL                      stream_source[MAX_STREAMS];
903         BOOL                      textures[8];
904         BOOL                      transform[HIGHEST_TRANSFORMSTATE];
905         BOOL                      viewport;
906         BOOL                      vertexShader;
907         BOOL                      vertexShaderConstant;
908         BOOL                      vertexShaderDecl;
909         BOOL                      pixelShader;
910         BOOL                      renderstate[HIGHEST_RENDER_STATE];
911         BOOL                      texture_state[8][HIGHEST_TEXTURE_STATE];
912         BOOL                      clipplane[MAX_CLIPPLANES];
913 } SAVEDSTATES;
914
915
916 /* ----------------------- */
917 /* IDirect3DStateBlockImpl */
918 /* ----------------------- */
919
920 /*****************************************************************************
921  * Predeclare the interface implementation structures
922  */
923 /*extern ICOM_VTABLE(IDirect3DStateBlock9) Direct3DStateBlock9_Vtbl;*/
924
925 /*****************************************************************************
926  * IDirect3DStateBlock implementation structure
927  */
928 struct  IDirect3DStateBlockImpl {
929   /* IUnknown fields */
930   /*ICOM_VFIELD(IDirect3DStateBlock9);*/
931   DWORD  ref;
932
933   /* The device, to be replaced by a IDirect3DDeviceImpl */
934   IDirect3DDevice8Impl* device;
935
936   D3DSTATEBLOCKTYPE         blockType;
937
938   SAVEDSTATES               Changed;
939   SAVEDSTATES               Set;
940   
941   /* Light Enable */
942   BOOL                      lightEnable[MAX_ACTIVE_LIGHTS];
943   
944   /* ClipPlane */
945   double                    clipplane[MAX_CLIPPLANES][4];
946   
947   /* Stream Source */
948   UINT                      stream_stride[MAX_STREAMS];
949   IDirect3DVertexBuffer8   *stream_source[MAX_STREAMS];
950   
951   /* Indices */
952   IDirect3DIndexBuffer8*    pIndexData;
953   UINT                      baseVertexIndex;
954   
955   /* Texture */
956   IDirect3DBaseTexture8    *textures[8];
957   int                       textureDimensions[8];
958   /* Texture State Stage */
959   DWORD                     texture_state[8][HIGHEST_TEXTURE_STATE];
960   
961   /* Lights */
962   D3DLIGHT8                 lights[MAX_ACTIVE_LIGHTS];
963   
964   /* Material */
965   D3DMATERIAL8              material;
966   
967   /* RenderState */
968   DWORD                     renderstate[HIGHEST_RENDER_STATE];
969   
970   /* Transform */
971   D3DMATRIX                 transforms[HIGHEST_TRANSFORMSTATE];
972   
973   /* ViewPort */
974   D3DVIEWPORT8              viewport;
975   
976   /* Vertex Shader */
977   DWORD                     VertexShader;
978
979   /* Vertex Shader Declaration */
980   IDirect3DVertexShaderDeclarationImpl* vertexShaderDecl;
981   
982   /* Pixel Shader */
983   DWORD                     PixelShader;
984   /* TODO: Pixel Shader Constant */
985   
986   /* Indexed Vertex Blending */
987   D3DVERTEXBLENDFLAGS       vertex_blend;
988   FLOAT                     tween_factor;
989
990   /* Vertex Shader Constant */
991   D3DSHADERVECTOR           vertexShaderConstant[D3D8_VSHADER_MAX_CONSTANTS];
992 };
993
994 /* exported Interfaces */
995 /* internal Interfaces */
996 /* temporary internal Interfaces */
997 extern HRESULT WINAPI IDirect3DDeviceImpl_InitStartupStateBlock(IDirect3DDevice8Impl* This);
998 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateStateBlock(IDirect3DDevice8Impl* This, D3DSTATEBLOCKTYPE Type, IDirect3DStateBlockImpl** ppStateBlock);
999 extern HRESULT WINAPI IDirect3DDeviceImpl_DeleteStateBlock(IDirect3DDevice8Impl* This, IDirect3DStateBlockImpl* pSB);
1000 extern HRESULT WINAPI IDirect3DDeviceImpl_BeginStateBlock(IDirect3DDevice8Impl* This);
1001 extern HRESULT WINAPI IDirect3DDeviceImpl_EndStateBlock(IDirect3DDevice8Impl* This, IDirect3DStateBlockImpl** ppStateBlock);
1002 extern HRESULT WINAPI IDirect3DDeviceImpl_ApplyStateBlock(IDirect3DDevice8Impl* iface, IDirect3DStateBlockImpl* pSB);
1003 extern HRESULT WINAPI IDirect3DDeviceImpl_CaptureStateBlock(IDirect3DDevice8Impl* This, IDirect3DStateBlockImpl* pSB);
1004
1005 /* ------------------------------------ */
1006 /* IDirect3DVertexShaderDeclarationImpl */
1007 /* ------------------------------------ */
1008
1009 /*****************************************************************************
1010  * Predeclare the interface implementation structures
1011  */
1012 /*extern ICOM_VTABLE(IDirect3DVertexShaderDeclaration9) Direct3DVertexShaderDeclaration9_Vtbl;*/
1013
1014 /*****************************************************************************
1015  * IDirect3DVertexShaderDeclaration implementation structure
1016  */
1017 struct IDirect3DVertexShaderDeclarationImpl {
1018   /* IUnknown fields */
1019   /*ICOM_VFIELD(IDirect3DVertexShaderDeclaration9);*/
1020   DWORD  ref;
1021
1022   /* The device, to be replaced by a IDirect3DDeviceImpl */
1023   IDirect3DDevice8Impl* device;
1024
1025   /** precomputed fvf if simple declaration */
1026   DWORD   fvf;
1027   /** dx8 compatible Declaration fields */
1028   DWORD*  pDeclaration8;
1029   DWORD   declaration8Length;
1030 };
1031
1032 /* exported Interfaces */
1033 extern HRESULT WINAPI IDirect3DVertexShaderDeclarationImpl_GetDeclaration8(IDirect3DVertexShaderDeclarationImpl* This, DWORD* pData, UINT* pSizeOfData);
1034 /*extern HRESULT IDirect3DVertexShaderDeclarationImpl_GetDeclaration9(IDirect3DVertexShaderDeclarationImpl* This, D3DVERTEXELEMENT9* pData, UINT* pNumElements);*/
1035 /* internal Interfaces */
1036 /* temporary internal Interfaces */
1037 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateVertexShaderDeclaration8(IDirect3DDevice8Impl* This, CONST DWORD* pDeclaration8, IDirect3DVertexShaderDeclarationImpl** ppVertexShaderDecl);
1038
1039
1040 /* ------------------------- */
1041 /* IDirect3DVertexShaderImpl */
1042 /* ------------------------- */
1043
1044 /*****************************************************************************
1045  * Predeclare the interface implementation structures
1046  */
1047 /*extern ICOM_VTABLE(IDirect3DVertexShader9) Direct3DVertexShader9_Vtbl;*/
1048
1049 /*****************************************************************************
1050  * IDirect3DVertexShader implementation structure
1051  */
1052 struct IDirect3DVertexShaderImpl {
1053   /*ICOM_VFIELD(IDirect3DVertexShader9);*/
1054   DWORD ref;
1055
1056   /* The device, to be replaced by a IDirect3DDeviceImpl */
1057   IDirect3DDevice8Impl* device;
1058
1059   DWORD* function;
1060   UINT functionLength;
1061   DWORD usage; /* 0 || D3DUSAGE_SOFTWAREPROCESSING */
1062   DWORD version;
1063   /* run time datas */
1064   SHADERDATA8* data;
1065   VSHADERINPUTDATA8 input;
1066   VSHADEROUTPUTDATA8 output;
1067 };
1068
1069 /* exported Interfaces */
1070 extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetFunction(IDirect3DVertexShaderImpl* This, VOID* pData, UINT* pSizeOfData);
1071 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_SetConstantB(IDirect3DVertexShaderImpl* This, UINT StartRegister, CONST BOOL*  pConstantData, UINT BoolCount);*/
1072 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_SetConstantI(IDirect3DVertexShaderImpl* This, UINT StartRegister, CONST INT*   pConstantData, UINT Vector4iCount);*/
1073 extern HRESULT WINAPI IDirect3DVertexShaderImpl_SetConstantF(IDirect3DVertexShaderImpl* This, UINT StartRegister, CONST FLOAT* pConstantData, UINT Vector4fCount);
1074 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetConstantB(IDirect3DVertexShaderImpl* This, UINT StartRegister, BOOL*  pConstantData, UINT BoolCount);*/
1075 /*extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetConstantI(IDirect3DVertexShaderImpl* This, UINT StartRegister, INT*   pConstantData, UINT Vector4iCount);*/
1076 extern HRESULT WINAPI IDirect3DVertexShaderImpl_GetConstantF(IDirect3DVertexShaderImpl* This, UINT StartRegister, FLOAT* pConstantData, UINT Vector4fCount);
1077 /* internal Interfaces */
1078 extern DWORD WINAPI IDirect3DVertexShaderImpl_GetVersion(IDirect3DVertexShaderImpl* This);
1079 extern HRESULT WINAPI IDirect3DVertexShaderImpl_ExecuteSW(IDirect3DVertexShaderImpl* This, VSHADERINPUTDATA8* input, VSHADEROUTPUTDATA8* output);
1080 /* temporary internal Interfaces */
1081 extern HRESULT WINAPI IDirect3DDeviceImpl_CreateVertexShader(IDirect3DDevice8Impl* This, CONST DWORD* pFunction, DWORD Usage, IDirect3DVertexShaderImpl** ppVertexShader);
1082 extern HRESULT WINAPI IDirect3DDeviceImpl_FillVertexShaderInput(IDirect3DDevice8Impl* This, IDirect3DVertexShaderImpl* vshader, const void* vertexFirstStream, DWORD StartVertexIndex, DWORD idxDecal);
1083
1084 /* ------------------------ */
1085 /* IDirect3DPixelShaderImpl */
1086 /* ------------------------ */
1087
1088 /*****************************************************************************
1089  * Predeclare the interface implementation structures
1090  */
1091 /*extern ICOM_VTABLE(IDirect3DPixelShader9) Direct3DPixelShader9_Vtbl;*/
1092
1093 /*****************************************************************************
1094  * IDirect3DPixelShader implementation structure
1095  */
1096 struct IDirect3DPixelShaderImpl { 
1097   /*ICOM_VFIELD(IDirect3DPixelShader9);*/
1098   DWORD ref;
1099
1100   /* The device, to be replaced by a IDirect3DDeviceImpl */
1101   IDirect3DDevice8Impl* device;
1102
1103   /* TODO: Pixel Shader */
1104   CONST DWORD* function;
1105   UINT functionLength;
1106   DWORD version;
1107   /* run time datas */
1108   SHADERDATA8* data;
1109 };
1110
1111 /* exported Interfaces */
1112 extern HRESULT WINAPI IDirect3DPixelShaderImpl_GetFunction(IDirect3DPixelShaderImpl* This, VOID* pData, UINT* pSizeOfData);
1113 /* internal Interfaces */
1114 extern DWORD WINAPI IDirect3DPixelShaderImpl_GetVersion(IDirect3DPixelShaderImpl* This);
1115
1116
1117 /**
1118  * Internals functions
1119  *
1120  * to see how not defined it here
1121  */ 
1122 void setupTextureStates(LPDIRECT3DDEVICE8 iface, DWORD Stage);
1123 SHORT bytesPerPixel(D3DFORMAT fmt);
1124 GLint fmt2glintFmt(D3DFORMAT fmt);
1125 GLenum fmt2glFmt(D3DFORMAT fmt);
1126 DWORD fmt2glType(D3DFORMAT fmt);
1127
1128 #endif /* __WINE_D3DX8_PRIVATE_H */