d3d9_private.h 25.6 KB
Newer Older
1 2 3 4
/*
 * Direct3D 9 private include file
 *
 * Copyright 2002-2003 Jason Edmeades
5 6
 * Copyright 2002-2003 Raphael Junqueira
 * Copyright 2005 Oliver Stieber 
7 8 9 10 11 12 13 14 15 16 17 18 19
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
20
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 22 23 24 25
 */

#ifndef __WINE_D3D9_PRIVATE_H
#define __WINE_D3D9_PRIVATE_H

26 27 28 29
#include <stdarg.h>

#define NONAMELESSUNION
#define NONAMELESSSTRUCT
30
#define COBJMACROS
31 32
#include "windef.h"
#include "winbase.h"
33
#include "wingdi.h"
34 35
#include "winuser.h"
#include "wine/debug.h"
36
#include "wine/unicode.h"
37 38

#include "d3d9.h"
39
#include "wine/wined3d.h"
40

41 42 43 44 45 46
/* ===========================================================================
   Internal use
   =========================================================================== */
extern HRESULT vdecl_convert_fvf(
    DWORD FVF,
    D3DVERTEXELEMENT9** ppVertexElements);
47
extern CRITICAL_SECTION d3d9_cs;
48

49 50 51 52
/* ===========================================================================
    Macros
   =========================================================================== */
