9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBoxVideo Display D3D User mode dll
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 Oracle Corporation
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync *
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * available from http://www.virtualbox.org. This file is free software;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * General Public License (GPL) as published by the Free Software
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifndef ___VBoxDispD3DIf_h___
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define ___VBoxDispD3DIf_h___
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* D3D headers */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <iprt/critsect.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <iprt/semaphore.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _InterlockedExchange _InterlockedExchange_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _InterlockedExchangeAdd _InterlockedExchangeAdd_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _InterlockedCompareExchange _InterlockedCompareExchange_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _InterlockedAddLargeStatistic _InterlockedAddLargeStatistic_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _interlockedbittestandset _interlockedbittestandset_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _interlockedbittestandreset _interlockedbittestandreset_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _interlockedbittestandset64 _interlockedbittestandset64_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# define _interlockedbittestandreset64 _interlockedbittestandreset64_StupidDDKVsCompilerCrap
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# pragma warning(disable : 4163)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <D3D9.h>
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# pragma warning(default : 4163)
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _InterlockedExchange
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _InterlockedExchangeAdd
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _InterlockedCompareExchange
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _InterlockedAddLargeStatistic
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _interlockedbittestandset
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _interlockedbittestandreset
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _interlockedbittestandset64
b9e12f78cf07f58665c0e0b2b0abba1ce7f02a5dvboxsync# undef _interlockedbittestandreset64
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync#ifdef VBOX_WITH_NEW_WINE
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync#include "../../../Wine_new/vbox/VBoxWineEx.h"
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync#else
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include "../../../Wine/vbox/VBoxWineEx.h"
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* D3D functionality the VBOXDISPD3D provides */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef HRESULT WINAPI FNVBOXDISPD3DCREATE9EX(UINT SDKVersion, IDirect3D9Ex **ppD3D);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef FNVBOXDISPD3DCREATE9EX *PFNVBOXDISPD3DCREATE9EX;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXDISPD3D
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* D3D functionality the VBOXDISPD3D provides */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNVBOXDISPD3DCREATE9EX pfnDirect3DCreate9Ex;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNVBOXWINEEXD3DDEV9_CREATETEXTURE pfnVBoxWineExD3DDev9CreateTexture;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE pfnVBoxWineExD3DDev9CreateCubeTexture;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync PFNVBOXWINEEXD3DDEV9_CREATEVOLUMETEXTURE pfnVBoxWineExD3DDev9CreateVolumeTexture;
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNVBOXWINEEXD3DDEV9_FLUSH pfnVBoxWineExD3DDev9Flush;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync PFNVBOXWINEEXD3DDEV9_VOLBLT pfnVBoxWineExD3DDev9VolBlt;
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync PFNVBOXWINEEXD3DDEV9_VOLTEXBLT pfnVBoxWineExD3DDev9VolTexBlt;
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync PFNVBOXWINEEXD3DDEV9_TERM pfnVBoxWineExD3DDev9Term;
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync
40bd0fc692d21a6d579862d7ccdc20c2ccf361a5vboxsync PFNVBOXWINEEXD3DSWAPCHAIN9_PRESENT pfnVBoxWineExD3DSwapchain9Present;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync PFNVBOXWINEEXD3DDEV9_FLUSHTOHOST pfnVBoxWineExD3DDev9FlushToHost;
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync PFNVBOXWINEEXD3DDEV9_FINISH pfnVBoxWineExD3DDev9Finish;
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync PFNVBOXWINEEXD3DSURF9_GETHOSTID pfnVBoxWineExD3DSurf9GetHostId;
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync PFNVBOXWINEEXD3DSURF9_SYNCTOHOST pfnVBoxWineExD3DSurf9SyncToHost;
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync PFNVBOXWINEEXD3DSWAPCHAIN9_GETHOSTWINID pfnVBoxWineExD3DSwapchain9GetHostWinID;
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync PFNVBOXWINEEXD3DDEV9_GETHOSTID pfnVBoxWineExD3DDev9GetHostId;
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* module handle */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HMODULE hD3DLib;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXDISPD3D;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsynctypedef struct VBOXWDDMDISP_FORMATS
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cFormstOps;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync const struct _FORMATOP* paFormstOps;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cSurfDescs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync struct _DDSURFACEDESC *paSurfDescs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync} VBOXWDDMDISP_FORMATS, *PVBOXWDDMDISP_FORMATS;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsynctypedef struct VBOXWDDMDISP_D3D
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBOXDISPD3D D3D;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync IDirect3D9Ex * pD3D9If;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync D3DCAPS9 Caps;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync UINT cMaxSimRTs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync} VBOXWDDMDISP_D3D, *PVBOXWDDMDISP_D3D;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobalInit();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobalTerm();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT VBoxDispD3DGlobalOpen(PVBOXWDDMDISP_D3D pD3D, PVBOXWDDMDISP_FORMATS pFormats);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobalClose(PVBOXWDDMDISP_D3D pD3D, PVBOXWDDMDISP_FORMATS pFormats);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT VBoxDispD3DOpen(VBOXDISPD3D *pD3D);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispD3DClose(VBOXDISPD3D *pD3D);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT VBoxDispD3DGlobal2DFormatsInit(struct VBOXWDDMDISP_ADAPTER *pAdapter);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobal2DFormatsTerm(struct VBOXWDDMDISP_ADAPTER *pAdapter);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync#endif
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /* ifndef ___VBoxDispD3DIf_h___ */