2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * PURPOSE: Native driver for dxg implementation
5 * FILE: win32ss/reactx/dxg/ddsurf.c
6 * PROGRAMER: Sebastian Gasiorek (sebastian.gasiorek@reactos.org)
13 * The function DxDdLock locks the surface and calls
14 * MapMemory driver function to assign surface memory.
15 * Surface memory is returned in mapMemoryData.fpProcess variable
17 * @param HANDLE hSurface
18 * Handle to DirectDraw surface
20 * @param PDD_LOCKDATA puLockData
21 * Structure with lock details
27 * Returns DDHAL_DRIVER_HANDLED or DDHAL_DRIVER_NOTHANDLED.
30 * Missing lock data and error handling.
34 DxDdLock(HANDLE hSurface
,
35 PDD_LOCKDATA puLockData
,
38 PEDD_SURFACE pSurface
;
39 PEDD_DIRECTDRAW_LOCAL peDdL
;
40 PEDD_DIRECTDRAW_GLOBAL peDdGl
;
41 DD_MAPMEMORYDATA mapMemoryData
;
43 pSurface
= (PEDD_SURFACE
)DdHmgLock(hSurface
, ObjType_DDSURFACE_TYPE
, TRUE
);
44 peDdL
= pSurface
->peDirectDrawLocal
;
45 peDdGl
= peDdL
->peDirectDrawGlobal2
;
47 // Map memory if it's not already mapped and driver function is provided
48 if (!peDdL
->isMemoryMapped
&& (peDdGl
->ddCallbacks
.dwFlags
& DDHAL_CB32_MAPMEMORY
))
50 mapMemoryData
.bMap
= 1;
51 mapMemoryData
.hProcess
= (HANDLE
)-1;
52 mapMemoryData
.fpProcess
= 0;
53 mapMemoryData
.lpDD
= (PDD_DIRECTDRAW_GLOBAL
)peDdGl
;
55 peDdGl
->ddCallbacks
.MapMemory(&mapMemoryData
);
57 if (!mapMemoryData
.ddRVal
)
59 peDdL
->isMemoryMapped
= 1;
60 peDdL
->fpProcess2
= mapMemoryData
.fpProcess
;
66 InterlockedExchangeAdd((LONG
*)&pSurface
->pobj
.cExclusiveLock
, 0xFFFFFFFF);
69 puLockData
->ddRVal
= DD_OK
;
71 return DDHAL_DRIVER_HANDLED
;
78 * The function DxDdUnlock releases the lock from specified surface
80 * @param HANDLE hSurface
81 * Handle to DirectDraw surface
83 * @param PDD_UNLOCKDATA puUnlockData
84 * Structure with lock details
87 * Returns DDHAL_DRIVER_HANDLED or DDHAL_DRIVER_NOTHANDLED.
94 DxDdUnlock(HANDLE hSurface
,
95 PDD_UNLOCKDATA puUnlockData
)
97 puUnlockData
->ddRVal
= DD_OK
;
99 return DDHAL_DRIVER_HANDLED
;