/* Not nice, but it lets wined3d support different versions of directx */
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
#define WINECAPSTOD3D9CAPS(_pD3D9Caps, _pWineCaps) \
    _pD3D9Caps->DeviceType                        = (D3DDEVTYPE) _pWineCaps->DeviceType; \
    _pD3D9Caps->AdapterOrdinal                    = _pWineCaps->AdapterOrdinal; \
    _pD3D9Caps->Caps                              = _pWineCaps->Caps; \
    _pD3D9Caps->Caps2                             = _pWineCaps->Caps2; \
    _pD3D9Caps->Caps3                             = _pWineCaps->Caps3; \
    _pD3D9Caps->PresentationIntervals             = _pWineCaps->PresentationIntervals; \
    _pD3D9Caps->CursorCaps                        = _pWineCaps->CursorCaps; \
    _pD3D9Caps->DevCaps                           = _pWineCaps->DevCaps; \
    _pD3D9Caps->PrimitiveMiscCaps                 = _pWineCaps->PrimitiveMiscCaps; \
    _pD3D9Caps->RasterCaps                        = _pWineCaps->RasterCaps; \
    _pD3D9Caps->ZCmpCaps                          = _pWineCaps->ZCmpCaps; \
    _pD3D9Caps->SrcBlendCaps                      = _pWineCaps->SrcBlendCaps; \
    _pD3D9Caps->DestBlendCaps                     = _pWineCaps->DestBlendCaps; \
    _pD3D9Caps->AlphaCmpCaps                      = _pWineCaps->AlphaCmpCaps; \
    _pD3D9Caps->ShadeCaps                         = _pWineCaps->ShadeCaps; \
    _pD3D9Caps->TextureCaps                       = _pWineCaps->TextureCaps; \
    _pD3D9Caps->TextureFilterCaps                 = _pWineCaps->TextureFilterCaps; \
    _pD3D9Caps->CubeTextureFilterCaps             = _pWineCaps->CubeTextureFilterCaps; \
    _pD3D9Caps->VolumeTextureFilterCaps           = _pWineCaps->VolumeTextureFilterCaps; \
    _pD3D9Caps->TextureAddressCaps                = _pWineCaps->TextureAddressCaps; \
    _pD3D9Caps->VolumeTextureAddressCaps          = _pWineCaps->VolumeTextureAddressCaps; \
    _pD3D9Caps->LineCaps                          = _pWineCaps->LineCaps; \
    _pD3D9Caps->MaxTextureWidth                   = _pWineCaps->MaxTextureWidth; \
    _pD3D9Caps->MaxTextureHeight                  = _pWineCaps->MaxTextureHeight; \
    _pD3D9Caps->MaxVolumeExtent                   = _pWineCaps->MaxVolumeExtent; \
    _pD3D9Caps->MaxTextureRepeat                  = _pWineCaps->MaxTextureRepeat; \
    _pD3D9Caps->MaxTextureAspectRatio             = _pWineCaps->MaxTextureAspectRatio; \
    _pD3D9Caps->MaxAnisotropy                     = _pWineCaps->MaxAnisotropy; \
    _pD3D9Caps->MaxVertexW                        = _pWineCaps->MaxVertexW; \
    _pD3D9Caps->GuardBandLeft                     = _pWineCaps->GuardBandLeft; \
    _pD3D9Caps->GuardBandTop                      = _pWineCaps->GuardBandTop; \
    _pD3D9Caps->GuardBandRight                    = _pWineCaps->GuardBandRight; \
    _pD3D9Caps->GuardBandBottom                   = _pWineCaps->GuardBandBottom; \
    _pD3D9Caps->ExtentsAdjust                     = _pWineCaps->ExtentsAdjust; \
    _pD3D9Caps->StencilCaps                       = _pWineCaps->StencilCaps; \
    _pD3D9Caps->FVFCaps                           = _pWineCaps->FVFCaps; \
    _pD3D9Caps->TextureOpCaps                     = _pWineCaps->TextureOpCaps; \
    _pD3D9Caps->MaxTextureBlendStages             = _pWineCaps->MaxTextureBlendStages; \
    _pD3D9Caps->MaxSimultaneousTextures           = _pWineCaps->MaxSimultaneousTextures; \
    _pD3D9Caps->VertexProcessingCaps              = _pWineCaps->VertexProcessingCaps; \
    _pD3D9Caps->MaxActiveLights                   = _pWineCaps->MaxActiveLights; \
    _pD3D9Caps->MaxUserClipPlanes                 = _pWineCaps->MaxUserClipPlanes; \
    _pD3D9Caps->MaxVertexBlendMatrices            = _pWineCaps->MaxVertexBlendMatrices; \
    _pD3D9Caps->MaxVertexBlendMatrixIndex         = _pWineCaps->MaxVertexBlendMatrixIndex; \
    _pD3D9Caps->MaxPointSize                      = _pWineCaps->MaxPointSize; \
    _pD3D9Caps->MaxPrimitiveCount                 = _pWineCaps->MaxPrimitiveCount; \
    _pD3D9Caps->MaxVertexIndex                    = _pWineCaps->MaxVertexIndex; \
    _pD3D9Caps->MaxStreams                        = _pWineCaps->MaxStreams; \
    _pD3D9Caps->MaxStreamStride                   = _pWineCaps->MaxStreamStride; \
    _pD3D9Caps->VertexShaderVersion               = _pWineCaps->VertexShaderVersion; \
    _pD3D9Caps->MaxVertexShaderConst              = _pWineCaps->MaxVertexShaderConst; \
    _pD3D9Caps->PixelShaderVersion                = _pWineCaps->PixelShaderVersion; \
    _pD3D9Caps->PixelShader1xMaxValue             = _pWineCaps->PixelShader1xMaxValue; \
    _pD3D9Caps->DevCaps2                          = _pWineCaps->DevCaps2; \
    _pD3D9Caps->MaxNpatchTessellationLevel        = _pWineCaps->MaxNpatchTessellationLevel; \
    _pD3D9Caps->MasterAdapterOrdinal              = _pWineCaps->MasterAdapterOrdinal; \
    _pD3D9Caps->AdapterOrdinalInGroup             = _pWineCaps->AdapterOrdinalInGroup; \
    _pD3D9Caps->NumberOfAdaptersInGroup           = _pWineCaps->NumberOfAdaptersInGroup; \
    _pD3D9Caps->DeclTypes                         = _pWineCaps->DeclTypes; \
    _pD3D9Caps->NumSimultaneousRTs                = _pWineCaps->NumSimultaneousRTs; \
    _pD3D9Caps->StretchRectFilterCaps             = _pWineCaps->StretchRectFilterCaps; \
    _pD3D9Caps->VS20Caps.Caps                     = _pWineCaps->VS20Caps.Caps; \
    _pD3D9Caps->VS20Caps.DynamicFlowControlDepth  = _pWineCaps->VS20Caps.DynamicFlowControlDepth; \
    _pD3D9Caps->VS20Caps.NumTemps                 = _pWineCaps->VS20Caps.NumTemps; \
    _pD3D9Caps->VS20Caps.NumTemps                 = _pWineCaps->VS20Caps.NumTemps; \
    _pD3D9Caps->VS20Caps.StaticFlowControlDepth   = _pWineCaps->VS20Caps.StaticFlowControlDepth; \
    _pD3D9Caps->PS20Caps.Caps                     = _pWineCaps->PS20Caps.Caps; \
    _pD3D9Caps->PS20Caps.DynamicFlowControlDepth  = _pWineCaps->PS20Caps.DynamicFlowControlDepth; \
    _pD3D9Caps->PS20Caps.NumTemps                 = _pWineCaps->PS20Caps.NumTemps; \
    _pD3D9Caps->PS20Caps.StaticFlowControlDepth   = _pWineCaps->PS20Caps.StaticFlowControlDepth; \
    _pD3D9Caps->PS20Caps.NumInstructionSlots      = _pWineCaps->PS20Caps.NumInstructionSlots; \
    _pD3D9Caps->VertexTextureFilterCaps           = _pWineCaps->VertexTextureFilterCaps; \
    _pD3D9Caps->MaxVShaderInstructionsExecuted    = _pWineCaps->MaxVShaderInstructionsExecuted; \
    _pD3D9Caps->MaxPShaderInstructionsExecuted    = _pWineCaps->MaxPShaderInstructionsExecuted; \
    _pD3D9Caps->MaxVertexShader30InstructionSlots = _pWineCaps->MaxVertexShader30InstructionSlots; \
    _pD3D9Caps->MaxPixelShader30InstructionSlots  = _pWineCaps->MaxPixelShader30InstructionSlots;
