diff options
author | Alon Levy <alevy@redhat.com> | 2014-07-31 09:07:23 +0300 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2014-07-31 09:07:23 +0300 |
commit | fc3213ef07237dfc56389d9c8246371a3ecf70de (patch) | |
tree | 76ed5e6ca969d69de3de454f8c4eb6106ae2f979 | |
parent | 758aa71bd8adce941705f38e968781d3b5a23d09 (diff) |
wip^2: need mapping to workwip-d3d-empty
-rw-r--r-- | display/directdraw.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/display/directdraw.c b/display/directdraw.c index 7b2a99a..a081811 100644 --- a/display/directdraw.c +++ b/display/directdraw.c @@ -8,6 +8,8 @@ #ifdef SPICE_ENABLE_DIRECT_DRAW +#define ENABLE_DD_MAP_MEMORY + static unsigned QxlGetDriverInfoD3DCallbacks3(PDev *pdev, PDD_GETDRIVERINFODATA lpGetDriverInfo) { @@ -912,10 +914,16 @@ static DWORD QxlMapMemory(PDD_MAPMEMORYDATA lpMapMemory) { PDev *pdev = lpMapMemory->lpDD->dhpdev; - DEBUG_PRINT_ONCE((pdev, 0, "%s: %d, %d\n", __FUNCTION__, - lpMapMemory->bMap, lpMapMemory->hProcess)); - lpMapMemory->ddRVal = DDERR_NODIRECTDRAWSUPPORT; - return DDHAL_DRIVER_NOTHANDLED; + DEBUG_PRINT((pdev, 0, "%s: %d, %d, %p\n", __FUNCTION__, + lpMapMemory->bMap, lpMapMemory->hProcess, lpMapMemory->fpProcess)); + // We map all the surface bar on initialization to pdev->fb, so nothing to do here? + // TODO: se permedia and virtualbox memory mapping and locking implementation + // Why doesn't locking happen (DdLock) on the current example? + // d3ddev->CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX), 0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL) + // creates a vertex buffer (CreateD3dBuffer call) but the following only causes MapMemory to be called, not Lock: + // g_pVB->Lock(0, sizeof(vertices), (void**) &pVertices, 0) + lpMapMemory->ddRVal = DD_OK; + return DDHAL_DRIVER_HANDLED; } #endif @@ -988,7 +996,9 @@ static DWORD QxlLock(PDD_LOCKDATA lpLockData) { PDev *pdev = lpLockData->lpDD->dhpdev; - DEBUG_PRINT((pdev, 0, "%s: not implemented\n", __FUNCTION__)); + DEBUG_PRINT((pdev, 0, "%s: hasRect %d, flatptr %d, surf handle %d\n", __FUNCTION__, lpLockData->bHasRect, + lpLockData->fpProcess, + lpLockData->lpDDSurface->lpSurfMore->dwSurfaceHandle)); return DDHAL_DRIVER_NOTHANDLED; } @@ -997,7 +1007,7 @@ static DWORD QxlUnlock(PDD_UNLOCKDATA lpUnlockData) PDev *pdev = lpUnlockData->lpDD->dhpdev; DEBUG_PRINT((pdev, 0, "%s: not implemented\n", __FUNCTION__)); - return DDHAL_DRIVER_NOTHANDLED; + return DDHAL_DRIVER_HANDLED; } static void QxlInitializeHalInfo(PDev *pdev) |