VBoxDispD3DIf.cpp revision 5fc8385eb24d50f3bb86c555f6ebc15dd81f6b49
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBoxVideo Display D3D User mode dll
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 Oracle Corporation
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.
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync * Loads a system DLL.
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync * @returns Module handle or NULL
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync * @param pszName The DLL name.
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync UINT cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync pD3D->hD3DLib = loadSystemDll("VBoxD3D9wddm-x86.dll");
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync WARN((__FUNCTION__": LoadLibrary failed, winErr = (%d)", winErr));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pD3D->pfnDirect3DCreate9Ex = (PFNVBOXDISPD3DCREATE9EX)GetProcAddress(pD3D->hD3DLib, "Direct3DCreate9Ex");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DDev9CreateTexture = (PFNVBOXWINEEXD3DDEV9_CREATETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateTexture");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DDev9CreateCubeTexture = (PFNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateCubeTexture");
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync pD3D->pfnVBoxWineExD3DDev9CreateVolumeTexture = (PFNVBOXWINEEXD3DDEV9_CREATEVOLUMETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateVolumeTexture");
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync if (!pD3D->pfnVBoxWineExD3DDev9CreateVolumeTexture)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DDev9Flush = (PFNVBOXWINEEXD3DDEV9_FLUSH)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Flush");
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync pD3D->pfnVBoxWineExD3DDev9FlushToHost = (PFNVBOXWINEEXD3DDEV9_FLUSHTOHOST)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9FlushToHost");
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync pD3D->pfnVBoxWineExD3DDev9Finish = (PFNVBOXWINEEXD3DDEV9_FINISH)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Finish");
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync pD3D->pfnVBoxWineExD3DDev9VolBlt = (PFNVBOXWINEEXD3DDEV9_VOLBLT)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9VolBlt");
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync pD3D->pfnVBoxWineExD3DDev9VolTexBlt = (PFNVBOXWINEEXD3DDEV9_VOLTEXBLT)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9VolTexBlt");
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync pD3D->pfnVBoxWineExD3DDev9Term = (PFNVBOXWINEEXD3DDEV9_TERM)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Term");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DSwapchain9Present = (PFNVBOXWINEEXD3DSWAPCHAIN9_PRESENT)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSwapchain9Present");
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync pD3D->pfnVBoxWineExD3DSurf9GetHostId = (PFNVBOXWINEEXD3DSURF9_GETHOSTID)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSurf9GetHostId");
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync pD3D->pfnVBoxWineExD3DSurf9SyncToHost = (PFNVBOXWINEEXD3DSURF9_SYNCTOHOST)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSurf9SyncToHost");
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync pD3D->pfnVBoxWineExD3DSwapchain9GetHostWinID = (PFNVBOXWINEEXD3DSWAPCHAIN9_GETHOSTWINID)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSwapchain9GetHostWinID");
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync pD3D->pfnVBoxWineExD3DDev9GetHostId = (PFNVBOXWINEEXD3DDEV9_GETHOSTID)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9GetHostId");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SRGBWRITE|FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SRGBWRITE|FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_D16, FORMATOP_TEXTURE|FORMATOP_ZSTENCIL|FORMATOP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_D24S8, FORMATOP_TEXTURE|FORMATOP_ZSTENCIL|FORMATOP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_D24X8, FORMATOP_TEXTURE|FORMATOP_ZSTENCIL|FORMATOP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_D16_LOCKABLE, FORMATOP_ZSTENCIL|FORMATOP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_X8D24, FORMATOP_TEXTURE|FORMATOP_ZSTENCIL|FORMATOP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_D32F_LOCKABLE, FORMATOP_TEXTURE|FORMATOP_ZSTENCIL|FORMATOP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_S8D24, FORMATOP_TEXTURE|FORMATOP_ZSTENCIL|FORMATOP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_CxV8U8, FORMATOP_NOFILTER|FORMATOP_NOALPHABLEND|FORMATOP_NOTEXCOORDWRAPNORMIP, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_P8, FORMATOP_DISPLAYMODE|FORMATOP_3DACCELERATION|FORMATOP_OFFSCREENPLAIN, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SRGBWRITE|FORMATOP_AUTOGENMIPMAP|FORMATOP_VERTEXTEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_BINARYBUFFER, FORMATOP_OFFSCREENPLAIN, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_AUTOGENMIPMAP|FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_X8R8G8B8, FORMATOP_DISPLAYMODE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwHeight; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwWidth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* LONG lPitch; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLinearSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwBackBufferCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwMipMapCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRefreshRate; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwReserved; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwFourCC; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDuBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwGBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwUBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDvBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwVBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDPIXELFORMAT ddpfPixelFormat; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync } /* DDSCAPS ddsCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwHeight; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwWidth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* LONG lPitch; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLinearSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwBackBufferCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwMipMapCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRefreshRate; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwReserved; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwFourCC; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDuBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwGBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwUBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDvBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwVBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDPIXELFORMAT ddpfPixelFormat; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync } /* DDSCAPS ddsCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwHeight; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwWidth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* LONG lPitch; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLinearSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwBackBufferCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwMipMapCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRefreshRate; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwReserved; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwFourCC; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDuBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwGBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwUBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDvBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwVBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDPIXELFORMAT ddpfPixelFormat; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync } /* DDSCAPS ddsCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic void vboxVhwaPopulateOverlayFourccSurfDesc(DDSURFACEDESC *pDesc, uint32_t fourcc)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pDesc->ddpfPixelFormat.dwSize = sizeof (DDPIXELFORMAT);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic bool vboxPixFormatMatch(DDPIXELFORMAT *pFormat1, DDPIXELFORMAT *pFormat2)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return !memcmp(pFormat1, pFormat2, sizeof (DDPIXELFORMAT));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT vboxSurfDescMerge(DDSURFACEDESC *paDescs, uint32_t *pcDescs, uint32_t cMaxDescs, DDSURFACEDESC *pDesc)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pDesc->dwFlags == (DDSD_CAPS | DDSD_PIXELFORMAT));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pDesc->dwFlags != (DDSD_CAPS | DDSD_PIXELFORMAT))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (vboxPixFormatMatch(&pCur->ddpfPixelFormat, &pDesc->ddpfPixelFormat))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT vboxFormatOpsMerge(FORMATOP *paOps, uint32_t *pcOps, uint32_t cMaxOps, FORMATOP *pOp)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pCur->PrivateFormatBitCount == pOp->PrivateFormatBitCount);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT VBoxDispD3DGlobal2DFormatsInit(PVBOXWDDMDISP_ADAPTER pAdapter)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memset(&pAdapter->Formats, 0, sizeof (pAdapter->Formats));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* just calc the max number of formats */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cFormats = RT_ELEMENTS(gVBoxFormatOpsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cSurfDescs = RT_ELEMENTS(gVBoxSurfDescsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBOXDISPVHWA_INFO *pVhwa = &pAdapter->aHeads[i].Vhwa;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cbFormatOps = cFormats * sizeof (FORMATOP);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* ensure the surf descs are 8 byte aligned */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cbSurfDescs = cSurfDescs * sizeof (DDSURFACEDESC);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memcpy ((void*)pAdapter->Formats.paFormstOps , gVBoxFormatOpsBase, sizeof (gVBoxFormatOpsBase));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pAdapter->Formats.cFormstOps = RT_ELEMENTS(gVBoxFormatOpsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBOXDISPVHWA_INFO *pVhwa = &pAdapter->aHeads[i].Vhwa;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t j = 0; j < pVhwa->Settings.cFormats; ++j)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync hr = vboxFormatOpsMerge((FORMATOP *)pAdapter->Formats.paFormstOps, &pAdapter->Formats.cFormstOps, cFormats, &fo);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pAdapter->Formats.paSurfDescs = (DDSURFACEDESC*)(pvBuf + offSurfDescs);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memcpy ((void*)pAdapter->Formats.paSurfDescs , gVBoxSurfDescsBase, sizeof (gVBoxSurfDescsBase));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pAdapter->Formats.cSurfDescs = RT_ELEMENTS(gVBoxSurfDescsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBOXDISPVHWA_INFO *pVhwa = &pAdapter->aHeads[i].Vhwa;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t j = 0; j < pVhwa->Settings.cFormats; ++j)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t fourcc = vboxWddmFormatToFourcc(pVhwa->Settings.aFormats[j]);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxVhwaPopulateOverlayFourccSurfDesc(&sd, fourcc);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync hr = vboxSurfDescMerge((DDSURFACEDESC *)pAdapter->Formats.paSurfDescs, &pAdapter->Formats.cSurfDescs, cSurfDescs, &sd);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobal2DFormatsTerm(PVBOXWDDMDISP_ADAPTER pAdapter)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic CRITICAL_SECTION g_VBoxDispD3DGlobalCritSect;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic VBOXWDDMDISP_FORMATS g_VBoxDispD3DGlobalD3DFormats;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync EnterCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync LeaveCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync InitializeCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DeleteCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic void vboxDispD3DGlobalD3DFormatsInit(PVBOXWDDMDISP_FORMATS pFormats)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pFormats->cFormstOps = RT_ELEMENTS(gVBoxFormatOps3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic HRESULT vboxWddmGetD3D9Caps(PVBOXWDDMDISP_D3D pD3D, D3DCAPS9 *pCaps)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync HRESULT hr = pD3D->pD3D9If->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pCaps);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync /* needed for Windows Media Player to work properly */
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->Caps2 |= 0x00080000 /*D3DCAPS2_CANRENDERWINDOWED*/;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->DevCaps |= D3DDEVCAPS_FLOATTLVERTEX /* <- must be set according to the docs */
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync /*| D3DDEVCAPS_HWVERTEXBUFFER | D3DDEVCAPS_HWINDEXBUFFER | D3DDEVCAPS_SUBVOLUMELOCK */;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->PrimitiveMiscCaps |= D3DPMISCCAPS_INDEPENDENTWRITEMASKS
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync | D3DPMISCCAPS_SEPARATEALPHABLEND | D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->RasterCaps |= D3DPRASTERCAPS_SUBPIXEL | D3DPRASTERCAPS_STIPPLE | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_COLORPERSPECTIVE /* keep */;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->TextureCaps |= D3DPTEXTURECAPS_TRANSPARENCY | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->TextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->VolumeTextureAddressCaps |= D3DPTADDRESSCAPS_MIRRORONCE;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->DeclTypes |= D3DDTCAPS_FLOAT16_2 | D3DDTCAPS_FLOAT16_4;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->VertexTextureFilterCaps |= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MAGFPOINT;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync /* workaround for wine not returning InstructionSlots correctly for shaders v3.0 */
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300)
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->MaxVertexShader30InstructionSlots = RT_MIN(32768, pCaps->MaxVertexShader30InstructionSlots);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->MaxPixelShader30InstructionSlots = RT_MIN(32768, pCaps->MaxPixelShader30InstructionSlots);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300)
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxVertexShader30InstructionSlots >= 512);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxVertexShader30InstructionSlots <= 32768);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxPixelShader30InstructionSlots >= 512);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxPixelShader30InstructionSlots <= 32768);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync else if ((pCaps->VertexShaderVersion & 0xff00) == 0x0200)
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxVertexShader30InstructionSlots == 0);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxPixelShader30InstructionSlots == 0);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic void vboxDispD3DGlobalDoClose(PVBOXWDDMDISP_D3D pD3D)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic HRESULT vboxDispD3DGlobalDoOpen(PVBOXWDDMDISP_D3D pD3D)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync hr = pD3D->D3D.pfnDirect3DCreate9Ex(D3D_SDK_VERSION, &pD3D->pD3D9If);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("vboxWddmGetD3D9Caps failed hr = 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("pfnDirect3DCreate9Ex failed hr = 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT VBoxDispD3DGlobalOpen(PVBOXWDDMDISP_D3D pD3D, PVBOXWDDMDISP_FORMATS pFormats)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync HRESULT hr = vboxDispD3DGlobalDoOpen(&g_VBoxDispD3DGlobalD3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("vboxDispD3DGlobalDoOpen failed hr = 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispD3DGlobalD3DFormatsInit(&g_VBoxDispD3DGlobalD3DFormats);