130

131
/* ===========================================================================
Austin English's avatar
Austin English committed
132
    D3D9 interfaces
133 134 135 136 137 138 139 140 141
   =========================================================================== */

/* ---------- */
/* IDirect3D9 */
/* ---------- */

/*****************************************************************************
 * Predeclare the interface implementation structures
 */
142
extern const IDirect3D9ExVtbl Direct3D9_Vtbl;
143 144 145 146

/*****************************************************************************
 * IDirect3D implementation structure
 */
147
typedef struct IDirect3D9Impl
148 149
{
    /* IUnknown fields */
150
    const IDirect3D9ExVtbl   *lpVtbl;
151
    LONG                    ref;
152

153 154 155
    /* The WineD3D device */
    IWineD3D               *WineD3D;

156 157
    /* Created via Direct3DCreate9Ex? Can QI extended interfaces */
    BOOL                    extended;
158
} IDirect3D9Impl;
159

160 161
void filter_caps(D3DCAPS9* pCaps);

162 163 164 165 166 167 168
/* ---------------- */
/* IDirect3DDevice9 */
/* ---------------- */

/*****************************************************************************
 * Predeclare the interface implementation structures
 */
169
extern const IDirect3DDevice9ExVtbl Direct3DDevice9_Vtbl;
170 171 172 173

/*****************************************************************************
 * IDirect3DDevice9 implementation structure
 */
174
typedef struct IDirect3DDevice9Impl
175 176
{
    /* IUnknown fields */
177
    const IDirect3DDevice9ExVtbl   *lpVtbl;
178
    LONG                          ref;
179 180

    /* IDirect3DDevice9 fields */
181
    IWineD3DDevice               *WineD3DDevice;
182

183 184 185
    /* Avoids recursion with nested ReleaseRef to 0 */
    BOOL                          inDestruction;

186 187
    IDirect3DVertexDeclaration9  **convertedDecls;
    unsigned int                 numConvertedDecls, declArraySize;
188

189
    BOOL                          notreset;
190
} IDirect3DDevice9Impl;
191 192 193


