summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2014-07-31 09:07:23 +0300
committerAlon Levy <alevy@redhat.com>2014-07-31 09:07:23 +0300
commitfc3213ef07237dfc56389d9c8246371a3ecf70de (patch)
tree76ed5e6ca969d69de3de454f8c4eb6106ae2f979
parent758aa71bd8adce941705f38e968781d3b5a23d09 (diff)
wip^2: need mapping to workwip-d3d-empty
-rw-r--r--display/directdraw.c22
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)