vboxext.c revision b62daae35a821b998dc41ab2c90da52d18b6f229
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync * VBox extension to Wine D3D
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync * Copyright (C) 2011 Oracle Corporation
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync * available from http://www.virtualbox.org. This file is free software;
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync * you can redistribute it and/or modify it under the terms of the GNU
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsynctypedef DECLCALLBACK(void) FNVBOXEXTWORKERCB(void *pvUser);
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsyncHRESULT VBoxExtDwSubmitProcSync(PFNVBOXEXTWORKERCB pfnCb, void *pvCb);
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsyncHRESULT VBoxExtDwSubmitProcAsync(PFNVBOXEXTWORKERCB pfnCb, void *pvCb);
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync/*******************************/
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync# define VBOXEXT_WINE_MODULE_NAME "wined3dwddm-x86.dll"
dba6b8a60465a62d3e1ee74942535288802e2b79vboxsync/* both 32bit and 64bit versions of xpdm wine libs are named identically */
typedef struct VBOXEXT_GLOBAL
typedef struct VBOXEXT_CALLPROC
void *pvCb;
case WM_VBOXEXT_CALLPROC:
case WM_VBOXEXT_INIT_QUIT:
case WM_CLOSE:
PostQuitMessage(0);
return E_FAIL;
return S_OK;
return E_FAIL;
if (!bResult)
return E_FAIL;
return E_FAIL;
return S_OK;
if (bResult)
if (fSync)
return E_FAIL;
return hr;
PVBOXEXT_CALLPROC pCallInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof (VBOXEXT_CALLPROC) * 2);
if (!pCallInfo)
return E_OUTOFMEMORY;
return hr;
return S_OK;
return hr;
return hr;
return hr;
return S_OK;
return ++g_cVBoxExtInits;
return cVBoxExtInits;
return g_cVBoxExtInits;
if (!vboxExtGetRef())
return hr;
return S_OK;
return hr;
return S_OK;
# ifndef VBOX_WITH_WDDM
typedef struct VBOXEXT_GETDC_CB
typedef struct VBOXEXT_RELEASEDC_CB
int ret;
return NULL;
#endif /* #if defined(VBOX_WINE_WITH_SINGLE_CONTEXT) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT) */
switch(uMsg)
case WM_CLOSE:
case WM_DESTROY:
case WM_NCHITTEST:
return HTNOWHERE;
return hr;
if (hWnd)
return hr;
if (bResult)
return S_OK;
return E_FAIL;
typedef struct VBOXEXTWND_CREATE_INFO
int hr;
typedef struct VBOXEXTWND_DESTROY_INFO
int hr;
typedef struct VBOXEXTWND_CLEANUP_INFO
int hr;
return hr;
return S_OK;
return hr;
return S_OK;
return hr;
return S_OK;
uint32_t i;
void VBoxExtHashInit(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_HASH pfnHash, PFNVBOXEXT_HASHMAP_EQUAL pfnEqual)
_op \
return pEntry;
return NULL;
static void vboxExtHashPutEntry(PVBOXEXT_HASHMAP pMap, PVBOXEXT_HASHMAP_BUCKET pBucket, PVBOXEXT_HASHMAP_ENTRY pEntry)
if (!pEntry)
return NULL;
return pEntry;
PVBOXEXT_HASHMAP_ENTRY VBoxExtHashPut(PVBOXEXT_HASHMAP pMap, void *pvKey, PVBOXEXT_HASHMAP_ENTRY pEntry)
return pOldEntry;
void VBoxExtHashVisit(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_VISITOR pfnVisitor, void *pvVisitor)
if (!cEntries)
for (; ; ++iBucket)
AssertFailed();
void VBoxExtHashCleanup(PVBOXEXT_HASHMAP pMap, PFNVBOXEXT_HASHMAP_VISITOR pfnVisitor, void *pvVisitor)
static DECLCALLBACK(bool) vboxExtCacheCleanupCb(struct VBOXEXT_HASHMAP *pMap, void *pvKey, struct VBOXEXT_HASHMAP_ENTRY *pValue, void *pvVisitor)
return TRUE;