/* IDirect3DDevice9: */
194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateAdditionalSwapChain(LPDIRECT3DDEVICE9EX iface, D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetSwapChain(LPDIRECT3DDEVICE9EX iface, UINT iSwapChain, IDirect3DSwapChain9** pSwapChain);
extern UINT     WINAPI  IDirect3DDevice9Impl_GetNumberOfSwapChains(LPDIRECT3DDEVICE9EX iface);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateTexture(LPDIRECT3DDEVICE9EX iface, UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateVolumeTexture(LPDIRECT3DDEVICE9EX iface, UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateCubeTexture(LPDIRECT3DDEVICE9EX iface, UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateVertexBuffer(LPDIRECT3DDEVICE9EX iface, UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateIndexBuffer(LPDIRECT3DDEVICE9EX iface, UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateStateBlock(LPDIRECT3DDEVICE9EX iface, D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_BeginStateBlock(LPDIRECT3DDEVICE9EX iface);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_EndStateBlock(LPDIRECT3DDEVICE9EX iface, IDirect3DStateBlock9** ppSB);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateVertexDeclaration(LPDIRECT3DDEVICE9EX iface, CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetVertexDeclaration(LPDIRECT3DDEVICE9EX iface, IDirect3DVertexDeclaration9* pDecl);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetVertexDeclaration(LPDIRECT3DDEVICE9EX iface, IDirect3DVertexDeclaration9** ppDecl);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateVertexShader(LPDIRECT3DDEVICE9EX iface, CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetVertexShader(LPDIRECT3DDEVICE9EX iface, IDirect3DVertexShader9* pShader);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetVertexShader(LPDIRECT3DDEVICE9EX iface, IDirect3DVertexShader9** ppShader);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetVertexShaderConstantF(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetVertexShaderConstantF(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, float* pConstantData, UINT Vector4fCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetVertexShaderConstantI(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetVertexShaderConstantI(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, int* pConstantData, UINT Vector4iCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetVertexShaderConstantB(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetVertexShaderConstantB(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, BOOL* pConstantData, UINT BoolCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreatePixelShader(LPDIRECT3DDEVICE9EX iface, CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetPixelShader(LPDIRECT3DDEVICE9EX iface, IDirect3DPixelShader9* pShader);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetPixelShader(LPDIRECT3DDEVICE9EX iface, IDirect3DPixelShader9** ppShader);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetPixelShaderConstantF(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetPixelShaderConstantF(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, float* pConstantData, UINT Vector4fCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetPixelShaderConstantI(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetPixelShaderConstantI(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, int* pConstantData, UINT Vector4iCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_SetPixelShaderConstantB(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, CONST BOOL* pConstantData, UINT BoolCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_GetPixelShaderConstantB(LPDIRECT3DDEVICE9EX iface, UINT StartRegister, BOOL* pConstantData, UINT BoolCount);
extern HRESULT  WINAPI  IDirect3DDevice9Impl_CreateQuery(LPDIRECT3DDEVICE9EX iface, D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery);
227 228 229 230 231 232 233 234 235


/* ---------------- */
/* IDirect3DVolume9 */
/* ---------------- */

/*****************************************************************************
 * IDirect3DVolume9 implementation structure
 */
236
typedef struct IDirect3DVolume9Impl
237 238
{
    /* IUnknown fields */
239
    const IDirect3DVolume9Vtbl *lpVtbl;
240
    LONG                    ref;
241 242

    /* IDirect3DVolume9 fields */
243
    IWineD3DVolume         *wineD3DVolume;
244

245 246 247
    /* The volume container */
    IUnknown                    *container;

248 249
    /* If set forward refcounting to this object */
    IUnknown                    *forwardReference;
250
} IDirect3DVolume9Impl;
251 252 253 254 255 256 257 258

/* ------------------- */
/* IDirect3DSwapChain9 */
/* ------------------- */

/*****************************************************************************
 * IDirect3DSwapChain9 implementation structure
 */
Oliver Stieber's avatar
Oliver Stieber committed
259
typedef struct IDirect3DSwapChain9Impl
260 261
{
    /* IUnknown fields */
262
    const IDirect3DSwapChain9Vtbl *lpVtbl;
263
    LONG                    ref;
264 265

    /* IDirect3DSwapChain9 fields */
Oliver Stieber's avatar
Oliver Stieber committed
266
    IWineD3DSwapChain      *wineD3DSwapChain;
267

268
    /* Parent reference */
269
    LPDIRECT3DDEVICE9EX       parentDevice;
270 271 272

    /* Flags an implicit swap chain */
    BOOL                        isImplicit;
Oliver Stieber's avatar
Oliver Stieber committed
273
} IDirect3DSwapChain9Impl;
274 275 276 277 278 279 280 281

/* ------------------ */
/* IDirect3DResource9 */
/* ------------------ */

/*****************************************************************************
 * IDirect3DResource9 implementation structure
 */
282
typedef struct IDirect3DResource9Impl
283 284
{
    /* IUnknown fields */
285
    const IDirect3DResource9Vtbl *lpVtbl;
286
    LONG                    ref;
287 288

    /* IDirect3DResource9 fields */
289
    IWineD3DResource       *wineD3DResource;
290
} IDirect3DResource9Impl;
291 292 293 294 295 296 297 298 299 300 301

extern HRESULT  WINAPI        IDirect3DResource9Impl_GetDevice(LPDIRECT3DRESOURCE9 iface, IDirect3DDevice9** ppDevice);


/* ----------------- */
/* IDirect3DSurface9 */
/* ----------------- */

/*****************************************************************************
 * Predeclare the interface implementation structures
 */
302
extern const IDirect3DSurface9Vtbl Direct3DSurface9_Vtbl;
303 304 305 306

/*****************************************************************************
 * IDirect3DSurface9 implementation structure
 */
307
typedef struct IDirect3DSurface9Impl
308 309
{
    /* IUnknown fields */
310
    const IDirect3DSurface9Vtbl *lpVtbl;
311
    LONG                    ref;
312 313

    /* IDirect3DResource9 fields */
314
    IWineD3DSurface        *wineD3DSurface;
315

316
    /* Parent reference */
317
    LPDIRECT3DDEVICE9EX       parentDevice;
318

319 320 321
    /* The surface container */
    IUnknown                    *container;

322 323
    /* If set forward refcounting to this object */
    IUnknown                    *forwardReference;
324 325 326

    /* Flags an implicit surface */
    BOOL                        isImplicit;
327
} IDirect3DSurface9Impl;
328 329 330 331 332 333 334 335

/* ---------------------- */
/* IDirect3DVertexBuffer9 */
/* ---------------------- */

/*****************************************************************************
 * IDirect3DVertexBuffer9 implementation structure
 */
336
typedef struct IDirect3DVertexBuffer9Impl
337 338
{
    /* IUnknown fields */
339
    const IDirect3DVertexBuffer9Vtbl *lpVtbl;
340
    LONG                    ref;
341 342

    /* IDirect3DResource9 fields */
343
    IWineD3DVertexBuffer   *wineD3DVertexBuffer;
344 345

    /* Parent reference */
346
    LPDIRECT3DDEVICE9EX       parentDevice;
347
} IDirect3DVertexBuffer9Impl;
348 349 350 351 352 353 354 355

/* --------------------- */
/* IDirect3DIndexBuffer9 */
/* --------------------- */

/*****************************************************************************
 * IDirect3DIndexBuffer9 implementation structure
 */
356
typedef struct IDirect3DIndexBuffer9Impl
357 358
{
    /* IUnknown fields */
359
    const IDirect3DIndexBuffer9Vtbl *lpVtbl;
360
    LONG                    ref;
361 362

    /* IDirect3DResource9 fields */
363
    IWineD3DIndexBuffer    *wineD3DIndexBuffer;
364

365
    /* Parent reference */
366
    LPDIRECT3DDEVICE9EX       parentDevice;
367
} IDirect3DIndexBuffer9Impl;
368 369 370 371 372 373 374 375

/* --------------------- */
/* IDirect3DBaseTexture9 */
/* --------------------- */

/*****************************************************************************
 * IDirect3DBaseTexture9 implementation structure
 */
376
typedef struct IDirect3DBaseTexture9Impl
377 378
{
    /* IUnknown fields */
379
    const IDirect3DBaseTexture9Vtbl *lpVtbl;
380
    LONG                    ref;
381 382

    /* IDirect3DResource9 fields */
383
    IWineD3DBaseTexture    *wineD3DBaseTexture;
384 385
    
} IDirect3DBaseTexture9Impl;
386 387 388 389 390 391 392 393 394 395

extern DWORD    WINAPI        IDirect3DBaseTexture9Impl_GetLOD(LPDIRECT3DBASETEXTURE9 iface);

/* --------------------- */
/* IDirect3DCubeTexture9 */
/* --------------------- */

/*****************************************************************************
 * IDirect3DCubeTexture9 implementation structure
 */
396
typedef struct IDirect3DCubeTexture9Impl
397 398
{
    /* IUnknown fields */
399
    const IDirect3DCubeTexture9Vtbl *lpVtbl;
400
    LONG                    ref;
401 402

    /* IDirect3DResource9 fields */
403 404 405
    IWineD3DCubeTexture    *wineD3DCubeTexture;

    /* Parent reference */
406
    LPDIRECT3DDEVICE9EX       parentDevice;
407
}  IDirect3DCubeTexture9Impl;
408 409 410 411 412 413 414 415 416


/* ----------------- */
/* IDirect3DTexture9 */
/* ----------------- */

/*****************************************************************************
 * IDirect3DTexture9 implementation structure
 */
417
typedef struct IDirect3DTexture9Impl
418 419
{
    /* IUnknown fields */
420
    const IDirect3DTexture9Vtbl *lpVtbl;
421
    LONG                    ref;
422 423

    /* IDirect3DResource9 fields */
424 425
    IWineD3DTexture        *wineD3DTexture;

426
    /* Parent reference */
427
    LPDIRECT3DDEVICE9EX       parentDevice;
428
} IDirect3DTexture9Impl;
429 430 431 432 433 434 435 436

/* ----------------------- */
/* IDirect3DVolumeTexture9 */
/* ----------------------- */

/*****************************************************************************
 * IDirect3DVolumeTexture9 implementation structure
 */
437
typedef struct IDirect3DVolumeTexture9Impl
438 439
{
    /* IUnknown fields */
440
    const IDirect3DVolumeTexture9Vtbl *lpVtbl;
441
    LONG                    ref;
442 443

    /* IDirect3DResource9 fields */
444 445 446
    IWineD3DVolumeTexture  *wineD3DVolumeTexture;

    /* Parent reference */
447
    LPDIRECT3DDEVICE9EX       parentDevice;
448
} IDirect3DVolumeTexture9Impl;
449 450 451 452 453 454 455 456

/* ----------------------- */
/* IDirect3DStateBlock9 */
/* ----------------------- */

/*****************************************************************************
 * IDirect3DStateBlock9 implementation structure
 */
457
typedef struct  IDirect3DStateBlock9Impl {
458 459 460
    /* IUnknown fields */
    const IDirect3DStateBlock9Vtbl *lpVtbl;
    LONG                    ref;
461

462 463
    /* IDirect3DStateBlock9 fields */
    IWineD3DStateBlock     *wineD3DStateBlock;
464

465
    /* Parent reference */
466
    LPDIRECT3DDEVICE9EX       parentDevice;
467
} IDirect3DStateBlock9Impl;
468 469 470 471 472 473 474


/* --------------------------- */
/* IDirect3DVertexDeclaration9 */
/* --------------------------- */

/*****************************************************************************
475
 * IDirect3DVertexDeclaration implementation structure
476
 */
477
typedef struct IDirect3DVertexDeclaration9Impl {
478
  /* IUnknown fields */
479
  const IDirect3DVertexDeclaration9Vtbl *lpVtbl;
480
  LONG    ref;
481

482
  D3DVERTEXELEMENT9 *elements;
483
  UINT element_count;
484

485
  /* IDirect3DVertexDeclaration9 fields */
486
  IWineD3DVertexDeclaration *wineD3DVertexDeclaration;
487 488
  DWORD convFVF;

489
  /* Parent reference */
490
  LPDIRECT3DDEVICE9EX parentDevice;
491
} IDirect3DVertexDeclaration9Impl;
492

493 494
void IDirect3DVertexDeclaration9Impl_Destroy(LPDIRECT3DVERTEXDECLARATION9 iface);

495 496 497 498 499 500 501
/* ---------------------- */
/* IDirect3DVertexShader9 */
/* ---------------------- */

/*****************************************************************************
 * IDirect3DVertexShader implementation structure
 */
502
typedef struct IDirect3DVertexShader9Impl {
503
  /* IUnknown fields */
504
  const IDirect3DVertexShader9Vtbl *lpVtbl;
505
  LONG  ref;
506

507 508
  /* IDirect3DVertexShader9 fields */
  IWineD3DVertexShader *wineD3DVertexShader;
509

510
  /* Parent reference */
511
  LPDIRECT3DDEVICE9EX parentDevice;
512
} IDirect3DVertexShader9Impl;
513 514 515 516 517 518 519 520

/* --------------------- */
/* IDirect3DPixelShader9 */
/* --------------------- */

/*****************************************************************************
 * IDirect3DPixelShader implementation structure
 */
521
typedef struct IDirect3DPixelShader9Impl {
522
  /* IUnknown fields */
523
    const IDirect3DPixelShader9Vtbl *lpVtbl;
524
    LONG                    ref;
525

526
    /* IDirect3DPixelShader9 fields */
527
    IWineD3DPixelShader    *wineD3DPixelShader;
528

529
    /* Parent reference */
530
    LPDIRECT3DDEVICE9EX       parentDevice;
531
} IDirect3DPixelShader9Impl;
532 533 534 535 536 537 538 539

/* --------------- */
/* IDirect3DQuery9 */
/* --------------- */

/*****************************************************************************
 * IDirect3DPixelShader implementation structure
 */
540
typedef struct IDirect3DQuery9Impl {
541
    /* IUnknown fields */
542
    const IDirect3DQuery9Vtbl *lpVtbl;
543
    LONG                 ref;
544

545 546
    /* IDirect3DQuery9 fields */
    IWineD3DQuery       *wineD3DQuery;
547 548

    /* Parent reference */
549
    LPDIRECT3DDEVICE9EX    parentDevice;
550
} IDirect3DQuery9Impl;
551 552


553
/* Callbacks */
554
extern HRESULT WINAPI D3D9CB_CreateSurface(IUnknown *device, IUnknown *pSuperior, UINT Width, UINT Height,
555
                                         WINED3DFORMAT Format, DWORD Usage, WINED3DPOOL Pool, UINT Level,
556 557
                                         WINED3DCUBEMAP_FACES Face, IWineD3DSurface** ppSurface,
                                         HANDLE* pSharedHandle);
558

559
extern HRESULT WINAPI D3D9CB_CreateVolume(IUnknown  *pDevice, IUnknown *pSuperior, UINT Width, UINT Height, UINT Depth,
560
                                          WINED3DFORMAT  Format, WINED3DPOOL Pool, DWORD Usage,
561
                                          IWineD3DVolume **ppVolume,
562
                                          HANDLE   * pSharedHandle);
563

564
extern HRESULT WINAPI D3D9CB_CreateDepthStencilSurface(IUnknown *device, IUnknown *pSuperior, UINT Width, UINT Height,
565
                                         WINED3DFORMAT Format, WINED3DMULTISAMPLE_TYPE MultiSample,
Oliver Stieber's avatar
Oliver Stieber committed
566 567 568
                                         DWORD MultisampleQuality, BOOL Discard,
                                         IWineD3DSurface** ppSurface, HANDLE* pSharedHandle);

569
extern HRESULT WINAPI D3D9CB_CreateRenderTarget(IUnknown *device, IUnknown *pSuperior, UINT Width, UINT Height,
570
                                         WINED3DFORMAT Format, WINED3DMULTISAMPLE_TYPE MultiSample,
571
                                         DWORD MultisampleQuality, BOOL Lockable,
Oliver Stieber's avatar
Oliver Stieber committed
572 573
                                         IWineD3DSurface** ppSurface, HANDLE* pSharedHandle);

574 575
extern ULONG WINAPI D3D9CB_DestroySwapChain (IWineD3DSwapChain *pSwapChain);

576 577
extern ULONG WINAPI D3D9CB_DestroyDepthStencilSurface (IWineD3DSurface *pSurface);

578 579
extern ULONG WINAPI D3D9CB_DestroyRenderTarget (IWineD3DSurface *pSurface);

580 581
extern ULONG WINAPI D3D9CB_DestroySurface(IWineD3DSurface *pSurface);

582 583
extern ULONG WINAPI D3D9CB_DestroyVolume(IWineD3DVolume *pVolume);

584
#endif /* __WINE_D3D9_PRIVATE_H */