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#include "VBoxDispD3DIf.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include "VBoxDispD3DCmn.h"
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <iprt/assert.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid VBoxDispD3DClose(VBOXDISPD3D *pD3D)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync FreeLibrary(pD3D->hD3DLib);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pD3D->hD3DLib = NULL;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync/**
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync * Loads a system DLL.
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync *
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync * @returns Module handle or NULL
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync * @param pszName The DLL name.
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync */
71955773a7f477f9a159a491f765ba97e1f00e1avboxsyncstatic HMODULE loadSystemDll(const char *pszName)
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync{
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync char szPath[MAX_PATH];
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync UINT cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync size_t cbName = strlen(pszName) + 1;
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync if (cchPath + 1 + cbName > sizeof(szPath))
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync {
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync SetLastError(ERROR_FILENAME_EXCED_RANGE);
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync return NULL;
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync }
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync szPath[cchPath] = '\\';
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync memcpy(&szPath[cchPath + 1], pszName, cbName);
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync return LoadLibraryA(szPath);
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync}
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncHRESULT VBoxDispD3DOpen(VBOXDISPD3D *pD3D)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WDDM_WOW64
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync pD3D->hD3DLib = loadSystemDll("VBoxD3D9wddm-x86.dll");
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#else
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync pD3D->hD3DLib = loadSystemDll("VBoxD3D9wddm.dll");
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (!pD3D->hD3DLib)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync {
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync DWORD winErr = GetLastError();
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync WARN((__FUNCTION__": LoadLibrary failed, winErr = (%d)", winErr));
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync return E_FAIL;
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync }
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync do
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync {
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync pD3D->pfnDirect3DCreate9Ex = (PFNVBOXDISPD3DCREATE9EX)GetProcAddress(pD3D->hD3DLib, "Direct3DCreate9Ex");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (!pD3D->pfnDirect3DCreate9Ex)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync {
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync WARN(("no Direct3DCreate9Ex"));
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync break;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync }
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DDev9CreateTexture = (PFNVBOXWINEEXD3DDEV9_CREATETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateTexture");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (!pD3D->pfnVBoxWineExD3DDev9CreateTexture)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync {
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync WARN(("no VBoxWineExD3DDev9CreateTexture"));
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync break;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync }
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DDev9CreateCubeTexture = (PFNVBOXWINEEXD3DDEV9_CREATECUBETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateCubeTexture");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (!pD3D->pfnVBoxWineExD3DDev9CreateCubeTexture)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync {
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync WARN(("no VBoxWineExD3DDev9CreateCubeTexture"));
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync break;
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync }
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync pD3D->pfnVBoxWineExD3DDev9CreateVolumeTexture = (PFNVBOXWINEEXD3DDEV9_CREATEVOLUMETEXTURE)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9CreateVolumeTexture");
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync if (!pD3D->pfnVBoxWineExD3DDev9CreateVolumeTexture)
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync {
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync WARN(("no VBoxWineExD3DDev9CreateVolumeTexture"));
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync break;
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync }
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DDev9Flush = (PFNVBOXWINEEXD3DDEV9_FLUSH)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Flush");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (!pD3D->pfnVBoxWineExD3DDev9Flush)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync {
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync WARN(("no VBoxWineExD3DDev9Flush"));
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync break;
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync }
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync pD3D->pfnVBoxWineExD3DDev9FlushToHost = (PFNVBOXWINEEXD3DDEV9_FLUSHTOHOST)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9FlushToHost");
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync if (!pD3D->pfnVBoxWineExD3DDev9FlushToHost)
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync {
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync WARN(("no VBoxWineExD3DDev9FlushToHost"));
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync break;
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync }
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync pD3D->pfnVBoxWineExD3DDev9Finish = (PFNVBOXWINEEXD3DDEV9_FINISH)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Finish");
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync if (!pD3D->pfnVBoxWineExD3DDev9Finish)
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync {
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync WARN(("no VBoxWineExD3DDev9Finish"));
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync break;
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync }
7fde7f7bd127420c68c4899ccbafe895a5459b15vboxsync
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync pD3D->pfnVBoxWineExD3DDev9VolBlt = (PFNVBOXWINEEXD3DDEV9_VOLBLT)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9VolBlt");
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync if (!pD3D->pfnVBoxWineExD3DDev9VolBlt)
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync {
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync WARN(("no VBoxWineExD3DDev9VolBlt"));
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync break;
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync }
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync pD3D->pfnVBoxWineExD3DDev9VolTexBlt = (PFNVBOXWINEEXD3DDEV9_VOLTEXBLT)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9VolTexBlt");
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync if (!pD3D->pfnVBoxWineExD3DDev9VolTexBlt)
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync {
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync WARN(("no VBoxWineExD3DDev9VolTexBlt"));
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync break;
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync }
20bc7269cdb015fe47a9a4a0511470f3b26660f8vboxsync
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync pD3D->pfnVBoxWineExD3DDev9Term = (PFNVBOXWINEEXD3DDEV9_TERM)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9Term");
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync if (!pD3D->pfnVBoxWineExD3DDev9Term)
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync {
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync WARN(("no VBoxWineExD3DDev9Term"));
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync break;
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync }
71d34382c90482c97bd863ad9e814c511e6a3cdbvboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync pD3D->pfnVBoxWineExD3DSwapchain9Present = (PFNVBOXWINEEXD3DSWAPCHAIN9_PRESENT)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSwapchain9Present");
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync if (!pD3D->pfnVBoxWineExD3DSwapchain9Present)
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync {
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync WARN(("no VBoxWineExD3DSwapchain9Present"));
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync break;
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync }
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync pD3D->pfnVBoxWineExD3DSurf9GetHostId = (PFNVBOXWINEEXD3DSURF9_GETHOSTID)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSurf9GetHostId");
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync if (!pD3D->pfnVBoxWineExD3DSurf9GetHostId)
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync {
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync WARN(("no VBoxWineExD3DSurf9GetHostId"));
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync break;
1e8407a779e6ce2d2326f9b62c7cb82e3ab7b49avboxsync }
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync pD3D->pfnVBoxWineExD3DSurf9SyncToHost = (PFNVBOXWINEEXD3DSURF9_SYNCTOHOST)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSurf9SyncToHost");
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync if (!pD3D->pfnVBoxWineExD3DSurf9SyncToHost)
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync {
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync WARN(("no VBoxWineExD3DSurf9SyncToHost"));
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync break;
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync }
a7ba3d5f31ca70d04a3933e570374e5ec5eff84avboxsync
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync pD3D->pfnVBoxWineExD3DSwapchain9GetHostWinID = (PFNVBOXWINEEXD3DSWAPCHAIN9_GETHOSTWINID)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DSwapchain9GetHostWinID");
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync if (!pD3D->pfnVBoxWineExD3DSwapchain9GetHostWinID)
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync {
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync WARN(("no VBoxWineExD3DSwapchain9GetHostWinID"));
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync break;
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync }
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync pD3D->pfnVBoxWineExD3DDev9GetHostId = (PFNVBOXWINEEXD3DDEV9_GETHOSTID)GetProcAddress(pD3D->hD3DLib, "VBoxWineExD3DDev9GetHostId");
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync if (!pD3D->pfnVBoxWineExD3DDev9GetHostId)
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync {
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync WARN(("no VBoxWineExD3DDev9GetHostId"));
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync break;
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync }
ea1cc8df95dba6fca9c36c94f565ef95c7802a36vboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync return S_OK;
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync } while (0);
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync
3a343ca21a267ec3c54e2317e2ed18fe99b8ebbbvboxsync VBoxDispD3DClose(pD3D);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync return E_FAIL;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic FORMATOP gVBoxFormatOps3D[] = {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A8R8G8B8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SRGBWRITE|FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_X8R8G8B8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_DISPLAYMODE|FORMATOP_3DACCELERATION|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SRGBWRITE|FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A2R10G10B10,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_X1R5G5B5,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A1R5G5B5,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A4R4G4B4,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_R5G6B5,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_DISPLAYMODE|FORMATOP_3DACCELERATION|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_L16,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A8L8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_L8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
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
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_DXT1,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_DXT2,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_DXT3,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_DXT4,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_DXT5,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_X8L8V8U8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_BUMPMAP|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A2W10V10U10,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_BUMPMAP|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_V8U8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_BUMPMAP|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_Q8W8V8U8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_BUMPMAP|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_CxV8U8, FORMATOP_NOFILTER|FORMATOP_NOALPHABLEND|FORMATOP_NOTEXCOORDWRAPNORMIP, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_R16F,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_R32F,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_G16R16F,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_G32R32F,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
369424307f1564511c32c427be8d6864067fa422vboxsync// Floating-point formats are not implemented in Chromium.
369424307f1564511c32c427be8d6864067fa422vboxsync// {D3DDDIFMT_A16B16G16R16F,
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_SAME_FORMAT_RENDERTARGET|
369424307f1564511c32c427be8d6864067fa422vboxsync// 0|
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_OFFSCREENPLAIN|
369424307f1564511c32c427be8d6864067fa422vboxsync// 0|
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_VERTEXTEXTURE, 0, 0, 0},
369424307f1564511c32c427be8d6864067fa422vboxsync//
369424307f1564511c32c427be8d6864067fa422vboxsync// {D3DDDIFMT_A32B32G32R32F,
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_SAME_FORMAT_RENDERTARGET|
369424307f1564511c32c427be8d6864067fa422vboxsync// 0|
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_OFFSCREENPLAIN|
369424307f1564511c32c427be8d6864067fa422vboxsync// 0|
369424307f1564511c32c427be8d6864067fa422vboxsync// FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_G16R16,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A16B16G16R16,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_V16U16,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_BUMPMAP|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_P8, FORMATOP_DISPLAYMODE|FORMATOP_3DACCELERATION|FORMATOP_OFFSCREENPLAIN, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_UYVY,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_NOFILTER|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_NOALPHABLEND|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_NOTEXCOORDWRAPNORMIP, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_YUY2,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_NOFILTER|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_NOALPHABLEND|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_NOTEXCOORDWRAPNORMIP, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_Q16W16V16U16,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_BUMPMAP|FORMATOP_DMAP|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_X8B8G8R8,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|FORMATOP_SRGBREAD|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_DMAP|FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SRGBWRITE|FORMATOP_AUTOGENMIPMAP|FORMATOP_VERTEXTEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_OVERLAY, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_BINARYBUFFER, FORMATOP_OFFSCREENPLAIN, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A4L4,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_DMAP|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_A2B10G10R10,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_TEXTURE|FORMATOP_VOLUMETEXTURE|FORMATOP_CUBETEXTURE|FORMATOP_OFFSCREEN_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_SAME_FORMAT_RENDERTARGET|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_CONVERT_TO_ARGB|FORMATOP_OFFSCREENPLAIN|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_DMAP|FORMATOP_MEMBEROFGROUP_ARGB|
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP_AUTOGENMIPMAP|FORMATOP_VERTEXTEXTURE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync};
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic FORMATOP gVBoxFormatOpsBase[] = {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_X8R8G8B8, FORMATOP_DISPLAYMODE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_R8G8B8, FORMATOP_DISPLAYMODE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_R5G6B5, FORMATOP_DISPLAYMODE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {D3DDDIFMT_P8, FORMATOP_DISPLAYMODE, 0, 0, 0},
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync};
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic DDSURFACEDESC gVBoxSurfDescsBase[] = {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync sizeof (DDSURFACEDESC), /* DWORD dwSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSD_CAPS | DDSD_PIXELFORMAT, /* DWORD dwFlags; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwHeight; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwWidth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* LONG lPitch; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLinearSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwBackBufferCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwMipMapCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRefreshRate; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwReserved; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync NULL, /* LPVOID lpSurface; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync sizeof (DDPIXELFORMAT), /* DWORD dwSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDPF_RGB, /* DWORD dwFlags; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwFourCC; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 32, /* union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0xff0000, /* union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDuBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0xff00,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwGBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwUBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDvBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0xff,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwVBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDPIXELFORMAT ddpfPixelFormat; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSCAPS_BACKBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_COMPLEX
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FLIP
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FRONTBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_LOCALVIDMEM
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_PRIMARYSURFACE
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VIDEOMEMORY
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VISIBLE /* DWORD dwCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync } /* DDSCAPS ddsCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync sizeof (DDSURFACEDESC), /* DWORD dwSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSD_CAPS | DDSD_PIXELFORMAT, /* DWORD dwFlags; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwHeight; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwWidth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* LONG lPitch; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLinearSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwBackBufferCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwMipMapCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRefreshRate; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwReserved; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync NULL, /* LPVOID lpSurface; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync sizeof (DDPIXELFORMAT), /* DWORD dwSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDPF_RGB, /* DWORD dwFlags; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwFourCC; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 24, /* union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0xff0000, /* union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDuBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0xff00,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwGBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwUBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDvBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0xff,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwVBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDPIXELFORMAT ddpfPixelFormat; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSCAPS_BACKBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_COMPLEX
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FLIP
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FRONTBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_LOCALVIDMEM
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_PRIMARYSURFACE
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VIDEOMEMORY
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VISIBLE /* DWORD dwCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync } /* DDSCAPS ddsCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync sizeof (DDSURFACEDESC), /* DWORD dwSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSD_CAPS | DDSD_PIXELFORMAT, /* DWORD dwFlags; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwHeight; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwWidth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* LONG lPitch; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLinearSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwBackBufferCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* Union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwMipMapCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRefreshRate; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwReserved; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync NULL, /* LPVOID lpSurface; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKDestBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcOverlay; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceLowValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwColorSpaceHighValue; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDCOLORKEY ddckCKSrcBlt; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync sizeof (DDPIXELFORMAT), /* DWORD dwSize; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDPF_RGB, /* DWORD dwFlags; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0, /* DWORD dwFourCC; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 16, /* union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBufferBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwAlphaBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpBitCount; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0xf800, /* union */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitDepth; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDuBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0x7e0,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwGBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwUBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpDvBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0x1f,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwVBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwStencilBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwBumpLuminanceBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync 0,
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwLuminanceAlphaBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwRGBZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* DWORD dwYUVZBitMask; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }, /* DDPIXELFORMAT ddpfPixelFormat; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSCAPS_BACKBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_COMPLEX
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FLIP
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FRONTBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_LOCALVIDMEM
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_PRIMARYSURFACE
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VIDEOMEMORY
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VISIBLE /* DWORD dwCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync } /* DDSCAPS ddsCaps; */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync },
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync};
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic void vboxVhwaPopulateOverlayFourccSurfDesc(DDSURFACEDESC *pDesc, uint32_t fourcc)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memset(pDesc, 0, sizeof (DDSURFACEDESC));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pDesc->dwSize = sizeof (DDSURFACEDESC);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pDesc->dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pDesc->ddpfPixelFormat.dwSize = sizeof (DDPIXELFORMAT);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pDesc->ddpfPixelFormat.dwFlags = DDPF_FOURCC;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pDesc->ddpfPixelFormat.dwFourCC = fourcc;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pDesc->ddsCaps.dwCaps = DDSCAPS_BACKBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_COMPLEX
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FLIP
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_FRONTBUFFER
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_LOCALVIDMEM
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_OVERLAY
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VIDEOMEMORY
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync | DDSCAPS_VISIBLE;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic bool vboxPixFormatMatch(DDPIXELFORMAT *pFormat1, DDPIXELFORMAT *pFormat2)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return !memcmp(pFormat1, pFormat2, sizeof (DDPIXELFORMAT));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT vboxSurfDescMerge(DDSURFACEDESC *paDescs, uint32_t *pcDescs, uint32_t cMaxDescs, DDSURFACEDESC *pDesc)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cDescs = *pcDescs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(cMaxDescs >= cDescs);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pDesc->dwFlags == (DDSD_CAPS | DDSD_PIXELFORMAT));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pDesc->dwFlags != (DDSD_CAPS | DDSD_PIXELFORMAT))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return E_INVALIDARG;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t i = 0; i < cDescs; ++i)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSURFACEDESC *pCur = &paDescs[i];
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (vboxPixFormatMatch(&pCur->ddpfPixelFormat, &pDesc->ddpfPixelFormat))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pDesc->dwFlags & DDSD_CAPS)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pCur->dwFlags |= DDSD_CAPS;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pCur->ddsCaps.dwCaps |= pDesc->ddsCaps.dwCaps;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return S_OK;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (cMaxDescs > cDescs)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync paDescs[cDescs] = *pDesc;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync ++cDescs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync *pcDescs = cDescs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return VINF_SUCCESS;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return E_FAIL;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT vboxFormatOpsMerge(FORMATOP *paOps, uint32_t *pcOps, uint32_t cMaxOps, FORMATOP *pOp)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cOps = *pcOps;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(cMaxOps >= cOps);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t i = 0; i < cOps; ++i)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP *pCur = &paOps[i];
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pCur->Format == pOp->Format)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pCur->Operations |= pOp->Operations;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pCur->FlipMsTypes == pOp->FlipMsTypes);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pCur->BltMsTypes == pOp->BltMsTypes);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pCur->PrivateFormatBitCount == pOp->PrivateFormatBitCount);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return S_OK;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (cMaxOps > cOps)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync paOps[cOps] = *pOp;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync ++cOps;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync *pcOps = cOps;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return VINF_SUCCESS;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return E_FAIL;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT VBoxDispD3DGlobal2DFormatsInit(PVBOXWDDMDISP_ADAPTER pAdapter)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync HRESULT hr = S_OK;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memset(&pAdapter->D3D, 0, sizeof (pAdapter->D3D));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memset(&pAdapter->Formats, 0, sizeof (pAdapter->Formats));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* just calc the max number of formats */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cFormats = RT_ELEMENTS(gVBoxFormatOpsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cSurfDescs = RT_ELEMENTS(gVBoxSurfDescsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cOverlayFormats = 0;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t i = 0; i < pAdapter->cHeads; ++i)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBOXDISPVHWA_INFO *pVhwa = &pAdapter->aHeads[i].Vhwa;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pVhwa->Settings.fFlags & VBOXVHWA_F_ENABLED)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync cOverlayFormats += pVhwa->Settings.cFormats;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync cFormats += cOverlayFormats;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync cSurfDescs += cOverlayFormats;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cbFormatOps = cFormats * sizeof (FORMATOP);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync cbFormatOps = (cbFormatOps + 7) & ~3;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync /* ensure the surf descs are 8 byte aligned */
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t offSurfDescs = (cbFormatOps + 7) & ~3;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cbSurfDescs = cSurfDescs * sizeof (DDSURFACEDESC);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t cbBuf = offSurfDescs + cbSurfDescs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint8_t* pvBuf = (uint8_t*)RTMemAllocZ(cbBuf);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pvBuf)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pAdapter->Formats.paFormstOps = (FORMATOP*)pvBuf;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memcpy ((void*)pAdapter->Formats.paFormstOps , gVBoxFormatOpsBase, sizeof (gVBoxFormatOpsBase));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pAdapter->Formats.cFormstOps = RT_ELEMENTS(gVBoxFormatOpsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync FORMATOP fo = {D3DDDIFMT_UNKNOWN, 0, 0, 0, 0};
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t i = 0; i < pAdapter->cHeads; ++i)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBOXDISPVHWA_INFO *pVhwa = &pAdapter->aHeads[i].Vhwa;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pVhwa->Settings.fFlags & VBOXVHWA_F_ENABLED)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t j = 0; j < pVhwa->Settings.cFormats; ++j)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync fo.Format = pVhwa->Settings.aFormats[j];
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync fo.Operations = FORMATOP_OVERLAY;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync hr = vboxFormatOpsMerge((FORMATOP *)pAdapter->Formats.paFormstOps, &pAdapter->Formats.cFormstOps, cFormats, &fo);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (FAILED(hr))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("vboxFormatOpsMerge failed, hr 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pAdapter->Formats.paSurfDescs = (DDSURFACEDESC*)(pvBuf + offSurfDescs);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memcpy ((void*)pAdapter->Formats.paSurfDescs , gVBoxSurfDescsBase, sizeof (gVBoxSurfDescsBase));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pAdapter->Formats.cSurfDescs = RT_ELEMENTS(gVBoxSurfDescsBase);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DDSURFACEDESC sd;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t i = 0; i < pAdapter->cHeads; ++i)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBOXDISPVHWA_INFO *pVhwa = &pAdapter->aHeads[i].Vhwa;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pVhwa->Settings.fFlags & VBOXVHWA_F_ENABLED)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync for (uint32_t j = 0; j < pVhwa->Settings.cFormats; ++j)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync uint32_t fourcc = vboxWddmFormatToFourcc(pVhwa->Settings.aFormats[j]);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (fourcc)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxVhwaPopulateOverlayFourccSurfDesc(&sd, fourcc);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync hr = vboxSurfDescMerge((DDSURFACEDESC *)pAdapter->Formats.paSurfDescs, &pAdapter->Formats.cSurfDescs, cSurfDescs, &sd);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (FAILED(hr))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("vboxFormatOpsMerge failed, hr 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync else
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("RTMemAllocZ failed"));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return E_FAIL;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return S_OK;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobal2DFormatsTerm(PVBOXWDDMDISP_ADAPTER pAdapter)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (pAdapter->Formats.paFormstOps)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync RTMemFree((void *)pAdapter->Formats.paFormstOps);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync#endif
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic CRITICAL_SECTION g_VBoxDispD3DGlobalCritSect;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic VBOXWDDMDISP_D3D g_VBoxDispD3DGlobalD3D;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic VBOXWDDMDISP_FORMATS g_VBoxDispD3DGlobalD3DFormats;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic uint32_t g_cVBoxDispD3DGlobalOpens;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid vboxDispD3DGlobalLock()
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync EnterCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid vboxDispD3DGlobalUnlock()
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync LeaveCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobalInit()
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync g_cVBoxDispD3DGlobalOpens = 0;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync InitializeCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobalTerm()
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync DeleteCriticalSection(&g_VBoxDispD3DGlobalCritSect);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic void vboxDispD3DGlobalD3DFormatsInit(PVBOXWDDMDISP_FORMATS pFormats)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
5fc8385eb24d50f3bb86c555f6ebc15dd81f6b49vboxsync memset(pFormats, 0, sizeof (*pFormats));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pFormats->paFormstOps = gVBoxFormatOps3D;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pFormats->cFormstOps = RT_ELEMENTS(gVBoxFormatOps3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic HRESULT vboxWddmGetD3D9Caps(PVBOXWDDMDISP_D3D pD3D, D3DCAPS9 *pCaps)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync HRESULT hr = pD3D->pD3D9If->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, pCaps);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (FAILED(hr))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("GetDeviceCaps failed hr(0x%x)",hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return hr;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync /* needed for Windows Media Player to work properly */
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->Caps |= D3DCAPS_READ_SCANLINE;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->Caps2 |= 0x00080000 /*D3DCAPS2_CANRENDERWINDOWED*/;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->Caps2 |= D3DCAPS2_CANSHARERESOURCE;
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_FOGINFVF
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->StencilCaps |= D3DSTENCILCAPS_TWOSIDED;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->DeclTypes |= D3DDTCAPS_FLOAT16_2 | D3DDTCAPS_FLOAT16_4;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->VertexTextureFilterCaps |= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MAGFPOINT;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->GuardBandLeft = -8192.;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->GuardBandTop = -8192.;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->GuardBandRight = 8192.;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->GuardBandBottom = 8192.;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->VS20Caps.DynamicFlowControlDepth = 24;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->VS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->PS20Caps.DynamicFlowControlDepth = 24;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->PS20Caps.NumTemps = D3DVS20_MAX_NUMTEMPS;
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync /* workaround for wine not returning InstructionSlots correctly for shaders v3.0 */
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300)
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync {
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->MaxVertexShader30InstructionSlots = RT_MIN(32768, pCaps->MaxVertexShader30InstructionSlots);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync pCaps->MaxPixelShader30InstructionSlots = RT_MIN(32768, pCaps->MaxPixelShader30InstructionSlots);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync }
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync#if defined(DEBUG)
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync if ((pCaps->VertexShaderVersion & 0xff00) == 0x0300)
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync {
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxVertexShader30InstructionSlots >= 512);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxVertexShader30InstructionSlots <= 32768);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxPixelShader30InstructionSlots >= 512);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxPixelShader30InstructionSlots <= 32768);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync }
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync else if ((pCaps->VertexShaderVersion & 0xff00) == 0x0200)
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync {
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxVertexShader30InstructionSlots == 0);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync Assert(pCaps->MaxPixelShader30InstructionSlots == 0);
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync }
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync else
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync {
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync WARN(("incorect shader caps!"));
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync }
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync#endif
c21940499098d72ed594ec8da5f94e4fef1febf6vboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispDumpD3DCAPS9(pCaps);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return S_OK;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic void vboxDispD3DGlobalDoClose(PVBOXWDDMDISP_D3D pD3D)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pD3D->pD3D9If->Release();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBoxDispD3DClose(&pD3D->D3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncstatic HRESULT vboxDispD3DGlobalDoOpen(PVBOXWDDMDISP_D3D pD3D)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync memset(pD3D, 0, sizeof (*pD3D));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync HRESULT hr = VBoxDispD3DOpen(&pD3D->D3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (SUCCEEDED(hr))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync hr = pD3D->D3D.pfnDirect3DCreate9Ex(D3D_SDK_VERSION, &pD3D->pD3D9If);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (SUCCEEDED(hr))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync hr = vboxWddmGetD3D9Caps(pD3D, &pD3D->Caps);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (SUCCEEDED(hr))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pD3D->cMaxSimRTs = pD3D->Caps.NumSimultaneousRTs;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pD3D->cMaxSimRTs);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync Assert(pD3D->cMaxSimRTs < UINT32_MAX/2);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync LOG(("SUCCESS 3D Enabled, pD3D (0x%p)", pD3D));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return S_OK;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync else
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("vboxWddmGetD3D9Caps failed hr = 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync pD3D->pD3D9If->Release();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync else
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("pfnDirect3DCreate9Ex failed hr = 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync VBoxDispD3DClose(&pD3D->D3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync else
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("VBoxDispD3DOpen failed hr = 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return hr;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncHRESULT VBoxDispD3DGlobalOpen(PVBOXWDDMDISP_D3D pD3D, PVBOXWDDMDISP_FORMATS pFormats)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispD3DGlobalLock();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (!g_cVBoxDispD3DGlobalOpens)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync HRESULT hr = vboxDispD3DGlobalDoOpen(&g_VBoxDispD3DGlobalD3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (!SUCCEEDED(hr))
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
3bc5fac9c77cee16335d2f8b07b7f46fe4b8b1e8vboxsync vboxDispD3DGlobalUnlock();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync WARN(("vboxDispD3DGlobalDoOpen failed hr = 0x%x", hr));
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return hr;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispD3DGlobalD3DFormatsInit(&g_VBoxDispD3DGlobalD3DFormats);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync ++g_cVBoxDispD3DGlobalOpens;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispD3DGlobalUnlock();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync *pD3D = g_VBoxDispD3DGlobalD3D;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync *pFormats = g_VBoxDispD3DGlobalD3DFormats;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync return S_OK;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync
476e82bf26ef67545d5c97b8226d0679be2974fevboxsyncvoid VBoxDispD3DGlobalClose(PVBOXWDDMDISP_D3D pD3D, PVBOXWDDMDISP_FORMATS pFormats)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync{
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispD3DGlobalLock();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync --g_cVBoxDispD3DGlobalOpens;
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync if (!g_cVBoxDispD3DGlobalOpens)
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync {
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispD3DGlobalDoClose(&g_VBoxDispD3DGlobalD3D);
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync }
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync vboxDispD3DGlobalUnlock();
476e82bf26ef67545d5c97b8226d0679be2974fevboxsync}